City #14
06 июня 1999

Ликбез - полное описани и полный дизассемблер ПЗУ (часть 10).

<b>Ликбез</b> - полное описани и полный дизассемблер ПЗУ (часть 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одолжение следует ...



Другие статьи номера:

От редакции - Hа сегодня особых новостей нет.

Железо - Хитрость как не платить за телефонные разговоры.

Смайлик - Сколько анекдотов о ментах вы знаете?

Ликбез - полное описани и полный дизассемблер ПЗУ (часть 10).

Бук - Похождения Штиpлица и дpугие пpиключения Боpмана.

Музыка - 1969 г. Все активнее пpоявляет себя как композитоp Джоpдж Хаppисон.

Реклама - пpиобpету pазличную инфоpмацию по "железу" ZX Spectrum.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Открытые письма Nemo №3.3
Вступление - О создании нового электронного издания "X-RAY".
Разное - Это типа я сам себе говорю, наверное.
Программирование - Быстрый и компактный драйвер печати 42 символов в строке.
Ликбез - полное описание и полный дизассемблер ПЗУ (часть 8).

В этот день...   19 апреля