ORG 0 JP BEGIN ORG #100 ... BEGIN ...
ОТВЕТ:
ORG 0 JP BEGIN DB #100-$ DUP(0) ; заполнить нулями до адреса #100 ; ORG #100 ... BEGIN ...На всякий случай перед DB можно добавить проверку:
IF $ > #100 USERERR "Текущий адрес превысил #100" ENDIFЧуть более сложный (но и более гибкий) способ заключается в создании нескольких исходных файлов и использовании директив INCLUDE и EXPORT:
Первый файл (file1.za): ORG 0 INCLUDE file2.zh JP BEGIN Второй файл (file2.za): ORG #100 EXPORT BEGIN,... ... BEGIN ...В этом случае сначала необходимо оттранслировать второй исходник (file2.za) для получения файлов file2.zh и, например, file2.tap, а затем - первый (file1.za).
CLS LD HL,#4000
ОТВЕТ:
CLS: LD HL,#4000
ОТВЕТ:
Label: ... ECHO "Метка Label расположена по адресу &%Label" ... x = $ ECHO "Текущий адрес: &%x" ... x = $-Label ECHO "Занято &%x байт"
ОТВЕТ:
LD HL,SCRNM ; адрес дескриптора файла картинки CALL LOAD ; загрузка LD HL,PRGNM ; адрес дескриптора файла кодов программы CALL LOAD JP start ; переход к выполнению программы ; процедура загрузки файла (адрес дескриптора файла задается в HL) LOAD LD C,19 ; функция 19: копирование 16 байт дескриптора ; в область системных переменных TR-DOS CALL TRDOS ; вызов интерпретатора системных функций LD C,10 ; функция 10: поиск элемента каталога LD A,9 ; использовать для поиска только 9 LD (23814),A ; первых символов, записанных в дескрипторе CALL TRDOS LD A,C ; сохранение результата поиска INC C ; если возвращено 255, то заданный элемент не найден JP Z,0 ; в этом случае можно просто "сбросить" компьютер LD C,8 ; функция 8: считывание элемента каталога ; (номер элемента задан в A предыдущей функцией) CALL TRDOS XOR A ; то же, что LD A,0 LD (23801),A ; 0 - загрузка, 255 - проверка (VERIFY) LD C,14 ; функция 14: чтение файла (дескриптор находится ; в области системных переменных TR-DOS ; кроме того, 0 в регистре A говорит данной функции ; о том, что длина и адрес загрузки кодового блока ; берутся из дескриптора в системных переменных TR-DOS TRDOS PUSH HL LD HL,0 LD (23823),HL ; обнуление кодов ошибки TR-DOS LD (IY+0),255 ; код ошибки бейсик-системы (255 - OK) POP HL JP 15635 ; обращение к интерпретатору системных функций TR-DOS ; дескриптор файла картинки SCRNM DEFM "screen$ " ; должно быть 8 символов, недостающие дополняются пробелами DEFB "C" ; тип файла CODE DEFS 7 ; дополнение до 16 байт - в данном случае значения не имеют ; дескриптор файла кодов программы PRGNM DEFM "code " DEFB "C" DEFS 7В Z80Asm вместо DEFM и DEFB можно писать DB, а вместо DEFS 7 - DB 7 DUP (0) Во втором варианте все файлы (включая начальный бейсик) склеиваются в один (или в крайнем случае должны быть записаны на диске последовательно друг за другом без пропущенных секторов между ними), а сам загрузчик должен быть интегрирован в программу на бейсике (например, вставлен в строку REM):
; загрузка картинки LD HL,16384 ; адрес загрузки картинки LD B,27 ; количество загружаемых секторов (6912/256) LD DE,(23796) ; номера следующих дорожки/сектора ; за только что считанными/записанными ; в системных переменных TR-DOS LD C,5 ; функция 5: загрузка блока секторов CALL 15635 ; интерпретатор системных функций TR-DOS ; и практически то же самое для кодов программы LD HL,addr ; адрес загрузки блока LD B,secs ; размер файла в секторах LD DE,(23796) LD C,5 CALL 15635 JP start ; переход к выполнению программыБейсик-часть может выглядеть примерно так:
0 REM ?????????? - здесь коды загрузчика 10 RANDOMIZE USR (PEEK(23635)+256*PEEK(23636)+5)При необходимости можно добавить CLEAR, INK, PAPER и пр.
Перед вызовом процедуры 15635 крайне желательно каждый раз обнулять переменные по адресам 23823, 23824 и записывать 255 в 23610 (например, командой LD (IY+0),255), как в первом варианте.
ОТВЕТ: