ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04T
================================================================
Адрес 0. Полная инициализация системы.
0 DI ;запрет прерываний
LD DE,65535;адрес вершины памяти
LD A,7 ;цвет бордюра - 7
JR 9 ;инициализация системы
----------------------------------------------------------------
Адрес 8. Инициализация системы. В DE поместите адрес вершины па-
мяти, в A - 7 и запретите прерывания. Используется также с адре-
са 9.
8 NOP
9 OUT (254),A;установка цвета бордюра
LD A,63 ;число для регистра I
JR 19 ;инициализация системы
----------------------------------------------------------------
Адрес 16. Переход к подпрограмме печати символа из регистра A.
16 JP 15746
----------------------------------------------------------------
Адрес 19. Инициализация системы. В DE поместите адрес вершины
памяти, установите белый бордюр, поместите в A старший байт низ-
шего адреса памяти и запретите прерывания.
19 LD I,A;загрузка регистра I
JP 27 ;инициализация системы
----------------------------------------------------------------
Адрес 24. Переход к подпрограмме печати строки.
24 JP 9991
----------------------------------------------------------------
Адрес 27. То же, что и 36.
27 NOP
NOP
JR 36
----------------------------------------------------------------
Адрес 32. Переход к подпрограмме вызова подпрограмм из ПЗУ бей-
сика. Адрес вызываемой подпрограммы поместите в двух байтах пос-
ле команды RST 32. Например:
RST 32
DEFW #0D6B
32 JP 12146
----------------------------------------------------------------
Адрес 36. Инициализация системы. В DE поместите адрес вершины
памяти, установите белый бордюр, поместите в A старший байт низ-
шего адреса памяти и запретите прерывания.
36 LD H,D;переброска адреса вершины памяти в HL
LD L,E
JR 43 ;инициализация системы
----------------------------------------------------------------
Адрес 40. Выборка адреса текущего канала с учетом сдвига, задан-
ного в регистре C.
40 JP 8995
----------------------------------------------------------------
Адрес 43. Инициализация системы. В DE и HL поместите адрес вер-
шины памяти, установите белый бордюр, поместите в A старший байт
низшего адреса памяти и запретите прерывания.
43 LD (HL),2;помещение по очередному адресу числа 2
DEC HL ;следующий адрес
CP H ;конец памяти ?
JR NZ,43 ;если нет, то повтор
JR 58 ;инициализация системы
----------------------------------------------------------------
Адрес 56. Обработка маскируемого прерывания.
56 EI
RET
----------------------------------------------------------------
Адрес 58. Инициализация системы. В DE поместите адрес веpшины
памяти в HL - адрес дна, установите белый бордюр, заполните
обозначенную область памяти байтом 2 и запретите прерывания.
58 OR A ;сброс флага C
SBC HL,DE ;конец области памяти ?
ADD HL,DE
INC HL ;следующий байт
JR NC,71 ;если все, то установка системных переменных
DEC (HL) ;уменьшение байта на 1
JR Z,71 ;если получился 0, то ОЗУ здесь не работает
DEC (HL) ;уменьшение байта на 1
JR Z,58 ;если получился 0, то ОЗУ в порядке
71 DEC HL ;последний исправный байт
LD (23872),HL;установка P_RAMT
LD DE,16047 ;адрес символов для UDG
LD BC,168 ;длина UDG - 168 байтов
LD A,E
EX DE,HL ;переброска адреса символов для UDG в HL
LD SP,24576 ;установка временного стека
LD (24320),HL;сохранение адреса символов для UDG
LD HL,121 ;возвращаться в 121
PUSH HL ;помещение его на стек
LD HL,15663 ;адрес переключателя ПЗУ на TR-DOS
PUSH HL ;помещение его на стек
LD HL,#B8ED ;код команды LDDR
JR 105 ;установка UDG
----------------------------------------------------------------
Адрес 102. Подпрограмма обработки немаскируемого прерывания.
102 JP 10838
----------------------------------------------------------------
Адрес 105. Выполнение любой команды процессора. Поместите в HL
коды команды, установите регистры (24320 вместо HL) и поместите
в HL коды команды.
105 LD (24336),HL;помещение кодов команды в память
PUSH AF ;сохранение AF
LD A,201 ;код команды RET
LD (24338),A ;помещение его в память
POP AF ;восстановление AF
LD HL,(24320);берем адpес символов для UDG
JP 24336 ;выполнение команды и возврат
----------------------------------------------------------------
Адрес 121. Инициализация системы. Установите P_RAMT, знакогене-
ратор пользователя, белый бордюр, поместите в DE адрес начала
знакогенератора минус 1 и запретите прерывания.
121 EX DE,HL ;загрузка адреса UDG в HL
INC HL
LD (23675),HL;установка переменной UDG
DEC HL ;следующий адрес
LD BC,7744 ;установка RASP и PIP
LD (23608),BC
LD (23730),HL;установка RAMTOP
LD HL,15360 ;установка CHARS
LD (23606),HL
LD HL,(23730);берем адрес RAMTOP
LD (HL),62 ;признак конца стека GO SUB
DEC HL ;следующий адрес
LD SP,HL ;установка постоянного стека
DEC HL ;установка ERR_SP
DEC HL
LD (23613),HL
LD DE,4867 ;адрес подпрограммы обработки ошибок
PUSH DE ;установка его
IM 1 ;установка первого режима прерываний
LD IY,23610 ;установка регистра IY
LD HL,23734 ;установка CHANS
LD (23631),HL
LD DE,5551 ;адрес области описателей каналов в ПЗУ бейсика
LD BC,21 ;ее длина - 21 байт
EX DE,HL
CALL 279 ;перенос области описателей каналов в ОЗУ
EX DE,HL
DEC HL ;установка DATADD
LD (23639),HL
INC HL ;следующий адрес
LD (23635),HL;установка PROG
LD (23627),HL;установка VARS
LD (HL),128 ;конец области
INC HL ;следующий адрес
LD (23641),HL;установка E_LINE
LD (HL),13 ;конец строки
INC HL ;следующий адрес
LD (HL),128 ;конец области
INC HL ;следующий адрес
LD (23649),HL;установка WORKSP
LD (23651),HL;установка STKBOT
LD (23653),HL;установка STKEND
LD A,56 ;атрибуты экрана
LD (23693),A ;установка ATTR_P
LD (23695),A ;установка ATTR_T
LD (23624),A ;установка BORDER
LD HL,1315 ;установка REPDEL и REPPER
LD (23561),HL
DEC (IY-58) ;клавиши не нажаты
DEC (IY-54)
LD HL,5574 ;адрес таблицы STRMS в ПЗУ бейсика
LD DE,23568 ;адрес переменной STRMS
LD BC,24 ;длина таблицы - 24 байта
CALL 279 ;перенос таблицы в ОЗУ
SET 1,(IY+1) ;открыт поток 3
LD HL,23746 ;помещение команды RET в ОЗУ
LD (HL),201
Внимание!!! Системных переменных TR-DOS пока еще нет и это пор-
тит память.
RST 32 ;инициализация буфера принтера и экрана
DEFW #0EDF
LD HL,23658 ;буфер принтера использовался
LD (HL),2
LD HL,4747 ;возвращаться в 4747
PUSH HL
LD A,170 ;выполнять команду RUN"boot"
LD (23296),A
EI ;разрешение прерываний
JP 15665 ;вход в TR-DOS
----------------------------------------------------------------
Адрес 279. Выполнение команды LDIR. Установите HL, DE и BC и по-
местите байт 201 по адресу 24338.
279 LD (24320),HL;сохранение HL
LD HL,15663 ;адрес переключателя ПЗУ на TR-DOS
PUSH HL ;помещение его на стек
LD HL,#B0ED ;коды команды LDIR
LD (24336),HL;помещение команды в ОЗУ
LD HL,(24320);восстановление HL
JP 24336 ;выполнение команды и возврат