Код:
; ЗАГРУЗЧИК ДЛЯ ТЕНЕВОЙ ROM
; Для ЭВМ где нет основного ПЗУ.
; ROM-BIOS загружается с ленты этим загрузчиком.
; Знакогенератор 8*8 (не 6*8) пришивается с адреса 500H
RUSPPA EQU 0FF03H
PORTB EQU 0FF01H
PORTC EQU 0FF02H
HISCRN EQU 0C000H ; байт сразу за концом экрана
COUNTR EQU 0A660H ; экр.адрес куда выв-ся счётчик
STACK EQU 0BFFAH
CLD EQU 0BFFFH ; константа ввода
ASTART EQU 0BFFDH ; адрес загрузки и старта
YBFFB EQU 0BFFBH
YBFFC EQU 0BFFCH
ORG 0 ; В ТЕНЕВОМ ПЗУ
L09:JMP START
START:
MVI A,82H
STA RUSPPA
CALL PILIK
LXI SP,HISCRN
LXI B,0300H
; LXI H,0
MOV H,C
MOV L,C
CLS:PUSH H
PUSH H
PUSH H
PUSH H
PUSH H
PUSH H
PUSH H
PUSH H
DCX B
MOV A,B
ORA C
JNZ CLS
LXI SP,STACK
CALL CONST
CALL PILIK
JMP LOAD
BYTE8: MVI A,8
L16:PUSH B
PUSH D
MOV D,A
LDA CLD
MOV B,A
MVI C,0
L15:LDA PORTB
ORI 0FEH ; 1111 1110
CMA
ORI 0CH ; 0000 1100
MOV E,A
L11:LDA PORTB
ORI 0FEH
CMA
ORI 0CH
CMP E
STA RUSPPA
JZ L11
RRC
MOV A,C
RAL
MOV C,A
CALL L12
XRA A
ORA D
JP L13
MOV A,C
XRI 0E6H
STA YBFFB
INR A
CPI 02H
JNC L15
MVI D,09H
L13:DCR D
JNZ L15
LDA YBFFB
XRA C
POP D
POP B
RET
LOAD:MVI A,0FFH
CALL L16
MOV L,A
CALL BYTE8
MOV H,A
SHLD ASTART
CALL BYTE8
MOV E,A
CALL BYTE8
MOV D,A
L19:
CALL BYTE8
MOV M,A
CALL L18
INX H
JNZ L19
CALL BYTE8
MOV L,A
CALL BYTE8
MOV H,A
XRA A
STA PORTC
PUSH H
LHLD ASTART
CALL L1B
POP H
MOV D,B
MOV E,C
CALL L18
CNZ L48
CALL PILIK
LHLD ASTART
PCHL
L18:MOV A,H
CMP D
RNZ
MOV A,L
CMP E
RET
L12:PUSH B
PUSH D
PUSH H
LXI D,YBFFC
LDAX D
INR A
STAX D
ANI 03H
MOV D,A
RAR
RAR
JC L1E
MOV E,H
JMP L1F
L1E:MOV E,L
DAD H
L1F:RLC
MOV A,E
JNC L20
DAD H
JMP L21
L1B:LXI B,L09
L23:MOV A,M
ADD C
MOV C,A
PUSH PSW
CALL L18
JZ L22
POP PSW
MOV A,B
ADC M
MOV B,A
INX H
JMP L23
L22:POP PSW
RET
L20:RRC
RRC
RRC
RRC
NOP
L21:ANI 0FH
ADI 10H
CPI 1AH
JC L24
ADI 07H
JMP L25
L24:CMP M
DAD H
L25:LXI H,00A0H
ADD L
MOV L,A
DAD H
DAD H
DAD H
MOV A,D
XCHG
LXI H,COUNTR
ADD H
MOV H,A
MVI C,03H
L28:LDAX D
MOV M,A
INX H
INX D
LDAX D
MOV M,A
INX H
INX D
DCR C
JNZ L28
LDAX D
MOV M,A
POP H
POP D
MVI A,0DCH
ADD B
L29:DCR A
JNZ L29
POP B
RET
CONST:PUSH H
PUSH D
PUSH B
CNST:MVI D,150 ; КРИТЕРИЙ ЗАХВАТА - 150
CNS2:MOV B,C ; ОТМЕТОК ПОДРЯД
CALL L2A
JZ CNST
MOV A,C
SUB B
JNC CNS3
CMA
INR A
CNS3:CPI 07H ; КРИТЕРИЙ ПРОПУСКА ОТМЕТКИ
JNC CNST
DCR D
JNZ CNS2
CNS4:LXI H,L09
MOV B,L
MVI D,178 ; ДЛИНА УЧАСТКА ПОДСЧЕТА
CNS5:CALL L2A
JZ CNS4
DAD B
DCR D
JNZ CNS5
DAD H
MOV A,H
SUI 03H
MOV L,A
ORA A
RAR
ADD L
STA CLD
POP B
POP D
POP H
RET
L2A:LDA PORTB
RRC
JC L2A
MVI E,00H
MVI C,00H
CALL L30
L30:INR C
RZ
LDA PORTB
RRC
XRA E
JP L30
MOV A,E
CMA
MOV E,A
RET
PILIK:PUSH H
PUSH D
LXI H,4060H
CALL SND
LXI H,8030H
CALL SND
POP D
POP H
RET
SND:MOV E,L
MVI A,0E0H
STA PORTC
L34:DCR E
JNZ L34
MOV E,L
XRA A
STA PORTC
L35:DCR E
JNZ L35
DCR H
JNZ SND
RET
L48:MVI C,06H
L36:CALL PILIK
DCR C
JNZ L36
RET
END