Просмотр полной версии : #3Dxx vs Soft
Какие подпрограммы в окне #3Dxx использует софт? Кроме:
#3D00,#3D03,#3D13,#3D21,#3D2F
Да, собственно, любые может использовать, которые расположены в диапазоне #3d00 - #3dff. Если адрес подпрограммы лежит непосредственно в пределах этого окна, можно просто передать на нее управление, например, обычным CALL NN. А если речь о точках входа, то их полно: #3d2c, #3d4b, #3d7f, #3d93, #3d96, #3d97, #3dac.
#3d2c, #3d4b, #3d7f, #3d93, #3d96, #3d97, #3dac.
#3d2c - RET
#3d4b - RET
#3d7f - RET
#3d93 - RET
#3d96 - кусок DW #0010
#3d97 - RET
#3dac - RET
Это же шутка, да?
Какие подпрограммы в окне #3Dxx использует софт? Кроме:
#3D00,#3D03,#3D13,#3D21,#3D2FЕсть же диззассемблерный текст TRDOS:
;Адрес #3D00. Вход в TR-DOS. Переключает ПЗУ.
x3D00 NOP
JR x3D31
;Адрес #3D03. Выполнение команд TR-DOS из бейсика. Установите CH_ADD на префикс :REM: перед командой. Возвращает в BC код ошибки. Переключает ПЗУ.
x3D03 NOP
JR x3D1A
;Адрес #3D06. Подпрограмма ввода из файла данных. Переключает ПЗУ. При вызове из редактора вводит всю строку и производит выход из редактора, иначе возвращает в A символ из файла.
x3D06 NOP
JP x25EF
;Адрес #3D0A. То же, что и #3D0D, но не переключает ПЗУ.
x3D0A JP x244A
;Адрес #3D0D. Подпрограмма вывода в файл данных. Символ поместите в аккумулятор. Используется также с адреса #3D0E. Обе точки входа переключают ПЗУ.
x3D0D NOP
x3D0E JR x3D0A
;Адрес #3D10. То же, что и #20F1. Переключает ПЗУ.
x3D10 NOP
JR x3CFA
;Адрес #3D13. Переход на подпрограмму вызова подпрограмм TR-DOS из машинного кода. Адрес является переключателем.
x3D13 NOP
JR x3CFD
;Адрес #3D16. Переход на подпрограмму обработки ошибок. Адрес является переключателем.
x3D16 NOP
JP OBROSH ;#3449
;Адрес #3D1A. То же, что и #3D03, но не переключает ПЗУ.
x3D1A CALL x3D21 ;создание системных переменных TR-DOS
PUSH HL ;помещение на стек адреса переключателя ПЗУ на бейсик
JP x016C ;выполнение команды
;Адрес #3D21. Создание области системных переменных TR-DOS, если ее нет. В HL помещается #5CC2.
x3D21 CALL x31F3 ;проверка наличия области системных переменных
NOP
NOP
CALL C,x3D4C ;если ее нет, то создание ее
LD HL,#5CC2 ;загрузка в HL адреса переключателя ПЗУ на бейсик
RET ;возврат
NOP
NOP
;Адрес #3D2F. Переключение пзу на TR-DOS и переход на любой адрес. Адрес поместите на стек.
x3D2F NOP
x3D30 RET
;Адрес #3D31. Вход в TR-DOS.
x3D31 CALL x3D21 ;создание области системных переменных
PUSH HL ;помещение на стек адреса переключателя ПЗУ на бейсик
JP WHOD ;#3BF0 ;вход в TR-DOS
;Адрес #3D38. Проверка наличия интерфейса-1. В случае его обнаружения происходит создание его системных переменных и в #5CF1 помещается 1. Для работы подпрограмма должна быть перемещена в любое место ОЗУ.
x3D38 XOR A ;интерфейс-1 есть?
OUT (#F7),A
IN A,(#F7)
CP #1E
JR Z,x3D44 ;если да, то создание его системных переменных
CP #1F
RET NZ ;если нет, то возврат
x3D44 RST 8 ;создание системных переменных интерфейса-1
DB #31
LD A,1 ;по команде SAVE записывать 1 копию
LD (#5CEF),A
RET ;возврат
;Адрес #3D4C. Создание системных переменных TR-DOS. При наличии интерфейса-1 перед созданием переменных TR-DOS создаются его переменные и в #5CEF помещается 1. В переменные TR-DOS помещаются: в #5CFA - #5CFC, #5CC8 - #5CCA, #5C3A, #5D16 и #5D0C - #FF; в #5D17, #5D19, #5D18, #5D0F и #5D1F - 0; в #5CC2 - #C9. Также в системный регистр помещается #FF, а на ВГ93 выдается команда прерывания. Подпрограмма портит ячейки памяти калькулятора.
x3D4C XOR A ;выбор дисковода A: и сброс ВГ93
OUT (#FF),A
IN A,(#F6) ;это ничего не дает
LD HL,x3D38 ;адрес подпрограммы проверки наличия интерфейса-1
LD DE,#5C92 ;любой свободный адрес, ОЗУ
LD BC,#14 ;длина подпрограммы
LDIR ;перенос подпрограммы в ОЗУ
LD HL,x3D67 ;адрес возврата из подпрограммы
PUSH HL ;помещение его на стек
LD HL,x3D2F ;адрес переключателя ПЗУ на TR-DOS
PUSH HL ;помещение его на стек
JP #5C92 ;запуск подпрограммы
;Адрес #3D67. Создание системных переменных TR-DOS. В переменные помещаются: в #5CFA - #5CFD, #5CC8 - #5CCB, #5C3A, #5D16 и #5D0C - #FF; в #5D17, #5D19, #5D18, #5D0F и #5D1F - 0; в #5CC2 - #C9. Также в системный регистр помещается #FF, а на ВГ93 выдается команда прерывания.
x3D67 LD HL,x2F90 ;адрес возврата из пзу бейсика
PUSH HL ;помещение его на стек
LD HL,x3D2F ;адрес переключателя ПЗУ на TR-DOS
PUSH HL ;помещение его на стек
LD HL,#1655 ;адрес подпрограммы MAKE_ROOM из ПЗУ бейсика
PUSH HL ;помещение его на стек
LD HL,#5BFF ;адрес переключателя ПЗУ на бейсик
PUSH HL ;помещение его на стек
LD (HL),#C9 ;помещение в озу команды RET
LD HL,#5CB5 ;начальный адрес области системных переменных
LD BC,#70 ;длина ее
RET ;запуск подпрограммы MAKE_ROOM
;Адрес #3D80. Перевод строки. Используется также с адреса #3D82 (печать символа из аккумулятора). Также эта подпрограмма ошибочно используется с адреса #3D8B подпрограммой #4F6.
x3D80 LD A,#D ;символ ENTER
x3D82 JP DOSSYM ;#805
DS 9,#FF
DB #FF,0,0,#FF,#FF,#FF
;Адрес #3D94. Печать символа без изменения памяти. Символ поместите в аккумулятор.
x3D94 RST #20
DW #0010
RET
;Адрес #3D98. Восстановление с ожиданием INTRQ. Используется также с адреса #3D9A (отдача команды из рег.A с ожиданием INTRQ).
x3D98 LD A,8 ;восстановление
x3D9A OUT (#1F),A
x3D9C PUSH HL ;сохранение HL
RST #20 ;проверка нажатия BREAK
DW #1F54
JR C,x3DA5 ;если нажато, то сообщение *BREAK*
RST #20
DW #1B7B
x3DA5 POP HL ;восстановление HL
IN A,(#FF) ;INTRQ поступил?
AND #80
JR Z,x3D9C ;если нет, то повтор
RET ;возврат
;Адрес #3DAD. Проверка наличия диска в дисководе. Никаких установок не требуется.
x3DAD LD A,8 ;команда восстановления
CALL x3D9A ;выдача команды и ожидание INTRQ
LD DE,0 ;за #10000 проходов индексный сигнал должен измениться
IN A,(#1F) ;берем индексный сигнал для образца
AND 2
LD B,A ;запоминаем его
x3DBA IN A,(#1F) ;берем его снова
AND 2
CP B ;он изменился?
RET NZ ;если да, то возврат
INC DE ;следующая попытка
LD A,E ;попытки кончились
OR D
JR NZ,x3DBA ;если нет, то повтор
JP x3EE7 ;обработка ошибки NO DISC
;Адрес #3DC8. Выбор дисковода, определенного по умолчанию. Вход: можно установить время перемещения головки и режим дисковода согласно описанию команды #01. Выход: эти переменные могут быть изменены согласно этому описанию. Используется также с адресов:
;#3DCB - выбор дисковода. Номер задайте в рег.A, остальное как и для предыдущей подпрограммы.
;#3DFD - задержка в 725779 тактов.
;#3DFF - задержка любой нужной длительности. В рег.A установите число, определяющее длительность задержки.
x3DC8 LD A,(#5D19) ;берем номер дисковода по умолчанию
x3DCB JP TCH2 ;перехват выбора дисковода
TCH2Q LD HL,#5D16 ;выбор дисковода
LD C,A
LD A,#3C
OR C
OUT (#FF),A
LD (HL),A
CALL x3E08 ;берем время перемещения головки дисковода
AND #80 ;бит 7 выключен?
JR Z,x3DFA ;если да, то инициализацию не проводим
CALL x3DAD ;проверка наличия диска в дисководе
CALL x3E16 ;определение времени перемещения головки дисковода
CALL x3E11 ;берем тип дисковода
CP #FF ;в этой переменной #FF?
JR NZ,x3DFA ;если да, то не определяем его
PUSH HL ;сохраняем адрес переменной с типом дисковода
CALL x1FCA ;определение количества дорожек дисковода
POP HL ;восстановление адреса переменной типа
CP #50 ;установка этой переменной
LD A,0
JR NZ,x3DF9
LD A,#80
x3DF9 LD (HL),A
;Внимание, ошибка!!! Не проверяется количество сторон дисковода и предполагается, что он односторонний.
x3DFA CALL x1E36 ;проверка индексной области диска
x3DFD LD A,#50 ;задержка в 327842 тактов
x3DFF LD C,#FF
x3E01 DEC C
JR NZ,x3E01
DEC A
JR NZ,x3DFF
RET ;возврат
Да, есть, но меня интересует какие точки использует софт, кроме тех что в первом посте.
---------- Post added at 09:19 ---------- Previous post was at 09:18 ----------
Это еще и кусок исходника под sjasmplus который я делал, а сразу и не заметил :)
#3d96 - кусок DW #0010
#3d97 - RET
Это же шутка, да?
Смотри внимательнее код!! Там по адресу #3d95 DB #10,#00,#C9
#3d96 NOP
#3d97 RET
Смотри внимательнее код!!
Это типа альтернатива #3D2F? Остальные RETы тоже альтернатива? В каком софте используются?
Это типа альтернатива #3D2F? Остальные RETы тоже альтернатива? В каком софте используются?
Типа да. Остальные RETы тоже альтернатива. Ну лично я юзал #3d96 и #3d97 в отличие от других, что юзали #3d2f (#3d30). Да и какая разница какие адреса использует софт? Там хоть RET NZ, к примеру, можно заюзать... Всё зависит от изощренного мозга кодера! :)
вот здесь главное (на данном этапе осознания действительности) не перебарщивать. да, можно хоть 100500 хитрых мест заюзать там, где этого и не надо, чисто для прикола, только потом это может вылиться в беду - хрен ваши старые проги заработают на новом железе, и будет вам облом в них ковыряться, чтобы запустить и поностальгировать.
вот здесь главное (на данном этапе осознания действительности) не перебарщивать. да, можно хоть 100500 хитрых мест заюзать там, где этого и не надо, чисто для прикола, только потом это может вылиться в беду - хрен ваши старые проги заработают на новом железе, и будет вам облом в них ковыряться, чтобы запустить и поностальгировать.
а вот для этого надо, чтобы железо 100% эмулировало ВГ93, а не только на уровне #3d13. Это лично мое мнение.
а реалии другие;)
а то начинается, что пзу бейсика не трогать никоим образом, тр-дос тоже не трогать, ибо кто в лес, кто по дрова... тем временем, есть ТОЧКИ ВХОДА, и если бы все цивилизованно жили, меньше было бы проблем:) то же самое с памятью... кто-то однажды подумал "ну работает же порт #fd". тут уже отмазы "ну вот была бы на скорпе нормальная дешифрация" не катят.
а реалии другие;)
а то начинается, что пзу бейсика не трогать никоим образом, тр-дос тоже не трогать, ибо кто в лес, кто по дрова... тем временем, есть ТОЧКИ ВХОДА, и если бы все цивилизованно жили, меньше было бы проблем:)
ну я-то про новое железо говорю! ;) хотя как показывают реалии...
кто-то однажды подумал "ну работает же порт #fd". тут уже отмазы "ну вот была бы на скорпе нормальная дешифрация" не катят.
ну на самом деле это еще не самый "шик". Вот, например, Павел Никитин в креке Black Lamp (http://trd.speccy.cz/gamez/b/B_LAM128.ZIP) заюзал OUT (#0D),A ;) п.с. А про скорп да... Но всё решилось доработкой зеленой платы...
а вот для этого надо, чтобы железо 100% эмулировало ВГ93, а не только на уровне #3d13. Это лично мое мнение.
Какое нахрен к чертям ВГ93 на винте или в РАМ диске? Как бы пора уже и флешки задействовать - и шустрей и удобней.
Какое нахрен к чертям ВГ93 на винте или в РАМ диске? Как бы пора уже и флешки задействовать - и шустрей и удобней.
Все это хорошо с флешками, кроме того что уйма софта юзает не узаконенную точку входа в TR-DOS (#3D13), а недокументированную #3D2F. Вот потому и приходится прибегать к эмуляции ВГ93, а дальше уже перекачивать данные на реальные накопители в виде HDD, CF, SD. Как альтернатива делать версию TR-DOS c перехватом вызовов по недокументированным точкам входа. Потому народ и поднимает такие темы.
#3D2F де факто документированная. а вот остальные - не факт. кто-то же вроде делал эмулятор вг... пора уже найти этого кого-то.
Поддерживаю насчет 3D2F. Точка давно стала стандартом по крайней мере де факто. Так что не стоит пропагандировать всякие разные точки, которые ничем кроме адреса не отличаются.
Как альтернатива делать версию TR-DOS c перехватом вызовов по недокументированным точкам входа.
Вот именно, судя по постам этой темы не всех устраивает точка #3D2F, а для эмуляции ВГшки весь железо-зависимый код из окна #3Dxx нужно удалить...
Неясно, как точки входа для использования ПЗУ ТР-ДОС могут повлиять на реализацию программной эмуляции вгэйки (с изменением программного кода ТР-ДОС). Обьясните, пожалуйста...
Что касается аппаратной эмуляции, без изменения прошивки ПЗУ, смутно догадываюсь, что при оной эмуляции вообще должно быть наплевать, что там и как в ТР-ДОС входит. Не?
Обьясните, пожалуйста...
Хочу убрать из окна #3Dxx весь код который лезет к ВГшке...
Что касается аппаратной эмуляции
О аппаратной речь не идет.
Хочу убрать из окна #3Dxx весь код который лезет к ВГшке...
С какой целью убрать? Как это поможет эмулировать вг?
С какой целью убрать?
ИМХО, тыр-дос (6.10 и далее) внутри выглядит как штопаное изделие №2, поэтому хочу перепедалить его, мне сейчас с ним работать неудобно... Заодно хочу его немного разуплотнить на предмет OPEN,CLOSE, и прочего мусора...
---------- Post added at 23:55 ---------- Previous post was at 23:32 ----------
Вот только пофлеймить хотел, а тут уже пусто :) Лас, верни пост на место, я уже прочитал :)
Вот только пофлеймить хотел, а тут уже пусто :) Лас, верни пост на место, я уже прочитал :)
Суть моего поста была в том, что, по моему скромному мнению, вы занимаетесь ерундой, в данном случае. Напишите уже, наконец, нормальный эмулятор ВГ.
ИМХО, тыр-дос (6.10 и далее) внутри выглядит как штопаное изделие №2, поэтому хочу перепедалить его, мне сейчас с ним работать неудобно... Заодно хочу его немного разуплотнить на предмет OPEN,CLOSE, и прочего мусора...
Почему-то кажется, что слова с неясным значением, например, такие как "перепедалить" и "разуплотнить", обычно употребляются тогда, когда нужно "напустить туману". Обычно, когда человек сам не знает, что собирается делать.
Хочу убрать из окна #3Dxx весь код который лезет к ВГшке...
Зачем вообще трогать эти точки в данном диапазоне?
Что это даст? Так и не увидел разумного обьяснения, ну и ладно.
Если вы собрались писать эмуляцию ВГ, то:
вообще, лично я бы при программной эмуляции ВГэйки на всякие там точки входа вообще не обращал бы внимания, и не трогал бы их, а мой программный эмулятор перехватывал бы управление только при обращении к портам ВГ (чтение/запись). Двух байт, которые занимают команды работы с портами, хватает для размещения на их месте перехватчика с кодом события. :v2_smile:
Оставьте вы эти точки входа в покое, они ничего не решают, поверьте.
VELESOFT
30.09.2010, 20:16
Exist vTR-DOS for russian computer ATM TURBO 2+. This trdos version use true software emulation of KR1818VG93 controller ! Use 1MB memory as ramdisc with TRD image. Source of this vTR-DOS is free. Theoretically can be modified for other ZX clones.....
VELESOFT, where we can download sources from?
VELESOFT, where we can download sources from?
Немного истории:
Exist special TRDOS version with full software emulation of KR1818VG93(FDC) working with ramdisc. This TRDOS is writed for russian "ZX clone" ATM TURBO 2+.
http://atmturbo.nedopc.com/projects/hdd_prj.htm :v2_yahoo:
If this TRDOS will ported to other ZX clones, then will very usable and compatible with existing trdos software using also jumps to #3D2F !!! :v2_thumb:
All other TRDOS versions (also 6.11X) work with ramdisc only via #3D13 :v2_conf2:
All other TRDOS versions (also 6.11X) work with ramdisc only via #3D13 :v2_conf2:в этом то и проблема...нету замены полноценной...эх,ктоб портировал уже vTRDOS ну хоть куданить кроме атм :v2_conf2:...мечты мечты...
А сорцов конечно же нету ? =)
Сорцы есть, токо никто не спрашивает... :v2_conf2:
Пожалуйста пишите в email (chunin{гаф}mail{тчк}ru), личка отключена!!!
VELESOFT
01.10.2010, 01:40
VELESOFT, where we can download sources from?
On ALONE CODER's web page: http://alonecoder.nedopc.com/zx/index.html
Source code is on disc with source of Mr Gluk Reset Service v6.61 :
http://alonecoder.nedopc.com/zx/GLUK661SRC.rar
Source in files VGEMUL** :v2_wink2:
And this is my old unfinished project (also SW emulator of FDC ports):
http://velesoft.speccy.cz/zx/divide/trd-os.htm
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot