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

User Tag List

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

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

  1. #1
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,849
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    3 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    Cool Дизасм ПЗУ монитора 0

    не знаю было ли такое
    мож кому пригодиться

    вот посидел вечерком
    по вспоминал как и что тыкать в иде

    есное дело все под мнемонику z80 (ибо другие НЕ НУЖНЫ)
    компилятор + интуитивно понятный батник в комплекте

    оригинальный ром и скомпилированный вроде бы совпадают

    сорец местами слегка прокомментирован
    оригинальный файл иды и ром в комплекте

    ut88_monitor0_disasm_by_NS.zip - скачать платно и с СМС через 90 минут
    Последний раз редактировалось NEO SPECTRUMAN; 04.04.2019 в 23:08.

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

  3. #2
    Veteran Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    1,633
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    10
    Поблагодарили
    5 сообщений
    Mentioned
    2 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
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  4. #3
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,849
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    3 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #4
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    3,409
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  6. #5
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,849
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    3 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

  7. #6
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    3,409
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так торопился, что начал ошибки делать. Эти LD до добра не доводят. Хотя, помогает в работе с ARM.

  8. #7
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,849
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    3 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Эти LD до добра
    да пусть даже моv

    но обзывть
    mov a,b
    mov a,(hl)
    mov a,(bc)
    mov a,nn
    разными словами
    это тупо...

    хотя нызвать копирование
    перемещением
    это тоже нужно постараться...

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

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    впридачу з80 подход
    возволяет свободно расширить набор регистров в 300 раз
    и при этом не потребуется вводить ни одной новой мнемоники которую придется доучивать
    например можно сочинить любую конструкцию
    ld (hl'+bc'+nn),(hl+a+nn)
    ld (hl'+bc'+nn),((hl)+(bc))
    и она остается понятной и читаемой
    не пришлось вводить ни одной новой мнемоники
    1 ld перекрывает собой все
    как такое вы предлагаете обозвать на 8080?
    в стиле 6502? набором бессмысленных букв?
    и это только ld
    легким движением руки не меняя практически ничего
    add (hl'+bc'+nn),(hl+a+nn)
    mul (hl'+bc'+nn),((hl)+(bc))
    все понятно из коробки

    можно даже тягаться а армами и выдумывать команды по условию
    не меняя подхода
    add z a,(hl+bc)
    кому нибудь пришлось лезть в таблицу чтоб узнать что это новая команда
    (если 0 то прибавить к А содержимое ячейки памяти на которую указывает сумма hl+bc) ?
    оно же в стиле 8080 наверное выглядело бы так
    adzxhb a


    КАКИЕ АРГУМЕНТЫ У СТОРОННИКОВ 8080 ЕРЕСИ?
    кроме синдрома уточки?


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

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Хотя, помогает в работе с ARM.
    еще есть всякие атмелы
    правда там еще и ldi и ldd
    без которых можно было обойтись
    Последний раз редактировалось NEO SPECTRUMAN; 03.04.2019 в 18:09.

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

    По умолчанию

    Давайте не будем в 100500-ый раз заводить старую шарманку, а?
    Я, например, работаю строго на Орионе, большом горячем и железном, и хронически не понимаю смысла в мнемониках Z80 и тем более всяких кросс-компиляторах на писи и иже с ними в этой связи.
    Кому как удобно и точка.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  10. #9
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,849
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    3 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    строго на Орионе, большом горячем и железном
    ну буду говорить что напрумую зависит
    но примечательно
    что машины на 8080 совсем не могут похвастаться таким же софтом как на машинах с z80
    да и расширенный набор команд з80
    тут явно не причем
    пушо он в основном намного медленее чем основной совместимый с 8080
    кроме конечно exx ex af,af' которые дают некоторое преимущество

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

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

    а ld один раз вник в принцип
    и все и забыть его нельзя

    впомнить как сделать на 8080
    ld a,(hl)
    ld a,nn
    тем более всякие add sub cp...

    я немогу
    хотя я с ним немного работал
    хотя из знаний других асмов могу предположить что второе
    mvi a,nn (тк всякие там immediate)

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

    Цитата Сообщение от Denn Посмотреть сообщение
    авайте не будем в 100500-ый раз заводить старую шарманку, а?
    а что поделать
    "в интернетах кто то не прав"

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

    полез в таблицу м

    MOV A,M LD A,(HL)
    LDAX B LD A,(BC)
    LDAX D LD A,(DE)
    LDA word LD A,(word)

    и тут вопрос
    а чем
    ld a,(hl)
    отличается от ld a,(de)
    он как то по другому копирует?

    зачем нам нужно знать точные координаты логики команды на кристале?
    нам нужно кодить

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

    Цитата Сообщение от Denn Посмотреть сообщение
    Раз такая пьянка, то вот мой вариант, в i8080 мнемонике:
    Дык
    тыж подпиши что это монитор F
    ато я как раз хотел спросить а нет ли у тебя и его и
    и дизасма "калькулятора"


    да и тема про монитор 0

    надо переименовать что тут теперь оба


    например в "Дизасм ПЗУ монитора 0 и F"
    Последний раз редактировалось NEO SPECTRUMAN; 03.04.2019 в 19:16.

  11. #10
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    3,409
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всё верно. Специалисты, которые делали i8080 и потом откололись для производства Z80 уже имели статистику использования мнемоник и решили немного помочь программистам, которые не в состоянии выучить полный сет мнемоник. Это безусловно благое дело.
    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    и тут вопрос
    а чем
    ld a,(hl)
    отличается от ld a,(de)
    он как то по другому копирует?
    Именно по другому. Алсо у программиста не должно быть ложного чувства, что B и D тождественны M. А с LD в это легко вляпаться и придется учить "ограничения".

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

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

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

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

Похожие темы

  1. Дизасм ОТПС 2.0
    от esl в разделе Корвет
    Ответов: 1
    Последнее: 26.05.2019, 22:48
  2. Наводки от монитора
    от Arix в разделе Корвет
    Ответов: 8
    Последнее: 05.06.2018, 13:54
  3. Ответов: 71
    Последнее: 24.12.2016, 12:00
  4. Дизасм
    от next в разделе Софт
    Ответов: 11
    Последнее: 20.12.2012, 12:46
  5. Всё про асмы говорите - а я хочу дизасм!
    от lvd в разделе Программирование
    Ответов: 21
    Последнее: 12.04.2005, 15:58

Ваши права

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