Вход

Просмотр полной версии : Дизассемблер монитора РК ищу



Дмитрий77
30.05.2020, 18:54
Приветствую уважаемое собрание!

Подскажите, нет ли у кого дизассемблированного монитора. М.б. даже с комментариями. Мне нужно покопаться в кое-каких подпрограммах и может быть, ваши наработки помогут мне выиграть время.

Vital72
31.05.2020, 18:19
чтож такого сложного, получить исходники.
вот -- 72764, без комментов, но разобраться не сложно.
получено моим дизассемблером.
комменты вида "X TIMES" -- это сколько раз ссылаются на данную метку

zebest
31.05.2020, 20:52
чтож такого сложного, получить исходники.
Увлажним задачу, для искателей.
Мой вариант, с камментаме, но в мнемониках Z80
Собирается и работает, еси чО.
Два исходника то лучше, чем ни одного?

Denn
31.05.2020, 21:08
Мой вариант, дизассемблировал на Орион-128 самописным дизассемблером :)



Orion-128 file
RK.AS
; дИЗАССЕМБЛИРОВАЛ DENN
; 13.02.2017

; пОРТ КЛАВИАТУРЫ

PT_KB1:EQU 8001H
PT_KB0:EQU 8000H
PT_KB2:EQU 8002H
PT_KB3:EQU 8003H

; пОРТ ROM-ДИСКА

PT_RD0:EQU 0A000H
PT_RD1:EQU 0A001H
PT_RD2:EQU 0A002H
PT_RD3:EQU 0A003H

; рЕГИСТРЫ вг75

VG_R0:EQU 0C000H
VG_R1:EQU 0C001H

; рЕГИСТРЫ вт57 (ТОЛЬКО ЗАПИСЬ)

VT_R4:EQU 0E004H
VT_R8:EQU 0E008H


STACK:EQU 76CFH; СТЕК мОНИТОРА
STACK2:EQU 7618H
RAMTOP:EQU 75FFH
ExtPRG:EQU 0F000H; АДРЕС ПЕРЕХОДА ПО 'U'

VidBEG:EQU 77C2H; НАЧАЛО ВИДИМОЙ ОБЛАСТИ
VidEND:EQU 765FH; КОНЕЦ ВИДИМОЙ ОБЛАСТИ
ScrEND:EQU 7FF4H; КОНЕЦ ЭКРАННОЙ ОБЛАСТИ


; сИСТЕМНЫЕ ПЕРЕМЕННЫЕ

M_eVID:EQU 7600H; РАЗРЕШЕНИЕ ОТОБРАЖЕНИЯ ВИДЕО
M_cPOS:EQU 7602H; ТЕКУЩАЯ ПОЗИЦИЯ КУРСОРА

M_PCHR:EQU 7604H; ПЕРЕМЕННАЯ П/П PRC
M_PKEY:EQU 7605H; ПЕРЕМЕННАЯ П/П KEY
M_RULA:EQU 7606H; рус/LAT
M_KEY1:EQU 7609H
M_KEY2:EQU 760BH
M_SFST:EQU 760DH
M_RRST:EQU 7614H

M_ADDR:EQU 7616H; СОХР-Е [HL] (АДРЕСА)
M_STAK:EQU 761CH; СОХР-Е СТЕКА
M_RST2:EQU 761EH
M_SvDE:EQU 7623H; СОХР-Е [DE] (GOTO)
M_SvOC:EQU 7625H; СОХР-Е КОМАНДЫ (GOTO)
M_GOTO:EQU 7626H; ВЕКТОР ПЕРЕХОДА (GOTO)

; === НАЧАЛО ОБНУЛЯЕМОЙ ОБЛАСТИ ПЕРМЕННЫХ ===
M_[HL]:EQU 7627H; СОХР-Е [HL]
M_[DE]:EQU 7629H; СОХР-Е [DE]
M_[BC]:EQU 762BH; СОХР-Е [BC]
M_MGLD:EQU 762DH; ПЕРЕМЕННАЯ П/П ЧТЕНИЯ мг
; === КОНЕЦ ОБНУЛЯЕМОЙ ОБЛАСТИ ПЕРМЕННЫХ ===

M_LDBT:EQU 762EH; ПЕРЕМЕННАЯ П/П ЧТЕНИЯ БАЙТА
M_C\LD:EQU 762FH; КОНСТАНТА ЧТЕНИЯ С мг
M_C\SV:EQU 7630H; КОНСТАНТА ЗАПИСИ НА мг
M_RTOP:EQU 7631H; ЗНАЧЕНИЕ RamTOP

B_CMD:EQU 7633H; БУФЕР ВВОДА СТРОКИ


ORG 0F800H

; кЕРНАЛЬ ПЕРЕХОДОВ СТАНДАРТНЫХ п/п
JMP RESET; 0F800h
JMP KEY; 0F803h
JMP LdBYTE; 0F806h
JMP PRC; 0F809h
JMP SvBYTE; 0F80Ch
JMP PRC; 0F80Fh
JMP TstKEY; 0F812h
JMP PRH; 0F815h
JMP MSG; 0F818h
JMP SCN; 0F81Bh
JMP AskPOS; 0F81Eh
JMP GetSCR; 0F821h
JMP LdBLOK; 0F824h
JMP SvBLOK; 0F827h
JMP GetK\S; 0F82Ah
JMP EnVID; 0F82Dh
JMP GetTOP; 0F830h
JMP SetTOP; 0F833h


RESET:
; "хОЛОДНЫЙ" СБРОС (0F800h)

; НАСТРОКА ПОРТА КЛАВИАТУРЫ
MVI A,8AH
STA PT_KB3

; НАСТРОКА СТЕКА
LXI SP,STACK

; НАСТРОЙКА/ВКЛЮЧЕНИЕ ОТОБРАЖЕНИЯ
CALL EnVID
LXI H,M_eVID
LXI D,VidEND
MVI C,0
CALL FILL

; ЗН-Е СТЕКА В СИСТЕМНУЮ ПЕРМЕННУЮ
LXI H,STACK
SHLD M_STAK

; ВЫВОД ЗАСТАВКИ "радио-86рк"
LXI H,T_MAIN
CALL MSG

; ОТОБРАЖЕНИЕ...
CALL EnVID

; УСТАНОВКА RamTOP В 75FFh
LXI H,RAMTOP
SHLD M_RTOP

; ИНИЦИАЛИЗАЦИЯ КОНСТАНТ мг
LXI H,1D2AH
SHLD M_C\LD

; ИНИЦИАЛИЗАЦИЯ ПЕРЕХОДА (GOTO)
MVI A,0C3H
STA M_GOTO

HotRES:
; "гОРЯЧИЙ СБРОС" (F86Ch)
LXI SP,STACK

; ВЫВОд ПРОМПТА
LXI H,T_PMPT
CALL MSG

; ГАШЕНИЕ С/Д "рус/LAT"
; [A]=00h
STA PT_KB2
DCR A; [A]=FFh
STA PT_RD2

; ВВОД КОМАНДНОЙ СТРОКИ
CALL InBUF

; АДРЕС ВОЗВРАТА В F86Ch В СТЕК
LXI H,HotRES
PUSH H

; АНАЛИЗ КОМАНДНОЙ СТРОКИ
LXI H,B_CMD
MOV A,M
CPI 'X'
JZ PrREGS
CPI 'U'
JZ ExtPRG

; ОБНУЛЕНИЕ ПЕРЕМЕННЫХ
; ВЗЯТИЕ ПАРАМЕТРОВ
; СОХРАНЕНИЕ РЕГИСТРОВ
PUSH PSW
CALL GetPRM
LHLD M_[BC]
MOV C,L
MOV B,H
LHLD M_[DE]
XCHG
LHLD M_[HL]
POP PSW

; АНАЛИЗ ДЕРИКТИВ
CPI 'D'
JZ PrDUMP
CPI 'C'
JZ COMPR
CPI 'F'
JZ FILL
CPI 'S'
JZ SEARCH
CPI 'T'
JZ TRANSF
CPI 'M'
JZ MODIFY
CPI 'G'
JZ GOTO
CPI 'I'
JZ MGLOAD
CPI 'O'
JZ MGSAVE
CPI 'L'
JZ PrSIMB
CPI 'R'
JZ LdROMD
JMP ExtPRG


InBKSP:
; УДАЛЕНИЕ СИМВОЛА КОМАНДНОЙ СТРОКИ
MVI A,B_CMD; 33H
CMP L
JZ InBUF0
PUSH H
LXI H,T_DEL
CALL MSG
POP H
DCX H
JMP InBUF1

InBUF:
; вВОД КОМАНДНОЙ СТРОКИ
LXI H,B_CMD

InBUF0:
MVI B,0

InBUF1:
CALL KEY
CPI 8
JZ InBKSP
CPI 7FH
JZ InBKSP
CNZ PRA
MOV M,A
CPI 13
JZ InENTR
CPI '.'
JZ HotRES
MVI B,0FFH
MVI A,B_CMD+31; 52H
CMP L
JZ ErEXIT
INX H
JMP InBUF1

InENTR:
MOV A,B
RAL
LXI D,B_CMD
MVI B,0
RET


MSG:
; вЫВОД СООБЩЕНИЯ
MOV A,M
ANA A
RZ
CALL PRA
INX H
JMP MSG


GetPRM:
; вЗЯТИЕ ПАРАМЕТРОВ ИЗ КОМАНДНОЙ СТРОКИ
LXI H,M_[HL]
LXI D,M_MGLD
MVI C,0
CALL FILL
LXI D,B_CMD+1; 7634h
CALL GetVAL
SHLD M_[HL]
SHLD M_[DE]
RC
MVI A,0FFH
STA M_MGLD
CALL GetVAL
SHLD M_[DE]
RC
CALL GetVAL
SHLD M_[BC]
RC
JMP ErEXIT


GetVAL:
; вЗЯТИЕ ЗНАЧЕНИЯ АДРЕСА В [HL]
LXI H,0

AddVAL:
LDAX D
INX D
CPI 13
JZ StcRET
CPI ','
RZ
CPI ' '
JZ AddVAL
SUI '0'
JM ErEXIT
CPI 10
JM GtVAL1
CPI 17
JM ErEXIT
CPI 23
JP ErEXIT
SUI 7

GtVAL1:
MOV C,A
DAD H
DAD H
DAD H
DAD H
JC ErEXIT
DAD B
JMP AddVAL

StcRET:
STC
RET


TSTHD:
MOV A,H
CMP D
RNZ
MOV A,L
CMP E
RET


IfENDF:
; пРОВЕРКА НА [F4] И НА КОНЕЦ АДРЕСА
CALL TstF4

TstEND:
; пРОВЕРКА НА КОНЕЦ АДРЕСА
CALL TSTHD
JNZ HppRET

SP2RET:
INX SP
INX SP
RET

HppRET:
INX H
RET


TstF4:
; пРОВЕРКА НА [F4]
CALL SCN
CPI 3
RNZ
CALL EnVID
JMP ErEXIT


PrUPUP:
; вЫВОД [╨] + ЧЕТЫРЕ [╡]
PUSH H
LXI H,T_GoUP
CALL MSG
POP H
RET


PRM:
; вЫВОД ЗН-Я ЯЧЕЙКИ ПО [HL] В HEX-ВИДЕ
MOV A,M

PRH_SP:
PUSH B
CALL PRH
MVI A,' '
CALL PRA
POP B
RET


PrDUMP:
; вЫВОД ДАМПА
CALL Pr[HL]

PrDMP1:
CALL PRM
CALL IfENDF
MOV A,L
ANI 0FH
JZ PrDUMP
JMP PrDMP1


COMPR:
LDAX B
CMP M
JZ COMPR1
CALL Pr[HL]
CALL PRM
LDAX B
CALL PRH_SP

COMPR1:
INX B
CALL IfENDF
JMP COMPR


FILL:
MOV M,C
CALL TstEND
JMP FILL


SEARCH:
MOV A,C
CMP M
CZ Pr[HL]
CALL IfENDF
JMP SEARCH


TRANSF:
MOV A,M
STAX B
INX B
CALL TstEND
JMP TRANSF


PrSIMB:
; вВОД ДАМПА В СИМВОЛЬНОМ ВИДЕ
CALL Pr[HL]

PrSIM1:
MOV A,M
ORA A
JM PrSIM2
CPI 20H
JNC PrSIM3

PrSIM2:
MVI A,2EH

PrSIM3:
CALL PRA
CALL IfENDF
MOV A,L
ANI 0FH
JZ PrSIMB
JMP PrSIM1


MODIFY:
; мОДИФИКАЦИЯ ЯЧЕЕК озу
CALL Pr[HL]
CALL PRM
PUSH H
CALL InBUF
POP H
JNC MODIF1
PUSH H
CALL GetVAL
MOV A,L
POP H
MOV M,A

MODIF1:
INX H
JMP MODIFY


GOTO:
; пЕРЕХОД ПО АДРЕСУ
CALL TSTHD
JZ GOTO1
XCHG
SHLD M_SvDE
MOV A,M
STA M_SvOC
MVI M,0F7H; ЗАПИСЬ КОМАНДЫ "RST 6" (CALL 0030h)

; ПО АДРЕСУ 0030h ЗАПИСЫВАЕМ "JMP RtRST6"
MVI A,0C3H
STA 0030H
LXI H,RtRST6
SHLD 0031H

GOTO1:
LXI SP,STACK2
POP B
POP D
POP H
POP PSW
SPHL
LHLD M_ADDR
JMP M_GOTO


LdROMD:
; чТЕНИЕ ROM-ДИСКА

; ПРОГРАММИРОВАНИЕ ПОРТА
MVI A,90H
STA PT_RD3

LdROM0:
SHLD PT_RD1
LDA PT_RD0
STAX B
INX B
CALL TstEND
JMP LdROM0


AskPOS:
; зАПРОС ТЕКУЩЕЙ ПОЗИЦИИ КУРСОРА
LHLD M_cPOS
RET


GetSCR:
; зАПРОС БАЙТА ИЗ ЭКРАННОГО БУФЕРА
PUSH H
LHLD M_eVID
MOV A,M
POP H
RET


MGLOAD:
; чТЕНИЕ БЛОКА С МАГНИТОФОНА
LDA M_MGLD
ORA A
JZ MG_LD1
MOV A,E
STA M_C\LD

MG_LD1:
CALL LdBLOK
CALL Pr[HL]
XCHG
CALL Pr[HL]
XCHG
PUSH B
CALL GetK\S
MOV H,B
MOV L,C
CALL Pr[HL]
POP D
CALL TSTHD
RZ
XCHG
CALL Pr[HL]

ErEXIT:
; вЫХОД ПРИ ОШИБКЕ
MVI A,'?'
CALL PRA
JMP HotRES


LdBLOK:
; чТЕНИЕ БЛОКА С мг
MVI A,0FFH
CALL LdSYNC
PUSH H
DAD B
XCHG
CALL Ld0808
POP H
DAD B
XCHG
PUSH H
CALL LdBODY
MVI A,0FFH
CALL LdSYNC
POP H

EnVID:
; вКЛЮЧИТЬ ОТОБРАЖЕНИЕ ИЗОБРАЖЕНИЯ
PUSH H
LXI H,VG_R1
MVI M,0
DCX H
MVI M,4DH
MVI M,1DH
MVI M,99H
MVI M,93H
INX H
MVI M,27H
MOV A,M

EnVID1:
MOV A,M
ANI 20H
JZ EnVID1
LXI H,VT_R8
MVI M,80H
MVI L,4
MVI M,0D0H
MVI M,76H
INR L
MVI M,23H
MVI M,49H
MVI L,8
MVI M,0A4H
POP H
RET


Ld0808:
MVI A,8

LdSYNC:
CALL LdBYTE
MOV B,A
MVI A,8
CALL LdBYTE
MOV C,A
RET

LdBODY:
MVI A,8
CALL LdBYTE
MOV M,A
CALL TstEND
JMP LdBODY


GetK\S:
; пОДСЧЕТ КОНТРОЛЬНОЙ СУММЫ БЛОКА
LXI B,0

GetKS1:
MOV A,M
ADD C
MOV C,A
PUSH PSW
CALL TSTHD
JZ SP2RET
POP PSW
MOV A,B
ADC M
MOV B,A
CALL TstEND
JMP GetKS1


MGSAVE:
; зАПИСЬ БЛОКА НА мг
MOV A,C
ORA A
JZ MG_SV1
STA M_C\SV

MG_SV1:
PUSH H
CALL GetK\S
POP H
CALL Pr[HL]
XCHG
CALL Pr[HL]
XCHG
PUSH H
MOV H,B
MOV L,C
CALL Pr[HL]
POP H

SvBLOK:
; зАПИСЬ БЛОКА НА мг
PUSH B
LXI B,0

SvBLK1:
CALL SvBYTE
DCR B
XTHL
XTHL
JNZ SvBLK1
MVI C,0E6H
CALL SvBYTE
CALL SvWORD
XCHG
CALL SvWORD
XCHG
CALL Sv[HL]
LXI H,0
CALL SvWORD
MVI C,0E6H
CALL SvBYTE
POP H
CALL SvWORD
JMP EnVID


Pr[HL]:
PUSH B
CALL PrUPUP
MOV A,H
CALL PRH
MOV A,L
CALL PRH_SP
POP B
RET


Sv[HL]:
MOV C,M
CALL SvBYTE
CALL TstEND
JMP Sv[HL]


SvWORD:
; зАПИСЬ РЕГ. ПАРЫ [HL] НА мг
MOV C,H
CALL SvBYTE
MOV C,L
JMP SvBYTE


LdBYTE:
; чТЕНИЕ БАЙТА С мг
PUSH H
PUSH B
PUSH D
MOV D,A

LdBYT1:
MVI A,80H
STA VT_R8
LXI H,0
DAD SP
LXI SP,0
SHLD M_SFST
MVI C,0
LDA PT_KB2
RRC
RRC
RRC
RRC
ANI 1
MOV E,A

LdBYT2:
POP PSW
MOV A,C
ANI 7FH
RLC
MOV C,A
MVI H,0

LdBYT3:
DCR H
JZ LdBYT9
POP PSW
LDA PT_KB2
RRC
RRC
RRC
RRC
ANI 1
CMP E
JZ LdBYT3
ORA C
MOV C,A
DCR D
LDA M_C\LD
JNZ LdBYT4
SUI 12H

LdBYT4:
MOV B,A

LdBYT5:
POP PSW
DCR B
JNZ LdBYT5
INR D
LDA PT_KB2
RRC
RRC
RRC
RRC
ANI 1
MOV E,A
MOV A,D
ORA A
JP LdBYT8
MOV A,C
CPI 0E6H
JNZ LdBYT6
XRA A
STA M_LDBT
JMP LdBYT7

LdBYT6:
CPI 19H
JNZ LdBYT2
MVI A,0FFH
STA M_LDBT

LdBYT7:
MVI D,9

LdBYT8:
DCR D
JNZ LdBYT2

; НАСТРОЙКА вг75/вт57
LXI H,VT_R4
MVI M,0D0H
MVI M,76H
INX H
MVI M,23H
MVI M,49H
MVI A,27H
STA VG_R1
MVI A,0E0H
STA VG_R1
MVI L,8
MVI M,0A4H
LHLD M_SFST
SPHL
LDA M_LDBT
XRA C
JMP AllRET

LdBYT9:
LHLD M_SFST
SPHL
CALL EnVID
MOV A,D
ORA A
JP ErEXIT
CALL TstF4
JMP LdBYT1


SvBYTE:
; зАПИСЬ БАЙТА НА мг
PUSH H
PUSH B
PUSH D
PUSH PSW
MVI A,80H
STA VT_R8
LXI H,0
DAD SP
LXI SP,0
MVI D,8

SvBYT1:
POP PSW
MOV A,C
RLC
MOV C,A
MVI A,1
XRA C
STA PT_KB2
LDA M_C\SV
MOV B,A

SvBYT2:
POP PSW
DCR B
JNZ SvBYT2
MVI A,0
XRA C
STA PT_KB2
DCR D
LDA M_C\SV
JNZ SvBYT3
SUI 0EH

SvBYT3:
MOV B,A

SvBYT4:
POP PSW
DCR B
JNZ SvBYT4
INR D
DCR D
JNZ SvBYT1
SPHL
LXI H,VT_R4
MVI M,0D0H
MVI M,76H
INX H
MVI M,23H
MVI M,49H
MVI A,27H
STA VG_R1
MVI A,0E0H
STA VG_R1
MVI L,8
MVI M,0A4H
POP PSW

AllRET:
POP D
POP B
POP H
RET


PRH:
; вВОД HEX-БАЙТА
PUSH PSW
RRC
RRC
RRC
RRC
CALL PrHEX1
POP PSW

PrHEX1:
ANI 0FH
CPI 0AH
JM PrHEX2
ADI 7

PrHEX2:
ADI 30H

PRA:
; вВОД СИМВОЛА [A]
MOV C,A

PRC:
; вВОД СИМВОЛА [C]
PUSH PSW
PUSH B
PUSH D
PUSH H
CALL TstKEY
LXI H,PrCH11
PUSH H
LHLD M_cPOS
XCHG
LHLD M_eVID
LDA M_PCHR
DCR A
JM PrCHR4
JZ PrCHR8
JPO PrCHR9
MOV A,C
SUI 20H
MOV C,A

PrCHR1:
DCR C
JM PrCHR2
PUSH B
CALL PrRIGT
POP B
JMP PrCHR1

PrCHR2:
XRA A

PrCHR3:
STA M_PCHR
RET

PrCHR4:
MOV A,C
ANI 7FH
MOV C,A
CPI 31
JZ PrCLS
CPI 12
JZ PrHOME
CPI 13
JZ Pr0DH
CPI 10
JZ Pr0AH
CPI 8
JZ PrLEFT
CPI 24
JZ PrRIGT
CPI 25
JZ PrUP
CPI 26
JZ PrDOWN
CPI 27
JZ PrESC
CPI 7
JNZ PrCHR5

; ВЫВОД 07H (ЗВОНОК)
LXI B,05F0H

BEEP:
; вЫВОД ЗВУКА
MOV A,B

BEEP1:
EI
DCR A
JNZ BEEP1
MOV A,B

BEEP2:
DI
DCR A
JNZ BEEP2
DCR C
JNZ BEEP
RET

PrCHR5:
MOV M,C
CALL PrRIGT
MOV A,D
CPI 3
RNZ
MOV A,E
CPI 8
RNZ
CALL PrUP

Pr0AH:
MOV A,D
CPI 1BH
JNZ PrDOWN
PUSH H
PUSH D
LXI H,VidBEG
LXI D,7810H
LXI B,079EH

PrCHR7:
LDAX D
MOV M,A
INX H
INX D
DCX B
MOV A,C
ORA B
JNZ PrCHR7
POP D
POP H
RET

PrCHR8:
MOV A,C
CPI 59H
JNZ PrCHR2
CALL PrHOME
MVI A,2
JMP PrCHR3

PrCHR9:
MOV A,C
SUI 20H
MOV C,A

PrCH10:
DCR C
MVI A,4
JM PrCHR3
PUSH B
CALL PrDOWN
POP B
JMP PrCH10

PrCH11:
SHLD M_eVID
XCHG
SHLD M_cPOS
MVI A,80H
STA VG_R1
MOV A,L
STA VG_R0
MOV A,H
STA VG_R0
POP H
POP D
POP B
POP PSW
RET

PrESC:
MVI A,1
JMP PrCHR3

PrCLS:
LXI H,ScrEND
LXI D,0925H

PrCLS1:
XRA A
MOV M,A
DCX H
DCX D
MOV A,E
ORA D
JNZ PrCLS1

PrHOME:
LXI D,0308H
LXI H,VidBEG
RET

PrRIGT:
MOV A,E
INX H
INR E
CPI 47H
RNZ
MVI E,8
LXI B,0FFC0H
DAD B

PrDOWN:
MOV A,D
CPI 1BH
LXI B,004EH
JNZ MFDD3
MVI D,2
LXI B,0F8B0H

MFDD3:
INR D
DAD B
RET

PrLEFT:
MOV A,E
DCX H
DCR E
CPI 8
RNZ
MVI E,47H
LXI B,0040H
DAD B

PrUP:
MOV A,D
CPI 3
LXI B,RtR6_1
JNZ PrUP1
MVI D,1CH
LXI B,0750H

PrUP1:
DCR D
DAD B
RET

Pr0DH:
MOV A,L
SUB E
JNC $+4
DCR H
;$+4
MOV L,A
MVI E,8
LXI B,8
DAD B
RET


TstKEY:
LDA PT_KB2
ANI 80H
JZ TstKE1
LDA M_PKEY
ORA A
RNZ

TstKE1:
PUSH H
LHLD M_KEY1
CALL SCN
CMP L
MOV L,A
JZ TstKE5

TstKE2:
MVI A,1
STA M_KEY2
MVI H,15H

TstKE3:
XRA A

TstKE4:
SHLD M_KEY1
POP H
STA M_PKEY
RET

TstKE5:
DCR H
JNZ TstKE3
INR A
JZ TstKE4
INR A
JZ TstKE7
PUSH B
LXI B,5003H
CALL BEEP
POP B
LDA M_KEY2
MVI H,0E0H
DCR A
STA M_KEY2
JZ TstKE6
MVI H,40H

TstKE6:
MVI A,0FFH
JMP TstKE4

TstKE7:
LDA PT_KB2
ANI 80H
JZ TstKE7
LDA M_RULA
CMA
STA M_RULA
JMP TstKE2


KEY:
CALL TstKEY
ORA A
JZ KEY
XRA A
STA M_PKEY
LDA M_KEY1
RET


SCN:
LDA PT_KB2
ANI 80H
JNZ KeySCN
MVI A,0FEH
RET

KeySCN:
XRA A
STA PT_KB0
STA PT_KB2
LDA M_RULA
ANI 1
ORI 6
STA PT_KB3
LDA PT_KB1
INR A
JNZ KeySC1
DCR A
RET

KeySC1:
PUSH H
MVI L,1
MVI H,7

KeySC2:
MOV A,L
RRC
MOV L,A
CMA
STA PT_KB0
LDA PT_KB1
CMA
ORA A
JNZ KeySC4
DCR H
JP KeySC2

KeySC3:
MVI A,0FFH
POP H
RET

KeySC4:
MVI L,20H

KeySC5:
LDA PT_KB1
CMA
ORA A
JZ KeySC3
DCR L
JNZ KeySC5
MVI L,8

KeySC6:
DCR L
RLC
JNC KeySC6
MOV A,H
MOV H,L
MOV L,A
CPI 1
JZ KeySC8
JC KeySC7
RLC
RLC
RLC
ADI 20H
ORA H
CPI 5FH
JNZ KeyS10
MVI A,20H
POP H
RET

KB_L0:
DB 9
DB 0AH
DB 0DH
DB 7FH
DB 8
DB 19H
DB 18H
DB 1AH

KB_L1:
DB 0CH
DB 1FH
DB 1BH
DB 0
DB 1
DB 2
DB 3
DB 4
DB 5

KeySC7:
MOV A,H
LXI H,KB_L1
JMP KeySC9

KeySC8:
MOV A,H
LXI H,KB_L0

KeySC9:
ADD L
MOV L,A
MOV A,M
CPI 40H
POP H
RC
PUSH H

KeyS10:
MOV L,A
LDA PT_KB2
MOV H,A
ANI 40H
JNZ KeyS11
MOV A,L
CPI 40H
JM KeyS14
ANI 1FH
POP H
RET

KeyS11:
LDA M_RULA
ORA A
JZ KeyS12
MOV A,L
CPI 40H
JM KeyS12
ORI 20H
MOV L,A

KeyS12:
MOV A,H
ANI 20H
JNZ KeyS14
MOV A,L
CPI 40H
JM KeyS13
MOV A,L
XRI 20H
POP H
RET

KeyS13:
MOV A,L
ANI 2FH
MOV L,A

KeyS14:
MOV A,L
CPI 40H
POP H
RP
PUSH H
MOV L,A
ANI 0FH
CPI 0CH
MOV A,L
JM HRET
XRI 10H

HRET:
POP H
RET


GetTOP:LHLD M_RTOP
RET

SetTOP:SHLD M_RTOP
RET


T_MAIN:DB 1FH
DB 'radio-86rk',0

T_PMPT:DB 13,10,'-->',0

T_GoUP:DB 13,10,24,24,24,24,0

T_REGS:
DB 13,10,' PC-'
DB 13,10,' HL-'
DB 13,10,' BC-'
DB 13,10,' DE-'
DB 13,10,' SP-'
DB 13,10,' AF-'
DB 25,25,25,25,25,25,0

T_DEL:DB 8,32,8,0


RtRST6:
; ВЫХОД ПО КОМАНДЕ RST6
SHLD M_ADDR
PUSH PSW
POP H
SHLD M_RST2
POP H
DCX H
SHLD M_RRST
LXI H,0

RtR6_1:
DAD SP
LXI SP,M_RST2
PUSH H
PUSH D
PUSH B
LHLD M_RRST
LXI SP,STACK
CALL Pr[HL]

RtR6_2:
XCHG
LHLD M_SvDE
CALL TSTHD
JNZ HotRES
LDA M_SvOC
MOV M,A
JMP HotRES


PrREGS:
LXI H,T_REGS
CALL MSG
LXI H,M_RRST
MVI B,6

PrREG1:
MOV E,M
INX H
MOV D,M
PUSH B
PUSH H
XCHG
CALL Pr[HL]
CALL InBUF
JNC PrREG2
CALL GetVAL
POP D
PUSH D
XCHG
MOV M,D
DCX H
MOV M,E

PrREG2:
POP H
POP B
DCR B
INX H
JNZ PrREG1
RET

DB 0FFH,0FFH

END

Дмитрий77
01.06.2020, 00:37
Спасибо за отклики

kovdry
01.06.2020, 06:57
Вот еще:

zebest
01.06.2020, 12:26
Ну и раз пошла такая п. - то вот еще парочка asm-ов, от ушельцев.
Модификации, но пусть будут, в одном месте для истории.

Дмитрий77
13.06.2020, 19:17
Текст от Denn меня заинтересовал и я решил использовать его. Правда пришлось писать перекодировщик, чтобы можно было загнать в MICRON. Не понял лишь код &DA т.к. в тексте он не встречался. Вот бы всё таки увидеть кодовую таблицу Ориона.

begoon
29.06.2021, 20:58
https://github.com/begoon/rk86-monitor