PDA

Просмотр полной версии : Подскажите, плз.



VNN_KCS
13.01.2011, 17:08
Обращаюсь за помощью по причине перевода tap в TR-DOS. Как известно TR_DOS "смещяет" системные переменные и область бейсика на 112 байт. оагда-то давно решал эту проблему, но щас не помню. Тем большая проблеиа, что после загрузки всех кодовых файлов(тут проблем нет), опять грузится бейсик-файл. Подскажите, кто может, как решить проблему?

Лас
13.01.2011, 17:32
Неясно, в чем проблема. Загрузить второй бейсик файл не получается?

VNN_KCS
13.01.2011, 18:44
Загрузить проблем нет. Но! Если ты помнишь то, что разницу бейсик области обычного бейсика (при работе с кассетой) и область бейсика при работе с диском, то тут есть , так называемое, "смещение" переменных бейсика на 112 байт. Может и напутал, сорри.

Лас
13.01.2011, 19:03
Помню. Надо избавиться от этого смещения? Можно узнать, чем оно, в Вашем случае, мешает?

Лас
14.01.2011, 02:35
Как стереть переменные 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

VNN_KCS
14.01.2011, 13:34
Спасибо большое! Попробую, потом отпишусь.