Важная информация

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 31

Тема: Рабочие ячейки Монитора 240.7

  1. #1
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,634
    Спасибо Благодарностей отдано 
    392
    Спасибо Благодарностей получено 
    78
    Поблагодарили
    63 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Рабочие ячейки Монитора 240.7

    Для лучшего понимания архитектуры "Океана-240" приходится медитировать и над схемой, и над дизассемблированным наследием. Наковырянное бессистемно складывается на странице http://sensi.org/~tnt23/ok240/index.html, а также будет дублироваться здесь для высокоученых дискуссий.

    Код:
    BFECh - видеорежим (0000vvvv). отображение курсора в монохромном режиме (00000C00), запрет прокрутки в цветном режиме (0000S000)
    BFEDh - позиция курсора (строка BFEDh, столбец BFEEh) (2 байта)
    BFEFh - инверсия цвета переднего плана
    BFF0h - инверсия цвета фона
    BFF1h - вертикальный сдвиг
    BFF2h - кодовая страница (0 - LAT, 1 - RUS, 2 - заглавная латиница 40h..5fh, заглавная кириллица 60h..7fh)
    BFF3h - цвет переднего плана и заднего фона
    BFF4h - длительность звукового сигнала (2 байта)
    BFF6h - частота звукового сигнала (2 байта)
    BFF8h - горизонтальный сдвиг
    BFF9h - ? участвует в процедуре вывода звука через порт E2h
    BFFAh - ? some 16-bit counter
    Последний раз редактировалось tnt23; 09.01.2019 в 09:45.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Master Аватар для L Juriy
    Регистрация
    29.11.2009
    Адрес
    г. Бийск
    Сообщений
    521
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    39
    Поблагодарили
    30 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мои заметки по этому поводу.
    Вложения Вложения
    Микро-80, Радио-86РК, Океан 240, Ириша, Спектрум-48, NEC PC-8201, ЮТ-88(2017) .

  4. #3
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,634
    Спасибо Благодарностей отдано 
    392
    Спасибо Благодарностей получено 
    78
    Поблагодарили
    63 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ячейка BFF9h.


    Инициализируется при холодном старте значением 4, что соответствует младшему разряду трехбитного ЦАП магнитофонного выхода. Используется в единственном месте - в подпрограмме формирования звукового сигнала:


    Код:
    ;-- Beeeeeep:                                                                                                                                                                            
                0x0000e877      2af6bf         ld hl, [0xbff6]             ; BeepDuration ; [0xbff6:2]=0xffff                                                                                
                0x0000e87a      eb             ex de, hl                                                                                                                                     
                0x0000e87b      2af4bf         ld hl, [0xbff4]             ; BeepFreq ; [0xbff4:2]=0xffff                                                                                    
                0x0000e87e      3e36           ld a, 0x36                                                                                                                                    
                0x0000e880      d363           out [0x63], a                                                                                                                                 
                0x0000e882      7d             ld a, l                                                                                                                                       
                0x0000e883      d360           out [0x60], a                                                                                                                                 
                0x0000e885      7c             ld a, h                                                                                                                                       
                0x0000e886      d360           out [0x60], a                                                                                                                                 
                0x0000e888      3af9bf         ld a, [0xbff9]                                                                                               
                0x0000e88b      47             ld b, a                                                                                                                                       
            .-> 0x0000e88c      7a             ld a, d                                                                                                                                       
            :   0x0000e88d      b3             or e                                                                                                                                          
            :   0x0000e88e      c8             ret z                                                                                                                                         
            :   0x0000e88f      1b             dec de                                                                                                                                        
            :   0x0000e890      78             ld a, b                                                                                                                                       
            :   0x0000e891      ee08           xor 0x08                                                                                                                                      
            :   0x0000e893      47             ld b, a                                                                                                                                       
            :   0x0000e894      d3e2           out [0xe2], a                                                                                                                                 
           .--> 0x0000e896      db80           in a, [0x80]

    Зачем это может быть нужно, я пока не пойму. Для вывода звука также и через магнитофонный выход?

  5. #4
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Question

    Тоже пытаюсь понять инженерную мысль сего интересного и замечательного ПК с помощью дизассемблирования его Монитора.

    Вот мои потуги "вскрытия шифра" на данный момент:

    Скрытый текст


    Код:
    ; Монитор ПК "ОКЕАН-240"
    ; Disassembler v2.1 (DSDOS)
    ; 11-19.03.2019 by Denn
    
    mode 3
    cpu  0
    file MON_O240
    
    STACK:EQU 0BFD0h ; вершина стека
    
    B_BOOT:EQU 0D600h ; а/н загрузчика ОС
    
    
    ; *** ПОРТЫ ***
    
    ; Порт клавиатуры, магнитофона и внешнего ПЗУ
      PT_KBRD_A:EQU 40h ; линия A:
    ;                     клавиатура и внешнее ПЗУ
      PT_KBRD_B:EQU 41h ; линия B:
    ;                     B0,B1 - анализ ГО и ГК
    ;                     B2,B3 - вход МГ
    ;                     B4 - подтвержд-е принтера
      PT_KBRD_C:EQU 42h ; линия C:
    ;                     клавиатура и внешнее ПЗУ
      PT_KBRD_M:EQU 43h ; конфигурация порта
    
    
    ; Порт системного таймера (ВИ53)
      PT_CLK_0:EQU 60h ; системный счетчик (RST 4)
      PT_CLK_1:EQU 61h ; тактирование RS-232 (ВВ51)
    ; PT_CLK_2:EQU 62h ; пользовательский (в Мониторе не используется!)
      PT_CLK_3:EQU 63h ; регистр задания режима
    
    
    ; Порт контроллера прерываний (ВН59)
      PT_INT_0:EQU 80h ; 
      PT_INT_1:EQU 81h ; 
    ;         RST0 - системное прерывание
    ;         RST1 - прерывание от клавиатуры
    ;         RST2 - прерывание от RS-232
    ;         RST3 - готовность принтера
    ;         RST4 - прерывание системного таймера
    ;         RST5 - прерывание по питанию
    ;         RST6, RST7 - пользовательские
    
    
    ; Порт RS-232 (ВВ51)
      PT_UART_DAT:EQU 0A0h ; данные
      PT_UART_STT:EQU 0A1h ; команда/статус
    
    
    ; Порт конфигурации и выбора банков ЗУ
    ; (только запись)
      PT_VSCRL:EQU 0C0h ; упр. верт. сдвигом изобр.
      PT_BANKS:EQU 0C1h ; комм. банков ОЗУ и ПЗУ
      PT_HSCRL:EQU 0C2h ; упр. гориз. сдвигом изоб.
      PT_CFG_M:EQU 0C3h ; рег. задания режима (0)
    
    
    ; Порт осн/доп ОЗУ, принтер, цвет, упр. МГ
    ; (только запись)
      PT_PRN_OUT:EQU 0E0h ; выдача инф. на принтер
     PT_SCR_MODE:EQU 0E1h ; режим отображения:
    ;                     B0..B2 - комбин. цветов
    ;                     B3..B5 - задание фона
    ;                     B6 - монохром/цвет
    ;                     B7 - основной/доп. экран
      PT_TAPE_SND:EQU 0E2h ; магнитофон, звук:
    ;                     C0..C2 - запись на МГ
    ;                     C3 - звук (beeper)
    ;                     C4 - строб принтера
    ;                     C5..C7 - дист. управл. МГ
      PT_CFG2_M:EQU 0E3h ; рег-р задания режима (0)
    
    
    ; Порт USER1 (ВВ55)
    
    ; PT_USER1_A:EQU 00h ; линия A
    ; PT_USER1_B:EQU 01h ; линия B
    ; PT_USER1_C:EQU 02h ; линия C
    ; PT_USER1_M:EQU 03h ; задание режима порта
    
    
    ; Порт USER2 (ВВ55)
    
    ; PT_USER2_A:EQU 20h ; линия A
    ; PT_USER2_B:EQU 21h ; линия B
    ; PT_USER2_C:EQU 22h ; линия C
    ; PT_USER2_M:EQU 23h ; задание режима порта
    
    
    ; Системные переменные
    
    MBF00:EQU 0BF00h; буфер (LdSvTAPE)
    
    MBFD8:EQU 0BFD8h; сохр. указателя стека (RST1)
    MBFDC:EQU 0BFDCh; адрес перехода CMD_GOTO
    MBFDD:EQU 0BFDDh; только запись! RST1 и GOTO
    MBFDA:EQU 0BFDAh; сохранение HL (RST1/GOTO)
    MBFDF:EQU 0BFDFh; переменные п/п PRC
    
    MBFE0:EQU 0BFE0h; переменные п/п PRC
    MBFE2:EQU 0BFE2h; используется много где...
    MBFE3:EQU 0BFE3h
    MBFE4:EQU 0BFE4h; один раз на чтение ???
    MBFE5:EQU 0BFE5h; --||--
    MBFE6:EQU 0BFE6h; какая-то переменная ???
    MBFEC:EQU 0BFECh; видеорежим (0000xxxx)
    MBFED:EQU 0BFEDh; позиция курсора по Y
    MBFEE:EQU 0BFEEh; позиция курсора по X
    MBFEF:EQU 0BFEFh; инверсия цвета FG
    
    MBFF0:EQU 0BFF0h; инверсия цвета BG
    MBFF1:EQU 0BFF1h; вертикальный сдвиг
    MBFF2:EQU 0BFF2h; 0-LAT, 1-РУС, 2-???
    MBFF3:EQU 0BFF3h; цвет FG и BG
    WBFF4:EQU 0BFF4h; длительность зв. сигнала
    WBFF6:EQU 0BFF6h; частота зв. сигнала
    MBFF8:EQU 0BFF8h; горизонтальный сдвиг
    MBFF9:EQU 0BFF9h; бит.маска генер. зв. bell
    WBFFA:EQU 0BFFAh; перем. обсл. принтера
    
    
    ORG 0E000h
    
    ; керналь п/п Монитора
    JMP RESET    ; E000h - инициализация (сброс)
    JMP HotSTART ; E003h - горячий старт
    JMP KbdSTAT  ; E006h - состояние клавиатуры
    JMP INKEY    ; E009h - ввод с консоли
    JMP PRINT_C  ; E00Ch - вывод на консоль
    JMP LdUART   ; E00Fh - ввод с УСАПП (ВВ51)
    JMP SvUART   ; E012h - вывод в УСАПП (ВВ51)
    JMP PRN_C    ; E015h - вывод на принтер
    JMP LdDUMP   ; E018h - чтение блока с диска
    JMP SvDUMP   ; E01Bh - запись блока на диск
    JMP LdSECT   ; E01Eh - чтение сектора с диска
    JMP SvSECT   ; E021h - запись сектора на диск
    JMP LdTAPE   ; E024h - чтение с магнитофона
    JMP SvTAPE   ; E027h - запись на магнитофон
    JMP GetTAPE  ; E02Ah - чтение данных с МЛ
    JMP FndBLOK  ; E02Dh - проверка наличия блока
    
    
    RESET:
    ; "Холодный сброс"
      DI
    
    ; инициализация портов
      MVI A,80h
      OUT PT_CFG_M ; C3h
      OUT PT_CFG2_M ; E3h
    ; клавиатура
      MVI A,93h
      OUT PT_KBRD_M ; 43h
    ; принтер, режим цветов, осн/доп ОЗУ, упр. МГ
      MVI A,7Fh ; 0111 1111
      OUT PT_SCR_MODE ; E1h
    ; скролл, банк ЗУ
      MVI A,01h ; 0000 0001
      OUT PT_BANKS ; C1h
    
    ; обнуление области 3F00..40FFh
      MVI B,0
      LXI H,3F00h
      MOV A,H
      ADI 41h
    
    ;$-3
      MOV M,B
      INX H
      CMP H
      JNZ $-3
    
    ; инициализация номера банка и скролла
      MVI A,00h ; 0000 0000
      OUT PT_BANKS ; C1h
      MVI A,07h ; 0000 0111
      OUT PT_HSCRL ; C2h
      STA MBFF8
    
    ; инициализация переменных
      XRA A ; [A]=00h
      STA MBFEC
      STA MBFF1
      STA MBFF0
    
      CMA ; [A]=FFh
      STA MBFEF
    
      MVI A,03h
      STA MBFF3
    ; 
      MVI A,43h ; 0100 0011
      OUT PT_SCR_MODE ; E1h
      MVI A,04h ; 0000 0100
      OUT PT_TAPE_SND ; E2h
      STA MBFF9
    ; инициализация частота/длит. bell
      LXI H,0400h
      SHLD WBFF4
      LXI H,0140h
      SHLD WBFF6
    
    ; инициализация УСАПП (ВВ51)
      MVI A,0CEh ; 1100 1110
      OUT PT_UART_STT ; A1h
      MVI A,25h  ; 0010 0101
      OUT PT_UART_STT ; A1h
    
    ; инициализация таймера (ВИ53)
      MVI A,76h ; 0111 0110
      OUT PT_CLK_3 ; 63h
      MVI A,14h ; 0001 0100
      OUT PT_CLK_1 ; 61h
      XRA A ;     0000 0000
      OUT PT_CLK_1 ; 61h
    
    ; инициализация контроллера прерываний (ВН59)
      MVI A,12h ; 0001 0010
      OUT PT_INT_0 ; 80h
      XRA A ;     0000 0000
      OUT PT_INT_1 ; 81h
      CMA ;       1111 1111
      OUT PT_INT_1 ; 81h
      MVI A,20h ; 0010 0000
      OUT PT_INT_0 ; 80h
      MVI A,0Ah ; 0000 1010
      OUT PT_INT_0 ; 80h
    
    ; инициализация клавиатуры
      MVI A,80h
      OUT PT_KBRD_C ; 42h
      NOP
      NOP
      XRA A
      OUT PT_KBRD_C ; 42h
    
    ; настройка стека
      LXI SP,STACK
      CALL ME75B
    
    ; инициализация переменной стека ???
      LXI H,0BFC0h
      SHLD MBFD8
    
    ; инициализация RST1-перехода
      MVI A,0C3h
      STA 0008h
      LXI H,CallRST1
      SHLD 0009h
    
    ; подача звукового сигнала
      MVI C,7
      CALL PRINT_C
    
    ; ветвление по наличию загрузчика ОС (C3@D600h)
      LDA B_BOOT ; 0D600h
      CPI 0C3h ; код команды JMP addr
      JZ B_BOOT
    
    ; вывод заставки Монитора
      LXI H,T_HEADER
    
    ;$-10
      MOV C,M
      MOV A,C
      ORA A
      JZ HotSTART
      CALL PRINT_C
      INX H
      JMP $-10
    
    T_HEADER:DB 13,10,'240/7 MONITOR',13,10,0
    
    
    START0:
      LXI H,STACK
      SPHL
      CALL ME2D7
      INX H
    
    HotSTART:
    ; *** Горячий старт ***
      LXI H,STACK
      SPHL
      DI
      CALL ME2CE
      CALL ME2D7
      MVI L,0CDh
      INX D
      POP PSW
      CPI 13
      JZ HotSTART
    
    ; обработка команд Монитора
      LXI H,CmdTABLE
      MVI C,11
    
    ;$-8
      CMP M
      JZ _CMD_EXEC
      INX H
      INX H
      INX H
      DCR C
      JNZ $-8
      JMP START0
    
    _CMD_EXEC:
    ; взятие адреса п/п из таблицы переходов
      INX H
      MOV A,M
      INX H
      MOV H,M
      MOV L,A
      LXI D,HotSTART
      PUSH D
      MVI C,2
      PCHL
    
    
    CmdTABLE:
    ; Таблица переходов команд Монитора
    DB 'D'
    DW CMD_DUMP
    
    DB 'F'
    DW CMD_FILL
    
    DB 'G'
    DW CMD_GOTO
    
    DB 'L'
    DW CMD_LOAD
    
    DB 'M'
    DW CMD_MOVE
    
    DB 'R'
    DW CMD_READ
    
    DB 'S'
    DW CMD_SRCH
    
    DB 'W'
    DW CMD_WRITE
    
    DB 'X'
    DW CMD_XREG
    
    DB 'B'
    DW CMD_BLOK
    
    DB 'A'
    DW CMD_ABLK
    
    
    ; *** Команды монитора ***
    
    CMD_BLOK:
    ; Команда 'B'
    DCR C
    CALL InpADDR
    POP D
    LXI H,0100h
    CALL LdSECT
    RET
    
    
    CMD_ABLK:
    ; Команда 'A'
    DCR C
    CALL InpADDR
    POP D
    LXI H,0100h
    CALL SvSECT
    RET
    
    
    CMD_DUMP:
    ; Команда 'D' -  вывод дампа ОЗУ
    DCR C
    CALL InpADDR
    POP H
    LXI D,007Fh
    XCHG
    DAD D
    XCHG
    
    CMD_DUMP1:
    CALL ME2CE
    CALL PrSPACE
    CALL PRINT[HL]
    
    CMD_DUMP2:
    CALL PrSPACE
    MOV A,M
    CALL PRINT_BYTE
    CALL DecHD0
    RC
    MOV A,L
    ANI 07h
    JNZ CMD_DUMP2
    JMP CMD_DUMP1
    
    
    CMD_FILL:
    ; Команда 'F'
      INR C
      CALL InpADDR
      POP B
      POP D
      POP H
    
    ;$-4
      MOV M,C
      CALL DecHD0
      JNC $-4
      RET
    
    
    CMD_MOVE:
    ; Команда 'M'
      INR C
      CALL InpADDR
      POP B
      POP D
      POP H
    
    ;$-6
      MOV A,M
      STAX B
      INX B
      CALL DecHD0
      JNC $-6
      RET
    
    
    CMD_LOAD:
    ; Команда 'L'
      CALL TypeDIG
      JNC START0
      CALL ME2CE
    
    CMD_LOAD1:
      CALL LdUART
      CPI 3Ah
      JNZ CMD_LOAD1
      XRA A
      MOV D,A
      CALL LwUART
      JZ CMD_LOAD2
      MOV E,A
      CALL LwUART
      MOV H,A
      CALL LwUART
      MOV L,A
      CALL LwUART
      MOV C,E
    
    ;$-6
      CALL LwUART
      MOV M,A
      INX H
      DCR E
      JNZ $-6
      CALL LwUART
      JNZ START0
      JMP CMD_LOAD1
    
    CMD_LOAD2:
      CALL LwUART
      CALL LwUART
      CALL LwUART
      CALL LwUART
      JNZ START0
      RET
    
    
    CMD_SRCH:
    ; Команда 'S'
      CALL InpDIG
      RC
    
    CMD_SRCH1:
      MOV A,M
      CALL PRINT_BYTE
      CALL ME2D7
      DCR L
      CALL TypeDIG
      RC
      JZ CMD_SRCH2
      XCHG
      CALL InpDIG1
      XCHG
      MOV M,E
      RC
    
    CMD_SRCH2:
      INX H
      JMP CMD_SRCH1
    
    
    CMD_XREG:
    ; Команда 'X'
      LXI H,TAB_REGS
      CALL TypeDIG
      JC CMD_XREG3
      MVI C,9
    
    ;$-8
      CMP M
      JZ CMD_XREG1
      INX H
      INX H
      INX H
      DCR C
      JNZ $-8
      JMP START0
    
    CMD_XREG1:
      CALL PrSPACE
      CALL CMD_XREG5
      CALL ME2D7
      DCR L
      CALL TypeDIG
      RC
      JZ START0
      PUSH B
      CALL InpDIG1
      MOV A,L
      STAX D
      POP PSW
      ORA A
      JM CMD_XREG2
      INX D
      MOV A,H
      STAX D
    
    CMD_XREG2:
      CALL ME2CE
      RET
    
    CMD_XREG3:
      CALL ME2CE
    
    CMD_XREG4:
      XRA A
      ORA M
      RM
      CPI 4Dh
      CZ ME2CE
      CALL PrSPACE
      MOV C,M
      CALL ME2FA
      CALL ME2D7
      DCR A
      CALL CMD_XREG5
      JMP CMD_XREG4
    
    
    ; Таблица регистров для команды 'X'
    
    TAB_REGS:
    DB 'A',0D7h,00h,'B',0D3h,00h,'C',0D2h,00h
    DB 'D',0D1h,00h,'E',0D0h,00h,'F',0D6h,00h
    DB 'M',0DBh,01h,'P',0DEh,01h,'S',0D9h,01h
    DB 0FFh
    
    
    KbdSTAT:
    ; Проверка состояния клавиатуры [E006h]
    ; O: [A]=00h - не нажато, FFh - нажато
      IN PT_INT_0 ; 80h
      NOP
      ANI 02h ; 0000 0010
      MVI A,0
      RZ
      CMA
      RET
    
    
    LdUART:
    ; Ввод с УСАПП [E00Fh]
    ; O: [A]=считанный байт
      IN PT_UART_STT ; A1h
      ANI 02h ; 0000 0010
      JZ LdUART
      IN PT_UART_DAT ; A0h
      ANI 7Fh
      RET
    
    
    INKEY:
    ; Ввод символа с клавиатуры [E009h]
      CALL KbdSTAT
      ORA A
      JZ INKEY
      IN PT_KBRD_A ; 40h
      ANI 7Fh
      PUSH PSW
      MVI A,80h
      OUT PT_KBRD_C ; 42h
      XRA A
      OUT PT_KBRD_C ; 42h
      POP PSW
      RET
    
    
    SvUART:
    ; Вывод в УСАПП [E012h]
    ; O: [C]-записываемый байт
      IN PT_UART_STT ; A1h
      ANI 01h ; 0000 0001
      JZ SvUART
      MOV A,C
      OUT PT_UART_DAT ; A0h
      RET
    
    
    IfTYPE:
      CALL KbdSTAT
      ORA A
      RZ
      JMP TYPE
    
    
    ME2CE:
      CALL ME2D7
      DCR C
      CALL ME2D7
      LDAX B
      RET
    
    
    ME2D7:
      XTHL
      MOV C,M
      INX H
      XTHL
      JMP ME2FA
    
    
    PRN_C:
    ; Вывод символа на принтер [E015h]
    ; I: [C]=выводимый символ
    ;$-4
      IN PT_INT_0 ; 80h
      ANI 08h ; 0000 1000
      JZ $-4
      MOV A,C
      OUT PT_PRN_OUT ; E0h
      MVI A,14h
      OUT PT_TAPE_SND ; E2h
    
    ;$-4
      IN PT_INT_0 ; 80h
      ANI 08h ; 0000 1000
      JNZ $-4
      MVI A,4
      OUT PT_TAPE_SND ; E2h
      RET
    
    
    PrSPACE:
    MVI C,' '
    
    ME2FA:
    CALL IfTYPE
    
    PRINT_C:
    ; Вывод символа на экран [E00Ch]
    ; I: [C]=код символа
    PUSH H
    PUSH D
    PUSH B
    CALL PRC
    POP B
    POP D
    POP H
    RET
    
    PRC:
      LXI D,MBFDF
      LDAX D
      DCR A
      ORA A
      JM PRC_9
      JNZ PRC_15
      INX D
      LDAX D
      ORA A
      JP PRC_1
      MOV A,C
      ANI 0Fh
      STAX D
      INX D
      XRA A
      STAX D
      RET
    
    PRC_1:
      LXI H,MBFE0
      MOV B,M
      INX H
      MOV A,M
      INR A
      MOV M,A
      MOV E,A
      MVI D,0
      DAD D
      MOV M,C
      LXI H,ME39D
      MOV E,B
      DAD D
      CMP M
      RM
      LDA MBFE0
      ANI 0Fh
      CPI 0Fh
      JZ PRC_2
      CPI 4
      JP PRC_6
    
    PRC_2:
      LXI H,MBFE2
      MOV D,H
      MOV E,L
      MVI C,4
    
    PRC_3:
      MOV A,M
      CPI '9'+1
      JM PRC_4
      SUI 7
    
    PRC_4:
      ANI 0Fh
      ADD A
      ADD A
      ADD A
      ADD A
      MOV B,A
      INX H
      MOV A,M
      CPI '9'+1
      JM PRC_5
      SUI 7
    
    PRC_5:
      ANI 0Fh
      ORA B
      INX H
      STAX D
      INX D
      DCR C
      JNZ PRC_3
    
    PRC_6:
      LXI H,MBFE0
      MOV A,M
      ANI 0Fh
      MOV E,A
      DCX H
      ORA A
      MVI M,2
      RZ
      MVI D,0
      MOV M,D
      DCX D
      LXI H,TAB_PRC
      DAD D
      DAD D
      MOV E,M
      INX H
      MOV D,M
      XCHG
      CPI 4
      JP PRC_7
      LDA MBFEC
      ANI 07h ; 0000 0111
      JNZ PRC_8
    
    PRC_7:
      LXI D,PRC_8
      PUSH D
      PCHL
    
    PRC_8:
      XRA A
      STA MBFDF
      RET
    
    
    ME39D:
    ; Константы п/п "PRC"
    DB 4,8,8,4,1,2
    DDB 1,9
    DB 8
    
    
    TAB_PRC:
    ; Таблица переходов, подпрограммы 1..15
    DW PP_01
    DW PP_02
    DW PP_03
    DW PP_04
    DW PP_05
    DW PP_06
    DW PP_07
    DW PP_08
    DW PP_09
    DW PP_10
    DW PP_11
    DW PP_12
    DW PP_13
    DW PP_14
    DW PP_15
    
    PP_11:
    PP_12:
    PP_13:
    PP_14:
    RET
    
    
    PP_15:
      LXI D,MBFE2
      LDAX D
      MOV H,A
      INX D
      LDAX D
      MOV L,A
      SHLD WBFF4
      INX D
      LDAX D
      MOV H,A
      INX D
      LDAX D
      MOV L,A
      SHLD WBFF6
      RET
    
    
    PP_09:
      POP D
      XRA A
      STA MBFDF
      LDA MBFEC
      RET
    
    
    PP_10:
      LDA MBFEC
      ANI 07h ; 0000 0111
      RNZ
      LXI D,30FFh
      CALL ME413
      DCR E
      MVI D,0F0h
    
    PP_10_1:
      CALL KbdSTAT
      ORA A
      JZ PP_10_2
      CALL INKEY
      CPI 1Bh ; [Esc]
      RZ
    
    PP_10_2:
      CALL ME413
      DCR E
      JNZ PP_10_1
      MVI D,0E0h
      CALL ME413
      RET
    
    
    ME413:
    ; Подпрограмма 
      LXI H,ME482
      CALL PRN_MSG
      LXI H,4
      SHLD WBFFA
      MVI B,0
    
    _ME421:
      MVI C,0
      CALL ME48D
      ANA D
      CNZ ME460
      LHLD WBFFA
      INX H
      SHLD WBFFA
      MVI C,1
      CALL ME48D
      ANA D
      CNZ ME460
      LHLD WBFFA
      INX H
      SHLD WBFFA
      INR B
      MOV A,B
      CPI 0ECh
      JC _ME421
      LXI H,ME47E
      CALL PRN_MSG
      RET
    
    
    PRN_MSG:
    ; Подпрограмма вывода данных на принтер
      PUSH B
    
    PRN_MSG1:
      MOV A,M
      CPI 1Ah ; признак конца данных
      JZ PRN_MSG2
      MOV C,A
      CALL PRN_C
      INX H
      JMP PRN_MSG1
    
    PRN_MSG2:
      POP B
      RET
    
    
    ME460:
    ; Подпрограмма 
      PUSH PSW
      LXI H,ME487
      CALL PRN_MSG
      LHLD WBFFA
      MOV C,H
      CALL PRN_C
      MOV C,L
      CALL PRN_C
      LXI H,ME48A
      CALL PRN_MSG
      POP PSW
      MOV C,A
      CALL PRN_C
      RET
    
    
    ; управляющие коды принтера
    
    ME47E:DB 1Bh,5Ah,2,1Ah
    
    ME482:DB 1Bh,58h,0,0,1Ah
    
    ME487:DB 1Bh,58h,1Ah
    
    ME48A:DB 1Bh,4Fh,1Ah
    
    
    ME48D:
    ; Подпрограмма 
      LDA MBFF1
      ADD B
      ADI 13h
      MOV L,A
      PUSH D
      PUSH B
      MOV A,E
      ANI 07h ; 0000 0111
      MOV B,A
      MOV A,E
      RAR
      RAR
      RAR 
      ANI 1Fh ; 0001 1111
      ADD A
      ADI 40h
      MOV H,A
      MOV A,C
      ANI 01h ; 0000 0001
      ADD H
      MOV H,A
      MVI A,1
      OUT PT_BANKS ; C1h
      MOV E,M
      INR H
      INR H
      MOV D,M
      MVI A,0
      OUT PT_BANKS ; C1h
    
    ;$-10
      DCR B
      JM _ME4C2
      MOV A,D
      RAR
      MOV D,A
      MOV A,E
      RAR
      MOV E,A
      JMP $-10
    
    _ME4C2:
      MOV A,E
      MVI D,0
      RAR
      JNC $+5
      MVI D,30h
    ;$+5
      RAR
      JNC _ME4D3
      MOV A,D
      ORI 0C0h
      MOV D,A
    
    _ME4D3:
      MOV A,D
      POP B
      POP D
      RET
    
    
    PP_08:
    ; Подпрограмма 
      LDA MBFE2
      ANI 3Fh
      STA MBFF3
      MOV B,A
      LDA MBFEC
      ANI 07h ; 0000 0111
      MVI A,0
      JNZ $+5
      MVI A,40h
    ;$+5
      ORA B
      OUT PT_SCR_MODE ; E1h
      RET
    
    
    PP_07:
      LDA MBFE2
      ANI 03h ; 0000 0011
      STA MBFF2
      RET
    
    
    ME4F9:
    ; Подпрограмма 
      MOV L,A
      MOV E,A
      XRA A
      MOV D,A
      MOV H,A
      DAD H
      DAD D
      DAD H
      DAD D
      MOV A,E
      CPI '@' ; 40h
      JM ME51D
      LDA MBFF2
      ORA A
      JZ ME51D
      DCR A
      JZ _ME519
      MOV A,E
      CPI '`' ; 60h
      JM ME51D
    
    _ME519:
      LXI D,01C0h
      DAD D
    
    ME51D:
      LXI D,0EB28h
      DAD D
      RET
    
    PRC_9:
      MOV A,C
      ANI 7Fh ; 0111 1111
      CPI ' '
      JM PRC_10
      CALL ME4F9
      XCHG
      LHLD MBFED
      LDA MBFF1
      ADD L
      MOV L,A
      MOV A,H
      ADI 40h
      MOV H,A
      MVI C,7
      LDA MBFEC
      ANI 07h ; 0000 0111
      JNZ _ME63F
      MVI A,1
      OUT PT_BANKS ; C1h
      XCHG
      XRA A
      STAX D
      INR D
      STAX D
      DCR D
      INR E
    
    ;$-17
      LDA MBFEF
      ANA M
      ADD A
      STAX D
      INR D
      LDA MBFF0
      ANA M
      ADD A
      STAX D
      DCR D
      INX H
      INR E
      DCR C
      JNZ $-17
    
      MVI A,0
      OUT PT_BANKS ; C1h
      LXI H,ME75B
      PUSH H
      LXI H,MBFED
      LDA MBFEC
      ANI 08h ; 0000 1000
      JNZ IF_RIGHT
    
    PRC_RIGHT:
      INX H
      MOV A,M
      ADI 2
      ANI 3Fh ; 0011 1111
      MOV M,A
      DCX H
      RNZ
    
    PRC_DOWN:
      MOV A,M
      ADI 0Eh
      CPI 0FAh
      JNC _ME589
      MOV M,A
      RET
    
    _ME589:
      LDA MBFF1
      ADI 0Eh
      OUT PT_VSCRL ; C0h
      STA MBFF1
      LXI H,40F0h
      ADD L
      MOV L,A
      DCR L
      DCR L
      MOV C,H
      MVI A,1
      OUT PT_BANKS ; C1h
      XRA A
      LXI D,1240h
    
    _ME5A3:
      MOV H,C
      MOV B,E
    ;$-3
      MOV M,A
      INR H
      DCR B
      JNZ $-3
      INR L
      DCR D
      JNZ _ME5A3
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    
    PRC_LEFT:
      INX H
      MOV A,M
      SUI 2
      ANI 3Fh ; 0011 1111
      MOV M,A
      CPI 3Eh
      DCX H
      RNZ
    
    PRC_UP:
      MOV A,M
      SUI 0Eh
      JNC $+5
      MVI A,0EEh
    ;$+5
      MOV M,A
      RET
    
    
    PRC_TAB:
      INX H
      MOV A,M
      ADI 16
      ANI 30h
      MOV M,A
      DCX H
      RNZ
      JMP PRC_DOWN
    
    
    IF_TAB:
      INX H
      MOV A,M
      ADI 16
      ANI 30h
      MOV M,A
      DCX H
      RNZ
      JMP IF_PS
    
    
    IF_RIGHT:
      INX H
      MOV A,M
      ADI 2
      ANI 3Fh
      MOV M,A
      DCX H
      RNZ
    
    IF_PS:
      MOV A,M
      ADI 0Ch
      CPI 10h
      JNC _ME5F5
      MOV M,A
      RET
    
    _ME5F5:
      LDA MBFF1
      MOV L,A
      ADI 0Ch
      MOV E,A
      MVI C,8
      MVI A,1
      OUT PT_BANKS ; C1h
    
    _ME602:
      MVI B,40h
      MVI H,40h
      MOV D,H
    
    ;$-5
      LDAX D
      MOV M,A
      INR H
      INR D
      DCR B
      JNZ $-5
      INR L
      INR E
      DCR C
      JNZ _ME602
      MVI C,0Ch
      LDA MBFF1
      ADI 8
      MOV E,A
    
    _ME61D:
      MVI B,40h
      MVI D,40h
      XRA A
    
    ;$-3
      STAX D
      INR D
      DCR B
      JNZ $-3
      INR E
      DCR C
      JNZ _ME61D
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    
    IF_LEFT:
      INX H
      MOV A,M
      ORA A
      DCX H
      RZ
      INX H
      SUI 2
      ANI 3Fh ; 0011 1111
      MOV M,A
      DCX H
      RET
    
    
    _ME63F:
      LDA MBFEC
      ANI 2
      JNZ _ME6C1
      MVI A,1
      OUT PT_BANKS ; C1h
      XCHG
      XRA A
      STAX D
      INR E
    
    ;$-6
      MOV A,M
      ADD A
      STAX D
      INX H
      INR E
      DCR C
      JNZ $-6
      MVI A,0
      OUT PT_BANKS ; C1h
      LXI H,ME75B
      PUSH H
      LXI H,MBFED
    
    MK_RIGHT:
      INX H
      MOV A,M
      ADI 1
      ANI 3Fh
      MOV M,A
      DCX H
      RNZ
    
    MK_DOWN:
      MOV A,M
      ADI 0Bh
      CPI 0FAh
      JNC $+5
      MOV M,A
      RET
    
    ;$+5
      LDA MBFF1
      ADI 0Bh
      OUT PT_VSCRL ; C0h
      STA MBFF1
      LXI H,40F0h
      ADD L
      MOV L,A
      MOV C,H
      MVI A,1
      OUT PT_BANKS ; C1h
      XRA A
      LXI D,1040h
    
    _ME68E:
      MOV H,C
      MOV B,E
    
    ;$-3
      MOV M,A
      INR H
      DCR B
      JNZ $-3
      INR L
      DCR D
      JNZ _ME68E
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    
    MK_LEFT:
      INX H
      MOV A,M
      SUI 1
      ANI 3Fh
      MOV M,A
      CPI 3Fh
      DCX H
      RNZ
    
    MK_UP:
      MOV A,M
      SUI 0Bh
      JNC $+5
      MVI A,0F2h
    
    ;$+5
      MOV M,A
      RET
    
    
    MK_TAB:
      INX H
      MOV A,M
      ADI 8
      ANI 38h
      MOV M,A
      DCX H
      RNZ
      JMP MK_DOWN
    
    
    _ME6C1:
      LDA MBFEE
      CPI 40h
      JM _ME6D0
      LXI H,MBFED
      CALL ME75B
      RET
    
    _ME6D0:
      MVI A,1
      OUT PT_BANKS ; C1h
      XCHG
      XRA A
      STAX D
      INR E
    
    ;$-6
      MOV A,M
      ADD A
      STAX D
      INX H
      INR E
      DCR C
      JNZ $-6
    
      MVI A,0
      OUT PT_BANKS ; C1h
      LXI H,ME75B
      PUSH H
      LXI H,MBFED
      INX H
      MOV A,M
      ADI 1
      CPI 40h
      JM $+5
      MVI A,40h
    
    ;$+5
      MOV M,A
      DCX H
      RET
    
    
    PRC_STR:
      LDA MBFEC
      ANI 08h ; 0000 1000
      JNZ IF_STR
      MVI A,7Fh
      OUT PT_SCR_MODE ; E1h
      MVI A,1
      OUT PT_BANKS ; C1h
      LXI D,4000h
      XCHG
      MOV A,H
      ADI 40h
      MVI B,0
    ; обнуление ОЗУ 4000..7FFFh
    ;$-3
      MOV M,B
      INX H
      CMP H
      JNZ $-3
      XCHG
      LDA MBFF3
      MOV B,A
      LDA MBFEC
      ANI 07h ; 0000 0111
      MVI A,0
      JNZ $+5
      MVI A,40h
    ;$+5
      ORA B
      OUT PT_SCR_MODE ; E1h
    
    PRC_HOME:
      XRA A
      NOP
      NOP
      MOV M,A
      INX H
      XRA A
      MOV M,A
      DCX H
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    
    IF_STR:
      LDA MBFF1
      MOV L,A
      MVI C,14h
      MVI A,1
      OUT PT_BANKS ; C1h
    
    IF_STR1:
      MVI H,40h
      MVI B,40h
      XRA A
    
    ;$-3
      MOV M,A
      INR H
      DCR B
      JNZ $-3
    
      INR L
      DCR C
      JNZ IF_STR1
      MVI A,0
      OUT PT_BANKS ; C1h
      JMP PRC_HOME
    
    
    ME75B:
    ; Подпрограмма 
      LDA MBFEC
      ANI 04h ; 0000 0100
      RNZ
      LDA MBFEC
      ANI 07h ; 0000 0111
      JNZ _ME790
      XCHG
      LHLD MBFED
      LDA MBFF1
      ADD L
      MOV L,A
      MOV A,H
      ADI 40h
      MOV H,A
      MVI A,1
      OUT PT_BANKS ; C1h
      LXI B,7F08h
    
    ;$-10
      MOV A,M
      XRA B
      MOV M,A
      INR H
      MOV A,M
      XRA B
      MOV M,A
      DCR H
      INR L
      DCR C
      JNZ $-10
      XCHG
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    _ME790:
      XCHG
      LHLD MBFED
      LDA MBFF1
      ADD L
      MOV L,A
      MOV A,H
      CPI 40h
      XCHG
      RP
      XCHG
      ADI 40h
      MOV H,A
      MVI A,1
      OUT PT_BANKS ; C1h
      LXI B,7F08h
    
    ;$-5
      MOV A,M
      XRA B
      MOV M,A
      INR L
      DCR C
      JNZ $-5
      XCHG
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    
    PRC_10:
      CPI 1Bh ; [Esc]
      JNZ PRC_11
      LXI H,MBFDF
      MVI M,01h
      INX H
      MVI M,0FFh
      RET
    
    PRC_11:
      CPI 7 ; [BEEP]
      JZ PRC_BEEP
      LXI H,ME75B
      PUSH H
      LXI H,MBFED
      PUSH PSW
      CALL ME75B
      LDA MBFEC
      ANI 08h ; 0000 1000
      JZ PRC_12
      POP PSW
      CPI 9 ; [Tab]
      JZ IF_TAB
      CPI 8 ; []
      JZ IF_LEFT
      CPI 18h ; []
      JZ IF_RIGHT
      CPI 1Fh ; [СТР]
      JZ IF_STR
      CPI 10 ; [ПС]
      JZ IF_PS
      CPI 13 ; [ВК]
      RNZ
    ;IF_BK:
      INX H
      MVI M,0
      DCX H
      RET
    
    PRC_12:
      POP PSW
      CPI 1Fh
      JZ PRC_STR
      CPI 12
      JZ PRC_HOME
      PUSH PSW
      LDA MBFEC
      ANI 07h ; 0000 0111
      JNZ PRC_13
      POP PSW
      CPI 9 ; [Tab]
      JZ PRC_TAB
      CPI 8 ; []
      JZ PRC_LEFT
      CPI 18h ; []
      JZ PRC_RIGHT
      CPI 19h ; []
      JZ PRC_UP
      CPI 1Ah ; []
      JZ PRC_DOWN
      CPI 10 ; [│]
      JZ PRC_DOWN
      CPI 13 ; [
    ]
      RNZ
    
    ;PRC_BK:
      INX H
      MVI M,0
      DCX H
      RET
    
    PRC_13:
      LDA MBFEC
      ANI 2
      JNZ PRC_14
      POP PSW
      CPI 9 ; [Tab]
      JZ MK_TAB
      CPI 8 ; []
      JZ MK_LEFT
      CPI 18h ; []
      JZ MK_RIGHT
      CPI 19h ; []
      JZ MK_UP
      CPI 1Ah ; []
      JZ MK_DOWN
      CPI 10 ; [│]
      JZ MK_DOWN
      CPI 13 ; [
    ]
      RNZ
    
    ;MK_BK:
      INX H
      MVI M,0
      DCX H
      RET
    
    PRC_14:
      POP PSW
      CPI 10 ; [│]
      JZ MK_DOWN
      CPI 13 ; [
    ]
      RNZ
    
    ;MK_BK:
      INX H
      MVI M,0
      DCX H
      RET
    
    
    PRC_BEEP:
    ; Выдача звуковогО сигнала клавиатуры
      LHLD WBFF6
      XCHG
      LHLD WBFF4
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      MOV A,L
      OUT PT_CLK_0 ; 60h
      MOV A,H
      OUT PT_CLK_0 ; 60h
      LDA MBFF9
      MOV B,A
    
    PRC_BEEP1:
      MOV A,D
      ORA E
      RZ
      DCX D
      MOV A,B
      XRI 08h ; 0000 1000
      MOV B,A
      OUT PT_TAPE_SND ; E2h
    
    ;$-4
      IN PT_INT_0 ; 80h
      ANI 10h
      JNZ $-4
      MOV A,B
      XRI 8
      MOV B,A
      OUT PT_TAPE_SND ; E2h
    
    ;$-4
      IN PT_INT_0 ; 80h
      ANI 10h
      JZ $-4
      JMP PRC_BEEP1
    
    
    PP_05:
      LDA MBFEC
      ANI 08h ; 0000 1000
      RNZ
      CALL ME75B
      LDA MBFEC
      ANI 07h ; 0000 0111
      JNZ PP_05_1
      LXI D,MBFE2
      LXI H,MBFEE
      INX D
      LDAX D
      ANI 1Fh ; 0001 1111
      ADD A
      MOV M,A
      DCX D
      DCX H
      LDAX D
      ANI 1Fh ; 0001 1111
      CPI 11h
      JC $+5
      MVI A,11h
    ;$+5
      MOV B,A
      ADD A
      ADD B
      ADD A
      ADD B
      ADD A
      MOV M,A
      CALL ME75B
      RET
    
    PP_05_1:
      LDA MBFEC
      ANI 02h ; 0000 0010
      JNZ PP_05_2
      LXI D,MBFE2
      LXI H,MBFEE
      INX D
      LDAX D
      SUI 20h
      ANI 3Fh
      MOV M,A
      DCX D
      DCX H
      LDAX D
      ANI 1Fh ; 0001 1111
      CPI 16h
      JC $+5
      MVI A,16h
    ;$+5
      MOV B,A
      ADD A
      ADD A
      ADD B
      ADD A
      ADD B
      MOV M,A
      CALL ME75B
      RET
    
    PP_05_2:
      LXI D,MBFE2
      LXI H,MBFEE
      INX D
      LDAX D
      SUI 20h
      CPI 40h
      JM $+5
      MVI A,40h
    ;$+5
      MOV M,A
      DCX D
      DCX H
      LDAX D
      ANI 1Fh ; 0001 1111
      CPI 16h
      JC $+5
      MVI A,16h
    ;$+5
      MOV B,A
      ADD A
      ADD A
      ADD B
      ADD A
      ADD B
      MOV M,A
      CALL ME75B
      RET
    
    
    PP_06:
    ; Подпрограмма 
      LXI H,MBFEC
      LDA MBFF3
      MOV B,A
      LDA MBFE2
      MOV C,A
      ANI 08h ; 0000 1000
      MOV A,C
      JZ $+5
      MVI A,08h
    ;$+5
      ANI 0Fh ; 0000 1111
      MOV M,A
      ANI 07h ; 0000 0111
      MVI A,0
      JNZ $+5
      MVI A,40h
    ;$+5
      ORA B
      OUT PT_SCR_MODE ; E1h
      LXI H,MBFED
      CALL PRC_STR
      CALL ME75B
      RET
    
    
    PP_04:
      LDA MBFE2
      ANI 03h ; 0000 0011
      RAR
      MOV B,A
      MVI A,0
      SBB A
      STA MBFEF
      MOV A,B
      DCR A
      CMA
      STA MBFF0
      RET
    
    PRC_15:
      LDA MBFEC
      ANI 07h ; 0000 0111
      JNZ PRC_8
      MOV A,C
      ANI 7Fh ; 0111 1111
      MOV C,A
      CPI ' '
      JM PRC_8
      LXI H,MBFE2
      MOV A,M
      MOV E,A
      ADI 8
      JC PRC_8
      MOV M,A
      INX H
      MVI A,0F7h
      CMP M
      JC PRC_8
      MOV D,M
      CALL PRC_17
      MOV A,L
      SUI 7
      MOV L,A
      PUSH H
      MOV A,C
      CALL ME4F9
      POP D
      MVI C,7
    
    PRC_16:
      PUSH H
      MVI A,1
      OUT PT_BANKS ; C1h
      MOV L,M
      MVI H,0
      MOV A,B
      ORA A
      JZ PRC_18
    
    ;$-2
      DAD H
      DCR A
      JNZ $-2
    
    PRC_18:
      XCHG
      PUSH B
      LDA MBFEF
      CMA
      MOV B,A
      MOV A,M
      XRA B
      ORA E
      XRA B
      MOV M,A
      INR H
      INR H
      MOV A,M
      XRA B
      ORA D
      XRA B
      MOV M,A
      DCR H
      LDA MBFF0
      CMA
      MOV B,A
      MOV A,M
      XRA B
      ORA E
      XRA B
      MOV M,A
      INR H
      INR H
      MOV A,M
      XRA B
      ORA D
      XRA B
      MOV M,A
      DCR H
      DCR H
      DCR H
      INR L
      XCHG
      POP B
      MVI A,0
      OUT PT_BANKS ; C1h
      POP H
      INX H
      DCR C
      JNZ PRC_16
      RET
    
    
    PRC_17:
      LDA MBFF1
      SUB D
      DCR A
      MOV L,A
      MOV A,E
      ANI 07h ; 0000 0111
      MOV B,A
      MOV A,E
      RAR
      RAR
      ANI 3Eh ; 0011 1110
      ADI 40h
      MOV H,A
      RET
    
    
    PP_01:
      LXI H,MBFE5
      LXI D,MBFE3
      LDAX D
      MOV B,M
      CMP B
      JNC PP_01_1
      MOV M,A
      MOV A,B
      STAX D
    
    PP_01_1:
      DCX D
      DCX H
      LDAX D
      MOV B,M
      CMP B
      JC PP_01_2
      MOV M,A
      MOV A,B
      STAX D
    
    PP_01_2:
      XCHG
      MOV E,M
      INX H
      MOV D,M
      CALL PRC_17
      PUSH H
      XRA A
    
    ;$-3
      STC
      RAL
      DCR B
      JP $-3
    
      RAR
      MOV D,A
      LXI H,MBFE4
      MOV A,M
      ANI 07h ; 0000 0111
      MOV B,A
      XRA A
    
    ;$-3
      STC
      RAL
      DCR B
      JP $-3
    
      CMA
      MOV E,A
      MOV A,M
      DCX H
      DCX H
      SUB M
      RRC
      RRC
      RRC
      ANI 1Fh ; 0001 1111
      MOV C,A
      INX H
      MOV A,M
      INX H
      INX H
      SUB M
      JNZ $+4
      INR A
    ;$+4
      MOV B,A
      POP H
      MOV A,E
      STA MBFE6
    
    PP_01_3:
      PUSH D
      PUSH H
      PUSH B
      MVI A,1
      OUT PT_BANKS ; C1h
      MOV A,C
      ORA A
      JNZ PP_01_5
      MOV A,D
      ORA E
    
    PP_01_4:
      MOV D,A
    
    PP_01_5:
      MOV B,D
      XCHG
      LHLD MBFEF
      XCHG
      MOV A,M
      XRA E
      ANA B
      XRA E
      MOV M,A
      INR H
      MOV A,M
      XRA D
      ANA B
      XRA D
      MOV M,A
      INR H
      MOV A,C
      ORA A
      JZ PP_01_7
      DCR C
    
    PP_01_6:
      LDA MBFE6
      JZ PP_01_4
    
    ;$-5
      MOV M,E
      INR H
      MOV M,D
      INR H
      DCR C
      JNZ $-5
      JMP PP_01_6
    
    PP_01_7:
      MVI A,0
      OUT PT_BANKS ; C1h
      POP B
      POP H
      POP D
      INR L
      DCR B
      JNZ PP_01_3
      RET
    
    
    PP_02:
      LXI H,MBFE2
      MOV E,M
      INX H
      MOV D,M
      INX H
      MOV A,M
      INX H
      MOV H,M
      MOV L,A
      CMP E
      JC $+4
      XCHG
    ;$+4
      SHLD MBFE2
      MOV A,E
      SUB L
      MOV L,A
      MOV A,D
      SUB H
      MOV H,A
      PUSH PSW
      JNC PP_02_1
      CMA
      INR A
      MOV H,A
    
    PP_02_1:
      XCHG
      LHLD MBFE2
      XCHG
      JZ PP_02_14
      MOV A,L
      ORA A
      JZ PP_02_10
      MOV B,A
      POP PSW
      MVI A,0
      ADC A
      STA MBFE6
      MOV E,H
      MVI C,10h
      MVI D,0
    
    PP_02_2:
      DAD H
      XCHG
      DAD H
      XCHG
      MOV A,D
      JC PP_02_3
      CMP B
      JC PP_02_4
    
    PP_02_3:
      SUB B
      MOV D,A
      INX H
    
    PP_02_4:
      DCR C
      JNZ PP_02_2
      LXI D,0
      PUSH D
      PUSH H
      LHLD MBFE2
      XCHG
      MOV C,B
      CALL PRC_17
      MVI A,80h
    
    ;$-2
      RLC
      DCR B
      JP $-2
      CMA
      MOV B,A
    
    PP_02_5:
      POP D
      XTHL
      MOV A,H
      DAD D
      SUB H
      CMA
      INR A
      XTHL
      PUSH D
      PUSH B
      MOV C,A
      XCHG
      LHLD MBFEF
      XCHG
      MVI A,1
      OUT PT_BANKS ; C1h
      LDA MBFE6
      ORA A
      JNZ PP_02_7
    
    PP_02_6:
      MOV A,M
      XRA E
      ANA B
      XRA E
      MOV M,A
      INR H
      MOV A,M
      XRA D
      ANA B
      XRA D
      MOV M,A
      DCR H
      MOV A,C
      ORA A
      JZ PP_02_8
      DCR C
      DCR L
      JMP PP_02_6
    
    PP_02_7:
      MOV A,M
      XRA E
      ANA B
      XRA E
      MOV M,A
      INR H
      MOV A,M
      XRA D
      ANA B
      XRA D
      MOV M,A
      DCR H
      MOV A,C
      ORA A
      JZ PP_02_8
      DCR C
      INR L
      JMP PP_02_7
    
    PP_02_8:
      MVI A,0
      OUT PT_BANKS ; C1h
      POP B
      MOV A,B
      STC
      RAL
      JC PP_02_9
      RAL
      INR H
      INR H
    
    PP_02_9:
      MOV B,A
      DCR C
      JNZ PP_02_5
      POP H
      POP H
      RET
    
    PP_02_10:
      MOV C,H
      CALL PRC_17
      MVI A,80h
    
    ;$-2
      RLC
      DCR B
      JP $-2
    
      CMA
      MOV B,A
      XCHG
      LHLD MBFEF
      XCHG
      POP PSW
      MVI A,1
      OUT PT_BANKS ; C1h
      JC PP_02_12
    
    PP_02_11:
      MOV A,M
      XRA E
      ANA B
      XRA E
      MOV M,A
      INR H
      MOV A,M
      XRA D
      ANA B
      XRA D
      MOV M,A
      DCR H
      MOV A,C
      ORA A
      JZ PP_02_13
      DCR C
      DCR L
      JMP PP_02_11
    
    PP_02_12:
      MOV A,M
      XRA E
      ANA B
      XRA E
      MOV M,A
      INR H
      MOV A,M
      XRA D
      ANA B
      XRA D
      MOV M,A
      DCR H
      MOV A,C
      ORA A
      JZ PP_02_13
      DCR C
      INR L
      JMP PP_02_12
    
    PP_02_13:
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    PP_02_14:
      POP PSW
      MOV C,L
      MOV A,L
      ORA A
      JNZ $+4
      INR C
    
    ;$+4
      CALL PRC_17
      MVI A,80h
    
    ;$-2
      RLC
      DCR B
      JP $-2
    
      CMA
      MOV B,A
      XCHG
      LHLD MBFEF
      XCHG
      MVI A,1
      OUT PT_BANKS ; C1h
    
    PP_02_15:
      MOV A,M
      XRA E
      ANA B
      XRA E
      MOV M,A
      INR H
      MOV A,M
      XRA D
      ANA B
      XRA D
      MOV M,A
      DCR H
      MOV A,B
      STC
      RAL
      JC $+6
      RAL
      INR H
      INR H
    
    ;$+6
      MOV B,A
      DCR C
      JNZ PP_02_15
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    
    PP_03:
    ; Подпрограмма 
      LHLD MBFE2
      XCHG
      CALL PRC_17
      MVI A,80h
    
    ;$-2
      RLC
      DCR B
      JP $-2
    
      MOV B,A
      XCHG
      LHLD MBFEF
      XCHG
      MVI A,1
      OUT PT_BANKS ; C1h
      MOV A,M
      XRA B
      MOV M,A
      INR H
      MOV A,M
      XRA B
      MOV M,A
      MVI A,0
      OUT PT_BANKS ; C1h
      RET
    
    
    ;MEC08:
    ; включение блока кодов знакогенератора
    data FONTS.ZG
    
    
    ; *** Вторая часть (после знакогенератора) ***
    
    LwUART:
      PUSH B
      CALL LdUART
      CALL ChkNUM
      RLC
      RLC
      RLC
      RLC
      MOV C,A
      CALL LdUART
      CALL ChkNUM
      ORA C
      MOV C,A
      ADD D
      MOV D,A
      MOV A,C
      POP B
      RET
    
    
    OctToSim:
      ANI 0Fh
      ADI 90h
      DAA
      ACI 40h
      DAA
      MOV C,A
      RET
    
    
    CMD_XREG5:
      INX H
      MOV E,M
      MVI D,0BFh
      INX H
      MOV B,M
      INX H
      LDAX D
      CALL PRINT_BYTE
      DCR B
      RM
      DCX D
      LDAX D
      JMP PRINT_BYTE
    
    
    InpADDR:
      CALL InpDIG
      XTHL
      PUSH H
      DCR C
      JNC InpADDR1
      JNZ START0
      RET
    
    InpADDR1:
      JNZ InpADDR
      JMP START0
    
    
    DecHD0:
    ; Подпрограмма [HL]=[HL]-[DE]
    ; с проверкой [HL] на ноль
      INX H
      MOV A,H
      ORA L
      STC
      RZ
      MOV A,E
      SUB L
      MOV A,D
      SBB H
      RET
    
    
    PRINT[HL]:
    ; Подпрограмма вывода [HL]
      MOV A,H
      CALL PRINT_BYTE
      MOV A,L
    
    PRINT_BYTE:
      PUSH PSW
      RRC
      RRC
      RRC
      RRC
      CALL PrDIG
      POP PSW
    
    PrDIG:
      CALL OctToSim
      JMP ME2FA
    
    
    InpDIG:
      CALL TypeDIG
      JZ START0
    
    InpDIG1:
      LXI H,0
    
    InpDIG2:
      MOV B,A
      CALL ChkNUM
      JC InpDIG3
      DAD H
      DAD H
      DAD H
      DAD H
      ORA L
      MOV L,A
      CALL TYPE
      JMP InpDIG2
    
    InpDIG3:
      MOV A,B
      CALL ChkSpcComBK
      JNZ START0
      RET
    
    
    ChkNUM:
    ; Подпрограмма 
      SUI '0'
      RC
      ADI 0E9h
      RC
      ADI 6
      JP $+6
      ADI 7
      RC
    
    ;$+6
      ADI 10
      ORA A
      RET
    
    
    TypeDIG:
    ; Подпрограмма 
      CALL TYPE
    
    ChkSpcComBK:
      CPI ' '
      RZ
      CPI ','
      RZ
      CPI 13
      STC
      RZ
      CMC
      RET
    
    
    TYPE:
      PUSH B
      CALL INKEY
      CALL ChkTYPE
      CPI 1Bh ; [Esc]
      JZ START0
      MOV C,A
      CALL PRINT_C
      MOV A,C
      POP B
      RET
    
    ChkTYPE:
      CPI 61h
      RM
      CPI 9Bh
      RP
      ANI 0DFh
      RET
    
    
    CallRST1:
    ; Обработка прерывания RST 1
      DI
      SHLD MBFDA
      LXI H,2
      DAD SP
      SHLD MBFD8
      POP H
      LXI SP,MBFD8
      PUSH PSW
      MVI A,0
      PUSH PSW
      MVI A,0
      NOP
      NOP
      PUSH B
      PUSH D
      MVI A,0
      NOP
      NOP
      SHLD MBFDD
      CALL ME2D7
      INX H
      CALL PRINT[HL]
      JMP HotSTART
    
    
    CMD_GOTO:
      CALL TypeDIG
      JZ CMD_GOTO1
      CALL InpDIG1
      SHLD MBFDD
    
    CMD_GOTO1:
      JNC START0
      CALL ME2CE
      MVI A,0C3h
      STA MBFDC
      LXI SP,STACK
      POP D
      POP B
      POP PSW
      NOP
      NOP
      POP PSW
      POP H
      SPHL
      LHLD MBFDA
      JMP MBFDC
    
    
    CMD_WRITE:
      CALL TypeDIG
      JNC START0
      CALL ME2CE
    
    SvTAPE:
      LXI H,MBF00
      MVI C,80h
    
    ;$-4
      MVI M,0
      INX H
      DCR C
      JNZ $-4
    
      LXI H,MBF00
      LXI D,0FFFFh
      CALL SvDUMP
      CALL SvTAPE2
      LXI D,0
      CALL SvDUMP
      CALL SvTAPE2
      LXI B,0200h
      LXI D,0
    
    SvTAPE1:
      PUSH B
      LXI H,MBF00
      CALL LdSECT
      INX D
      CALL SvDUMP
      CALL SvTAPE2
      POP B
      DCX B
      MOV A,B
      ORA C
      JNZ SvTAPE1
      RET
    
    SvTAPE2:
      LXI B,00FAh
    
    SvTAPE3:
      DCX B
      MOV A,B
      ORA C
      JNZ SvTAPE3
      RET
    
    
    CMD_READ:
      CALL TypeDIG
      JNC START0
      CALL ME2CE
    
    LdTAPE:
      MVI A,64h
      CALL GetTAPE
      ORA A
      JNZ PrBREAK
      MVI E,6
    
    LdTAPE1:
      DCR E
      JZ PrNoStrtREC
      LXI H,MBF00
      CALL LdDUMP
      CPI 4
      JZ PrBREAK
      ORA A
      JNZ LdTAPE1
      MOV A,B
      ORA C
      JNZ LdTAPE1
      LXI B,0200h
      LXI D,0
    
    LdTAPE2:
      PUSH B
      CALL LdDUMP
      ORA A
      JNZ LdTAPE3
      DCX B
      MOV A,B
      CMP D
      JNZ PrSEQ
      MOV A,C
      CMP E
      JNZ PrSEQ
      CALL SvSECT
      INX D
      POP B
      DCX B
      MOV A,B
      ORA C
      JNZ LdTAPE2
      RET
    
    PrNoStrtREC:
      LXI H,T_NoStartREC
      CALL PRINT_MSG
      RET
    
    LdTAPE3:
      CPI 2
      JZ PrIBG
      CPI 4
      JZ LdTAPE4
      LXI H,T_ChkSUM
      CALL PRINT_MSG
      CALL PRINT[BC]
      POP B
      RET
    
    PrSEQ:
      LXI H,T_SEQ
      CALL PRINT_MSG
      INX B
      CALL PRINT[BC]
      POP B
      RET
    
    PrIBG:
      LXI H,T_IBG
      CALL PRINT_MSG
      POP B
      RET
    
    LdTAPE4:
      POP B
    
    PrBREAK:
      LXI H,T_BREAK
      CALL PRINT_MSG
      RET
    
    
    PRINT[BC]:
    ; Подпрограмма вывода [BC]
      PUSH B
      MOV A,B
      CALL PRINT_BYTE
      POP B
      MOV A,C
      CALL PRINT_BYTE
      RET
    
    
    
    ; *** Текстовыйе сообщения ***
    
    T_NoStartREC:DB 'NO START RECORD',0
    
    T_ChkSUM:DB 'CHECKSUM ',0
    
    T_SEQ:DB 'SEQUENCE ',0
    
    T_IBG:DB 'IBG',0
    
    T_BREAK:DB 'BREAK',0
    
    
    PRINT_MSG:
    ; Подпрограмма вывода сообщения на экран
    ; I: [HL]-а/н (/0)
    MOV A,M
    ORA A
    RZ
    PUSH B
    MOV C,A
    CALL PRINT_C
    INX H
    POP B
    JMP PRINT_MSG
    
    
    LdSECT:
      PUSH H
      PUSH D
      MOV A,D
      ANI 01h ; 0000 0001
      ORI 02h ; 0000 0010
      ORI 00h ; 0000 0000
      MOV B,A
      XRA A
      MOV A,E
      RAR
      MOV D,A
      MVI A,0
      RAR
      MOV E,A
    
    LdSECT1:
      MOV A,B
      OUT PT_BANKS ; C1h
      LDAX D
      MOV C,A
      MVI A,0
      OUT PT_BANKS ; C1h
      MOV M,C
      INX H
      INX D
      MOV A,E
      ADD A
      JNZ LdSECT1
      MVI A,0
      OUT PT_BANKS ; C1h
      POP D
      POP H
      RET
    
    
    SvSECT:
      PUSH H
      PUSH D
      MOV A,D
      ANI 01h ; 0000 0001
      ORI 02h ; 0000 0010
      ORI 00h ; 0000 0000
      MOV B,A
      XRA A
      MOV A,E
      RAR
      MOV D,A
      MVI A,0
      RAR
      MOV E,A
    
    SvSECT1:
      MVI A,0
      OUT PT_BANKS ; C1h
      MOV C,M
      MOV A,B
      OUT PT_BANKS ; C1h
      MOV A,C
      STAX D
      INX H
      INX D
      MOV A,E
      ADD A
      JNZ SvSECT1
      MVI A,0
      OUT PT_BANKS ; C1h
      POP D
      POP H
      RET
    
    
    SvDUMP:
    ; Запись дампа на диск
      PUSH H
      PUSH D
      PUSH D
      LXI B,09F6h
      MVI A,0Ah
      OUT PT_INT_0 ; 80h
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      MOV A,C
      OUT PT_CLK_0 ; 60h
      MOV A,B
      OUT PT_CLK_0 ; 60h
      LXI D,4
    
    SvDUMP1:
      IN PT_INT_0 ; 80h
      ANI 10h
      JNZ SvDUMP1
      MOV A,D
      CMA
      MOV D,A
      ORA A
      MVI A,5
      JNZ $+5
      MVI A,3
    ;$+5
      OUT PT_TAPE_SND ; E2h
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      MOV A,C
      OUT PT_CLK_0 ; 60h
      MOV A,B
      OUT PT_CLK_0 ; 60h
      DCR E
      JNZ SvDUMP1
    
    ;$-4
      IN PT_INT_0 ; 80h
      ANI 10h
      JNZ $-4
    
      MVI A,0
      CALL MF36B
      MVI A,0F5h
      CALL MF36B
      MVI E,0
      POP B
      MOV A,C
      CALL MF36B
      MOV A,B
      CALL MF36B
      MVI B,80h
    
    ;$-6
      MOV A,M
      CALL MF36B
      INX H
      DCR B
      JNZ $-6
    
      MOV A,E
      CALL MF36B
      MVI A,0
      CALL MF36B
    
    ;$-4
      IN PT_INT_0 ; 80h
      ANI 10h
      JNZ $-4
    
      MVI A,4
      OUT PT_TAPE_SND ; E2h
      POP D
      POP H
      RET
    
    
    MF36B:
    ; Подпрограмма 
      PUSH B
      MOV B,A
      MOV A,E
      SUB B
      MOV E,A
      MVI C,8
    
    MF372:
      MOV A,B
      RAR
      MOV B,A
      JC MF39E
    
    ;$-4
      IN PT_INT_0 ; 80h
      ANI 10h
      JNZ $-4
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      MVI A,68h
      OUT PT_CLK_0 ; 60h
      MVI A,1
      OUT PT_CLK_0 ; 60h
      MOV A,D
      CMA
      MOV D,A
      ORA A
      MVI A,5
      JNZ $+5
      MVI A,3
    ;$+5
      OUT PT_TAPE_SND ; E2h
      DCR C
      JNZ MF372
      POP B
      RET
    
    
    MF39E:
      IN PT_INT_0 ; 80h
      ANI 10h
      JNZ MF39E
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      MVI A,94h
      OUT PT_CLK_0 ; 60h
      MVI A,2
      OUT PT_CLK_0 ; 60h
      MOV A,D
      CMA
      MOV D,A
      ORA A
      MVI A,5
      JNZ $+5
      MVI A,3
    ;$+5
      OUT PT_TAPE_SND ; E2h
      DCR C
      JNZ MF372
      POP B
      RET
    
    
    LdDUMP:
      PUSH H
      PUSH D
      MVI A,0Ah
      OUT PT_INT_0 ; 80h
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      MVI A,0
      OUT PT_CLK_0 ; 60h
      OUT PT_CLK_0 ; 60h
      MVI C,3
    
    LdDUMP1:
      CALL MF488
      INR A
      JZ MF440
      MOV A,B
      ADI 4
      JP LdDUMP1
      DCR C
      JNZ LdDUMP1
    
    LdDUMP2:
      CALL MF488
      INR A
      JZ MF440
      MOV A,B
      ADI 4
      JM LdDUMP2
    
      MVI C,0
    
    LdDUMP3:
      CALL MF488
      INR A
      JZ MF440
      DCR A
      RAR
      MOV A,C
      RAR
      MOV C,A
      CPI 0F5h
      JNZ LdDUMP3
      MVI E,0
      CALL MF44B
      JNC LdDUMP6
      MOV C,D
      CALL MF44B
      JNC LdDUMP6
      MOV B,D
      PUSH B
      MVI C,80h
    
    LdDUMP4:
      CALL MF44B
      JNC LdDUMP5
      MOV M,D
      INX H
      DCR C
      JNZ LdDUMP4
    
      CALL MF44B
      JNC LdDUMP5
      MOV A,E
      ORA A
      JZ $+5
      MVI A,1
    ;$+5
      POP B
    
    PopDH:
      POP D
      POP H
      RET
    
    LdDUMP5:
      POP B
      LXI B,0
    
    LdDUMP6:
      MVI A,2
      JMP PopDH
    
    
    MF440:
      CALL INKEY
      MOV C,A
      MVI B,0
      MVI A,4
      JMP PopDH
    
    
    MF44B:
    ; Подпрограмма 
      PUSH B
      MVI C,8
    
    ;$-14
      CALL MF465
      RAR
      MOV A,D
      RAR
      MOV D,A
      MVI A,4
      ADD B
      JNC _MF463
      DCR C
      JNZ $-14
      MOV A,D
      ADD E
      MOV E,A
      STC
    
    _MF463:
      POP B
      RET
    
    
    MF465:
      IN PT_KBRD_B ; 41h
      ANI 04h ; 0000 0100
      MOV B,A
    
    ;$-5
      IN PT_KBRD_B ; 41h
      ANI 4
      CMP B
      JZ $-5
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      IN PT_CLK_0 ; 60h
      ADI 20h
      IN PT_CLK_0 ; 60h
      MOV B,A
      ACI 2
      MVI A,0
      OUT PT_CLK_0 ; 60h
      OUT PT_CLK_0 ; 60h
      RP
      INR A
      RET
    
    
    MF488:
      IN PT_KBRD_B ; 41h
      ANI 4
      MOV B,A
    
    ;$-12
      IN PT_INT_0 ; 80h
      ANI 02h ; 0000 0010
      JNZ _MF4B2
      IN PT_KBRD_B ; 41h
      ANI 04h ; 0000 0100
      CMP B
      JZ $-12
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      IN PT_CLK_0 ; 60h
      ADI 20h
      IN PT_CLK_0 ; 60h
      MOV B,A
      ACI 2
      MVI A,0
      OUT PT_CLK_0 ; 60h
      OUT PT_CLK_0 ; 60h
      RP
      INR A
      RET
    
    _MF4B2:
      MVI A,0FFh
      RET
    
    
    GetTAPE:
      ORA A
      RZ
      PUSH D
      MOV B,A
    
    GetTAPE1:
      MOV C,B
      IN PT_KBRD_B ; 41h
      ANI 4
      MOV E,A
    
    GetTAPE2:
      MVI A,36h
      OUT PT_CLK_3 ; 63h
      XRA A
      OUT PT_CLK_0 ; 60h
      MVI A,0Ch
      OUT PT_CLK_0 ; 60h
    
    GetTAPE3:
      IN PT_INT_0 ; 80h
      ANI 02h ; 0000 0010
      JNZ GetTAPE5
      IN PT_INT_0 ; 80h
      ANI 10h ; 0001 0000
      JZ GetTAPE4
      IN PT_KBRD_B ; 41h
      ANI 04h ; 0000 0100
      CMP E
      JNZ GetTAPE1
      JMP GetTAPE3
    
    GetTAPE4:
      DCR C
      JNZ GetTAPE2
      XRA A
      POP D
      RET
    
    GetTAPE5:
      CALL INKEY
      MOV C,A
      MVI A,4
      POP D
      RET
    
    
    FndBLOK:
      IN PT_KBRD_B ; 41h
      ANI 08h ; 0000 1000
      MVI A,0
      RZ
      CMA
      RET
    
    
    DDB 0,2
    DDB 0FFh,3
    
    
    ; *** свободная область в конце ПЗУ ***
    
    DDB 0FFh,11*256 ; 2816 байт (2,75 Кб)
    
    END
    [свернуть]



    Что-то не получается разгадать, каким образом работает находящийся в ПЗУ по адресам EC08..F067h знакогенератор. Анализ содержимого указывает на какую-то вялую компрессию... стало быть где-то должен быть алгоритм декомпрессии и выгрузки в ОЗУ. Ни с головы, ни с хвоста он не адресуется никаким кодом из ПЗУ. Даже если бы адрес складывался математически, то явно был бы перенос знакогенератора в начале (при отработке "холодного" сброса), однако там ничего на эту тему нет.
    Пытался анализировать работу п/п вывода символа, но там какой-то "треш"... пока не удалось ничего понять /-)

    Может кто-то из океанологов в курсе?
    Последний раз редактировалось Denn; 19.03.2019 в 17:58.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  6. #5
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,842
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,814
    Поблагодарили
    1,043 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хранятся 7 строк каждого символа, без компрессии, если не считать таковой добавление пустой строки при выводе.

    - - - Добавлено - - -

    Цитата Сообщение от Denn Посмотреть сообщение
    Ни с головы, ни с хвоста он не адресуется никаким кодом из ПЗУ.
    Адресуется командой
    E51D lxi d,0EC08h-(32*7)

    - - - Добавлено - - -

    Цитата Сообщение от Denn Посмотреть сообщение
    Пытался анализировать работу п/п вывода символа, но там какой-то "треш"... пока не удалось ничего понять
    Можно конкретнее, в чем сомнения?

  7. #6
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,634
    Спасибо Благодарностей отдано 
    392
    Спасибо Благодарностей получено 
    78
    Поблагодарили
    63 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    Анализ содержимого указывает на какую-то вялую компрессию... стало быть где-то должен быть алгоритм декомпрессии и выгрузки в ОЗУ. Ни с головы, ни с хвоста он не адресуется никаким кодом из ПЗУ.
    Нет там компрессии таблицу адресует код вывода символа. Вообще же есть дизассемблированный Юрием монитор 240.2 (пробегал тут): http://sensi.org/~tnt23/ok240/OK_Mon2.asm

  8. #7
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Хранятся 7 строк каждого символа, без компрессии, если не считать таковой добавление пустой строки при выводе.

    - - - Добавлено - - -


    Адресуется командой
    E51D lxi d,0EC08h-(32*7)
    Спасибо!

    - - - Добавлено - - -

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Вообще же есть дизассемблированный Юрием монитор 240.2 (пробегал тут): http://sensi.org/~tnt23/ok240/OK_Mon2.asm
    Видел. Не помог он мне ни разу, я в своём варианте больше расшифровал
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  9. #8
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от tnt23 Посмотреть сообщение
    Нет там компрессии
    8 байт "сжимаются" в 7 - это таки компрессия!
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  10. #9
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,634
    Спасибо Благодарностей отдано 
    392
    Спасибо Благодарностей получено 
    78
    Поблагодарили
    63 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    8 байт "сжимаются" в 7 - это таки компрессия!
    Ну может быть, я не стал вчитываться. Разобрался, откуда берется битмап для символа, и успокоился

  11. #10
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,842
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,814
    Поблагодарили
    1,043 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Почти оффтоп, но не совсем, все же сильная связь с темой есть. Подумал, что можно за пару минут переделать монитор для вывода 32 строк, почему бы и не сделать. Времени заняло несколько больше, но получилось. Сегодня смысла в такой штуке пожалуй нет, но программистам древности могло понравиться.
    Вложения Вложения

Страница 1 из 4 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Куплю рабочие платы Profi 5.03 или 5.04
    от im2 в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 03.07.2012, 09:37
  2. Рабочие сорцы эмулятора UnrealSpeccy
    от Mick в разделе Программирование
    Ответов: 3
    Последнее: 31.03.2010, 18:33
  3. Порча TR-DOS'ом ячейки #5B89
    от TomCaT в разделе Для начинающих
    Ответов: 2
    Последнее: 09.03.2010, 21:51
  4. старые рабочие ноуты
    от Nordic в разделе Барахолка (архив)
    Ответов: 38
    Последнее: 01.11.2008, 20:42

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •