PDA

Просмотр полной версии : #3Dxx vs Soft



Keeper
28.09.2010, 01:39
Какие подпрограммы в окне #3Dxx использует софт? Кроме:
#3D00,#3D03,#3D13,#3D21,#3D2F

Faster
28.09.2010, 08:55
Да, собственно, любые может использовать, которые расположены в диапазоне #3d00 - #3dff. Если адрес подпрограммы лежит непосредственно в пределах этого окна, можно просто передать на нее управление, например, обычным CALL NN. А если речь о точках входа, то их полно: #3d2c, #3d4b, #3d7f, #3d93, #3d96, #3d97, #3dac.

Keeper
28.09.2010, 09:58
#3d2c, #3d4b, #3d7f, #3d93, #3d96, #3d97, #3dac.
#3d2c - RET
#3d4b - RET
#3d7f - RET
#3d93 - RET
#3d96 - кусок DW #0010
#3d97 - RET
#3dac - RET

Это же шутка, да?

caro
28.09.2010, 10:09
Какие подпрограммы в окне #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 ;возврат

Keeper
28.09.2010, 10:19
Да, есть, но меня интересует какие точки использует софт, кроме тех что в первом посте.

---------- Post added at 09:19 ---------- Previous post was at 09:18 ----------

Это еще и кусок исходника под sjasmplus который я делал, а сразу и не заметил :)

Faster
28.09.2010, 10:44
#3d96 - кусок DW #0010
#3d97 - RET

Это же шутка, да?

Смотри внимательнее код!! Там по адресу #3d95 DB #10,#00,#C9



#3d96 NOP
#3d97 RET

Keeper
28.09.2010, 12:06
Смотри внимательнее код!!

Это типа альтернатива #3D2F? Остальные RETы тоже альтернатива? В каком софте используются?

Faster
28.09.2010, 13:57
Это типа альтернатива #3D2F? Остальные RETы тоже альтернатива? В каком софте используются?

Типа да. Остальные RETы тоже альтернатива. Ну лично я юзал #3d96 и #3d97 в отличие от других, что юзали #3d2f (#3d30). Да и какая разница какие адреса использует софт? Там хоть RET NZ, к примеру, можно заюзать... Всё зависит от изощренного мозга кодера! :)

psb
28.09.2010, 14:03
вот здесь главное (на данном этапе осознания действительности) не перебарщивать. да, можно хоть 100500 хитрых мест заюзать там, где этого и не надо, чисто для прикола, только потом это может вылиться в беду - хрен ваши старые проги заработают на новом железе, и будет вам облом в них ковыряться, чтобы запустить и поностальгировать.

Faster
28.09.2010, 14:20
вот здесь главное (на данном этапе осознания действительности) не перебарщивать. да, можно хоть 100500 хитрых мест заюзать там, где этого и не надо, чисто для прикола, только потом это может вылиться в беду - хрен ваши старые проги заработают на новом железе, и будет вам облом в них ковыряться, чтобы запустить и поностальгировать.
а вот для этого надо, чтобы железо 100% эмулировало ВГ93, а не только на уровне #3d13. Это лично мое мнение.

psb
28.09.2010, 14:34
а реалии другие;)
а то начинается, что пзу бейсика не трогать никоим образом, тр-дос тоже не трогать, ибо кто в лес, кто по дрова... тем временем, есть ТОЧКИ ВХОДА, и если бы все цивилизованно жили, меньше было бы проблем:) то же самое с памятью... кто-то однажды подумал "ну работает же порт #fd". тут уже отмазы "ну вот была бы на скорпе нормальная дешифрация" не катят.

Faster
28.09.2010, 15:15
а реалии другие;)
а то начинается, что пзу бейсика не трогать никоим образом, тр-дос тоже не трогать, ибо кто в лес, кто по дрова... тем временем, есть ТОЧКИ ВХОДА, и если бы все цивилизованно жили, меньше было бы проблем:)

ну я-то про новое железо говорю! ;) хотя как показывают реалии...


кто-то однажды подумал "ну работает же порт #fd". тут уже отмазы "ну вот была бы на скорпе нормальная дешифрация" не катят.
ну на самом деле это еще не самый "шик". Вот, например, Павел Никитин в креке Black Lamp (http://trd.speccy.cz/gamez/b/B_LAM128.ZIP) заюзал OUT (#0D),A ;) п.с. А про скорп да... Но всё решилось доработкой зеленой платы...

valeron
28.09.2010, 19:56
а вот для этого надо, чтобы железо 100% эмулировало ВГ93, а не только на уровне #3d13. Это лично мое мнение.

Какое нахрен к чертям ВГ93 на винте или в РАМ диске? Как бы пора уже и флешки задействовать - и шустрей и удобней.

spensor
29.09.2010, 13:07
Какое нахрен к чертям ВГ93 на винте или в РАМ диске? Как бы пора уже и флешки задействовать - и шустрей и удобней.
Все это хорошо с флешками, кроме того что уйма софта юзает не узаконенную точку входа в TR-DOS (#3D13), а недокументированную #3D2F. Вот потому и приходится прибегать к эмуляции ВГ93, а дальше уже перекачивать данные на реальные накопители в виде HDD, CF, SD. Как альтернатива делать версию TR-DOS c перехватом вызовов по недокументированным точкам входа. Потому народ и поднимает такие темы.

psb
29.09.2010, 14:49
#3D2F де факто документированная. а вот остальные - не факт. кто-то же вроде делал эмулятор вг... пора уже найти этого кого-то.

valeron
29.09.2010, 14:59
Поддерживаю насчет 3D2F. Точка давно стала стандартом по крайней мере де факто. Так что не стоит пропагандировать всякие разные точки, которые ничем кроме адреса не отличаются.

Keeper
29.09.2010, 16:19
Как альтернатива делать версию TR-DOS c перехватом вызовов по недокументированным точкам входа.

Вот именно, судя по постам этой темы не всех устраивает точка #3D2F, а для эмуляции ВГшки весь железо-зависимый код из окна #3Dxx нужно удалить...

Лас
29.09.2010, 22:14
Неясно, как точки входа для использования ПЗУ ТР-ДОС могут повлиять на реализацию программной эмуляции вгэйки (с изменением программного кода ТР-ДОС). Обьясните, пожалуйста...
Что касается аппаратной эмуляции, без изменения прошивки ПЗУ, смутно догадываюсь, что при оной эмуляции вообще должно быть наплевать, что там и как в ТР-ДОС входит. Не?

Keeper
30.09.2010, 00:20
Обьясните, пожалуйста...
Хочу убрать из окна #3Dxx весь код который лезет к ВГшке...


Что касается аппаратной эмуляции
О аппаратной речь не идет.

Лас
30.09.2010, 00:22
Хочу убрать из окна #3Dxx весь код который лезет к ВГшке...
С какой целью убрать? Как это поможет эмулировать вг?

Keeper
30.09.2010, 00:55
С какой целью убрать?

ИМХО, тыр-дос (6.10 и далее) внутри выглядит как штопаное изделие №2, поэтому хочу перепедалить его, мне сейчас с ним работать неудобно... Заодно хочу его немного разуплотнить на предмет OPEN,CLOSE, и прочего мусора...

---------- Post added at 23:55 ---------- Previous post was at 23:32 ----------

Вот только пофлеймить хотел, а тут уже пусто :) Лас, верни пост на место, я уже прочитал :)

Лас
30.09.2010, 17:06
Вот только пофлеймить хотел, а тут уже пусто :) Лас, верни пост на место, я уже прочитал :)
Суть моего поста была в том, что, по моему скромному мнению, вы занимаетесь ерундой, в данном случае. Напишите уже, наконец, нормальный эмулятор ВГ.

ИМХО, тыр-дос (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.....

psb
30.09.2010, 21:30
VELESOFT, where we can download sources from?

Лас
30.09.2010, 23:54
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