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.


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

Похожие статьи:
Реклама - Реклама и телефоны.
История - "Странная любовь".
Поиск - поиск игр, программ.
Commanders - анкета на тему коммандеров, предназначается всем тем, кто остался верен нашему Speccy.
Письмо №287

В этот день...   1 января

SibNews #08, Woot! #01, Spectrum Magazine #01, ACNews #25, Psychoz #14, ACNews #14, Last 128 #08, Last 128 #06, Last 128 #05, Last 128 #04, Last 128 #03, Last 128 #02, Last 128 #09, Last 128 #3.5, Last 128 #8.025, Sinclair Club #05, Last 128 #M!R 01, Fantadrom #01, Buzz #20, Last 128 #01, DonNews #13, Nicron #120, Promised Land #01, Inferno #01, Marazm #25, Ultimathum #01, Marazm #21, Hooy Mag #02, KrNews #11, Marazm #22, Marazm #23, ZX Football 2000 #01, Codemania #01, Always #03, Bugs #02, IzhNews #08, Virtual Worlds #01, Listok #04, Scenergy #02, Flash Info #18, Marazm #16, Marazm #17, Zed #01, Balagan #02, ZX Format #08, ZX Power #03, Shock #01, Impulse #02, Deja Vu #03, ZX Club #08, ZX Club #06, Numberology #01, Marazm #13, Marazm #12, Marazm #14, Gorodok #02, Zodiac #01, Marazm #15, Deja Vu #07, Marazm #11, Deja Vu #07, Playboy #03, Crazy News #2, Crazy News #4, ZX Light #01, Crazy News #5, Playboy #02, ZX News #03, ZX Review #1-2, Read Me #02, Crazy News #3, Nicron #13, Read Me #01, Public Spirit #01, Faultless #06, Faultless #05, ZX Software #01, Stump #04, Speccy #07, Возраждение #0, Speccy #03, On-Line #17, Scene+ #01, Welcome Press #01, ZX Konig #04, Adventurer #01, Faultless #05, Faultless #04, Di Halt #01, Faultless #01, Playboy #01, Crazy News #1, Faultless #03, Pioneer #03, Sinclair Town #02, ZX Magazine #01, Eldorado #01, ZX Magazine #02, Spectron #01, ZX News #01, ZX Konig #02, 200 #W, Welcome Press #00, Dune #07, Subliminal Extacy #01, Subliminal Extacy #02, ZX Konig #01, Subliminal Extacy #00, Muchomor #01, Spectrofon #01, ZX Revija #02, Outlet #01, Outlet #1-3