Profi must live!
Моё железо...
1. Profi 5.06/1Mb(DRAM)+Profi5.06(UP)/HDD/3`5FDD/CF512Mb/SD-CARD
3. Profi 6.2 Rev. B/1Mb/3`5FDD/HDD3.2Gb
4. Profi 5.05(down)/1Mb+Profi 5.03(UP)/Pentagon_Fix
Все укомплектованы:
Profi_ZX-BUS/ZXMC2/NemoIDE/SounDrive[свернуть]
Ссылка на Telegram-канал поддержки пользователей Profi.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Согласен, понимаю. Это если запрос в ОЗУ. Но если TR-DOS вызывает подпрограмму из ПЗУ 48К, то "в одну сторону" оно переключить защелку может сама, но вот обратно, когда подпрограмма ПЗУ 48К отработает и сделает RET - управление перейдет туда, куда укажет адрес, взятый из вершины стека. И если там не адрес из диапазона #3Dxx, то "некому будет переключать обратно защелку". Поэтому в TR-DOS мы уже не вернемся. Или я неправ?
Я вполне осознаю их ошибочностьМеня "академическая голая теория" интересует... сферическая TR-DOS, короче...
- - - Добавлено - - -
Это ответ на вопрос "как выйти из TR-DOS", отменить теневое ПЗУ. А меня волнует "как оно потом возвращается, когда отработала процедура из ПЗУ 48К?"
- - - Добавлено - - -
А вот с этим не очень согласен, глядя на дизассемблер TR-DOS. С адреса 0 там как раз полноценный полный запуск, с тестом RAM (который у меня проходит - см.видео)... т.е. высталение ША >=15616 <16384 - это способ переключить ПЗУ, но с адреса 15616, по цепочке JP, после 15665 имеем безусловный переход практически "в начало" - JP 569 - вход в TR-DOS
- - - Добавлено - - -
Именно так. И старт начинается с 0.
- - - Добавлено - - -
А вот, собтвенно, и ответ на вопрос "как они это делают" (из книги Федина Павла Юрьевича "ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04T (5.03) ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ.")
Теперь все стало на свои места: когда TR-DOS вызывает ПЗУ 48К, перед вызовом она "подстилает себе соломы" в виде адреса возврата в стеке (15663), куда вернется, после того, как отработает процедура из ПЗУ 48К. А возврат к 15663 как раз и обеспечит обратное переключение защелки.Код:Адрес 32. Переход к подпрограмме вызова подпрограмм из ПЗУ бей- сика. Адрес вызываемой подпрограммы поместите в двух байтах пос- ле команды RST 32. Например: RST 32 DEFW #0D6B 32 JP 12146 ──────────────────────────────────────────────────────────────── Адрес 12146. Вызов подпрограмм из пзу бейсика. Адрес задайте в двух байтах после CALL 12146: CALL 12146 DEFW #0D6B 12146 LD (23810),HL;сохранение HL и DE LD (23812),DE POP HL ;снятие со стека адреса двух байтов с адресом подпрограммы LD E,(HL) ;берем адрес подпрограммы INC HL LD D,(HL) INC HL PUSH HL ;помещение на стек адреса возврата в программу, вызвавшую 12146 LD HL,15663 ;помещение на стек адреса переключателя пзу на TR-DOS PUSH HL PUSH DE ;помещение на стек адреса вызываемой подпрограммы LD HL,23746 ;помещение на стек адреса команды RET в озу PUSH HL LD HL,(23810);восстановление HL и DE LD DE,(23812) RET ;переход к команде RET в озу
А теперь вопрос №2:
В уже упомянутой книге читаем:
При том, что в самой TR-DOS, если верить Ларченко и Родионову, есть даже отдельный блок "согласования синтаксиса" - мнемоник ключевых слов из 48К и посимвольных команд 128К.Способы обращения к ПЗУ TR-DOS
ПЗУ TR-DOS является теневым, поэтому к нему нельзя обратиться
непосредственно при помощи CALL. Но для того, чтобы оно было
доступно для использования, существуют адреса, при переходе на
которые включается ПЗУ TR-DOS. В ПЗУ бейсика-48 в этих адресах
находится знакогенератор, следовательно обычно управление туда
никогда не передается. Внимание!!! В ПЗУ бейсика-128 в этих ад-
ресах находится программа, поэтому при включенном ПЗУ бейси-
ка-128 ПЗУ TR-DOS блокируется полностью. Ниже вы видите список
точек входа, переключающих ПЗУ.
Вопрос - так как же все-таки из Бейсика-128 попасть в TR-DOS? Где-то на форуме уже видел подобный вопрос, но там, кажется, так ни до чего не договорились...
Последний раз редактировалось idc; 12.03.2021 в 18:50.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)