User Tag List

Показано с 1 по 10 из 36

Тема: Дизасм ПЗУ монитора 0 и F

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,235
    Спасибо Благодарностей отдано 
    490
    Спасибо Благодарностей получено 
    995
    Поблагодарили
    642 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Cool DisAssm by Denn (Powered by DSDOS)

    Раз такая пьянка, то вот мой вариант, в i8080 мнемонике:

    Код:
    ; *** Монитор ЮТ-88 ***
    ; Disassembler v2.1 (DSDOS)
    ; Cracked by Denn, 26.12.2017
    
    STACK:EQU 0F7AFh; стэк
    
    BUF_SCREEN:EQU 0E800h; а/н экрана
    
    DIR_W:EQU 0C000h; Директива 'W'
    DIR_U:EQU 0F000h; Директива 'U'
    
    VAR_POS:EQU 0F7B0h; позиция курсора
    
    MF7B2:EQU 0F7B2H; PRINT_C
    MF7B4:EQU 0F7B4H; RST 6
    MF7B6:EQU 0F7B6H; DIR_G
    MF7B8:EQU 0F7B8H; DIR_G
    
    VAR_STACK:EQU 0F7BCh; значение вершины стека
    
    MF7BE:EQU 0F7BEH; RST 6
    
    MF7C0:EQU 0F7C0H; сохр. стека в TAPE_LdBYTE
    MF7C3:EQU 0F7C3H; DIR_G, RST 6
    MF7C5:EQU 0F7C5H; DIR_G, RST 6
    MF7C6:EQU 0F7C6H; переход на обр. DIR_G
    
    VAR_[HL]:EQU 0F7C7h; INPUT_CMDL
    VAR_[DE]:EQU 0F7C9h; INPUT_CMDL
    VAR_[BC]:EQU 0F7CBh; INPUT_CMDL
    
    MF7CD:EQU 0F7CDH; DIR_I
    MF7CE:EQU 0F7CEH; TAPE_LdBYTE
    MF7CF:EQU 0F7CFh; константа чтения (2Ah)
    MF7D0:EQU 0F7D0h; константа записи (1Dh)
    MF7D1:EQU 0F7D1H; [DFFFh] (?)
    
    BUF_CMDL:EQU 0F7D3h; буфер командной строки
    
    MF7F4:EQU 0F7F4H; INPUT_KEY
    MF7F3:EQU 0F7F3H; INPUT_KEY
    MF7F8:EQU 0F7F8H; PRINT_C
    
    ORG 0F800h
    
    ; Керналь переходов
    
    JMP START       ; F800h
    JMP INPUT_KEY   ; F803h
    JMP TAPE_LdBYTE ; F806h
    JMP PRINT_C     ; F809h
    JMP TAPE_SvBYTE ; F80Ch
    JMP PRINT_C     ; F80Fh
    JMP KBRD_STAT   ; F812h
    JMP PRINT_HEX   ; F815h
    JMP PRINT_MSG   ; F818h
    JMP SCAN_KEYS   ; F81Bh
    JMP GET_POS     ; F81Eh
    JMP GET_SIMB_A  ; F821h
    JMP TAPE_LdDUMP ; F824h
    JMP TAPE_SvDUMP ; F827h
    JMP GET_CSUM    ; F82Ah
    RET
    
    DDB 0FFh,2
    
    JMP MFE77 ; неведомая фигня
    JMP MFE7B ; неведомая фигня
    
    
    START:
    ; Холодный старт
    
    ; инициализация порта клавиатуры
    MVI A,8Bh
    OUT 4
    ; инициализация порта ROM-диска
    MVI A,82h
    OUT 0FBh
    ; инициализация стека
    LXI SP,STACK
    LXI H,VAR_POS
    LXI D,0F7FFh
    MVI C,0
    CALL DIR_F
    LXI H,STACK
    SHLD VAR_STACK
    ; вывод заставки
    LXI H,MSG_UT88
    CALL PRINT_MSG
    NOP
    NOP
    NOP
    LXI H,0DFFFh
    SHLD MF7D1
    ; инициализация констант МГ
    LXI H,1D2Ah
    SHLD MF7CF
    MVI A,0C3h
    STA MF7C6
    
    HOT_START:
    ; Горячий старт
    LXI SP,STACK
    ; вывод промпта
    LXI H,MSG_PROMPT
    CALL PRINT_MSG
    NOP
    NOP
    NOP
    NOP
    CALL INPUT_CMDL
    ; запись в стек адреса горячего старта
    LXI H,HOT_START
    PUSH H
    LXI H,BUF_CMDL
    MOV A,M
    CPI 'X'
    JZ DIR_X
    CPI 'U'
    JZ DIR_U
    PUSH PSW
    CALL GET_CMD
    LHLD VAR_[BC]
    MOV C,L
    MOV B,H
    LHLD VAR_[DE]
    XCHG
    LHLD VAR_[HL]
    POP PSW
    CPI 'D'
    JZ DIR_D
    CPI 'C'
    JZ DIR_C
    CPI 'F'
    JZ DIR_F
    CPI 'S'
    JZ DIR_S
    CPI 'T'
    JZ DIR_T
    CPI 'M'
    JZ DIR_M
    CPI 'G'
    JZ DIR_G
    CPI 'I'
    JZ DIR_I
    CPI 'O'
    JZ DIR_O
    CPI 'L'
    JZ DIR_L
    CPI 'R'
    JZ DIR_R
    JMP CPI_PART2
    
    InpCMDL_ZB:
    ; обработка удаления символа
    MVI A,63h
    CMP L
    JZ INP_CMDL0
    PUSH H
    LXI H,MSG_BKSPC
    CALL PRINT_MSG
    POP H
    DCX H
    JMP INP_CMDL1
    
    
    INPUT_CMDL:
    ; Ввод командной строки
    LXI H,BUF_CMDL
    
    INP_CMDL0:
    MVI B,0
    
    INP_CMDL1:
    CALL INPUT_KEY
    CPI 8
    JZ InpCMDL_ZB
    CPI 7Fh
    JZ InpCMDL_ZB
    CNZ PRINT_A
    MOV M,A
    CPI 13
    JZ InpCMDL_BK
    CPI '.'
    JZ HOT_START
    MVI B,0FFh
    MVI A,0F2h
    CMP L
    JZ ERR_EXIT
    INX H
    JMP INP_CMDL1
    
    
    InpCMDL_BK:
    ; Обработка [
    ]
    MOV A,B
    RAL
    LXI D,BUF_CMDL
    MVI B,0
    RET
    
    
    PRINT_MSG:
    ; Вывод сообщения
    ; I: [HL]-а/н сообщения/0
    MOV A,M
    ANA A
    RZ
    CALL PRINT_A
    INX H
    JMP PRINT_MSG
    
    
    GET_CMD:
    LXI H,VAR_[HL]
    LXI D,MF7CD
    MVI C,0
    CALL DIR_F
    LXI D,BUF_CMDL+1
    CALL MF957
    SHLD VAR_[HL]
    SHLD VAR_[DE]
    RC
    MVI A,0FFh
    STA MF7CD
    CALL MF957
    SHLD VAR_[DE]
    RC
    CALL MF957
    SHLD VAR_[BC]
    RC
    JMP ERR_EXIT
    
    
    MF957:
    LXI H,0
    
    MF95A:
    LDAX D
    INX D
    CPI 13
    JZ StcRET
    CPI ','
    RZ
    CPI ' '
    JZ MF95A
    SUI '0'
    JM ERR_EXIT
    CPI 10
    JM MF97F
    CPI 11h
    JM ERR_EXIT
    CPI 17h
    JP ERR_EXIT
    SUI 7
    
    MF97F:
    MOV C,A
    DAD H
    DAD H
    DAD H
    DAD H
    JC ERR_EXIT
    DAD B
    JMP MF95A
    
    StcRET:
    STC
    RET
    
    
    TSTHD:
    MOV A,H
    CMP D
    RNZ
    MOV A,L
    CMP E
    RET
    
    
    TstEND:
    CALL CHK_ERR
    
    TstEND1:
    CALL TSTHD
    JNZ TstEND2
    INX SP
    INX SP
    RET
    
    TstEND2:
    INX H
    RET
    
    
    CHK_ERR:
    MVI A,0FFh
    ANA A
    CPI 3
    RNZ
    JMP ERR_EXIT
    
    
    PR_4RIGHT:
    PUSH H
    LXI H,MSG_4RIGHT
    CALL PRINT_MSG
    POP H
    RET
    
    
    PRM_SPC:
    MOV A,M
    
    PRH_SPC:
    PUSH B
    CALL PRINT_HEX
    MVI A,' '
    CALL PRINT_A
    POP B
    RET
    
    
    DIR_D:
    ; Директива 'D'
    CALL PR[HL]
    
    DIR_D1:
    CALL PRM_SPC
    CALL TstEND
    MOV A,L
    ANI 0Fh
    JZ DIR_D
    JMP DIR_D1
    
    
    DIR_C:
    ; Директива 'C'
    LDAX B
    CMP M
    JZ DIR_C1
    CALL PR[HL]
    CALL PRM_SPC
    LDAX B
    CALL PRH_SPC
    
    DIR_C1:
    INX B
    CALL TstEND
    JMP DIR_C
    
    
    DIR_F:
    ; Директива 'F'
    MOV M,C
    CALL TstEND1
    JMP DIR_F
    
    
    DIR_S:
    ; Директива 'S'
    MOV A,C
    CMP M
    CZ PR[HL]
    CALL TstEND
    JMP DIR_S
    
    
    DIR_T:
    ; Директива 'T'
    MOV A,M
    STAX B
    INX B
    CALL TstEND1
    JMP DIR_T
    
    
    DIR_L:
    ; Директива 'L'
    CALL PR[HL]
    
    DIR_L1:
    MOV A,M
    ORA A
    JM DIR_L2
    CPI ' '
    JNC DIR_L3
    
    DIR_L2:
    MVI A,'.'
    
    DIR_L3:
    CALL PRINT_A
    CALL TstEND
    MOV A,L
    ANI 0Fh
    JZ DIR_L
    JMP DIR_L1
    
    
    DIR_M:
    ; Директива 'M'
    CALL PR[HL]
    CALL PRM_SPC
    PUSH H
    CALL INPUT_CMDL
    POP H
    JNC DIR_M1
    PUSH H
    CALL MF957
    MOV A,L
    POP H
    MOV M,A
    
    DIR_M1:
    INX H
    JMP DIR_M
    
    
    DIR_G:
    ; Директива 'G'
    CALL TSTHD
    JZ DIR_G1
    XCHG
    SHLD MF7C3
    MOV A,M
    STA MF7C5
    MVI M,0F7h
    MVI A,0C3h
    STA 0030h
    LXI H,RST6_VECTOR
    SHLD 0031h
    
    DIR_G1:
    LXI SP,MF7B8
    POP B
    POP D
    POP H
    POP PSW
    SPHL
    LHLD MF7B6
    JMP MF7C6
    
    
    DIR_R:
    ; Директива 'R'
    MOV A,H
    OUT 0FAh
    
    DIR_R1:
    MOV A,L
    OUT 0F9h
    IN 0F8h
    STAX B
    INX B
    CALL TstEND1
    JMP DIR_R1
    
    
    GET_POS:
    LHLD VAR_POS
    RET
    
    
    GET_SIMB_A:
    ; Символ в позиции курсора
    ; O: [A]=код символа
    PUSH H
    LHLD VAR_POS
    MOV A,M
    POP H
    RET
    
    
    DIR_I:
    ; Директива 'I'
    LDA MF7CD
    ORA A
    JZ DIR_I1
    MOV A,E
    STA MF7CF
    
    DIR_I1:
    CALL TAPE_LdDUMP
    CALL PR[HL]
    XCHG
    CALL PR[HL]
    XCHG
    PUSH B
    CALL GET_CSUM
    MOV H,B
    MOV L,C
    CALL PR[HL]
    POP D
    CALL TSTHD
    RZ
    XCHG
    CALL PR[HL]
    
    ERR_EXIT:
    ; Выход по ошибке
    MVI A,'?'
    CALL PRINT_A
    JMP HOT_START
    
    
    TAPE_LdDUMP:
    ; Загрузка блока с МГ
    MVI A,0FFh
    CALL TAPE_LdWRD2
    PUSH H
    DAD B
    XCHG
    CALL TAPE_LdWORD
    POP H
    DAD B
    XCHG
    PUSH H
    CALL TAPE_LdDMPE
    MVI A,0FFh
    CALL TAPE_LdWRD2
    POP H
    RET
    
    ; %%% ???
    MVI B,0
    
    MFAC8:
    MOV M,B
    INX H
    MOV A,H
    CPI 0F0h
    JNZ MFAC8
    POP D
    POP H
    RET
    
    
    MSG_UT88:DB 31,26
    DB '*`t/88*',0 ; *ЮТ/88*
    
    
    TAPE_LdWORD:
    MVI A,8
    
    TAPE_LdWRD2:
    CALL TAPE_LdBYTE
    MOV B,A
    MVI A,8
    CALL TAPE_LdBYTE
    MOV C,A
    RET
    
    
    TAPE_LdDMPE:
    MVI A,8
    CALL TAPE_LdBYTE
    MOV M,A
    CALL TstEND1
    JMP TAPE_LdDMPE
    
    
    GET_CSUM:
    ; Вычисление контрольной суммы
    LXI B,0
    
    GET_CSUM1:
    MOV A,M
    ADD C
    MOV C,A
    JNC GET_CSUM2
    INR B
    
    GET_CSUM2:
    CALL TSTHD
    RZ
    INX H
    JMP GET_CSUM1
    
    
    DIR_O:
    ; Директива 'O'
    MOV A,C
    ORA A
    JZ DIR_O1
    STA MF7D0
    
    DIR_O1:
    PUSH H
    CALL GET_CSUM
    POP H
    CALL PR[HL]
    XCHG
    CALL PR[HL]
    XCHG
    PUSH H
    MOV H,B
    MOV L,C
    CALL PR[HL]
    POP H
    
    TAPE_SvDUMP:
    ; Запись блока на МГ
    PUSH B
    LXI B,0
    
    TAPE_SvDMP1:
    CALL TAPE_SvBYTE
    DCR B
    XTHL
    XTHL
    JNZ TAPE_SvDMP1
    MVI C,0E6h
    CALL TAPE_SvBYTE
    CALL TAPE_SvWORD
    XCHG
    CALL TAPE_SvWORD
    XCHG
    CALL TAPE_SvEBYT
    LXI H,0
    CALL TAPE_SvWORD
    MVI C,0E6h
    CALL TAPE_SvBYTE
    POP H
    CALL TAPE_SvWORD
    RET
    
    
    PR[HL]:
    PUSH B
    CALL PR_4RIGHT
    MOV A,H
    CALL PRINT_HEX
    MOV A,L
    CALL PRH_SPC
    POP B
    RET
    
    
    TAPE_SvEBYT:
    MOV C,M
    CALL TAPE_SvBYTE
    CALL TstEND1
    JMP TAPE_SvEBYT
    
    TAPE_SvWORD:
    ; Запись слова на МГ
    ; I: [HL]=word
    MOV C,H
    CALL TAPE_SvBYTE
    MOV C,L
    JMP TAPE_SvBYTE
    
    
    TAPE_LdBYTE:
    JMP TAPE_L_BYTE
    
    
    TAPE_LBYTE:
    MOV D,A
    
    TAPE_LBYTE1:
    LXI H,0
    DAD SP
    LXI SP,0
    SHLD MF7C0
    MVI C,0
    IN 0A1h
    ANI 1
    MOV E,A
    
    TAPE_LBYTE2:
    POP PSW
    MOV A,C
    ANI 7Fh
    RLC
    MOV C,A
    MVI H,0
    
    ;$-10
    DCR H
    JZ TAPE_LBYTE6
    POP PSW
    IN 0A1h
    ANI 1
    CMP E
    JZ $-10
    ORA C
    MOV C,A
    DCR D
    LDA MF7CF
    JNZ $+5
    SUI 12h
    ;$+5
    MOV B,A
    
    ;$-2
    POP PSW
    DCR B
    JNZ $-2
    INR D
    IN 0A1h
    ANI 1
    MOV E,A
    MOV A,D
    ORA A
    JP TAPE_LBYTE5
    MOV A,C
    CPI 0E6h
    JNZ TAPE_LBYTE3
    XRA A
    STA MF7CE
    JMP TAPE_LBYTE4
    
    TAPE_LBYTE3:
    CPI 19h
    JNZ TAPE_LBYTE2
    MVI A,0FFh
    STA MF7CE
    
    TAPE_LBYTE4:
    MVI D,9
    
    TAPE_LBYTE5:
    DCR D
    JNZ TAPE_LBYTE2
    LHLD MF7C0
    SPHL
    LDA MF7CE
    XRA C
    JMP EI_AllRET
    
    TAPE_LBYTE6:
    LHLD MF7C0
    SPHL
    MOV A,D
    ORA A
    JP ERR_EXIT
    CALL CHK_ERR
    JMP TAPE_LBYTE1
    
    
    TAPE_SvBYTE:
    ; Запись байта на МГ
    JMP TAPE_S_BYTE
    
    
    TAPE_sBYTE:
    PUSH PSW
    LXI H,0
    DAD SP
    LXI SP,0
    MVI D,8
    
    TAPE_sBYTE1:
    POP PSW
    MOV A,C
    RLC
    MOV C,A
    MVI A,1
    XRA C
    OUT 0A1h
    NOP
    LDA MF7D0
    MOV B,A
    
    TAPE_sBYTE2:
    POP PSW
    DCR B
    JNZ TAPE_sBYTE2
    MVI A,0
    XRA C
    OUT 0A1h
    NOP
    DCR D
    LDA MF7D0
    JNZ TAPE_sBYTE3
    SUI 0Eh
    
    TAPE_sBYTE3:
    MOV B,A
    
    TAPE_sBYTE4:
    POP PSW
    DCR B
    JNZ TAPE_sBYTE4
    INR D
    DCR D
    JNZ TAPE_sBYTE1
    SPHL
    POP PSW
    JMP EI_AllRET
    
    ExRET:
    RET
    
    
    PRINT_HEX:
    PUSH PSW
    RRC
    RRC
    RRC
    RRC
    CALL PRINT_HEX1
    POP PSW
    
    PRINT_HEX1:
    ANI 0Fh
    CPI 10
    JM PRINT_DIG
    ADI 7
    
    PRINT_DIG:
    ADI '0'
    
    PRINT_A:
    MOV C,A
    
    PRINT_C:
    ; ВывоД символа
    ; I: [C]=код (ASCII)
    PUSH H
    PUSH B
    PUSH D
    PUSH PSW
    LHLD MF7B2
    INX H
    MOV A,M
    ANI 7Fh
    MOV M,A
    DCX H
    LXI D,E_PRINTC
    PUSH D
    LDA MF7F8
    DCR A
    JM PRINT_C4
    JZ PRINT_C1
    JPO PRINT_C6
    MOV A,C
    SBI ' '
    MOV C,A
    
    ;$-7
    DCR C
    JM PRINT_C2
    CALL PRC_RIGHT
    JMP $-7
    
    PRINT_C2:
    XRA A
    
    PRINT_C3:
    STA MF7F8
    RET
    
    PRINT_C4:
    MOV A,C
    CPI 27
    JZ PRC_AR2
    CPI 31
    JZ PRC_CLS
    CPI 8
    JZ PRC_LEFT
    CPI 24
    JZ PRC_RIGHT
    CPI 25
    JZ PRC_UP
    CPI 26
    JZ PRC_DOWN
    CPI 10
    JZ PRC_PS
    CPI 12
    JZ PRC_HOME
    MOV A,H
    CPI 0EFh
    JNZ PRINT_C7
    
    PRINT_C5:
    CALL KBRD_STAT
    ORA A
    JZ $+6
    CALL INPUT_KEY
    
    ;$+6
    CALL PRINT_C9
    LXI H,0EEBFh
    
    PRINT_C7:
    MOV A,M
    ANI 80h
    ORA C
    MOV M,A
    INX H
    POP D
    
    E_PRINTC:
    SHLD MF7B2
    INX H
    MOV A,M
    ORI 80h
    MOV M,A
    LXI D,1800h
    DAD D
    SHLD VAR_POS
    POP PSW
    POP D
    POP B
    POP H
    RET
    
    PRC_CLS:
    CALL CLS
    
    PRC_HOME:
    LXI H,BUF_SCREEN
    RET
    
    
    CLS:
    ; Очистка экрана
    LXI H,BUF_SCREEN
    
    CLS1:
    MVI M,' '
    INX H
    MOV A,H
    CPI 0F0h
    RZ
    JMP CLS1
    
    
    PRC_RIGHT:
    INX H
    MOV A,H
    CPI 0EFh
    RNZ
    JZ PRC_HOME
    
    PRC_LEFT:
    DCX H
    MOV A,H
    CPI 0E7h
    RNZ
    LXI H,0EEFFh
    RET
    
    PRC_DOWN:
    LXI D,0040h
    DAD D
    MOV A,H
    CPI 0EFh
    RNZ
    MVI H,0E8h
    RET
    
    PRC_UP:
    LXI D,0FFC0h
    DAD D
    MOV A,H
    CPI 0E7h
    RNZ
    LXI D,0800h
    DAD D
    RET
    
    PRC_PS:
    INX H
    MOV A,L
    ANI 3Fh
    JNZ PRC_PS
    MOV A,H
    CPI 0EFh
    JZ PRINT_C5
    RET
    
    PRINT_C9:
    LXI H,BUF_SCREEN+40h
    LXI D,BUF_SCREEN
    
    ;$-7
    MOV A,M
    STAX D
    INX D
    INX H
    MOV A,H
    CPI 0EFh
    JNZ $-7
    LXI H,0EEC0h
    MVI A,' '
    
    ;$-2
    MOV M,A
    INR L
    JNZ $-2
    RET
    
    
    PRINT_C1:
    MOV A,C
    CPI 59h
    JNZ PRINT_C2
    CALL PRC_HOME
    MVI A,2
    JMP PRINT_C3
    
    PRINT_C6:
    MOV A,C
    SBI ' '
    MOV C,A
    
    ;$-9
    DCR C
    MVI A,4
    JM PRINT_C3
    CALL PRC_DOWN
    JMP $-9
    
    
    PRC_AR2:
    MVI A,1
    JMP PRINT_C3
    
    
    INPUT_KEY:
    ; Ввод символа с клавиатуры
    ; O: [A]=код символа
    PUSH H
    PUSH D
    PUSH B
    MVI A,7Fh
    STA MF7F3
    
    INKEY1:
    CALL SCAN_KEYS
    CPI 0FFh
    JNZ INKEY2
    MVI A,0
    STA MF7F3
    MVI A,0
    STA MF7F4
    JMP INKEY1
    
    INKEY2:
    MOV D,A
    LDA MF7F4
    ANA A
    JNZ INKEY3
    LDA MF7F3
    ANA A
    JZ INKEY3
    LDA MF7F3
    DCR A
    STA MF7F3
    JNZ INKEY1
    MVI A,1
    STA MF7F4
    
    INKEY3:
    CALL INKEY4
    MOV A,D
    POP B
    POP D
    POP H
    RET
    
    
    SCAN_KEYS:
    ; Опрос клавиатуры
    ; O: [A]=код нажатой клавиши или FFh
    PUSH B
    
    SCAN_KEY1:
    CALL SCAN_KEY2
    MOV B,A
    ; задержка
    MVI C,0FFh
    ;$-1
    DCR C
    JNZ $-1
    CALL SCAN_KEY2
    CMP B
    JNZ SCAN_KEY1
    POP B
    RET
    
    SCAN_KEY2:
    PUSH B
    PUSH D
    PUSH H
    MVI B,0
    MVI C,0FEh
    MVI D,8
    
    SCAN_KEY3:
    MOV A,C
    OUT 7
    RLC
    MOV C,A
    IN 6
    ANI 7Fh
    CPI 7Fh
    JNZ SCAN_KEY4
    MOV A,B
    ADI 7
    MOV B,A
    DCR D
    JNZ SCAN_KEY3
    IN 6
    ANI 80h
    JZ AFF_AllRET
    MVI A,0FEh
    JMP AllRET
    
    AFF_AllRET:
    MVI A,0FFh
    
    AllRET:
    POP H
    POP D
    POP B
    RET
    
    SCAN_KEY4:
    RAR
    JNC SCAN_KEY5
    INR B
    JMP SCAN_KEY4
    
    SCAN_KEY5:
    MOV A,B
    CPI '0'
    JNC SCAN_KEY7
    ADI '0'
    CPI '<'
    JC SCAN_KEY6
    CPI '@'
    JNC SCAN_KEY6
    ANI 2Fh
    
    SCAN_KEY6:
    MOV C,A
    JMP SCAN_KEY8
    
    SCAN_KEY7:
    LXI H,ESC_CODES
    SUI '0'
    MOV C,A
    MVI B,0
    DAD B
    MOV A,M
    JMP AllRET
    
    SCAN_KEY8:
    IN 5
    ANI 7
    CPI 7
    JZ SCAN_KEY12
    RAR
    RAR
    JNC SCAN_KEY9
    RAR
    JNC SCAN_KEY10
    MOV A,C
    ORI 20h
    JMP AllRET
    
    SCAN_KEY9:
    MOV A,C
    ANI 1Fh
    JMP AllRET
    
    SCAN_KEY10:
    MOV A,C
    CPI 40h
    JNC AllRET
    CPI 30h
    JNC SCAN_KEY11
    ORI 10h
    JMP AllRET
    
    SCAN_KEY11:
    ANI 2Fh
    JMP AllRET
    
    SCAN_KEY12:
    MOV A,C
    JMP AllRET
    
    
    ESC_CODES:DB 32,24,8,25,26,13,31,12
    
    
    INKEY4:
    MVI C,0BFh
    
    ;$-12
    CALL INKEY5
    OUT 0A1h
    CMA
    CALL INKEY5
    OUT 0A1h
    DCR C
    JNZ $-12
    
    INKEY5:
    MVI B,2Fh
    ;$-1
    DCR B
    JNZ $-1
    RET
    
    
    ; %%% FE63h:
    ;$-4
    IN 6
    ANI 80h
    JNZ $-4
    RET
    
    
    KBRD_STAT:
    XRA A
    OUT 7
    IN 6
    CMA
    ANI 7Fh
    RZ
    ORI 0FFh
    RET
    
    
    MFE77:
    LHLD MF7D1
    RET
    
    MFE7B:
    SHLD MF7D1
    RET
    
    
    MSG_PROMPT:DB 13,10,24,'=>',0
    
    MSG_4RIGHT:DB 13,10,24,24,24,24,0
    
    MSG_REGS:DB 13,10
    DB ' PC-',13,10
    DB ' HL-',13,10
    DB ' BC-',13,10
    DB ' DE-',13,10
    DB ' SP-',13,10
    DB ' AF-'
    DDB 25,6
    DB 0
    
    
    MSG_BKSPC:DB 8,32,8,0
    
    
    RST6_VECTOR:
    ; Обработчик RST 6 (CALL 30h)
    SHLD MF7B6
    PUSH PSW
    POP H
    SHLD MF7BE
    POP H
    DCX H
    SHLD MF7B4
    LXI H,0
    DAD SP
    LXI SP,MF7BE
    PUSH H
    PUSH D
    PUSH B
    LHLD MF7B4
    LXI SP,STACK
    CALL PR[HL]
    XCHG
    LHLD MF7C3
    CALL TSTHD
    JNZ HOT_START
    LDA MF7C5
    MOV M,A
    JMP HOT_START
    
    
    DIR_X:
    ; Директива 'X'
    LXI H,MSG_REGS
    CALL PRINT_MSG
    LXI H,MF7B4
    MVI B,6
    
    DIR_X1:
    MOV E,M
    INX H
    MOV D,M
    PUSH B
    PUSH H
    XCHG
    CALL PR[HL]
    CALL INPUT_CMDL
    JNC DIR_X2
    CALL MF957
    POP D
    PUSH D
    XCHG
    MOV M,D
    DCX H
    MOV M,E
    
    DIR_X2:
    POP H
    POP B
    DCR B
    INX H
    JNZ DIR_X1
    RET
    
    
    CPI_PART2:
    CPI 'B'
    JZ DIR_B
    CPI 'W'
    JZ DIR_W
    CPI 'V'
    JZ DIR_V
    JMP CPI_PART3
    
    
    DIR_V:
    ; Директива 'V'
    DI
    LXI H,0
    LXI B,017Ah
    IN 0A1h
    ANA B
    MOV E,A
    
    DIR_V1:
    IN 0A1h
    ANA B
    CMP E
    JZ DIR_V1
    MOV E,A
    
    DIR_V2:
    IN 0A1h
    ANA B
    INX H
    CMP E
    JZ DIR_V2
    MOV E,A
    DCR C
    JNZ DIR_V2
    DAD H
    DAD H
    MOV A,H
    ORA A
    JM DIR_V3
    CMA
    ANI 20h
    RRC
    RRC
    RRC
    MOV B,A
    RRC
    RAR
    ADD B
    INR A
    MOV B,A
    MOV A,H
    SUB B
    
    DIR_V3:
    STA MF7CF
    EI
    CALL PRH_SPC
    JMP HOT_START
    
    
    DB 0FFh
    
    
    TAPE_L_BYTE:
    DI
    PUSH H
    PUSH B
    PUSH D
    JMP TAPE_LBYTE
    
    
    EI_AllRET:
    POP D
    POP B
    POP H
    EI
    JMP ExRET
    
    
    TAPE_S_BYTE:
    DI
    PUSH H
    PUSH B
    PUSH D
    JMP TAPE_sBYTE
    
    
    CPI_PART3:
    CPI 'K'
    JZ DIR_K
    JMP HOT_START
    
    
    DIR_K:
    ; Директива 'K'
    PUSH H
    CALL GET_CSUM
    POP H
    CALL PR[HL]
    XCHG
    CALL PR[HL]
    XCHG
    PUSH H
    MOV H,B
    MOV L,C
    CALL PR[HL]
    POP H
    JMP HOT_START
    
    
    DDB 0FFh,35
    
    ; %%% FFC0h:
    NOP
    DI
    PUSH PSW
    PUSH B
    PUSH D
    PUSH H
    LXI H,BUF_CONST
    LXI D,0F6FDh
    MVI B,3
    
    ;$-13
    LDAX D
    INR A
    DAA
    STAX D
    CMP M
    JNZ $+11
    XRA A
    STAX D
    INX H
    INX D
    DCR B
    JNZ $-13
    
    ;$+11
    LHLD 0F6FEh
    LDA 0F6FDh
    STA 9000h
    SHLD 9001h
    POP H
    POP D
    POP B
    POP PSW
    EI
    RET
    
    
    BUF_CONST:
    DB 60h
    DB 60h
    DB 24h
    
    
    DIR_B:
    ; Директива 'B'
    LHLD 0C3FEh
    LDA 0C3FDh
    RST 5
    RST 3
    JMP HOT_START
    
    NOP
    NOP
    
    END
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

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

  3. #2

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    в i8080 мнемонике:
    а так адептов мнемоники 8080 надо принудительно переучивать в исправительно трудовых лагерях на мнемонику z80

  4. #3
    HardWareMan
    Гость

    По умолчанию

    NEO SPECTRUMAN, проще пристрелить адептов мнемоник z80.

  5. #4

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    проще пристрелить адептов мнемоник z80.
    по моиму их в 1100500 раз большо

    да и сами интел потом явно урезали список аббревиатур
    в последующих процах
    явно не от того что такой подход правильный

    впридачу з80 подход
    возволяет свободно расширить набор регистров в 300 раз
    и при этом не потребуется вводить ни одной новой мнемоники которую придется доучивать
    Последний раз редактировалось NEO SPECTRUMAN; 03.04.2019 в 16:40.

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

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

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

Похожие темы

  1. Наводки от монитора
    от Arix в разделе Корвет
    Ответов: 9
    Последнее: 24.01.2021, 18:12
  2. Дизасм ОТПС 2.0
    от esl в разделе Корвет
    Ответов: 3
    Последнее: 12.12.2019, 14:44
  3. Ответов: 76
    Последнее: 22.08.2019, 21:33
  4. Дизасм
    от next в разделе Софт
    Ответов: 11
    Последнее: 20.12.2012, 12:46
  5. Всё про асмы говорите - а я хочу дизасм!
    от lvd в разделе Программирование
    Ответов: 21
    Последнее: 12.04.2005, 16:58

Ваши права

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