Какие подпрограммы в окне #3Dxx использует софт? Кроме:
#3D00,#3D03,#3D13,#3D21,#3D2F
Какие подпрограммы в окне #3Dxx использует софт? Кроме:
#3D00,#3D03,#3D13,#3D21,#3D2F
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Да, собственно, любые может использовать, которые расположены в диапазоне #3d00 - #3dff. Если адрес подпрограммы лежит непосредственно в пределах этого окна, можно просто передать на нее управление, например, обычным CALL NN. А если речь о точках входа, то их полно: #3d2c, #3d4b, #3d7f, #3d93, #3d96, #3d97, #3dac.
Когда на твой вопрос отвечает философ, перестаешь понимать вопрос
Есть же диззассемблерный текст 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 который я делал, а сразу и не заметил
Когда на твой вопрос отвечает философ, перестаешь понимать вопрос
вот здесь главное (на данном этапе осознания действительности) не перебарщивать. да, можно хоть 100500 хитрых мест заюзать там, где этого и не надо, чисто для прикола, только потом это может вылиться в беду - хрен ваши старые проги заработают на новом железе, и будет вам облом в них ковыряться, чтобы запустить и поностальгировать.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)