Просмотр полной версии : Дизасм ПЗУ монитора 0 и F
NEO SPECTRUMAN
30.03.2019, 05:03
не знаю было ли такое
мож кому пригодиться
вот посидел вечерком
по вспоминал как и что тыкать в иде
есное дело все под мнемонику z80 (ибо другие НЕ НУЖНЫ)
компилятор + интуитивно понятный батник в комплекте
оригинальный ром и скомпилированный вроде бы совпадают
сорец местами слегка прокомментирован
оригинальный файл иды и ром в комплекте
68603 - скачать платно и с СМС через 90 минут
Раз такая пьянка, то вот мой вариант, в 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
NEO SPECTRUMAN
03.04.2019, 15:25
в i8080 мнемонике:
а так адептов мнемоники 8080 надо принудительно переучивать в исправительно трудовых лагерях на мнемонику z80 :v2_dizzy_bomb:
HardWareMan
03.04.2019, 16:33
NEO SPECTRUMAN, проще пристрелить адептов мнемоник z80.
NEO SPECTRUMAN
03.04.2019, 16:35
проще пристрелить адептов мнемоник z80.
по моиму их в 1100500 раз большо
да и сами интел потом явно урезали список аббревиатур
в последующих процах
явно не от того что такой подход правильный
впридачу з80 подход
возволяет свободно расширить набор регистров в 300 раз
и при этом не потребуется вводить ни одной новой мнемоники которую придется доучивать
HardWareMan
03.04.2019, 16:38
Так торопился, что начал ошибки делать. Эти LD до добра не доводят. :) Хотя, помогает в работе с ARM.
NEO SPECTRUMAN
03.04.2019, 17:00
Эти LD до добра
да пусть даже моv
но обзывть
mov a,b
mov a,(hl)
mov a,(bc)
mov a,nn
разными словами
это тупо...
хотя нызвать копирование
перемещением
это тоже нужно постараться...
- - - Добавлено - - -
впридачу з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 ЕРЕСИ?
кроме синдрома уточки?
- - - Добавлено - - -
Хотя, помогает в работе с ARM.
еще есть всякие атмелы
правда там еще и ldi и ldd
без которых можно было обойтись
Давайте не будем в 100500-ый раз заводить старую шарманку, а?
Я, например, работаю строго на Орионе, большом горячем и железном, и хронически не понимаю смысла в мнемониках Z80 и тем более всяких кросс-компиляторах на писи и иже с ними в этой связи.
Кому как удобно и точка.
NEO SPECTRUMAN
03.04.2019, 18:13
строго на Орионе, большом горячем и железном
ну буду говорить что напрумую зависит
но примечательно
что машины на 8080 совсем не могут похвастаться таким же софтом как на машинах с z80
да и расширенный набор команд з80
тут явно не причем
пушо он в основном намного медленее чем основной совместимый с 8080
кроме конечно exx ex af,af' которые дают некоторое преимущество
не в мнемониках ли дело
которые остаются недоученными из за своего унылого разннобразия
(я чот постоянно открываю для себя какието недокументированные команды которые не попадались на глаза раньше)
да и код выглядит просто пугающим
видимо многие так и не перешли из бейсика на следующий уровень...
а ld один раз вник в принцип
и все и забыть его нельзя
впомнить как сделать на 8080
ld a,(hl)
ld a,nn
тем более всякие add sub cp...
я немогу
хотя я с ним немного работал
хотя из знаний других асмов могу предположить что второе
mvi a,nn (тк всякие там immediate)
- - - Добавлено - - -
авайте не будем в 100500-ый раз заводить старую шарманку, а?
а что поделать
"в интернетах кто то не прав" :v2_tong2:
- - - Добавлено - - -
полез в таблицу м
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)
он как то по другому копирует?
зачем нам нужно знать точные координаты логики команды на кристале?
нам нужно кодить
- - - Добавлено - - -
Раз такая пьянка, то вот мой вариант, в i8080 мнемонике:
Дык
тыж подпиши что это монитор F
ато я как раз хотел спросить а нет ли у тебя и его и
и дизасма "калькулятора"
да и тема про монитор 0
надо переименовать что тут теперь оба
например в "Дизасм ПЗУ монитора 0 и F"
HardWareMan
03.04.2019, 18:18
Всё верно. Специалисты, которые делали i8080 и потом откололись для производства Z80 уже имели статистику использования мнемоник и решили немного помочь программистам, которые не в состоянии выучить полный сет мнемоник. Это безусловно благое дело.
и тут вопрос
а чем
ld a,(hl)
отличается от ld a,(de)
он как то по другому копирует?
Именно по другому. Алсо у программиста не должно быть ложного чувства, что B и D тождественны M. А с LD в это легко вляпаться и придется учить "ограничения".
NEO SPECTRUMAN
03.04.2019, 18:25
в это легко вляпаться и придется учить "ограничения".
а ограничения и так надо уточнять
пушо к сожалению
мнепоники не передают влияния на флаги
и с таблицей влияния на флаги нужно постоянно сверятся
но намного проще знать все существующие команды и быстро сверить влияние на флаги
чем незнать 15 варинтов одной и той же команды
и я все время говорю
8080 подход не позволяет проводить последующее наращивание команд и расширение
- - - Добавлено - - -
Кстате на счет самого ют88
набортные часы
являются обязательной частью компутера?
они сохраняются в последующей расширенной версии?
или на их наличие не стоит расчитыать?
HardWareMan
03.04.2019, 18:29
а ограничения и так надо уточнять
пушо к сожалению
мнепоники не передают влияния на флаги
и с таблицей влияния на флаги нужно постоянно сверятся
Мнемоники i8080 как раз таки объясняют флаги, лол. Ведь они объясняют тонкость опкода. Я понимаю, что глупо это объяснять тому, кто сразу писал на Z80.
и я все время говорю
8080 подход не позволяет проводить последующее наращивание команд и расширение
А i8080 был и так напичкан до предела. Не было задачи его расширять. Не понятно, правда, почему его мнемоники попали в более ёмкий процессор i8086...
В любом случае, это оффтопик тут, давай закругляться.
NEO SPECTRUMAN
03.04.2019, 18:30
Z80 уже имели статистику использования мнемоник и решили немного помочь программистам, которые не в состоянии выучить полный сет мнемоник. Это безусловно благое дело.
кстате кроме команд я помню практически всю их растактовку
кстате год назад я помнил и растактовку этих же команд для 8080...
то есть у меня не настолько плохая уж память
HardWareMan
03.04.2019, 18:32
кстате кроме команд я помню практически всю их растактовку
кстате год назад я помнил и растактовку этих же команд для 8080...
Лол, мнемоника i8080 и растактовку подсказывает. :)
NEO SPECTRUMAN
03.04.2019, 18:35
Мнемоники i8080 как раз таки объясняют флаги, лол.
но для этого нужно прочитать 100500 страниц текста
для начало кодинга на z80
нужно прочитать одну страничку
у кого преимущества?
дальше помере использования
узнаются и тонкости работы каждой команды
пушо еще приходится использовать и сами опкоды
смотреть таблицы мнемоник сортированных по опкодам
да и по растактовке команд и так ясно что одни и те же похожие команды
физически имеют разное исполнение
- - - Добавлено - - -
Лол, мнемоника i8080 и растактовку подсказывает.
обоснуй
- - - Добавлено - - -
В любом случае, это оффтопик тут, давай закругляться.
все суть темы в первых постах
дальше можно и поофтопить
HardWareMan
03.04.2019, 18:38
обоснуй
От "обоснуя" слышу. Ты же сказал, что знаешь опкоды i8080, сама мнемоника подсказывает какие операнды должны быть, исходя из этого её длительность рассчитывается с точностью до такта. Исключение пара команд, вроде DAD.
NEO SPECTRUMAN
03.04.2019, 18:40
Аще
мне интересно
как сложение 4 такта на 8080
может выполнятся быстрее чем копирование 5 тактов
о_О
HardWareMan
03.04.2019, 18:41
но для этого нужно прочитать 100500 страниц текста
для начало кодинга на z80
нужно прочитать одну страничку
у кого преимущества?
Лолват? Вот, всё, что нужно знать о i8080:
https://jpegshare.net/images/ac/b4/acb4bfaa387798b56aec878469e1303e.png
И еще такой же лист для опкодов. Сравни с 5ти страничным листингов для z80 из всем известной книжки.
NEO SPECTRUMAN
03.04.2019, 18:42
исходя из этого её длительность рассчитывается с точностью до такта. Исключение пара команд, вроде DAD.
MOV C,L
MOV C,M
HardWareMan
03.04.2019, 18:43
Аще
мне интересно
как сложение 4 такта на 8080
может выполнятся быстрее чем копирование 5 тактов
о_О
А это описано в мегакнижке Intel 8080 Microcomputer Systems Users Manual и называется "перекрытие". Таков дизайн i8080.
- - - Добавлено - - -
MOV C,L
MOV C,M
M - Memory, not real REGISTER. Лол.
NEO SPECTRUMAN
03.04.2019, 18:46
"перекрытие". Таков дизайн i8080.
там же всего пару команд начинают фетчится когда предыдущая еще работает о_О
или речь не о том?
к сожалению таблицы с более низкоуровневой растактовкой подрукой нет...
- - - Добавлено - - -
M - Memory, not real REGISTER. Лол.
но для них одна мнемоника
так что лол с моей стороны...
HardWareMan
03.04.2019, 18:49
там же всего пару команд начинают фетчится когда предыдущая еще работает о_О
или речь не о том?
Работа с аккумулятором идет на внутренней шине аккумулятора. За это время i8080 уже успевает считать следующий опкод.
https://jpegshare.net/images/65/b4/65b45bcfdf048f0992f4a066c5c89a62.png
https://jpegshare.net/images/20/00/200066454aaa1bc0c265a11e623a0630.png
- - - Добавлено - - -
но для них одна мнемоника
так что лол с моей стороны...
И противоречия нет, так как M имеет полный функционал обычного R, лол.
NEO SPECTRUMAN
03.04.2019, 19:00
И противоречия нет, так как M имеет полный функционал обычного R, лол.
а как же по мнемонике узнать количество тактов
уще у каждой и по 2 значения на случай использования (hl)...
как то с натяжкой это...
- - - Добавлено - - -
да за эти таблицы я и говорил
чот еле их скачал
лучшо давай на такое ссылку
превиев не хочет что либо открывать
- - - Добавлено - - -
У тебя нет такой же для z80 ?
мне не попадалась вроде
HardWareMan
03.04.2019, 19:05
а как же по мнемонике узнать количество тактов
уще у каждой и по 2 значения на случай использования (hl)...
как то с натяжкой это...
Всё просто: мнемоника - 4 такта. Остальное добавляем по 3 такта на каждый байт или обращение к шине. Это сразу говорит и о длине машинной команды. Исключение только команда DAD, т.к. она однобайтная, но работает 3 цикла (4+3+3). Я не понимаю, как до этого можно не догадаться?
- - - Добавлено - - -
У тебя нет такой же для z80 ?
мне не попадалась вроде
Её нет в принципе. Самое удобоваримое что я видел описано во всем известной книжке известного автора.
http://www.pchistory.lv/wp-content/uploads/zx-spectrum_dlja-polzovatelej.jpg
NEO SPECTRUMAN
03.04.2019, 19:09
Самое удобоваримое что я видел описано во всем известной книжке известного автора.
мне это ничего не говорит
разве что речь о фирменном мануале
ага потом загляну
- - - Добавлено - - -
Всё просто: мнемоника - 4 такта. Остальное добавляем по 3 такта на каждый байт или обращение к шине. Это сразу говорит и о длине машинной команды.
кажись проще запомнить оно как цифру сбоку в коментах
не вникая в подробности...
HardWareMan
03.04.2019, 19:11
мне это ничего не говорит
разве что речь о фирменном мануале
Добавил обложку.
кажись проще запомнить оно как цифру сбоку в коментах
не вникая в подробности...
Действительно, а зачем программисту думать?
NEO SPECTRUMAN
03.04.2019, 19:12
Действительно, а зачем программисту думать?
ну ему нужно думать о коде и оптимизации
а не о названии команды которая делает add (hl)
и что там где внутри проца при этом...
и не о том как заставить компилятор компилировать очевидную же моску конструкцию...
HardWareMan
04.04.2019, 07:01
Зато мнемоники i8080 позволяют компилировать прямо в голове на бумажку (в том числе перфокарту) всего одним средней подготовленности человеком. И есть исторический факт этого. Для подуставших Z80-водов подскажу: Altair 8800 и Билли, мать его, Гейтс в компании с Полом Алленом. Шах и мат.
NEO SPECTRUMAN
04.04.2019, 20:53
Altair 8800 и Билли, мать его, Гейтс в компании с Полом Алленом. Шах и мат.
а не отлаживали ли они его на эмуляторе?
ато такие прям все гениальные
сголовы да на перфоленту (а не перфокарту)
- - - Добавлено - - -
Шах и мат.
рокировка
не на того напал )
Gates and Allen had neither an interpreter nor even an Altair system on which to develop and test one. However, Allen had written an Intel 8008 emulator for their previous venture Traf-O-Data that ran on a PDP-10 time-sharing computer. He adapted this emulator based on the Altair programmer guide, and they developed and tested the interpreter on Harvard's PDP-10. Harvard officials were not pleased when they found out, but there was no written policy that covered the use of this computer.[8] Gates and Allen bought computer time from a timesharing service in Boston to complete their BASIC program debugging.
- - - Добавлено - - -
теплый и биоразлагаемый
https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Altair_BASIC_Paper_Tape.jpg/640px-Altair_BASIC_Paper_Tape.jpg
- - - Добавлено - - -
Вощем все они отлаживали
а не прям из коробки запустилось
как у дядюшки Синклера в отечественных письменных источниках
Lethargeek
04.04.2019, 22:39
КАКИЕ АРГУМЕНТЫ У СТОРОННИКОВ 8080 ЕРЕСИ?
кроме синдрома уточки?
ни разу не сторонник 8080 ереси, но во времена динозавров плюсом мог считаться меньший расход памяти на ассемблерный текст
но во-1 незначительно, во-2 за счёт непропорционального расходования мозгов программиста, в-3 неактуально уже в 80-х
NEO SPECTRUMAN
04.04.2019, 22:42
но во времена динозавров плюсом мог считаться меньший расход памяти на ассемблерный текст
во времена динозавров предлогалось
компилировать сорец на бумашке
а потом вбивать это безобразие ручками...
Lethargeek
04.04.2019, 22:45
ну не безальтернативно же, да и ассемблер тогда уж необязателен, пиши сразу 16-ричные коды))
HardWareMan
05.04.2019, 07:29
Вощем все они отлаживали
а не прям из коробки запустилось
как у дядюшки Синклера в отечественных письменных источниках
Дык речь то не за барсика была, тому вообще часть кода третий чел написал (плавающую точку). Речь за то, что было сделано в самолёте. Лично я в своё время в тетрадке написал код расширенного редактора памяти ИЧСХ он заработал сразу, как только я его на следующий день ввёл на кружке через директиву М.
NEO SPECTRUMAN
05.04.2019, 12:00
Речь за то, что было сделано в самолёте.
что было сделано в самолетя яхз
обычно обожествляют билли именно за барсик для компа написанный якобы без компа и который самозапустился еще до того как дошел по почте до получателя...
HardWareMan
05.04.2019, 12:41
что было сделано в самолетя яхз
Ну дык поинтересуйся, или саморазвитие это не про тебя?
Для примирения :v2_dizzy_vodka3:, дизасм Монитора-0 в мнемонике 8080, описание подпрограмм выкладывал в FAQ https://zx-pk.ru/threads/22922-yut-88-faq/page3.html
https://drive.google.com/file/d/1ENKHcr0KOq0YyNdM0ToPIi07Iyy29y8g/view?usp=sharing
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot