-
Подскажите, плз.
Обращаюсь за помощью по причине перевода tap в TR-DOS. Как известно TR_DOS "смещяет" системные переменные и область бейсика на 112 байт. оагда-то давно решал эту проблему, но щас не помню. Тем большая проблеиа, что после загрузки всех кодовых файлов(тут проблем нет), опять грузится бейсик-файл. Подскажите, кто может, как решить проблему?
-
Неясно, в чем проблема. Загрузить второй бейсик файл не получается?
-
Загрузить проблем нет. Но! Если ты помнишь то, что разницу бейсик области обычного бейсика (при работе с кассетой) и область бейсика при работе с диском, то тут есть , так называемое, "смещение" переменных бейсика на 112 байт. Может и напутал, сорри.
-
Помню. Надо избавиться от этого смещения? Можно узнать, чем оно, в Вашем случае, мешает?
-
Как стереть переменные TR-DOS, переместив бейсик-область обратно на свое место:
Код:
LD HL,23755 ; адрес начала области переменных ТR-DOS
LD BC,112 ;длина области переменных TR-DOS
JP #19E8 ;удаление области, начиная с HL, длиной в BC
Это сдвинет всю бейсик-область на место, скорректировав системные переменные.
Процедуру можно вызывать прямо из бейсика с помощью USR, работа интерпретатора не будет прервана.
Вот еще полезная релоцируемая процедура, может кому-нибудь понадобится.
Переход из 128го бейсика в 48 бейсик с продолжением работы интерпретатора (аналог команды 128 бейсика "spectrum", но только без останова и без блокировки порта #7ffd).
Код:
ORG #b000
DI
LD HL,4867 ;АДРЕС ВОЗВРАТА ПРИ ОШИБКЕ 48BAS
PUSH HL
LD (23613),SP
LD HL,7030 ;АДРЕС ВОЗВРАТА В 48BAS
PUSH HL
LD HL,(23621) ;ТЕКУЩАЯ СТРОКА
LD (23618),HL ;БУДЕТ ВЫПОЛНЯТЬСЯ
LD A,(23623) ;НОМЕР ТЕКУЩЕГО ОПЕРАТОРА
INC A ;УСТАНАВЛИВАЕМ НА СЛЕДУЮЩИЙ
LD (23620),A ;БУДЕТ ВЫПОЛНЯТЬСЯ
LD HL,(23631)
LD DE,15
ADD HL,DE
LD DE,5566
EX DE,HL
LD BC,4
LDIR
LD A,(23611)
AND %11101111
LD (23611),A
EI
RET
-
Спасибо большое! Попробую, потом отпишусь.