Сообщение от
solegstar
как только вы делаете запрос в озу, то защелка трдос (почитайте про нее) тут же переключает пзу на бейсик 48.
Согласен, понимаю. Это если запрос в ОЗУ. Но если TR-DOS вызывает подпрограмму из ПЗУ 48К, то "в одну сторону" оно переключить защелку может сама, но вот обратно, когда подпрограмма ПЗУ 48К отработает и сделает RET - управление перейдет туда, куда укажет адрес, взятый из вершины стека. И если там не адрес из диапазона #3Dxx, то "некому будет переключать обратно защелку". Поэтому в TR-DOS мы уже не вернемся. Или я неправ?
Сообщение от
solegstar
также проанализируйте как происходит переключение на пзу трдос, схему контроллера дисковода на дискретных элементах. ваши суждения в корне ошибочны.
Я вполне осознаю их ошибочность Меня "академическая голая теория" интересует... сферическая TR-DOS, короче...
- - - Добавлено - - -
Сообщение от
goodboy
скорее выполнение кода за рамками диапазона
Это ответ на вопрос "как выйти из TR-DOS", отменить теневое ПЗУ. А меня волнует "как оно потом возвращается, когда отработала процедура из ПЗУ 48К?"
- - - Добавлено - - -
Сообщение от
IanPo
Вход в TR-DOS из SOS начинается с прыжка на 15616. А Z80 начинает исполнение с 0 адреса (после ресета).
Если через меню, то заход в TRDOS все равно должен быть через окно адресов #3Dxx
А вот с этим не очень согласен, глядя на дизассемблер TR-DOS. С адреса 0 там как раз полноценный полный запуск, с тестом RAM (который у меня проходит - см.видео)... т.е. высталение ША >=15616 <16384 - это способ переключить ПЗУ, но с адреса 15616, по цепочке JP, после 15665 имеем безусловный переход практически "в начало" - JP 569 - вход в TR-DOS
- - - Добавлено - - -
Сообщение от
goodboy
на многих контроллерах (для 48ой модели) можно было выставить тумблером запуск trdos сразу после подачи питания.
Именно так. И старт начинается с 0.
- - - Добавлено - - -
А вот, собтвенно, и ответ на вопрос "как они это делают" (из книги Федина Павла Юрьевича "ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04T (5.03) ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ.")
Код:
Адрес 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 в озу
Теперь все стало на свои места: когда TR-DOS вызывает ПЗУ 48К, перед вызовом она "подстилает себе соломы" в виде адреса возврата в стеке (15663), куда вернется, после того, как отработает процедура из ПЗУ 48К. А возврат к 15663 как раз и обеспечит обратное переключение защелки.
А теперь вопрос №2:
В уже упомянутой книге читаем:
Способы обращения к ПЗУ TR-DOS
ПЗУ TR-DOS является теневым, поэтому к нему нельзя обратиться
непосредственно при помощи CALL. Но для того, чтобы оно было
доступно для использования, существуют адреса, при переходе на
которые включается ПЗУ TR-DOS. В ПЗУ бейсика-48 в этих адресах
находится знакогенератор, следовательно обычно управление туда
никогда не передается.
Внимание!!! В ПЗУ бейсика-128 в этих ад-
ресах находится программа, поэтому при включенном ПЗУ бейси-
ка-128 ПЗУ TR-DOS блокируется полностью. Ниже вы видите список
точек входа, переключающих ПЗУ.
При том, что в самой TR-DOS, если верить Ларченко и Родионову, есть даже отдельный блок "согласования синтаксиса" - мнемоник ключевых слов из 48К и посимвольных команд 128К.
Вопрос - так как же все-таки из Бейсика-128 попасть в TR-DOS? Где-то на форуме уже видел подобный вопрос, но там, кажется, так ни до чего не договорились...