x5B88 equ #5B88 ;содержимое порта #7FFD x7530 equ #7530 ;для контролера прерываний x9C40 equ #9C40 ;для контролера прерываний xC000 xC001 equ #C001 ;2 для маркера страницы xC006 equ #C006 ; xC063 equ #C063 ;1 <>0 отладчик отключен xC064 equ #C064 ;2 адрес п/п вызываемой при входе в монитор xC066 xC069 equ #C069 ;#1B00 сохраненный экран xDB69 equ #DB69 ;область для сохранения памяти с адреса #8002 ;буфер для чтения даты и времени в формате ASCII ;буфер для загрузки конфигурационного сектора xDD69 equ #DD69 ;2 адрес текущей ячейки в дампе памяти xDD6B equ #DD6B ;2 адрес возврата из монитора/ pc программы пользователя xDD6D equ #DD6D ;2 указатель вершины стэка программы пользователя, с учетом 11 байт уже сохраненных на стэке xDD6F equ #DD6F ;2 регистр ix xDD71 equ #DD71 ;2 регистр iy xDD73 equ #DD73 ;2 регистр hl xDD75 equ #DD75 ;2 регистр de xDD77 equ #DD77 ;2 регистр bc xDD79 equ #DD79 ;2 регистр hl' xDD7B equ #DD7B ;2 регистр de' xDD7D equ #DD7D ;2 регистр bc' xDD7F equ #DD7F ;2 регистр af xDD81 equ #DD81 ;2 регистр af' xDD83 equ #DD83 ;2 вершина стэка для сохранения регистров при входе в монитор ;2 регистр r и флаг IFFF2 xDD85 equ #DD85 ;1 i xDD86 equ #DD86 ;1 номер rom откуда зашли ; =#01 rom 0 Basic 128k ; =#02 rom 0 Basic 48k ; =#04 rom 3 Tr-Dos ; =#08 rom 2 SrvMon ; =#80 запрос от принтера xDD87 equ #DD87 ;2 адрес начала дампа памяти xDD89 equ #DD89 ;2 адрес текущей ячейки в дампе памяти ; адрес начала дизасма в дампе памяти ; номер последней записи в каталоге ROM-disk ; количество подразделов в разделе MFS xDD8B equ #DD8B ;2 адрес начала листинга для команды DASM xDD8D equ #DD8D ;#0A таблица закладок в листинге дизасма xDD97 ;область для сохранения стэка 11 байт xDD99 equ #DD99 ;2 (#C001) ;#0C 6 числовых операндов для команд отладчика xDD9B equ #DD9B ;2 bc xDD9D equ #DD9D ;1 номер rom откуда зашли xDD9E equ #DD9E ;2 af флаг IFFF2 и регистр r xDDA0 equ #DDA0 ;2 af xDDA2 equ #DDA2 ;2 адрес возврата из монитора xDDA4 xDDA7 equ #DDA7 ;2 для временного сохранения указателя стэка/регистров ; для печати числа в сообщениях xDDA9 xDDAA equ #DDAA ;2 текущий адрес команды ассемблера для дизасма xDDAC equ #DDAC ;4 буфер для содержимого памяти адресуемой текущим регистром ;4 буфер команды для дизассемблирования ;8 буфер вывода строки дампа памяти xDDB4 equ #DDB4 ;3 команда дизассемблера без префиксов xDDB7 equ #DDB7 ;9 сообщение для печати команды дизасма ; +0 =[#7E..#C4] -> -#7E =[#00..#46] из таблицы x1107 ; +1 код сообщения второго операнда ;=[#01..#2B] код операнда ;=[#27..#2B] в операнде есть число в скобках ;=[#2C..#74] код мнемоники ;=[#7E..#C4] код команды ассемблера ;=[#EC] за этим байтом следует адрес сообщения ;=[#EE] печать db #nn ;BAD ;=[#F1] прерываем печать команды ;=[#F7] признак конца команды ;=[#F8..#FF] за этим байтом следует число ; ;вх: 0,a =0/1 двухбайтное/однобайтное число ; ; 1-2,a - система счисления (bin/oct/dec/hex) ;=[#00,#75..#EB,#ED..#F7] выход без печати hl=hl-1 xDDC0 equ #DDC0 ; xDDCB equ #DDCB ;2 для сохранения стэка, при формировании команды дизасма xDDCD equ #DDCD ;1 код команды дизасма xDDCE equ #DDCE ;2 адрес перехода при дизасме xDDD0 equ #DDD0 ;2 адрес следующей команды дизасма xDDD2 equ #DDD2 ;2 адрес на который ссылаются команды работающие с ячейками ; памяти, такие как LD ( ),reg или SET b,(IX+d). xDDD4 equ #DDD4 ;2 xDDD6 equ #DDD6 ;2 xDDD8 equ #DDD8 ;2 адрес начала текущего блока сообщений xDDDA equ #DDDA ;2 адрес начала текущего блока слов xDDDC equ #DDDC ;2 для команд поиска в отладчике: адрес начала поиска xDDDE equ #DDDE ;2 для команд поиска в отладчике: адрес конца поиска xDDE0 equ #DDE0 ;1 для команд поиска в отладчике: длина искомой строки xDDE1 equ #DDE1 ;2 для команд поиска в отладчике: состояние портов #7FFD/#1FFD пользователя xDDE3 equ #DDE3 ;#14 для команд поиска в оладчике: искомая строка xDDF7 equ #DDF7 ;2 указатель стэка при входе в монитор, с учетом 11 байт уже сохраненных на стэке xDDF9 xDDFF equ #DDFF ;1 номер текущего меню xDE00 equ #DE00 ;8 номер текущей опции для каждого меню из списка номеров меню xDE08 equ #DE08 ;8 список номеров меню для возврата в предыдущее xDE10 equ #DE10 ;2 для сохранения hl xDE12 equ #DE12 ;2 для сохранения адреса возврата xDE14 equ #DE14 ;1 код предыдущего нажатия при просмотре списка введенных строк xDE15 equ #DE15 ;2 адрес буфера ввода строки xDE17 equ #DE17 ;43 буфер для ввода строки xDE42 equ #DE42 ;400 список последних введенных строк xDFD2 equ #DFD2 ;24 буфер для сохранения экрана под курсором мыши ;xDFE9 equ #DFE9 ; xDFEA equ #DFEA ;4 буфер нажатых клавиш xDFEE equ #DFEE ;-26 копия порта #7FBA ; 6,=0/1 образ к дисководу B подключен/не подключен ; 7,=0/1 образ к дисководу A подключен/не подключен ; =#FF при инициализации xDFEF equ #DFEF ;-25 xDFF0 equ #DFF0 ;-24 1 состояние порта #FFBA ; 7,=0 активен регистр адреса CMOS ; =1 активен регистр данных CMOS ; =#F7 при включении компьютера xDFF1 equ #DFF1 ;-23 =0..3 с какого диска делать автостарт xDFF2 equ #DFF2 ;-22 значение Cylinders HDD (2 байта) xDFF4 equ #DFF4 ;-20 значение head HDD xDFF5 equ #DFF5 ;-1F значение sector HDD xDFF6 equ #DFF6 ;-1E значение seconds xDFF7 equ #DFF7 ;-1D значение minutes xDFF8 equ #DFF8 ;-1C значение hours xDFF9 equ #DFF9 ;-1B значение days xDFFA equ #DFFA ;-1A значение months xDFFB equ #DFFB ;-19 значение years xDFFC equ #DFFC ;-18 2 =#FC9D/#FC8B (64669/64651) оригинальный иначе совместимый xDFFD equ #DFFD ;-17 xDFFE equ #DFFE ;-16 2 сбойных секторов на диске ; 1 поиск файла: номер загруженного в буфер сектора [#00..#0F] xDFFF equ #DFFF ;-15 1 поиск файла: номер загруженного в буфер сектора [#01..#10] xE000 equ #E000 ;-14 2 всего секторов на диске ; 1 ROM-disk: смещение в параграфах от начала ROM-disk в этой странице ; 1 поиск файла: номер текущего файла в считанном секторе [#00..#0F] xE001 equ #E001 ;-13 1 ROM-disk: номер страницы с файлом ROM-disk xE002 equ #E002 ;-12 0, ; 1,=1 загружать/сохранять в zs-snap регистры AY xE003 equ #E003 ;-11 xE004 equ #E004 ;-10 1 содержимое регистра 7 AY xE005 equ #E005 ;-0F 0,=1 эта же клавиша была нажата и в предыдущем цикле ; 1,=1 работает автоповтор нажатой клавиши ; 2,=1 клавиша была нажата. код клавиши еще не обработан ; 3, ; 4, ; 5,=1 ????для рисования рамок???? ; 6,=1 было нажато cs+ss ; 7,=1 нажат CapsLock (cs+2) xE006 equ #E006 ;-0E 1 код нажатой клавиши xE007 equ #E007 ;-0D 1 код нажатой клавиши xE008 equ #E008 ;-0C координата X курсора мыши в текущем окне (в знакоместах) xE009 equ #E009 ;-0B координата Y курсора мыши в текущем окне (в знакоместах) xE00A equ #E00A ;-0A 0-4, - величина задержки для куросра ; 5,=1 ; 6,=1 работает счетчик before repeat ; 7,=1 курсор(стрелка) напечатан на экране xE00B equ #E00B ;-09 1 координата Y выделенной опции меню xE00C equ #E00C ;-08 1 номер блока сообщений текущей опции xE00D equ #E00D ;-07 1 копия байта (#00FB) rom 2 xE00E equ #E00E ;-6/5 2 копия xE012 xE010 equ #E010 ;-4/3 2 копия xE012 xE012 equ #E012 ;-02 1 состояние порта #7FFD при входе в монитор xE013 equ #E013 ;-01 1 состояние порта #1FFD при входе в монитор ;d порт #1f 000?0000 ;e порт #7f 001????? / 000????? ;значение iy при работе в мониторе (переменные???) ;переменные код 0 xE014 equ #E014 ;+00 =#84 - [ ; =#04 - ( ; =#00 - это не скобка ; 4,=1 ; 3,=1/0 - 16/8 бит значение команды ; 1,=1/0 - чтение из строки команды строкового/числового значения ; 0,=1/0 - читается из параметра число/строка xE015 equ #E015 ;+01 0,=0/1 префикс #DD/#FD ; 1,=1 есть префикс #DD/#FD -> e=#09 ; 2,=1 есть префикс #ED -> e=#18 если есть #DD/#FD ; 3,=1 есть префикс #CB -> e=#16 ; 4,= ; 5,= ; 6,=1 байтовое смещение в команде ; =1 в команде есть ссылка на адрес памяти ; 7,= xE016 equ #E016 ;+02 длина команды для дизасма в байтах xE017 equ #E017 ;+03 тип текущй команды дизасма ; 0,=1 это команда call/call cc ; 1,=1 это команда ret/ret cc ; 2,=1 это команда jr cc ; 3,=1 это команда jp/jp cc ; 4,=1 это команда jp (hl)/jp (ix)/jp (iy) ; 5,=1 при 1,=1 это команда ret cc ; 6,=1 это неизвестная команда ; 7,=1 это ex af,af' либо exx xE018 equ #E018 ;+04 0-1,=00 в дизасме команда не ссылается на память (см xDDD2) ; 0,=1 если команда считывает из памяти, и Ложь, если считывания не происходит ; 1,=1 если команда производит запись в память, и Ложь, если запись не выполняется ; 6,=1 ето команда сдвига с префиксом xE019 equ #E019 ;+05 0,=1/0 число в десятичной/шестнадцатиричной системе ; 1,=1 Расширить вывод реассемблера в командах DISS, LDISS и ; DASM, кроме адреса и мнемоники команды, будут ; представлены значения байт и их эквиваленты в ASCII ; 2,=1/0 печатать 1/5 комманд в дизасме монитора ; 3,=1 Не трассировать (выполнять сразу) подпрограммы, ; расположенные в ПЗУ ; 4,=1/0 вводить адрес в команде DASM числом/выражением ; 5,=1/0 Запретить/разрешить автоматическое выполнение команды SHOW ; 6,=1 начальный адрес команды SS/D, берется из регистра PC. ; =0 начальный адрес команды SS/D. Берется из указателя текущей ячейки (mem) ; 7,=1 печатать в дампе символы из полного набора ; =0 печатать символы с кодами res 7,[#20..#7F] остальные точками xE01A equ #E01A ;+06 минимальная длина сообщения с мнемоникой ассемблера xE01B equ #E01B ;+07 минимум разрядов в числе при переводе в ASCII xE01C equ #E01C ;+08 для перевода времени в ASCII =#30 xE01D equ #E01D ;+09 0,=1 экран под курсором сохранен в буфере ; =0 восстановление экрана под курсором из буфера ; 1,=1 запрет на установку следующих координа печати в окне ; 2,=1 печатаем символ ; 3,=1 курсор напечатан ???? ; 4,=1 вместо экрана вывод на принтер ; 5,=1 прочие управляющие коды ; 6,=1 чтение данных после управляющего кода ; 7,=1 управляющий код вывод строки #04 xE01E equ #E01E ;+0A 0,=1 новую информацию записывать поверх старой ; =0 очищать экран монитора при обновлении информации ; 1,=1 не обновлять содержимое регистров ; 2,=1 не обновлять экран монитора ; =0 обновлять содержимое экрана монитора согласно битам 0, 1, 3:6 ; 3,=1 не обновлять дамп по содержимому регистров ; 4,=1 не обновлять дамп памяти ; 5,=1 не обновлять дизассемблер памяти по содержимому ячейки памяти ; 6,=1 не выводить дизассемблер в мониторе ; 7,=1 трассировать все команды ; =0 не выводить подпрограммы (автоматическое выполнение подрограмм) xE01F equ #E01F ;+0B 0,=1 отображаются регистры альтернативного набора ; 1,=1 отображается AF' ; 4,=0 при вызове функций #00-#13 R8DOS ; =1 сектор прочитан с HDD ; 5,=0 функции вызываются из монитора ; =1 функция rst 8 вызвана пользователем ; 7,=0 восстанавливать память пользователя под всеми ловушками ; =1 сохранять память пользователя под всеми ловушками и установка ловушек ; =0/1 меню mount/dismount xE020 equ #E020 ;+0C байт управления индикацией регистров =1 не выводится ; 7 - pc ; 6 - sp ; 5 - ix ; 4 - iy ; 3 - hl(hl') ; 2 - de(de') ; 1 - bc(bc') ; 0 - af(af') xE021 equ #E021 ;+0D xE022 equ #E022 ;+0E 0,=0 используется при компрессии ; 2,=1 ошибка. деление на ноль ; 5,=0 ввод параметров в меню ; =1 ввод строки в окне создания разделов ; 6,=1 в команде ассемблера нет запятой ; 7,=0/1 редактирование hex дампа/символьного представления xE023 equ #E023 ;+0F количество незакрытых скобок в выражении в отладчике xE024 equ #E024 ;+10/11 делитель для выделения разряда числа xE025 equ #E025 ;+11 xE026 equ #E026 ;+12 0,=1 запущен отладчик ; 1,=1 экран не надо сохранять в ram 8 (экран не сохранен в ram 8) ; 2,=0/1 print screen positive/negative ; 3,=1 экран сохранен в ram 8 ; 4,=1 при вызове команды CALL отладчика ; 5,=1 выполняется трассировка из отладчика ; 6,= ; 7,=1 желто/черный бордюр при входе xE027 equ #E027 ;+13 0,=1/0 работает команда отладчика search/find ; 1,=0 запись строки данных в память идет по адресу в MEM ; 3,=1 продолжаем запись zs-snap после записи 48k ; =0 ошибка: undefined file ; 5,=1/0 compression on/off ; 6,=1/0 запись/чтение ; 7,=1/0 при сохранении/загрузке zs-snap использовать сжатие ; =1/0 форматирование/проверка дискеты xE028 equ #E028 ;+14 0,=1 не трогать регистр 7 AY (sound on/off) ; 1,=0/1 Autoconfig On/Off ; 2,=1/0 после загрузки снапа вернуться в монитор/выйти из монитора (запуск снапа) ; 3,=0 программа анализатора не задана ; 4,=1 анализатор включен ; 5,=1 работает команда EVal word ; 6,=1 "теплый" сброс ; 7,=0 отладчик отключен / reset RAM on/off xE029 equ #E029 ;+15 отдельные биты этого байта позволяют управлять выводом на принтер ; 0,=0/1 interface Centronics/RS232 ; 1,=0/1 speed 9600/1200 ; 2,=0/1 data bits 8/7 ; 3,=0/1 stop bits 2/1 ; 5,=0/1 режим вывода 1 точка/3 точки ; 7,=0/1 positive/negative xE02A equ #E02A ;+16 при отладке, аналог xE01E (параметры команды SLOW) ; 0,=1 восстанавливать экран ; 1,= ; 2,= ; 3,= ; 4,= ; 5,= ; 6,= ; 7,=1 выполнение команды в отладчике с быстрым выполнением подпрограмм xE02B equ #E02B ;+17 текущая система счисления =2/8/10/16 xE02C equ #E02C ;+18 значение interleaving 1..26 xE02D equ #E02D ;+19 0,= ; 3,=1 пауза в водимом листинге ; 5,=1 чтение порта #7FFD/#1FFD недоступно ; 6,=1 включено Turbo ; 7,=1 турбо-режим доступен xE02E equ #E02E ;+1A 0,=1 было обновление времени и даты в буфере ; 1, ; 2, ; 3, ; 4,=1 interrupt controller found ; 5,=1 HDD есть и работоспособен ; =1 NVRAM найден ; =1 modem found ; 6,=1 микросхема CMOS обнаружена ; 7,=1 HDD физичиски присутствует xE02F equ #E02F ;+#1B ; 4,=1 interrupt controller найден. но не совсем???? ; 6,=1 CMOS 128 байт ; 7,=1 проверка геометрии винчестера пройдена xE030 equ #E030 ;+#1C master HDD ; 0,=1/0 autostart on/off ; 1,=1/0 автоопределение HDD при старте on/off ; 2,=1/0 LBA mode on/off ; 4,=1/0 TRDOS mirror on/off ; 5,=1/0 HDD обнаружен/отсутствует ; =1 сектор MBR записан ; 6,=0 в буфере xEBF5 список разделов без изменений ; =1 в буфере xEBF5 список разделов изменен ; 7,=1 на винчестере есть раздел MFS xE031 equ #E031 ;+#1D slave HDD xE032 equ #E032 ;+#1E xE033 equ #E033 ;+#1F/#20 адрес текущего меню в списке номеров меню для возврата в предыдущее xE035 equ #E035 ;+#21/#22 первый свободный адрес в буфере последних введенных строк(команд) xE037 equ #E037 ;+#23/#23 адрес начала следующей введенной строки xE038 equ #E038 ;+#24 xE039 equ #E039 ;+#25 значение NMI debouncing xE03A equ #E03A ;+#26 размер окна сжатия для снапа xE03B equ #E03B ;+#27 0,=1 нажата fire на джойстике и знакоместные координаты курсора в окне изменились ; 1,=1 нажата fire на джойстике ; 2,=1 курсор мыши вне пределов текущего окна ; 3,=1/0 indicator времени в мониторе on/off ; 5,=1/0 mouse on/off ; 6,=1/0 kempston joystick on/off ; 7,=1/0 manipulators on/off xE03C equ #E03C ;+#28 crd X графического курсора xE03D equ #E03D ;+#29 crd Y графического мыши xE03E equ #E03E ;+#2A значение first debouncing xE03F equ #E03F ;+#2B значение before repeat xE040 equ #E040 ;+#2C значение second wait xE041 equ #E041 ;+#2D значение second debouncing xE042 equ #E042 ;+#2E значение size of step xE043 equ #E043 ;+#2F xE044 equ #E044 ;+#30 содержимое регистра дополнительных возможностей #F9BE (не реализовано) ; =#00 всегда xE045 equ #E045 ;+#31 содержимое регистра счетчика секторов (#FABE) ; число передаваемых секторов данных при операциях чтения/записи (=#00->=#100) xE046 equ #E046 ;+#32 LBA адрес на HDD(двойное слово) младший байт ; CHS - номер сектора xE047 equ #E047 ;+#33 LBA адрес на HDD ; CHS - номер цилиндра (младший байт) xE048 equ #E048 ;+#34 LBA адрес на HDD ; CHS - номер цилиндра (старший байт) xE049 equ #E049 ;+#35 3-0, - LBA адрес на HDD старший байт ; CHS номер головки ; 4,=0/1 текущий винчестер master/slave ; 5,=1 всегда ; 6,=0/1 это CHS/LBA адрес ; 7,=1 всегда xE04A equ #E04A ;+#36 =#20 код команды винчестера: чтение сектора xE04B equ #E04B ;+#37 =#30 код команды винчестера: запись сектора xE04C equ #E04C ;+#38 #90 144 xE04D equ #E04D ;+#39 количество дополнительных попыток чтения/записи сектора с винчестера ;переменные код 2 xE04E equ #E04E ;+00 1 константа антидребезговой задержки монитора xE04F equ #E04F ;+01 1 константа задержки перед автоповтором xE050 equ #E050 ;+02 1 счетчик до срабатывания автоповтора (базовое =(xE04F)) xE051 equ #E051 ;+03 1 период автоповтора xE052 equ #E052 ;+04 1 счетчик периода автоповтора (базовое =(xE051)) xE053 equ #E053 ;+05 1 цвет бордюра, устанавливаемый монитором, при подаче звукового сигнала ошибки xE054 equ #E054 ;+06 1 код символа "возврата каретки" для принтера xE055 equ #E055 ;+07 1 код символа "перевода строки" для принтера xE056 equ #E056 ;+08 1 код символа "перевода формата" для принтера xE057 equ #E057 ;+09 2 код, определяющий скорость передачи для последовательного интерфейса (для 9600 бод - 0bh) xE059 equ #E059 ;+0B 2 код, определяющий скорость передачи для последовательного интерфейса (для 1200 бод - 6аh) xE05B equ #E05B ;+0D 11 коды, служащие для перевода принтера в графический режим ; (непосредственно за ними будет выдано 768 байт ; графической информации при печати экрана из монитора). ; Байт +0dh хранит количество управляющих кодов ; +#06 =#01/#03 режим печати 1 точки/3 точки xE063 equ #E063 ;+15 4 коды, служащие для перевода принтера в текстовый режим, ; завершающие печать экрана. Байт +015h хранит количество ; управляющих кодов xE067 equ #E067 ;2 =0000 ;дескриптор окна монитора: вывод каталога диска на принтер ;дескриптор окна монитора: вывод на принтер xE06B equ #E06B ;+1D 1 число строк на странице при печати на принтере xE06C equ #E06C ;+1E 1 число символов в строке при печати на принтере xE06D xE075 equ #E075 ;дескриптор окна монитора: регистры/вывод каталога диска xE083 equ #E083 ;дескриптор окна монитора: ввод строки низу экрана xE091 equ #E091 ;дескриптор окна монитора: дизассембер xE09F equ #E09F ;дескриптор окна монитора: дамп памяти xE0AD equ #E0AD ;дескриптор окна монитора: информационное окно отладчика xE0BB xE0C9 equ #E0C9 ;дескриптор окна: menu xE0D7 equ #E0D7 ;дескриптор окна: запрос на запись MBR xE0E5 equ #E0E5 ;дескриптор окна: ввод числа xE0F3 equ #E0F3 ;дескриптор окна: переименование раздела HDD/каталог ROM-disk xE101 equ #E101 ;1 атрибуты для выделенной позиции в каталоге ROM-disk xE102 equ #E102 ;#D дескриптор окна при включении xE10F xE110 equ #E110 ;1 атрибуты для печати опции меню xE111 equ #E111 ;1 атрибуты для печати названия меню, времени xE112 equ #E112 ;1 атрибуты для печати неактивной опции меню xE113 equ #E113 ;1 атрибуты для печати выделенной опции меню xE114 equ #E114 ;1 атрибуты для подсветки ловушки при выводе дизасма xE115 equ #E115 ;1 атрибуты для печати информационного сообщения внизу экрана xE116 equ #E116 ;2 очередной(первый пустой) адрес в буфере нажатых клавиш xE118 equ #E118 ;2 текущий(первый не обработанный) адрес в буфере клавиатуры xE11A equ #E11A ;2 адрес вершины стэка при входе в монитор ;2 адрес памяти(8 байт) начала сормированной команды для трассировки xE11C equ #E11C ;2 адрес первого свободного байта программы анализатора xE11E equ #E11E ;#0C ;=x3E2C,x3D01 ;=x3179,x3161 ;=x1DDC,x1DD0 xE12A equ #E12A ;2 адрес изображения текущего графического курсора xE12C equ #E12C ;последнее состояние порта мыши #FBDF (ось X) xE12D equ #E12D ;последнее состояние порта мыши #FFDF (ось Y) xE12E equ #E12E ;#20 изображение графического курсора №1 с маской xE14E equ #E14E ;#20 изображение графического курсора №2 с маской xE16E equ #E16E ; xE17B equ #E17B ; /* xE16E db #7F ;знак копирайта db " 1993" db #1B,#01,#00 ;координаты db "-97 " xE17B db "MOA" db #1B,#00,#24 ;координаты db "NCACB" db #1B,#01,#24 ;координаты db "05-07" db #1B,#02,#24 ;координаты dc "V4.01" */ xE196 xE1A6 equ #E1A6 ;#?? буфер для вывода строки с выравниванием ;x xE336 equ #E336 ;вершина стэка для каких-то задач ;при работе отладчика xE338 equ #E338 ;#0E для сохранения дескриптора окна xE33B equ #E33B ;2 для временного сохранения регистров xE346 xE38D equ #E38D ;2 вершина стэка при работе в мониторе xE38F equ #E38F ;#0B буфер клавиатуры xE39A equ #E39A ;8 буфер для сохранения памяти пользователя при трассировке ; команды дизасма xE3A2 xE3A4 equ #E3A4 ;#10 буфер для сохранения экрана под символом 6 pix xE3B4 equ #E3B4 ;1 предыдущие атрибуты окна ;x xE3B6 equ #E3B6 ;1 счетчик для мигания курсора окна xE3B7 equ #E3B7 ;2 адрес дескриптора текущего окна xE3B9 equ #E3B9 ;2 адрес п/п обработки текущего управляющего кода xE3BB equ #E3BB ;1 новая координата Y курсора xE3BC equ #E3BC ;2 первый свободный адрес в буфере печати (xE1A6/буфер CMOS) ORG #E3BE xE3BE rst #30 dw #0000 db #00 ret xE3C3 dw #E449 ;rom 0, ram 8 текущей плоскости dw #E44D ;rom 1, ram 8 текущей плоскости dw #E4C5 ;текущая страница ПЗУ в новой плоскости (rom 2 ???) dw #E41B ;rom 3(tr-dos), ram 8 и вызов п/п с возвратом в xE478 xE3CB dw #E499 dw #E489 dw #E483 dw #E484 ;обработка rst #30 ;переключение плоскости xE3D3 push hl ld hl,(#0101) ;номер текущей страницы ex (sp),hl push hl ld hl,#0006 push af add hl,sp push de push bc ld e,(hl) inc hl ld d,(hl) ex de,hl ld c,(hl) inc hl ld b,(hl) ;адрес вызываемой п/п inc hl ld a,(hl) ;плоскость и страница вызываемой п/п xE3E9 call xE478 ;включим страницу ПЗУ с монитором inc hl ex de,hl ld (hl),d ;сохраним новый адрес возврата dec hl ld (hl),e ld (xE408),bc call xE4AA ;установим плоскость ld hl,xE3C3 call xE4B8 ;адрес п/п включения страницы ПЗУ по ее номеру в A ld (xE405+1),hl pop bc pop de pop af pop hl xE405 call #0000 xE408 db 0 ;адрес вызываемой п/п db 0 ;включение предыдущей плоскости ex (sp),hl push af push bc ld a,l call xE4AA ld hl,xE3CB call xE4B8 pop bc pop af ex (sp),hl ret ;включение rom 3(tr-dos), ram 8 и вызов п/п с возвратом в xE478 xE41B ex (sp),hl push de ld e,(hl) inc hl ld d,(hl) inc hl ld (xE43C+1),de ;de адрес вызываемой п/п pop de ex (sp),hl push hl ld hl,(xE43C+1) ex (sp),hl ;(sp) адрес вызываемой п/п xE42C push af xE42D ld a,#10 ld (xE468+1),a pop af ex (sp),hl ld (xE43C+1),hl ld hl,xE478 ex (sp),hl push hl xE43C ld hl,#0000 ex (sp),hl ld (xE43C+1),bc ld bc,#3D30 jr xE463 ;включение rom 0, ram 8 и вызов п/п с возвратом в xE478 xE449 push af xor a jr xE450 ;включение rom 1, ram 8 и вызов п/п с возвратом в xE478 xE44D push af ld a,#10 xE450 ld (xE468+1),a pop af ld (xE43C+1),bc ;сохраним BC ex (sp),hl ;берем адрес п/п ld c,(hl) inc hl ld b,(hl) inc hl ex (sp),hl ;bc адрес вызываемой п/п push hl ld hl,xE478 ex (sp),hl ;(sp) возврат в xE478 xE463 push bc ;(sp) адрес вызываемой п/п push af ld bc,#7FFD xE468 ld a,#00 out (c),a ld a,#10 ld b,#1F out (c),a pop af ld bc,(xE43C+1) ret ;возврат после обработки rst #30 ;включаем ПЗУ с монитором xE478 push bc push af ld bc,#1FFD ld a,#12 out (c),a pop af pop bc xE483 ret xE484 push hl ;rom 1, ram 8 с возвратом в x3D30 ld hl,#3D30 ex (sp),hl xE489 push bc ;включим rom 1, ram 8 push af ld bc,#1FFD ld a,#10 out (c),a ld b,#7F out (c),a pop af pop bc ret xE499 push bc ;rom 0, ram 8 push af ld bc,#1FFD ld a,#10 out (c),a xor a ld b,#7F out (c),a pop af pop bc ret ;установка заданной плоскости ;bit 2-3,a - номер плоскости xE4AA ld c,a ld hl,#0110 rrca rrca and #03 add a,l ld l,a ld l,(hl) ld l,(hl) ld a,c ret ;определение адреса п/п по номеру ;вх: bit 0-1,a - номер п/п ; hl - адрес таблицы с адресами п/п ;вых: hl - адрес п/п xE4B8 and #03 rla add a,l ld l,a jr nc,xE4C0 inc h xE4C0 ld a,(hl) inc hl ld h,(hl) ld l,a ret ;вызов п/п xE4C5 ex (sp),hl inc hl inc hl ex (sp),hl push hl ld hl,(xE408) ex (sp),hl ret ;bc =#7FFD ;de - заданная страница xE4CF ld a,e and #10 out (c),a ld b,#1F ld a,d and #03 or #10 out (c),a ;rom пользователя, ram 8 ex af,af' jr c,xE4E1 ld a,(hl) xE4E1 ld (hl),a ex af,af' ld a,#12 out (c),a ld b,#7F ld a,#10 out (c),a ;rom 2, ram 8 jp rom2_x05A1 ;rom 2 ;АДРЕС: #E4F0 ;сохранение/восстановление стэка из окна [#0000..#3FFF] ;вх: hl' - адрес вершины стэка ; de' - буфер для сохранения ; bc' - размер для сохранения ; de - страница при входе ; bc=#7ffd ; cy'=0 сохранять ; =1 восстанавливать ;вых: hl - адрес вершины стэка+n ; de - буфер для сохранения+n ; xE4F0 ld a,e and #10 out (c),a ;ram 0/8 ld b,#1F ld a,d and #03 or #10 out (c),a ;rom при входе, ram 8 exx ex af,af' jr nc,xE503 ;сохраняем ex de,hl xE503 ldir jr nc,xE508 xE507 ex de,hl xE508 ex af,af' exx ld a,#12 out (c),a ld b,#7F ld a,#10 out (c),a ;rom 2, ram 8 exx ret ;обработчик прерываний im 2 xE516 xor a xE517 ei xE518 ret xE519 ei inc a xE51B db #32 xE51C call #0000;x0212 ret xE520 ld (xE518),a xE523 ld a,#FB ;ei ld (xE517),a im 1 jp #0000;xF300;x025E xE52D equ #E52D ;8 блоков по 11 байт breackpoints ;+#00 0-1,=nn номер типа ловушки ; 6,=1 ловушка задана ; 7,=1 ловушка активна ;+#01 номер страницы в которой установлена ловушка ;+#02 адрес ловушки (2 байта) ;+#04 ;+#05 начальное значение счетчика проходов по ловушке (2 байта) ;+#07 текущее значение счетчика проходов (2 байта) ;+#09 ;+#0A xE538 xE543 xE54E xE559 xE564 xE56F xE57A xE585 equ #E585 ;буфер для установки ловушки ;+0 #C0+тип ловушки ;+1 номер страницы ловушки 5,=1 задана в команде 5,=0 текущая страница ;+2/3 адрес ловушки ;+4 ;+5/6 количество проходов ;+7/8 количество проходов ;+9 =#00 ;+10 =#00 xE590 equ #E590 ;#15 описатель текущего дисковода xE5A5 equ #E5A5 ;2 head * sector активного HDD xE5A7 equ #E5A7 ;2 xE5A9 equ #E5A9 ;#100 каталог ROM-диска ; временные буферы ;#200 буфер для чтения сектора HDD xE6A9 equ #E6A9 ;#100 буфер xE7A9 equ #E7A9 ;#1C буфер fcb xE7B2=xE7A9+#09 ;2 адрес начала области памяти при сохранении экрана на диск xE7BE=xE7A9+#15 ;2 =xE8A9 адрес памяти для копирования из ROM-disk xE7C5 equ #E7C5 ;2 координаты следующего блока файла ROM-disk ; текущий адрес на диске (сектор, дорожка) xE7C7 equ #E7C7 ;#10? строка пути к образу диска ;x xE7DB equ #E7DB ;6+6 имя полдарздела + имя раздела xE7E7 xE81B equ #E81B ;#10 описатель раздела MFS ; заголовок подраздела, при выборе образа ;x xE8A9 equ #E8A9 ;#100 первый параграф файла ROM-disk ; буфер для дисковых операций ; дескриптор подраздела xE8E9 equ #E8E9 ;#70 битовая карта параграфов. по 8 байт на страницу ; =0 параграф пустой xE9A9 equ #E9A9 ;#14 буфер программы анализатора ; для зарезервированных слов анализатора st0-st9 xE9BD equ #E9BD ;#14 адреса ловушек ; для зарезервированных слов анализатора br0-br9 xE9D1 equ #E9D1 ;2 адрес начала параметров-слов в программе анализатора xE9D3 equ #E9D3 ;2 адрес конца названия слова в программе (указывает на #01) xE9D5 equ #E9D5 ;2 адрес первой ячейки переопределяемого слова xE9D7 equ #E9D7 ;2 адрес конца названия переопределенного слова в программе (указывает на #01) x xE9D9 equ #E9D9 ;2 адрес начала стэка анализатора xE9DB equ #E9DB ;2 адрес вершины стэка анализатора (адрес первой свободной ячейки) ; стэк анализатора растет вверх!!! xE9DD equ #E9DD ;2 для сохранения SP в анализаторе xE9DF equ #E9DF ;2 для временного сохранения регистров ; xE9E1 equ #E9E1 ;2 адрес таблицы со списком процедур для п/п x2028 xE9E3 equ #E9E3 ;2 номер записи каталога ROM-disk, с которой начинаем печать xE9E5 equ #E9E5 ;2 адрес шрифта xE9E7 equ #E9E7 ;4 смещение от начала образа в секторах (512b) +1 ; размер создаваемого раздела в секторах xE9EB equ #E9EB ;4 4 байта из дескриптора xE591 ; смещение первого сектора выбранного подраздела MFS/образа в подразделе xE9EF equ #E9EF ;1 смещение ширина поля в символах от края окна для переименования раздела HDD xE9F0 equ #E9F0 ;1 ширина в символах окна для переименования раздела HDD xE9F1 equ #E9F1 ;1 номер дисковода xE9F2 equ #E9F2 ;1 номер дисковода (пользовательский для rst 8: db #81) xE9F3 equ #E9F3 ;2 адрес блока описателей дисковода xE9F5 equ #E9F5 ;#15 описатель дисковода A ; +#00 код подраздела (для образа =#01) ; 2-0,=??? тип подраздела ; 4,=1 подключен раздел TR-DOS (не образ) ; 5,=1 образ защищен от записи ; =#00 - реальный дисковод ; +#01 4 адрес первого сектора подраздела/образа ; +#05 4 адрес последнего сектора подраздела/образа ; +#09 6 имя подраздела ; 6 имя диска в подразделе xEA0A equ #EA0A ;#15 описатель дисковода B xEA1F equ #EA1F ;#15 описатель дисковода C xEA34 equ #EA34 ;#15 описатель дисковода D xEA49 equ #EA49 ;#15 описатель дисковода A (пользовательский для rst 8: db #81) xEA5E equ #EA5E ;#15 описатель дисковода B (пользовательский для rst 8: db #81) xEA73 equ #EA73 ;#15 описатель дисковода C (пользовательский для rst 8: db #81) xEA88 equ #EA88 ;#15 описатель дисковода D (пользовательский для rst 8: db #81) xEA9D equ #EA9D ;буфер для определения последовательного порта/модема ;переменные код 6 ??? xEAED equ #EAED ;8 список атрибутов Ink для печати опций меню xEAF5 equ #EAF5 ;#100 признак целостности страницы (байты от #100 до #00) xEBF5 equ #EBF5 ;#400 буфер для загрузки/записи ; буфер для первых двух секторов раздела MFS (каталога подразделов) ; буфер для таблицы секторов пользователя xEFF5 equ #EFF5 ;#200 буфер для чтения сектора с винчестера xF1F5 xF6C0 equ #F6C0 ;#100 программа анализатора xF7C0 equ #F7C0 ;шрифт 2048 ;переменные код 4 ;переменные дисковой BIOS xFFC0 equ #FFC0 ;+00 1 MFM максимальное число секторов на дорожке для сектора 128 xFFC1 equ #FFC1 ;+01 1 MFM максимальное число секторов на дорожке для сектора 256 xFFC2 equ #FFC2 ;+02 1 MFM максимальное число секторов на дорожке для сектора 512 xFFC3 equ #FFC3 ;+03 1 MFM максимальное число секторов на дорожке для сектора 1024 xFFC4 equ #FFC4 ;+04 1 FM максимальное число секторов на дорожке для сектора 128 xFFC5 equ #FFC5 ;+05 1 FM максимальное число секторов на дорожке для сектора 256 xFFC6 equ #FFC6 ;+06 1 FM максимальное число секторов на дорожке для сектора 512 xFFC7 equ #FFC7 ;+07 1 FM максимальное число секторов на дорожке для сектора 1024 xFFC8 equ #FFC8 ; 2 адрес таблицы с количеством секторов на дорожке xFFCA equ #FFCA ;+0A 1 номер текущего дисковода: 0 - дисковода А, 1 - В xFFCB equ #FFCB ;+0B 1 количество попыток считывания при ошибке, начальное значение 3 xFFCC equ #FFCC ;+0C 1 коды, определяющие тип дисковода (спецификацию) А ; =#FF - еще не инициализирован??? ; =#E0 - если подключен образ диска (без защиты от записи) ; =#C0/#00 - для реальных дисководов A-B/C-D ; 0-1, -время перемещения на шаг ; 1, ; 4, ; 5,-0/1 образ не подключен/подключен ; 6,=0/1 дисковод на 40/80 дорожек ; 7,=0/1 односторонний/двустронний дисковод xFFCD equ #FFCD ;+0D 1 коды, определяющие тип дисковода (спецификацию) B xFFCE equ #FFCE ;+0E 1 коды, определяющие тип дисковода (спецификацию) C xFFCF equ #FFCF ;+0F 1 коды, определяющие тип дисковода (спецификацию) D xFFD0 equ #FFD0 ;+10 1 коды, определяющие тип дискеты в дисководе А ; 0-1,=00/01/10/11 размер сектора в байтах 128/256/512/1024 ; 2,=1 диск 40 работает на дисководе 80 ; 5,=0/1 40/80 дорожек на диске ; 6,=0/1 метод записи FM/MFM ; 7,=0/1 односторонняя/двустронняя дискета xFFD1 equ #FFD1 ;+11 1 код, определяющий тип дискеты в дисководе В xFFD2 equ #FFD2 ;+12 1 код, определяющий тип дискеты в дисководе C xFFD3 equ #FFD2 ;+13 1 код, определяющий тип дискеты в дисководе D xFFD4 equ #FFD4 ;+14 1 текущий номер дорожки для дисковода A xFFD5 equ #FFD5 ;+15 1 текущий номер дорожки для дисковода B xFFD6 equ #FFD6 ;+16 1 текущий номер дорожки для дисковода C xFFD7 equ #FFD7 ;+17 1 текущий номер дорожки для дисковода D xFFD8 equ #FFD8 ;+18 1 код time-out для дисковода А xFFD9 equ #FFD9 ;+19 1 код time-out для дисковода В xFFDA equ #FFDA ;+1A 1 код time-out для дисковода C xFFDB equ #FFDB ;+1B 1 код time-out для дисковода D xFFDC equ #FFDC ;+1C 0,=0 при вызове функций #00-#13 R8DOS ; 4,=0 после завершения функций #00..#13 R8DOS ; =1 текущий диск инициализирован ; головка на заданной дорожке ; =1/0 головка на нижней/верхней стороне диска ; 5,=1/0 работа с дисководами монитора/пользователя ; 6,=0 при инициализации ; 7,=1 к текущему дисководу подключен образ xFFDD equ #FFDD ;+1D 1 код ошибки дискового интерпретатора ; =#FF при вызове функций #00-#13 R8DOS ; =#01 нет диска в дисководе ; =#02 попытка записи на защищенную дискету ; =#03 нажата Break ; =#04 ошибка при чтении или записи сектора функциями 5 или 6 ; =#05 ошибка позицирования (не соответствует номер дорожки) ; =#06 ошибка позицирования (не считался адресной маркер дорожки/сектора) ; =#07 неверный номер сектора ; =#08 ошибка позицирования, не соответствие типов (попытка использовать 80 дорожечный диск на 40 дорожечном дисководе) ; ошибка позицирования, не соответствие типов (попытка использовать двустронний диск на одностороннем дисководе) ; =#09 неформатированная дискета (функции 7, 8) ; =#10 дискета не соответствует формату TR - DOS по физическим параметрам: размер сектора, плотность записи либо нет кода идентификатора - 10h (функция 8) ; =#11 несовпадение кода типа дискеты TR - DOS реальному формату ; =#12 не открыт рабочий буфер (функция 8) ; =#14 были ошибки при чтении/записи дорожки (функции 12, 13) ; =#21 ошибка образа диска ; =#22 сектор за пределами образа диска ; =#3F дискета не соответствует формату TR - DOS по физическим параметрам: размер сектора, плотность записи либо нет кода идентификатора ; =#45 неверный путь ; =#46 конец файла ; =#48 файл не найден ; =#49 попытка записи после конца файла ; =#4A попытка чтения из файла открытого на запись ; попытка записи в файл открытого на чтение ; =#50 HDD не вышел в готовность ; =#55 ошибка заголовка файла zs-snap ; =#56 нет раздела MFS/винчестер не найден ; =#57 не прочитался сектор идентификации ; =#57 ошибки при чтении с HDD ; =#58 ошибка в секторе идентификации ; =#61 HDD не вышел в готовность к принятию команды ; =#62 HDD не вышел в готовность к передаче данных ; =#63 раздел MFS не найден ; =#66 путь не найден ; =#67 к дисководу образ не примонтирован ; =#FD размер сектора не соответствует (для образа диска) xFFDE equ #FFDE ;2 адрес стэка при вызове функций #00-#13 R8DOS xFFE0 equ #FFE0 ;1 количество секторов на дорожке xFFE1 equ #FFE1 ;1 =#80/#A0 чтение/запись группы секторов xFFE2 equ #FFE2 ;2 адрес в памяти для чтения/записи группы секторов ; текущий адрес записи при формировании таблицы секторов на дискете xFFE4 equ #FFE4 ;2 начальные дорожка и сектор для чтения/записи группы секторов ; текущий адрес в записи при формировании таблицы секторов на дискете xFFE6 equ #FFE6 ;1 количество секторов для чтения/записи ; код при формировании таблицы секторов на дискете xFFE7 equ #FFE7 ;2 адрес рабочего буфера для функции 8 xFFE9 equ #FFE9 ;6 буфер для чтения заголовка сектора ; +0 номер дорожки ; +1 номер стороны ; +2 номер сектора ; +3 длина сектора 0/1/2/3 ; +4/5 констрольный код xFFED equ #FFED ;2 размер сектора в байтах xFFEF equ #FFEF ;1 ret для вызова п/п опроса Break из rom 5 ;1 код последней команды ВГ93 ;1 для временного сохранения регистра A при вызове функции R8DOS xFFF0 equ #FFF0 ;2 адрес рабочего буфера для функции 8 ;x /* окно пользователя: +00 координата Y курсора в окне +01 координата X курсора в окне +02 координата Y начала окна (в знакоместах) +03 координата X начала окна (в знакоместах) +04 высота окна в знакоместах +05 ширина окна в знакоместах +06 цифровые атрибуты окна +07 системные атрибуты окна: 7-6,??? 5 Запрет вывода, все выводимые символы игнорируются 4 Произвольный формат, по достижению правого края окна будут автоматически выполнены команды перевода строки и возврат каретки 3 Выполнять автоматический возврат каретки при приходе символа перевода строки 2 Выполнять автоматический перевод строки при приходе символа возврат каретки 1 Изменять атрибуты при выводе каждого символа (в противном случае атрибуты устанавливаются только во время очистки окна) 0 Не выводить символ курсора +08 5-3, номер рамки 7,=0 нет рамки вокруг окна +09 атрибуты рамки +0A размер символов в пикселях 6/8 +0B размер окна в символах. Для символов в 8 точек этот размер совпадает с шириной окна. Если размер символа 6 точек, то перед инициализацией (очисткой) необходимо рассчитать размер окна и поместить в этот байт. +0C код символа курсора. Код с этим символом будет выводиться вместе, отмечая положение курсора, если сброшен 0 бит в системных атрибутах окна +0D 1,=0/1 режим вставки/замены при вводе строки */ /* точки останова (ловушки) +00 1,=1 ловушка задана но не активна 7,=0 ловушка не задана +01 логический номер страницы, где стоит ловушка +02/03 адрес ловушки +03 +04 состояние памяти пользователя по адресу ловушки +05/06 +07/08 адрес +09 +0A */ /*дескриптор файла: fcb +#00 8 имя файла +#08 1 тип файла +#09 2 при типе C стартовый адрес, при типе B длина бейсик-программы +#0B 2 длина файла +#0D 1 объем файла в секторах +#0E 1 номер первого сектора файла +#0F 1 номер первой дорожки файла +#10 +#13 2 указатель в файле +#15 2 адрес буфера dma +#17 1 b - способ открытия 0-1,=11 файл для модификации 0,=1 файл для чтения 1,=1 файл для записи 2,=1 обмен целыми секторами "физический" файл (если сброшен - обмен будет вестись байтами "логический" файл) 7,=1 файл был изменен, но не сохранен +#18 1 номер текущего дисковода +#19 1 номер файла на диске +#1A 1 кол-во секторов для чтения/записи +#1B 1 максимальный объем файла в секторах */ /* Формат таблицы расположения секторов. +0 Идентификационный байт #00 - информация о секторе достоверна #FF - информация о секторе не достоверна (сбойный сектор) #FE - конец таблицы секторов #FD и #FC - см. функцию 12 +1 Физический номер дорожки (0:х) +2 Номер стороны (0/1) +3 Номер сектора (1:х) +4 Код длины сектора 00 - 128 01 - 256 02 - 512 03 - 1024 */ /* описатель дисковода (для примонтированных образов) +00 =#00 ничего не подмонтировано =#01 что-то подмонтировано */ /* описатель подраздела раздела MFS +00 0-2,=nnn тип подраздела 7,=1 при печати типа подраздела перед ним печатать "*" +01 4 смещение первого сектора подраздела +05 +06 размер подраздела +0A 6 имя подраздела */ /* описатель подраздела MFS/ +00 0-2,=nnn тип подраздела 7,=1 при печати типа подраздела перед ним печатать "*" +01 4 смещение первого сектора от начала винчестера (LBA адрес) +05 для образа =#00 +06 2 размер подраздела +08 2 +0A 6 имя подраздела */ /* структура HDD сектор 1 - MBR сектор 3 - данные примонтированных образов */ /* структура раздела MFS 2 сектора каталог подразделов n подраздел n подраздел n подраздел структура подраздела MFS 2 сектора каталог образов дисков 501 секторов на каждый образ (1й сектор пустой) */ /* сектор 3. примонтированне разделы/образы +#00 1 тип подраздела/образа (для образа =#01) =#00 ничего не примонтировано +#01 4 смещение первого сектора от начала винчестера (LBA адрес) +#05 1 тип подраздела/образа (для образа =#01) +#06 4 размер подраздела/образа +#0A 6 имя подраздела +#10 6 если это подраздел, то имя подраздела 6 если это образ, то имя образа */ /* Формат таблицы расположения секторов. +0 Идентификационный байт =#00 - информация о секторе достоверна =#FF - информация о секторе не достоверна (сбойный сектор) =#FE - конец таблицы секторов =#FD/#FC - см. функцию 12 +1 Физический номер дорожки (0..х) +2 Номер стороны (0/1) +3 Номер сектора (1..х) +4 Код длины сектора =#00 - 128 =#01 - 256 =#02 - 512 =#03 - 1024 */ /* формат заголовка zs-snap +#00 =#4D/#41 без компрессии/с компрессией +#01 =#33 сигнатура с загрузкой регистров AY =#31 сигнатура без загрузки регистров AY +#02 (xDD69) 2 адрес текущей ячейки в дампе памяти +#04 (xDD6B) 2 адрес возврата из монитора/ pc программы пользователя +#06 (xDD6D) 2 указатель вершины стэка программы пользователя, с учетом 11 байт уже сохраненных на стэке +#08 (xDD6F) 2 регистр ix +#0A (xDD71) 2 регистр iy +#0C (xDD73) 2 регистр hl +#0E (xDD75) 2 регистр de +#10 (xDD77) 2 регистр bc +#12 (xDD79) 2 регистр hl' +#14 (xDD7B) 2 регистр de' +#16 (xDD7D) 2 регистр bc' +#18 (xDD7F) 2 регистр af +#1A (xDD81) 2 регистр af' +#1C (xDD83) 2 регистр r и флаг IFFF2 +#1E (xDD85) 1 регистр i +#1F (xDD86) 1 номер rom откуда зашли +#20 (xE02D) 1 переменная =iy+#19 +#21 =#00/#01 режим прерываний im 2/im 1 +#22 цвет paper #5800 (для установки бордюра) +#23 содержимое регистра 7 AY +#24 состояние порта #7FFD +#25 состояние порта #1FFD +#26 регистр #00 ay +#27 регистр #01 ay +#28 регистр #02 ay +#29 регистр #03 ay +#2A регистр #04 ay +#2B регистр #05 ay +#2C регистр #06 ay +#2D регистр #08 ay +#2E регистр #09 ay +#2F регистр #0A ay +#30 регистр #0B ay +#31 регистр #0C ay +#32 регистр #0D ay +#33..+#3F не используется при записи без компрессии +#40 битовая карта параграфов страниц по 8 байт на страницу последовательность соответствует порядку записи страниц если бит =0 параграф пустой (не сохраняется, при загрузке забивается нулями) при записи с запаковкой страниц +#40 размер запакованных страниц по 8 байт на страницу +0 количество байт в последнем секторе страницы (=#00 - 256 байт) +1 количество секторов занимаемых страницей +2..+7 не используется +#B0..+#FF не используется порядок сохранения страниц: для 48k режима ram #02 ram #05 ram страница включенная при входе в монитор порядок сохранения страниц: для 128-256k режима ram #02 ram #05 ram страница включенная при входе в монитор ram #00-#0F (кроме 8й, 9й и уже сохраненных) */ /* структура программы в анализаторе 2 #mmmm адрес начала следующего слова n #80+"W"+"ORD" 1 #01 2 #nnnn адрес конца слова в словаре (указывает на #00) 2 x2340 (xE024) #????(число) 2 #.... 2 #nnnn адрес конца слова в словаре (указывает на #00) 2 x225D п/п прерывания выполнения слова #0000 конец слова */