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одолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября