PDA

Просмотр полной версии : Дизасм ПЗУ монитора 0 и F



NEO SPECTRUMAN
30.03.2019, 05:03
не знаю было ли такое
мож кому пригодиться

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

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

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

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

68603 - скачать платно и с СМС через 90 минут

Denn
03.04.2019, 13:01
Раз такая пьянка, то вот мой вариант, в 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
без которых можно было обойтись

Denn
03.04.2019, 17:04
Давайте не будем в 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
что было сделано в самолетя яхз
Ну дык поинтересуйся, или саморазвитие это не про тебя?

Alex_LG
08.04.2019, 09:15
Для примирения :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