|
City
#14
06 июня 1999 |
|
Ликбез - полное описани и полный дизассемблер ПЗУ (часть 10).

---------------------------------------------------
ЛИКБЕЗ
---------------------------------------------------
(c) П.Ю.Федин
╔═════════════════════════════════════════════════╗
║ ║
║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║
║ ║
║ TR-DOS 5.04T (5.03) ║
║ ║
║ ДЛЯ ПРОФЕССИОНАЛОВ, ║
║ ║
║ А ТАКЖЕ ДЛЯ ТЕХ, ║
║ ║
║ КТО ХОЧЕТ ИМИ СТАТЬ. ║
║ ║
╚═════════════════════════════════════════════════╝
пpодолжение
ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04T
═══════════════════════════════════════════════════
Адрес 0. Полная инициализация системы.
0 DI ;запрет прерываний
LD DE,65535;адрес вершины памяти
LD A,7 ;цвет бордюра - 7
JR 9 ;инициализация системы
───────────────────────────────────────────────────
Адрес 8. Инициализация системы. В DE поместите ад-
pес вершины памяти, в 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 (I Y-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 ;выполнение команды и возврат
пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 16 ноября