SRC/TDP.ASM

Исходник КТДП для ПК Форманта ПК8020.

* Имя файла: TDP.ASM
* Объем: 94080 байт

```
    ORG  1F00H
;
START:
    JMP  M00
    RST  7
;		для варианта в ПЗУ
	DW	M00	; точка входа в программу
	DB	20H	; начальная страница загрузки
	DB	40H	; количество загружаемых страниц
;
M06:LXI  SP,M00
    JMP  M02
	DS	256-18
T19:
	DS	4
M00:
	DI
	LXI  SP,M00	; стек на 2100H
    MVI  B,14H
	LXI	H,0FA7FH
	LDA	0F703H
	CPI	1CH
	JZ	UST
	MVI	H,0FFH
UST:	MOV	A,B
	MOV	M,A
	STA	0F703H
    MVI  D,60H
    CALL M04	; перемещение на 8000H
M02:
	CALL	OLD
	MVI  A,0C3H
    STA  M05
    LXI  H,M06
    SHLD M07
    LXI  H,M08 	; нач. адрес АЦЗУ
    MVI  E,00H
M09:MOV  M,E
    INX  H
    MOV  A,L
    ORA  H
    JNZ  M09
    LXI  D,M0A	; обнуление АЦЗУ
M0F:MVI  A,0FFH
    STAX D
    XRA  A
    STA  M08
    LXI  H,M0A
M0E:MOV  A,E
    CMP  L
    JNZ  M0B
    MOV  A,D
    CMP  H
    JNZ  M0B
    MVI  A,0FFH
    CMP  M
    JNZ  M0C
    JMP  M0D
M0B:XRA  A
    CMP  M
    JNZ  M0C
M0D:MOV  A,L
    ADD  A
    MOV  L,A
    JNZ  M0E
    MOV  A,H
    RAL
    ORI  0FCH
    MOV  H,A
    ANI  03H
    JNZ  M0E
    XRA  A
    STAX D
    MOV  A,E
    ADD  A
    MOV  E,A
    JNZ  M0F
    MOV  A,D
    RAL
    ORI  0FCH
    MOV  D,A
    ANI  03H
    JNZ  M0F
    JMP  M10
M0C:CALL M11
    LXI  B,M12
M13:DCX  B
    MOV  A,C
    ORA  B
    JNZ  M13
    JMP  M0C
CONIN:
	EI
	CALL	0049H
	DI
	RET
CONST:
	EI
	CALL	0046H
	DI
	RET
;
CON:
	LXI	H,CONFIG
	LDA	0304H
	CPI	20H
	MOV	A,M
	JZ	CON1
	ORA	A
	RZ
CON1:
	RAR
	JC	CON2
	MVI	A,0FFH
	ORA	A
	RET
CON2:
	XRA	A
	ORA	A
	RET
;
M10:
    LXI  H,M15
    CALL MSG 	; 'ФОРМАНТА ПК8020'
    MVI  A,5CH
    STA  M17 	; установка DOSA
    XRA  A
    STA  M18
;	начальная проверка ОЗУ
    LXI  B,M12
    LXI  H,M19
M1C:MOV  A,B
    CMA
    MOV  E,M
    MOV  M,A
    CMA
    STAX B
    MOV  A,M
    MOV  M,E
    CMA
    CMP  B
    CNZ  M1A
    MOV  A,B
    ORA  A
    JNZ  M1B
    MOV  A,H
    RRC
    MOV  H,A
    JNC  M1C
    LXI  B,M1D
    LXI  H,M1E
    MVI  A,00H
    STA  M03 	; установка TRS80
    JMP  M1C
M1B:MOV  A,H
    RRC
    MOV  H,A
    JC   M1C
    MVI  A,14H
    STA  M1F	; установка NDOS
    LDA  M18	; M18 - ячейка признака ошибки ОЗУ, 0 - исправно
    ORA  A
    JZ   M20
    LXI  H,M21
    CALL MSG	; 'проверка невозможна'
    HLT
M18:NOP
M1A:PUSH H
    PUSH PSW
    MOV  A,H
    STA  M18
    MOV  A,B
    ORA  A
    JNZ  M22
    MVI  A,14H
    STA  M03
    JMP  M23
M22:MVI  A,14H
    STA  M1F
M23:PUSH H
    LXI  H,M24
    CALL MSG
    POP  H
    CALL M25
    MVI  A,20H
    CALL M26
    MOV  A,B
    CMA
    CALL M27
    MVI  A,20H
    CALL M26
    POP  PSW
    CMA
    CALL M27
    LXI  H,RTN
    CALL MSG
    POP  H
    MOV  A,B
    ORA  A
    JNZ  M29
    MVI  A,5CH
    STA  M17
    RET
M29:MVI  A,00H
    STA  M17
    RET
;
;	сюда выход после начального теста ОЗУ
;
M20:CALL M2A	; очистка ГЗУ
    LXI  H,M2B
    CALL MSG	; 'возможные режимы проверки'
M35:LXI  H,M2C
    CALL MSG	; 'выберите из списка'
    LXI  H,M2D
    PUSH H	; в стек - адрес вывода 'прекратить работу?'
    CALL CONIN	; получить символ режима
    PUSH PSW
    MOV  C,A
    CALL CONOUT	; вывести символ режима
    LXI  H,M30
    CALL MSG	; очистить экран
    POP  PSW
    CPI  31H
    JZ   M31	; последовательность всех тестов
    CPI  32H
    JZ   M32	; циклическое выполнение
    CPI  33H
    JZ   M33	; отдельные тесты
    CPI  03H
    JZ   M34	; загрузка МикроДОС
    POP  H
    JMP  M35
M2D:LXI  H,M36
    CALL MSG	; 'прекратить работу?'
    CALL M37
    JZ   M34
    LXI  H,M38
    CALL MSG	; 'временно отсутствует'
    JMP  M20
M36:DB   0DH,0AH,'Прекратить работу? (Д/Н) ',0
;
M37:CALL CONIN
    PUSH PSW
    MOV  C,A
    CALL CONOUT
    POP  PSW
    ANI  5FH
    CPI  44H
    RET
;
;	последовательное выполнение всех тестов
;
M31:CALL ASZU	; АЦЗУ
    CALL CPU
    CALL ROM
	CALL	PIC
	CALL	OZU
    CALL GZU
    LXI  H,RTN
    CALL MSG	; вывод графической информации
    CALL M3E	; для продолжения - ВК
    CALL M3F
    CALL M3E	; для продолжения - ВК
    CALL M40
    CALL M2A	; очистка ГЗУ
    LXI  H,M38
    CALL MSG	; очистка экрана
    CALL ZUM
    CALL LAN
	CALL	MAG
	CALL	CON
    JNZ	 MFF
    CALL PRINTER
    CALL IFPS
	CALL	NGMD
MFF:LXI  H,M45
    CALL MSG	; 'проверка окончена'
    RET
M3E:LXI  H,M46
    CALL MSG
M47:CALL CONIN
    CPI  0DH
    JNZ  M47
    RET
;
;	циклическое выполнение автоматических тестов
;
M32:LXI  H,M48
    CALL MSG	; 'задайте число циклов'
    CALL M49
    SHLD M4A
M50:CALL ASZU
    CALL CPU
    CALL ROM
	CALL	PIC
    CALL OZU
    CALL GZU
    MVI  C,2AH
    CALL M4D
    LXI  H,M4E
    CALL MSG	; 'осталось провести циклов'
    LHLD M4A
    MOV  A,L
    ADI  99H
    DAA
    MOV  L,A
    MOV  A,H
    ACI  99H
    DAA
    MOV  H,A
    SHLD M4A
    ORA  L
    PUSH PSW
    CALL M25
    LXI  H,RTN
    CALL MSG	; ВКПС
    CALL M4F
    CALL ZUM
    POP  PSW
    JNZ  M50
;		перевод строки на принтере
    MVI  C,0DH
    CALL M4D
    MVI  C,0AH
    CALL M4D
;
    LXI  H,M51
    CALL MSG	; 'нужны операторские тесты?'
    CALL M37
    RNZ
    CALL M3F	; отображение информации
    CALL M3E	; для продолжения ВК
    CALL M40	; проверка клавиатуры
	CALL	M2A	; очистка ГЗУ
	LXI	H,M38
	CALL	MSG	; очистка АЦЗУ
	CALL	MAG
	CALL	CON
    JNZ  MFE
	CALL	PRINTER
	CALL	IFPS
	CALL	NGMD
MFE:CALL M2A
    LXI  H,M38
    CALL MSG	; очистка экрана
    RET
M4A:NOP
    NOP
M48:DB   'Задайте число циклов (1 - 9999): '
    DB   1BH	; запрет курсора
    DB   ';    '
    DB   00H
M56:DB   1BH	; разрешение курсора
    DB   ':'
    DB   00H
M52:DB   08H
    DB   08H
    DB   08H
    DB   08H	; возврат курсора на 4 позиции
    DB   00H
M4E:DB   0DH
    DB   0AH
    DB   'Осталось провести циклов: ',0
M51:DB   'Нужны операторские тесты? (Д/Н) ',0
M49:LXI  H,M12
M55:PUSH H
    LXI  H,M52
    CALL MSG	; возврат курсора на 4 позиции
    POP  H
    PUSH H
    CALL M25
M54:CALL CONIN
    CPI  0DH
    JZ   M53
    SUI  30H
    JC   M54
    CPI  0AH
    JNC  M54
    POP  H
    DAD  H
    DAD  H
    DAD  H
    DAD  H
    ORA  L
    MOV  L,A
    JMP  M55
M53:LXI  H,M56
    CALL MSG	; разрешение курсора
    POP  H
    RET
M4F:RET
;
;	выполнение отдельных тестов
;
M33:CALL M2A	; очистка ГЗУ
    LXI  H,M57
    CALL MSG	; меню тестов
    LXI  H,M2C
    CALL MSG	; 'выберите из списка'
    CALL CONIN	; ввод номера теста
    PUSH PSW
    MOV  C,A
    CALL CONOUT	; вывод номера теста
    LXI  H,M30
    CALL MSG	; ВКПС 2 раза
    POP  PSW
    CPI  30H
    JNZ  M58
    LXI  SP,M00
    JMP  M20	; рестарт
M58:LXI  H,M33
    PUSH H	; установка адреса возврата
    CPI  31H
    JZ   ASZU
    CPI  32H
    JZ   CPU
    CPI  33H
    JZ   OZU
    CPI  34H
    JZ   ROM
    CPI  35H
    JZ   GZU
    CPI  36H
    JNZ  M59
    CALL M3F
    CALL M3E
    LXI  H,M38
    CALL MSG
    RET
M59:CPI  37H
    JNZ  M5A
    CALL M40
    LXI  H,M38
    CALL MSG
    RET
M5A:CPI  38H
    JZ   ZUM
    CPI  39H
    JZ   LAN
    CPI  41H
    JZ   PRINTER
    CPI  42H
    JZ   MAG
    CPI  43H
    JZ   IFPS
	CPI	44H
	JZ	NGMD
	CPI	45H
	JZ	PIC
    RET
;
;	тест ОЗУ
;
OZU:CALL M5C	; тест ОЗУ 0000 - 7FFF
    MVI  D,0C0H
    CALL M04	; перемещение на 4000H
    LXI  H,M5D
    CALL MSG	; 'окончено'
    CALL M5E	; тест ОЗУ 8000 - FFFF
    MVI  D,40H
    CALL M04	; перемещение на 8000H
    LXI  H,M5D
    CALL MSG	; 'окончено'
	MVI	A,0C3H
	STA	M05
	LXI	H,M06
	SHLD	M07
;
	LHLD	0F700H
	PUSH	H
	LHLD	0F703H
	PUSH	H
	LHLD	0F705H
	PUSH	H
;
	LXI	H,100H
	LXI	D,0F600H
	MVI	B,2
MOVE:
	MOV	A,M
	STAX	D
	INX	H
	INR	E
	JNZ	MOVE
	INR	D
	DCR	B
	JNZ	MOVE
;
	POP	H
	SHLD	0F705H
	POP	H
	SHLD	0F703H
	POP	H
	SHLD	0F700H
;
	LXI	H,STIR
	CALL	MSG
   RET
;
STIR:	DB	20H,8,0
;
;	очистка ГЗУ
;
N25:
M2A:MVI  A,60H
    STA  M17	; установка BASG
    MVI  A,80H
    STA  M5F
    LXI  H,M60
M61:MVI  M,0FFH
    INX  H
    MOV  A,H
    ORA  L
    JNZ  M61
    MVI  A,14H
    STA  M62	; установка NDOS
    RET
;
;	программа перемещения
;	в DE - величина перемещения
;
M04:LXI  H,M63
    CALL MSG	; 'перемещение КТДП'
    LXI  H,START; начало программы
    SHLD M65
    LXI  H,M66	; адрес начала BITMAP
    SHLD M67
M6B:LHLD M67
    MOV  B,M
    INX  H
    SHLD M67
    DCX  H
    MOV  A,H
    ADD  D
    MOV  H,A	; новый адрес вычислен
    MOV  M,B	; запись по новому адресу
    MVI  C,08H
M6A:MOV  A,B
    RLC
    MOV  B,A
    MVI  A,00H
    JNC  M68
    MOV  A,D
M68:LHLD M65
    ADD  M	; коррекция адреса при необходимости
    MOV  E,A
    INX  H
    SHLD M65
    DCX  H
    MOV  A,H
    ADD  D
    MOV  H,A
    MOV  M,E
    PUSH D
    LHLD M65
    LXI  D,M66
    MOV  A,E
    SUB  L
    MOV  A,D
    SBB  H
    POP  D
    JC   M69
    DCR  C
    JNZ  M6A
    JMP  M6B
M69:LXI  H,M12
    DAD  SP
    MOV  A,H
    ADD  D
    MOV  H,A
    SPHL
    POP  H
    MOV  A,H
    ADD  D
    MOV  H,A
    PCHL
M65:DS   2
M67:DS   2
ASZU:LXI  H,M38
    CALL MSG	; очистка экрана
    LXI  H,M6C
    CALL MSG	; 'тест АЦЗУ'
    LXI  B,M6D	; VIREG
    MVI  A,10H	; ATRSET
    STAX B
    LXI  H,M08	; перезапись содержимого АЦЗУ в буфер на 2000H
    LXI  D,M64
M6E:MOV  A,M
    STAX D
    MVI  M,00H
    INX  H
    INX  D
    MOV  A,H
    ORA  L
    JNZ  M6E
    LHLD M6F	; ячейка адреса курсора
    MOV  A,H
    ANI  23H
    MOV  H,A
    SHLD M70	; сохранить адрес курсора
    LXI  D,M71
    MVI  C,3AH
    MVI  A,20H	; ATRRES
    STAX B
M78:MVI  A,30H	; ATRFRE
    STAX B
    MVI  C,38H
    LXI  H,M08
M74:MOV  A,M
    CMP  E
    JNZ  M72
    LDAX B
    ANI  08H
    CMP  D
M72:CNZ  M73
    INX  H
    MOV  A,H
    ORA  L
    JNZ  M74
    ORA  D
    JZ   M75
    MVI  C,3AH
    MVI  A,20H	; ATRRES
    STAX B
    LXI  H,M08
M76:MVI  M,0FFH
    INX  H
    MOV  A,L
    ORA  H
    JNZ  M76
    LXI  D,M77
    MVI  A,10H	; ATRSET
    STAX B
    JMP  M78
M75:MVI  C,3AH
    MVI  A,20H
    STAX B
    MVI  C,0FH
M82:LXI  D,M79
M81:LXI  H,M08
M7C:MOV  A,E
    ANA  L
    JNZ  M7A
    MOV  A,D
    ANA  H
M7A:MOV  A,C
    JZ   M7B
    CMA
M7B:MOV  M,A
    INX  H
    MOV  A,H
    ORA  L
    JNZ  M7C
    LXI  H,M08
M80:MOV  A,E
    ANA  L
    JNZ  M7D
    MOV  A,D
    ANA  H
M7D:MOV  B,M
    MOV  A,C
    JZ   M7E
    CMA
M7E:CMP  B
    CNZ  M7F
    INX  H
    MOV  A,H
    ORA  L
    JNZ  M80
    MOV  A,E
    ADD  A
    MOV  E,A
    JNZ  M81
    MOV  A,D
    RAL
    MOV  D,A
    ANI  04H
    JZ   M81
    MOV  A,C
    RLC
    MOV  C,A
    CPI  0FH
    JNZ  M82
M89:MVI  A,20H	; ATRRES
    STA  M6D
    LXI  H,M08
    LXI  D,M64	; содержимое АЦЗУ до теста
M83:LDAX D
    MOV  M,A
    INX  D
    INX  H
    MOV  A,H
    ORA  L
    JNZ  M83
    LHLD M70
    MOV  A,H
    ORI  0FCH
    MOV  H,A
    SHLD M6F	; адрес курсора
    LXI  H,M84
    CALL MSG	; 'окончен'
    RET		; выход из теста AЦЗУ
M73:PUSH D
    PUSH H
    LHLD M70
    CALL M85
    JNC  M86
    POP  D
    CALL M87
    MVI  M,20H
    INX  H
    XCHG
    XTHL
    XCHG
    MOV  A,D
    RRC
    RRC
    RRC
    ADI  30H
    MOV  M,A
    INX  H
    MOV  A,E
    CALL M88
    MVI  M,20H
    INX  H
    XCHG
    XTHL
    XCHG
    LDAX B
    ANI  08H
    RRC
    RRC
    RRC
    ADI  30H
    MOV  M,A
    INX  H
    LDAX D
    CALL M88
    SHLD M70
    XCHG
    POP  D
    RET
M86:SHLD M70
    POP  H
    POP  D
    POP  PSW
    JMP  M89
M7F:PUSH D
    PUSH B
    PUSH PSW
    PUSH H
    LHLD M70
    CALL M85
    JC   M8A
    SHLD M70
    POP  H
    POP  PSW
    POP  B
    POP  D
    POP  PSW
    JMP  M89
M8A:POP  D
    CALL M87
    MVI  M,20H
    INX  H
    POP  PSW
    CALL M88
    MVI  M,20H
    INX  H
    POP  B
    MOV  A,B
    CALL M88
    SHLD M70
    XCHG
    POP  D
    RET
M85:MOV  A,L
    ANI  0FH
    JZ   M8B
    INX  H
    JMP  M85
M8B:MOV  A,H
    CPI  23H
    RC
    MOV  A,L
    CPI  80H
    RET
M70:NOP
    NOP
CPU:LXI  H,M8C
    CALL MSG	; 'тест процессора'
    MVI  A,5CH
    STA  M17
    LXI  H,M8D
    LXI  D,M12
    MVI  C,03H
    CALL M8E
    ANI  00H
    JZ   M8F
    RST  0
M8F:JNC  M90
    RST  0
M90:JPE  M91
    RST  0
M91:JP   M92
    RST  0
M92:JNZ  M93
    JC   M93
    JPO  M93
    JM   M93
    JMP  M94
M93:RST  0
M94:ADI  06H
    JNZ  M95
    RST  0
M95:JC   M96
    JPO  M96
    JP   M97
M96:RST  0
M97:ADI  70H
    JPO  M98
    RST  0
M98:JM   M99
    JZ   M99
    JNC  M9A
M99:RST  0
M9A:ADI  81H
    JM   M9B
    RST  0
M9B:JZ   M9C
    JC   M9C
    JPO  M9D
M9C:RST  0
M9D:ADI  0FEH
    JC   M9E
    RST  0
M9E:JZ   M9F
    JPO  M9F
    JM   MA0
M9F:RST  0
MA0:CPI  00H
    JC   MA1
    JZ   MA1
    CPI  0F5H
    JC   MA1
    JNZ  MA1
    CPI  0FFH
    JZ   MA1
    JC   MA2
MA1:RST  0
MA2:ACI  0AH
    ACI  0AH
    CPI  0BH
    JZ   MA3
    RST  0
MA3:SUI  0CH
    SUI  0FH
    CPI  0F0H
    JZ   MA4
    RST  0
MA4:SBI  0F1H
    SBI  0EH
    CPI  0F0H
    JZ   MA5
    RST  0
MA5:ANI  55H
    CPI  50H
    JZ   MA6
    RST  0
MA6:ORI  3AH
    CPI  7AH
    JZ   MA7
    RST  0
MA7:XRI  0FH
    CPI  75H
    JZ   MA8
    RST  0
MA8:ANI  00H
    CC   MA9
    CPO  MA9
    CM   MA9
    CNZ  MA9
    CPI  00H
    JZ   MAA
    RST  0
MAA:SUI  77H
    CNC  MA9
    CPE  MA9
    CP   MA9
    CZ   MA9
    CPI  89H
    JZ   MAB
    RST  0
MA9:RST  0
MAB:ANI  0FFH
    CPO  MAC
    CPI  0D9H
    JZ   MAD
    RST  0
MAC:RPE
    ADI  10H
    CPE  MAE
    ADI  02H
    RPO
    RST  0
MAE:RPO
    ADI  20H
    CM   MAF
    ADI  04H
    RPE
    RST  0
MAF:RP
    ADI  80H
    CP   MB0
    ADI  80H
    RM
    RST  0
MB0:RM
    ADI  40H
    CNC  MB1
    ADI  40H
    RP
    RST  0
MB1:RC
    ADI  8FH
    CC   MB2
    SUI  02H
    RNC
    RST  0
MB2:RNC
    ADI  0F7H
    CNZ  MB3
    ADI  0FEH
    RC
    RST  0
MB3:RZ
    ADI  01H
    CZ   MB4
    ADI  0D0H
    RNZ
    RST  0
MB4:RNZ
    ADI  47H
    CPI  47H
    RZ
    RST  0
MAD:MVI  A,11H
    MVI  B,22H
    MVI  C,33H
    MVI  D,44H
    MVI  E,55H
    MVI  H,66H
    MVI  L,77H
    CPI  11H
    CNZ  M12
    CMP  B
    CZ   M12
    CMP  C
    CZ   M12
    CMP  D
    CZ   M12
    CMP  E
    CZ   M12
    CMP  H
    CZ   M12
    CMP  L
    CZ   M12
    CMP  A
;
M03:EQU  0FF7FH
M05:EQU  0F5FDH
M07:EQU  0F5FEH
M08:EQU  0FC00H
M0A:EQU  0FC01H
M11:EQU  00C9H
M12:EQU  0000H
M14:EQU  0FB29H
M17:EQU  0FA7FH
M19:EQU  8000H
M1D:EQU  0FFFFH
M1E:EQU  7FFFH
M1F:EQU  3A7FH
M34:EQU  0043H
M5F:EQU  0BFBFH
M60:EQU  0C000H
M62:EQU  0BF7FH
M64:EQU  2000H
M6D:EQU  0FB3AH
M6F:EQU  0F705H
M71:EQU  0800H
M77:EQU  00FFH
M79:EQU  0001H
M87:EQU  00E1H
M88:EQU  00E6H
    CNZ  T00
    ADI  11H
    CMP  B
    CNZ  T00
    ADI  11H
    CMP  C
    CNZ  T00
    ADI  11H
    CMP  D
    CNZ  T00
    ADI  11H
    CMP  E
    CNZ  T00
    ADI  11H
    CMP  H
    CNZ  T00
    ADI  11H
    CMP  L
    CNZ  T00
    INR  A
    INR  B
    INR  C
    INR  D
    INR  E
    INR  H
    INR  L
    DCR  A
    DCR  B
    DCR  C
    DCR  D
    DCR  E
    DCR  H
    DCR  L
    CPI  77H
    CNZ  T00
    CMP  L
    CNZ  T00
    SUI  11H
    CMP  H
    CNZ  T00
    SUI  11H
    CMP  E
    CNZ  T00
    SUI  11H
    CMP  D
    CNZ  T00
    SUI  11H
    CMP  C
    CNZ  T00
    SUI  11H
    CMP  B
    CNZ  T00
    MVI  A,0AAH
    MOV  B,A
    MOV  C,B
    MOV  D,C
    MOV  E,D
    MOV  H,E
    MOV  L,H
    MOV  A,L
    CPI  0AAH
    CNZ  T00
    MVI  A,0BBH
    MOV  C,A
    MOV  E,C
    MOV  L,E
    MOV  B,L
    MOV  D,B
    MOV  H,D
    MOV  A,H
    CPI  0BBH
    CNZ  T00
    MVI  A,0CCH
    MOV  D,A
    MOV  L,D
    MOV  C,L
    MOV  H,C
    MOV  B,H
    MOV  E,B
    MOV  A,E
    CPI  0CCH
    CNZ  T00
    MVI  A,0DDH
    MOV  E,A
    MOV  B,E
    MOV  H,B
    MOV  C,H
    MOV  L,C
    MOV  D,L
    MOV  A,D
    CPI  0DDH
    CNZ  T00
    MVI  A,0EEH
    MOV  H,A
    MOV  D,H
    MOV  B,D
    MOV  L,B
    MOV  E,L
    MOV  C,E
    MOV  A,C
    CPI  0EEH
    CNZ  T00
    MVI  A,0FFH
    MOV  L,A
    MOV  H,L
    MOV  E,H
    MOV  D,E
    MOV  C,D
    MOV  B,C
    MOV  A,B
    CPI  0FFH
    CNZ  T00
    MVI  A,00H
    MVI  B,01H
    MVI  C,03H
    MVI  D,07H
    MVI  E,0FH
    MVI  H,1FH
    MVI  L,3FH
    ADD  B
    ADD  C
    ADD  D
    ADD  E
    ADD  H
    ADD  L
    ADD  A
    CPI  0F0H
    CNZ  T00
    SUB  B
    SUB  C
    SUB  D
    SUB  E
    SUB  H
    SUB  L
    CPI  78H
    CNZ  T00
    SUB  A
    CNZ  T00
    MVI  A,80H
    ADD  A
    MVI  B,01H
    MVI  C,02H
    MVI  D,03H
    MVI  E,04H
    MVI  H,05H
    MVI  L,06H
    ADC  B
    MVI  B,80H
    ADD  B
    ADD  B
    ADC  C
    ADD  B
    ADD  B
    ADC  D
    ADD  B
    ADD  B
    ADC  E
    ADD  B
    ADD  B
    ADC  H
    ADD  B
    ADD  B
    ADC  L
    ADD  B
    ADD  B
    ADC  A
    CPI  37H
    CNZ  T00
    MVI  A,80H
    ADD  A
    MVI  B,01H
    SBB  B
    MVI  B,0FFH
    ADD  B
    SBB  C
    ADD  B
    SBB  D
    ADD  B
    SBB  E
    ADD  B
    SBB  H
    ADD  B
    SBB  L
    CPI  0E0H
    CNZ  T00
    MVI  A,80H
    ADD  A
    SBB  A
    CPI  0FFH
    CNZ  T00
    MVI  A,00H
    MVI  B,01H
    MVI  C,02H
    MVI  D,04H
    MVI  E,08H
    MVI  H,10H
    MVI  L,20H
    STC
    ORA  B
    ORA  C
    ORA  D
    ORA  E
    ORA  H
    ORA  L
    ORA  A
    CC   T00
    CPI  3FH
    CNZ  T00
    MVI  A,0FFH
    MVI  B,0FEH
    MVI  C,0FCH
    MVI  D,0EFH
    MVI  E,7FH
    MVI  H,0F4H
    MVI  L,0BFH
    STC
    ANA  B
    ANA  C
    ANA  D
    ANA  E
    ANA  H
    ANA  L
    ANA  A
    CC   T00
    CPI  24H
    CNZ  T00
    MVI  A,00H
    MVI  B,01H
    MVI  C,02H
    MVI  D,04H
    MVI  E,08H
    MVI  H,8FH
    MVI  L,4FH
    STC
    XRA  B
    XRA  C
    XRA  D
    XRA  E
    XRA  H
    XRA  L
    CC   T00
    CPI  0CFH
    CNZ  T00
    XRA  A
    CNZ  T00
    MVI  B,44H
    MVI  C,45H
    MVI  D,46H
    MVI  E,47H
    MVI  H,00H
    MVI  L,4EH
    MOV  M,B
    MVI  B,00H
    MOV  B,M
    MVI  A,44H
    CMP  B
    CNZ  T00
    MOV  M,C
    MVI  C,00H
    MOV  C,M
    MVI  A,45H
    CMP  C
    CNZ  T00
    MOV  M,D
    MVI  D,00H
    MOV  D,M
    MVI  A,46H
    CMP  D
    CNZ  T00
    MOV  M,E
    MVI  E,00H
    MOV  E,M
    MVI  A,47H
    CMP  E
    CNZ  T00
    MOV  M,H
    MVI  H,00H
    MVI  L,4EH
    MOV  H,M
    MVI  A,00H
    CMP  H
    CNZ  T00
    MOV  M,L
    MVI  H,00H
    MVI  L,4EH
    MOV  L,M
    MVI  A,4EH
    CMP  L
    CNZ  T00
    MVI  H,00H
    MVI  L,4EH
    MVI  A,32H
    MOV  M,A
    CMP  M
    CNZ  T00
    ADD  M
    CPI  64H
    CNZ  T00
    XRA  A
    MOV  A,M
    CPI  32H
    CNZ  T00
    MVI  A,11H
    MVI  B,22H
    MVI  C,33H
    MVI  D,10H
    MVI  E,03H
    MVI  H,05H
    MVI  L,07H
    NOP
    MOV  A,A
    NOP
    MOV  B,B
    NOP
    MOV  C,C
    NOP
    MOV  D,D
    NOP
    MOV  E,E
    NOP
    MOV  H,H
    NOP
    MOV  L,L
    ADD  B
    ADD  C
    ADD  D
    ADD  E
    ADD  H
    ADD  L
    CPI  85H
    CNZ  T00
    MVI  H,00H
    MVI  L,4EH
    MOV  A,M
    SUB  M
    CNZ  T00
    MVI  A,80H
    ADD  A
    ADC  M
    CPI  33H
    CNZ  T00
    MVI  A,80H
    ADD  A
    SBB  M
    CPI  0CDH
    CNZ  T00
    ANA  M
    CNZ  T00
    MVI  A,25H
    ORA  M
    CPI  37H
    CNZ  T00
    XRA  M
    CPI  05H
    CNZ  T00
    MVI  A,22H
    MVI  M,55H
    INR  A
    INR  M
    DCR  A
    DCR  M
    ADD  M
    CPI  77H
    CNZ  T00
    LXI  B,T01
    LXI  D,T01
    LXI  H,T01
    INX  B
    INX  D
    INX  H
    MVI  A,13H
    CMP  B
    CNZ  T00
    CMP  D
    CNZ  T00
    CMP  H
    CNZ  T00
    MVI  A,00H
    CMP  C
    CNZ  T00
    CMP  E
    CNZ  T00
    CMP  L
    CNZ  T00
    DCX  B
    DCX  D
    DCX  H
    MVI  A,12H
    CMP  B
    CNZ  T00
    CMP  D
    CNZ  T00
    CMP  H
    CNZ  T00
    MVI  A,0FFH
    CMP  C
    CNZ  T00
    CMP  E
    CNZ  T00
    CMP  L
    CNZ  T00
    MVI  A,55H
    STA  T02
    XRA  A
    LDA  T02
    CPI  55H
    CNZ  T00
    LHLD T03
    SHLD T02
    LDA  T03
    MOV  B,A
    LDA  T02
    CMP  B
    CNZ  T00
    LDA  T04
    MOV  B,A
    LDA  T05
    CMP  B
    CNZ  T00
    MVI  A,0AAH
    STA  T02
    LXI  B,T00
    MOV  B,H
    MOV  C,L
    XRA  A
    LDAX B
    CPI  0AAH
    CNZ  T00
    MVI  A,0FFH
    STAX B
    XRA  A
    LDA  T02
    CPI  0FFH
    CNZ  T00
    MVI  A,77H
    STA  T02
    LHLD T03
    LXI  D,T00
    XCHG
    XRA  A
    LDAX D
    CPI  77H
    CNZ  T00
    XRA  A
    ADD  H
    ADD  L
    CNZ  T00
    MVI  A,0CCH
    STAX D
    XRA  A
    LDA  T02
    CPI  0CCH
    CNZ  T00
    LXI  H,T06
    DAD  H
    MVI  A,0EEH
    CMP  H
    CNZ  T00
    CMP  L
    CNZ  T00
    LXI  H,T07
    LXI  B,T08
    DAD  B
    MVI  A,55H
    CNC  T00
    CMP  H
    CNZ  T00
    MVI  A,54H
    CMP  L
    CNZ  T00
    LXI  H,T09
    LXI  D,T0A
    DAD  D
    MVI  A,0DDH
    CMP  H
    CNZ  T00
    CMP  L
    CNZ  T00
    STC
    CNC  T00
    CMC
    CC   T00
    MVI  A,55H
    CMA
    CPI  0AAH
    CNZ  T00
    XRA  A
    MVI  A,55H
    DAA
    CPI  55H
    CNZ  T00
    MVI  A,88H
    ADD  A
    DAA
    CPI  76H
    CNZ  T00
    XRA  A
    MVI  A,0AAH
    DAA
    CNC  T00
    CPI  10H
    CNZ  T00
    XRA  A
    MVI  A,9AH
    DAA
    CNC  T00
    CNZ  T00
    STC
    MVI  A,42H
    RLC
    CC   T00
    RLC
    CNC  T00
    CPI  09H
    CNZ  T00
    RRC
    CNC  T00
    RRC
    CPI  42H
    CNZ  T00
    RAL
    RAL
    CNC  T00
    CPI  08H
    CNZ  T00
    RAR
    RAR
    CC   T00
    CPI  02H
    CNZ  T00
    LXI  B,T0B
    LXI  D,T09
    LXI  H,T07
    XRA  A
    PUSH B
    PUSH D
    PUSH H
    PUSH PSW
    LXI  B,T00
    LXI  D,T00
    LXI  H,T00
    MVI  A,0C0H
    ADI  0F0H
    POP  PSW
    POP  H
    POP  D
    POP  B
    CC   T00
    CNZ  T00
    CPO  T00
    CM   T00
    MVI  A,12H
    CMP  B
    CNZ  T00
    MVI  A,34H
    CMP  C
    CNZ  T00
    MVI  A,0AAH
    CMP  D
    CNZ  T00
    CMP  E
    CNZ  T00
    MVI  A,55H
    CMP  H
    CNZ  T00
    CMP  L
    CNZ  T00
    LXI  H,T00
    DAD  SP
    SHLD T0C
    LXI  SP,T0D
    DCX  SP
    DCX  SP
    INX  SP
    DCX  SP
    MVI  A,55H
    STA  T0E
    CMA
    STA  T0F
    POP  B
    CMP  B
    CNZ  T00
    CMA
    CMP  C
    CNZ  T00
    LXI  H,T0D
    SPHL
    LXI  H,T10
    DCX  SP
    DCX  SP
    XTHL
    LDA  T0F
    CPI  77H
    CNZ  T00
    LDA  T0E
    CPI  33H
    CNZ  T00
    MVI  A,55H
    CMP  L
    CNZ  T00
    CMA
    CMP  H
    CNZ  T00
    LHLD T0C
    SPHL
    LXI  H,T11
    PCHL
    CALL T00
T11:LXI  H,T12
    LXI  D,T00
    MVI  C,3BH
    CALL T13
    RST  0
    CPI  00H
    JZ   T14
    LXI  H,T12
    LXI  D,T00
    MVI  C,3BH
    CALL T13
    CALL T00
T14:RST  1
    CPI  01H
    CNZ  T00
    RST  2
    CPI  02H
    CNZ  T00
    RST  3
    CPI  03H
    CNZ  T00
    RST  4
    CPI  04H
    CNZ  T00
    RST  5
    CPI  05H
    CNZ  T00
    RST  6
    CPI  06H
    CNZ  T00
    RST  7
    CPI  07H
    CNZ  T00
    LXI  H,T12
    LXI  D,T00
    MVI  C,3BH
    CALL T13
    LXI  H,T15
    LXI  D,T00
    MVI  C,03H
    CALL T13
    MVI  A,14H
    STA  T16
    LXI  H,T17
    CALL MSG
    LXI  SP,T19
    RET
T1D:LXI  H,T15
    LXI  D,T00
    MVI  C,03H
    CALL T13
    MVI  A,14H
    STA  T16
    LXI  H,T1A
    CALL MSG
    LXI  H,RTN
    CALL MSG
    LXI  SP,T19
    RET
;
M8E:
T13:MOV  A,M
    XCHG
    MOV  B,M
    MOV  M,A
    XCHG
    MOV  M,B
    INX  H
    INX  D
    DCR  C
    JNZ  T13
    RET
T03:DW   T02
T04:EQU  T03+1
T02:DB   0
T05:NOP
    NOP
    NOP
    NOP
    NOP
    NOP
T0E:NOP
T0F:NOP
T0D:NOP
T0C:NOP
    NOP
;
M8D:
T15:JMP  T1D
T12:MVI  A,00H
    RET
    NOP
    NOP
    NOP
    NOP
    NOP
    MVI  A,01H
    RET
    NOP
    NOP
    NOP
    NOP
    NOP
    MVI  A,02H
    RET
    NOP
    NOP
    NOP
    NOP
    NOP
    MVI  A,03H
    RET
    NOP
    NOP
    NOP
    NOP
    NOP
    MVI  A,04H
    RET
    NOP
    NOP
    NOP
    NOP
    NOP
    MVI  A,05H
    RET
    NOP
    NOP
    NOP
    NOP
    NOP
    MVI  A,06H
    RET
    NOP
    NOP
    NOP
    NOP
    NOP
    MVI  A,07H
    RET
;
M5C:LXI  H,T1E
    CALL MSG
    MVI  C,0FH
    XRA  A
    STA  T1F
T30:PUSH B
    LXI  H,T20
    CALL MSG
    LDA  T1F
    CALL T21
    MVI  A,09H
    CALL T22
    POP  B
    MVI  A,5CH
    STA  T23
    LXI  D,T24
T2F:LXI  H,T25
T28:DCX  H
    MOV  A,E
    ANA  L
    JNZ  T26
    MOV  A,D
    ANA  H
T26:MOV  A,C
    JZ   T27
    CMA
T27:MOV  M,A
    MOV  A,H
    ORA  L
    JNZ  T28
    LXI  H,T29
T2A:DCX  H
    MOV  A,H
    ORA  L
    JNZ  T2A
    LXI  H,T25
T2E:DCX  H
    MOV  A,E
    ANA  L
    JNZ  T2B
    MOV  A,D
    ANA  H
T2B:MOV  B,M
    MOV  A,C
    JZ   T2C
    CMA
T2C:CMP  B
    CNZ  T2D
    MOV  A,H
    ORA  L
    JNZ  T2E
    MOV  A,E
    ADD  A
    MOV  E,A
    JNZ  T2F
    MOV  A,D
    RAL
    MOV  D,A
    ANI  80H
    JZ   T2F
    MVI  A,14H
    STA  T16
    MVI  A,2AH
    CALL T22
    LXI  H,RTN
    CALL MSG	; ВКПС
    LXI  H,T1F
    INR  M
    MOV  A,C
    RLC
    MOV  C,A
    CPI  0FH
    JNZ  T30
    RET
T2D:PUSH D
    PUSH B
    PUSH PSW
    PUSH H
    MVI  A,14H
    STA  T16
    LXI  H,T31
    CALL MSG	; 'ошибка ОЗУ'
    POP  H
    CALL T32
    MVI  A,20H
    CALL T22
    POP  PSW
    CALL T21
    MVI  A,20H
    CALL T22
    POP  B
    MOV  A,B
    CALL T21
    PUSH H
    LXI  H,RTN
    CALL MSG	; ВКПС
    MVI  A,5CH
    STA  T23
    POP  H
    POP  D
    RET
T20:DB   9,'Проход #',0
T1F:NOP
;
M5E:
    LXI  H,T35
    CALL MSG	; 'тест ОЗУ 8000-FFFF'
    LXI  H,RTN
    CALL MSG	; ВКПС
    MVI  C,0FH
    XRA  A
    STA  T1F
T41:PUSH B
    LXI  H,T20
    CALL MSG	; 'проход #'
    LDA  T1F
    CALL T21	; вывод N прохода
    MVI  A,09H
    CALL T22	; табуляция
    CALL T36
    MVI  A,00H
    STA  T23
    POP  B
    LXI  D,T24
T3F:LXI  H,T25
T39:MOV  A,E
    ANA  L
    JNZ  T37
    MOV  A,D
    ANA  H
T37:MOV  A,C
    JZ   T38
    CMA
T38:MOV  M,A
    INX  H
    MOV  A,H
    ORA  L
    JNZ  T39
    LXI  H,T29
T3A:DCX  H
    MOV  A,H
    ORA  L
    JNZ  T3A
    LXI  H,T25
T3E:MOV  A,E
    ANA  L
    JNZ  T3B
    MOV  A,D
    ANA  H
T3B:MOV  B,M
    MOV  A,C
    JZ   T3C
    CMA
T3C:CMP  B
    CNZ  T3D
    INX  H
    MOV  A,H
    ORA  L
    JNZ  T3E
    MOV  A,E
    ADD  A
    MOV  E,A
    JNZ  T3F
    MOV  A,D
    RAL
    MOV  D,A
    ANI  80H
    JZ   T3F
    PUSH B
    MVI  A,14H
    STA  T40
    CALL T36
    MVI  A,2AH
    CALL T22	; '*'
    LXI  H,RTN
    CALL MSG	; ВКПС
    LXI  H,T1F
    INR  M
    POP  B
    MOV  A,C
    RLC
    MOV  C,A
    CPI  0FH
    JNZ  T41
    RET
T36:LXI  H,2000H	; буфер системной области
    LXI  D,0F5FDH	; начало системной области
    MVI  C,03H		; число обменивающихся ячеек
    CALL T13 		; обмен 3-х ячеек рестарта
    CALL T13 		; обмен страницы
    CALL T13 		; обмен страницы
    RET
T3D:PUSH D
    PUSH B
    PUSH PSW
    PUSH H
    MVI  A,14H
    STA  T40
    CALL T36
    LXI  H,T31
    CALL MSG
    POP  H
    CALL T32
    MVI  A,20H
    CALL T22
    POP  PSW
    CALL T21
    MVI  A,20H
    CALL T22
    POP  B
    MOV  A,B
    CALL T21
    PUSH B
    PUSH H
    LXI  H,RTN
    CALL MSG
    CALL T36
    MVI  A,00H
    STA  T23
    POP  H
    POP  B
    POP  D
    RET
;
ROM:
    LXI  H,T44
    CALL MSG
    MVI  A,40H
    STA  T23
    LXI  H,T00
    MOV  B,L
    LXI  D,T45
    CALL T46
    CPI  0
    JZ   T47
	CPI	0BFH
	JZ	T47
    MOV  A,B
    ORI  01H
    MOV  B,A
T47:MVI  D,3FH
    CALL T46
    CPI  0A7H
    JZ   T48
	CPI	0CFH
	JZ	T48
    MOV  A,B
    ORI  02H
    MOV  B,A
T48:MVI  D,5FH
    CALL T46
    CPI  5BH
    JZ   T49
	CPI	72H
	JZ	T49
    MOV  A,B
    ORI  04H
    MOV  B,A
T49:MOV  A,B
    ORA  A
    PUSH PSW
    MVI  A,14H
    STA  T23
    LXI  H,T17
    CALL MSG
    POP  PSW
    RZ
    MVI  C,03H
T4B:RRC
    CC   T4A
    DCR  C
    JNZ  T4B
    MVI  C,07H
    CALL T4C
    RET
T4A:PUSH PSW
    PUSH B
    LXI  H,T4D
    CALL MSG
    POP  B
    PUSH B
    MVI  A,03H
    SUB  C
    CALL T4E
    MOV  C,A
    CALL T4C
    LXI  H,RTN
    CALL MSG
    POP  B
    POP  PSW
    RET
;
GZU:
    LXI  H,T4F
    CALL MSG	; 'тест ГЗУ'
    LXI  H,T50	; "конфигурация:"
    CALL MSG
;
    MVI  A,20H
    STA  T23	; ROMB2
    XRA  A
    STA  T51	; байт признаков наличия/отсутствия слоев
		; окончательный формат:0001 0101; D0-слой 0,
		; D2-слой 1, D4-слой 2
    LXI  B,5546H	; B-проверочный байт, C-режим для сл.2
    LXI  D,NCREG+RGBASE1
    LXI  H,GRBASE
;
; проверка на наличие слоев
;
T57:MOV  A,C	; установка в NCREG
    STAX D	; режима работы с проверяемым слоем
;
    MVI  M,0FFH	; обнулений 1-й ячейки страницы ГЗУ
;
; устанвка для записи единиц в ГЗУ
;
    INR  A
    STAX D
;
    MOV  M,B	; запись 55H
    MVI  M,00H	; сброс данных
    MOV  A,M	; чтение записанного
    CMP  B	; сравнение с образцом 55H
    JNZ  T55	; если ошибка, перейти на формирование битов
		; наличия/отсутствия проверяемого слоя
;
    MVI  M,0FFH	; запись FF в ячейку
    MOV  A,C	; режим для записи нолей
    STAX D
    MOV  M,B
    MVI  M,00H	; запись AA
    MOV  A,M
    CMA
    CMP  B	; сравнение с образцом
    MVI  M,0FFH	; обнуление ячейки
;
T55:LDA  T51	; получить текущий байт признаков
    JNZ  T56	; если были ошибки, то не устанавливать
		; текущий бит
    ORI  40H	; установка в единицу бита для текущего слоя
		; при его наличии
;
T56:RLC		; подготовка байта признаков для проверки
    RLC		; следующего слоя
    STA  T51
;
; подготовка байта режима для NCREG для следующего слоя
;
    MOV  A,C
    RRC
    ORI  08H
    ANI  7EH
    MOV  C,A
    CPI  0EH	; слой был последний (#0) ?
    JNZ  T57	; если нет, то проверить следующий
;
; проверка на емкость слоев
;
    LXI  B,VIREG+PBASE1
    MVI  A,1CH	; байт режима для NCREG (начать со слоя 0)
    STA  T59
;
N06:LDA  T51
    ANI  03H	; проверяемый слой присутствует ?
    JNZ  T5A	; если да, то обойти вывод 'отсутствует'
;
    PUSH H	; сохранить GRBASE
    LXI  H,T5B	; "отсутствует"
    MVI  A,14H
    STA  T40	; NDOS
    CALL MSG
    MVI  A,20H
    STA  T23	; ROMB2
    POP  H	; восстановить GRBASE
    STC		; установить признак отсутствия слоя
    JMP  T5C	; перейти на формирование признаков емкости сл.
;
T5A:LDAX B
    ORI  0C0H	; установить работу со страницей 3
    STAX B
;
    LDA  T59
    STAX D	; установить режим работы с текущим слоем
;
    MVI  M,0FFH	; обнулить нулевую ячейку третьей страницы
    INR  A
    STAX D	; установить режим для записи единиц
    MVI  M,04H	; признак третьей страницы
;
    LDAX B
    ANI  7FH	; установить страницу #1
    STAX B
;
    LDA  T59
    STAX D	; установить режим записи нолей в текущий слой
;
    MVI  M,0FFH	; обнулить ячейку
    INR  A
    STAX D	; установить режим записи единиц
    MVI  M,02H	; записать признак первой страницы
;
    LDAX B
    ANI  3FH	; установить страницу #0
    STAX B
;
    LDA  T59
    STAX D	; установить режим записи нолей
;
    MVI  M,0FFH	; обнулить ячейку
    INR  A
    STAX D	; установить режим записи единиц
    MVI  M,01H	; записать признак нулевой страницы
;
    LDAX B
    ORI  0C0H	; установить страницу #3
    STAX B
;
    MOV  A,M	; прочитать признак страницы
    PUSH PSW
;
    MVI  A,14H	; NDOS
    STA  T40
;
    POP  PSW
    PUSH PSW
    ADI  30H	; сформировать код символа 4, 2 или 1
    CALL T22	; вывести его
;
    PUSH H	; сохранить GRBASE
    LXI  H,T5D	; 'x16K'
;
T00:EQU  0000H
T01:EQU  12FFH
T06:EQU  7777H
T07:EQU  5555H
T08:EQU  0FFFFH
T09:EQU  0AAAAH
T0A:EQU  3333H
T0B:EQU  1234H
T10:EQU  7733H
T16:EQU  0FF7FH
T1C:EQU  002CH
T23:EQU  0FA7FH
T24:EQU  0001H
T25:EQU  8000H
T29:EQU  00D0H
T40:EQU  3A7FH
T42:EQU  2000H
T43:EQU  0F5FDH
T45:EQU  1FFFH
T46:EQU  00B0H
T4C:EQU  004CH
T4E:EQU  00F7H
NCREG:	EQU	0BFH
RGBASE1:EQU	3A00H
GRBASE:	EQU  0C000H
VIREG:	EQU	3AH
PBASE1:	EQU	3B00H
T5E:EQU  2749H
;
    CALL MSG
    POP  H	; восстановить GRBASE
;
    MVI  A,20H
    STA  N01	; ROMB2
;
    POP  PSW	; воостановить признак объема
    CPI  02H
T5C:PUSH B
    LDA  N02	; получить байт наличия слоев
;
    JC   N03
    MVI  C,02H
    JNZ  N04
    INR  C
N04:ANI  0FCH
    ORA  C
N03:RRC
    RRC
    STA  N02
;
    POP  B
    LDA  N05
    RLC
    ORI  02H
    ANI  6EH
    STA  N05	; установить работу со следующим слоем
    CPI  0EH
    JNZ  N06
;
    LDAX B
    ANI  3CH	; работа и отображение страницы 0
    STAX B
;
    MVI  A,14H	; NDOS
    STA  N07
;
    LXI  H,RTN
    CALL MSG
;
; в T51 00 XX  XX XX, где XX=00 - слой отсутствует,
;                         XX=01 - 1x16,
;                         XX=11 - 2x16,
;                         XX=10 - 4x16
;
    LDA  N02
    RRC
    RRC
    STA  N02
;
    XRA  A
    STA  N09
    MVI  A,1CH
    STA  N05
;
N1E:LDA  N02
    ANI  03H	; проверка на присутствие проверяемого слоя
    JZ   N0A
    LXI  H,N0B	; "тест слоя #"
    CALL MSG
    LDA  N09
    ADI  30H	; вывод номера слоя
    CALL N0C
;
	LDA	N02
	ANI	3
	CPI	1
	JZ	NFE
	XRA	A
	STA	PGE
	LXI	H,RTN
	CALL	MSG
NFD:
	LXI	H,SPAGE	; "страницы #"
	CALL	MSG
	LDA	PGE
	ADI	30H
	CALL	N0C
;
NFE:
    MVI  A,09H
    CALL N0C
;
	LDA	VIREG+PBASE
	ANI	3CH
	MOV	B,A
	LDA	PGE
	PUSH	PSW
	ORA	B
	MOV	B,A
	POP	PSW
	RRC
	RRC
	ORA	B
	STA	VIREG+PBASE
;
VIREG	EQU	3AH

;
    MVI  A,20H
    STA  N01
    MVI  C,0FH
N19:LXI  D,1
N18:MVI  B,0FFH
    LXI  H,GRBASE
;
    LDA  N05
    STA  N0F	; в р-р цвета
;
; обнуление
;
N10:MOV  M,B
    INX  H
    MOV  A,L
    ORA  H
    JNZ  N10
;
; режим для записи единиц
;
    LXI  H,GRBASE
    LDA  N05
    INR  A
    STA  N0F
;
; запись байтов-образцов
;
N13:MOV  A,E
    ANA  L
    JNZ  N11
    MOV  A,D
    ANA  H
N11:MOV  A,C
    JZ   N12
    CMA
N12:MOV  M,A
    INX  H
    MOV  A,L
    ORA  H
    JNZ  N13
;
; проверка байтов-образцов
;
    LXI  H,GRBASE
N17:MOV  A,E
    ANA  L
    JNZ  N14
    MOV  A,D
    ANA  H
N14:MOV  B,M
    MOV  A,C
    JZ   N15
    CMA
N15:CMP  B
    CNZ  N16
    INX  H
    MOV  A,L
    ORA  H
    JNZ  N17
    MOV  A,E
    ADD  A
    MOV  E,A
    JNZ  N18
    MOV  A,D
    RAL
    MOV  D,A
    ANI  40H
    JZ   N18
    MOV  A,C
    XRI  0FFH
    MOV  C,A
    JM   N19
    CPI  0FH
    JNZ  N1A
    MVI  C,33H
    JMP  N19
N1A:CPI  33H
    JNZ  N1B
    MVI  C,55H
    JMP  N19
N1B:LDA  N05
    STA  N0F
    MVI  B,0FFH
    LXI  H,N0E
N1C:MOV  M,B
    INX  H
    MOV  A,L
    ORA  H
    JNZ  N1C
    MVI  A,14H
    STA  N07
    LXI  H,N1D	; "окончен"
    CALL MSG
;
; работа со следующей страницей
;
	LDA	N02
	ANI	3
	CPI	1
	JZ	N0A
	LDA	PGE
	INR	A
	STA	PGE
	CPI	4
	JNZ	NFD
;
; работа со следующим слоем
;
N0A:LDA  N05
    RLC
    ORI  02H
    ANI  6EH
    STA  N05
    LDA  N02
    RRC
    RRC
    STA  N02
    LDA  N09
    INR  A
    STA  N09
    CPI  03H
    JC   N1E
;
	LDA	VIREG+PBASE
	ANI	3CH
	STA	VIREG+PBASE
;
    RET
;
; п/п вывода ошибки
;
N16:PUSH D
    PUSH B
    PUSH PSW
    PUSH H
    MVI  A,14H
    STA  N07
;
    LXI  H,N1F	; ошибка ГЗУ:
    CALL MSG
    POP  H
    CALL N20	; вывод адреса
    MVI  A,20H
    CALL N0C	; вывод пробела
    POP  PSW
    CALL N21	; вывод байта
    MVI  A,20H
    CALL N0C	; вывод пробела
    POP  B
    MOV  A,B
    CALL N21	; вывод байта-образца
    PUSH H
    LXI  H,RTN
    CALL MSG
    MVI  A,20H
    STA  N01
    POP  H
    POP  D
    RET
;
T4F:DB   'Тест ГЗУ',0DH,0AH,0
T50:DB   '    Конфигурация:',9
    DB   'Слой #0     Слой #1     Слой #2',0DH,0AH,9,9,9,0
T5B:DB   'отсутствует ',0
T5D:DB   'x16К       ',0
N0B:DB   09H
    DB   'Тест слоя  #',0
N1F:DB   09H
    DB   'Ошибка ГЗУ:   ',0
SPAGE:
	DB	9,9,'страницы #',0
N09:DS	 1
T51:
N02:DS	 1
T59:
N05:DS	 1
PGE:	DS	1
;
M3F:CALL N25	; очистка ГЗУ
    LXI  H,N26	; "проверка отображения информации"
    CALL MSG
N28:CALL CONIN
    CPI  0DH
    JNZ  N28
    LXI  H,N29
    CALL MSG
    MVI  A,3CH
    STA  N01
    MVI  A,8EH
    STA  N2A
    LXI  H,N2B
    LXI  D,N2C
    LXI  B,N0E
N2E:MOV  M,B
    MOV  A,B
    RRC
    RRC
    MOV  B,A
    JNC  N2D
    INX  H
N2D:DAD  D
    DCR  C
    JNZ  N2E
    LXI  H,N2F
    LXI  D,N30
    LXI  B,N0E
N32:MOV  M,B
    MOV  A,B
    RRC
    RRC
    MOV  B,A
    JNC  N31
    INX  H
N31:DAD  D
    DCR  C
    JNZ  N32
    MVI  A,0FFH
    LXI  H,N33
    MOV  M,A
    INX  H
    MOV  M,A
    INX  H
    MOV  M,A
    INX  H
    MOV  M,A
    LXI  H,N34
    MOV  M,A
    INX  H
    MOV  M,A
    INX  H
    MOV  M,A
    INX  H
    MOV  M,A
    LXI  H,N35
    LXI  D,N2C
    LXI  B,N36
N37:MOV  M,B
    DAD  D
    DCR  C
    JNZ  N37
    LXI  H,N38
    LXI  B,N39
N3A:MOV  M,B
    DAD  D
    DCR  C
    JNZ  N3A
    LXI  H,N2B
    MVI  C,08H
N3C:MOV  A,M
    ORA  A
    JNZ  N3B
    INX  H
    JMP  N3C
N3B:MVI  M,0FFH
    INX  H
    MOV  A,M
    ORA  A
    JZ   N3B
    MVI  M,0FFH
    MOV  B,A
    LXI  D,N2C
N3D:DAD  D
    MOV  A,M
    MOV  M,B
    ANI  03H
    JZ   N3D
N3E:MVI  M,0FFH
    DCX  H
    MOV  A,M
    ORA  A
    JZ   N3E
    MVI  M,0FFH
    MOV  B,A
    LXI  D,N30
N3F:DAD  D
    MOV  A,M
    MOV  M,B
    ANI  0C0H
    JZ   N3F
    LXI  D,N40
    DAD  D
    INX  H
    DCR  C
    JNZ  N3C
    MVI  A,14H
    STA  N41
    LXI  H,N42
    CALL MSG
N43:CALL CONIN
    CPI  0DH
    JNZ  N43
    CALL N25
    LXI  H,N44
    CALL MSG
    MVI  A,3CH
    STA  N01
    LXI  H,N45
    MVI  B,8EH
    MVI  C,08H
N48:MOV  A,B
    STA  N2A
    MVI  D,20H
N47:MVI  E,20H
N46:MVI  M,0FFH
    INX  H
    DCR  E
    JNZ  N46
    MOV  A,L
    ADI  20H
    MOV  L,A
    MOV  A,H
    ACI  00H
    MOV  H,A
    DCR  D
    JNZ  N47
    MOV  A,B
    SUI  02H
    MOV  B,A
    DCR  C
    JNZ  N48
    MVI  A,14H
    STA  N41
    RET
;
M40:
N62:LXI  H,N49
    CALL MSG	; 'проверка клавиатуры'
    CALL N25	; очистка ГЗУ
    MVI  A,3CH
    STA  N01	; установка DOSG1
    MVI  A,8EH
    STA  N2A	; RGBASE+NCREG
    LXI  H,N4A	; адрес массива графики
    MVI  C,50H
N4D:PUSH B	; вывод графики (подсвечивания)
    PUSH H
    CALL N4B
    POP  H
    LXI  D,N4C
    DAD  D
    POP  B
    DCR  C
    JNZ  N4D
    MVI  A,14H
    STA  N41	; установка NDOS
    LXI  H,N4E
    MVI  C,09H
N4F:MVI  M,0FFH
    INX  H
    DCR  C
    JNZ  N4F
    MVI  M,43H
    INX  H
    MVI  M,1FH
    LXI  H,N50
    CALL MSG	; 'нажимая, погасите; выход - УПР и СТОП'
;
;	настройка таймера
;
	LXI	H,BCNTC+PBASE; адрес р-ра упр-я таймерв
	MVI	M,STR0S OR RLLM OR MODE3; загр. мл и ст, сч 0, делитель F
;
STR0S	EQU	00000000B; выбор счетчика 0
RLLM	EQU	00110000B; чт/загр обоих байтов
MODE3	EQU	00000110B; режим делителя частоты
SNDEN	EQU	8	; константа разрешения звука
SOUNDC	EQU	32H	; адрес р-ра разрешения звука
;
	MVI	L,0	; адрес р-ра счета таймера
	LXI	D,12000	; коэф. счета 12000
	MOV	M,E	; загрузка младшего байта
	MOV	M,D	; загрузка старшего байта
;
N53:
	CALL	SOUNDNOT; выключить звук
;
	LXI  D,N51	; выбираются все основные группы
    LXI  H,N52	; выбираются все дополнительные группы
    LDAX D
    ORA  M
    JZ   N53	; не нажата
;
	CALL	SOUNDEN	; включить звук
;
    XRA  A
N54:DCR  A
    JNZ  N54	; задержка
    LDAX D
    ORA  M
    JZ   N53	; дребезг, начать снова
;
;		клавиша нажата
;
    MVI  E,80H	; выбор группы 8 (для УПР)
    LXI  H,N55	; выбор группы 6 (для СТОП)
    LDAX D
    RRC
    RRC
    RRC
    ANA  M
    ANI  04H
    JNZ  N56	; нажаты УПР и СТОП, переход
N5D:LXI  D,N0D	; первоначально выбор группы 0
    LXI  B,N57
N5A:LXI  H,N58	; выбор KBBASE
    DAD  D	; получение абсолютного адреса группы
    MOV  A,M
    ORA  A
    JNZ  N59	; нажата клавиша выбранной группы, переход
    MOV  A,E
    RLC
    MOV  E,A
    MOV  A,D
    ACI  00H
    MOV  D,A
    INR  C
    DCR  B
    JNZ  N5A	; проверить на нажатие следующую группу
    JMP  N53	; ни одна из клавиш не нажата, начать сначала
N59:PUSH H	; сохранить адрес группы
    LXI  H,N4E	; адрес таблицы
    MVI  B,00H
    DAD  B
    MOV  B,A	; в A был скан-код, сохранить его
    MOV  A,C
    RLC
    RLC
    RLC
    MOV  C,A
    MVI  E,01H
N5C:MOV  A,E
    ANA  B
    JNZ  N5B
    INR  C
    MOV  A,E
    RLC
    MOV  E,A
    JNC  N5C
    POP  H
    JMP  N5D
N5B:PUSH D
    MOV  A,M
    XRA  E
    MOV  M,A
    ANA  E
    MVI  A,8EH
    JNZ  N5E
    ANI  84H
N5E:STA  N5F
    MVI  A,3CH
    STA  N01
    LXI  H,N4A
    LXI  D,N4C
    MVI  B,50H
N61:MOV  A,M
    CMP  C
    JZ   N60
    DAD  D
    DCR  B
    JNZ  N61
    POP  D
    POP  H
    MVI  A,14H
    STA  N41
    JMP  N62
N60:CALL N4B
    MVI  A,14H
    STA  N41
    LXI  D,N63
    LXI  H,N55
    LDAX D
    RRC
    RRC
    RRC
    ANA  M
    ANI  04H
    POP  D
    POP  H
    JNZ  N56
N68:LXI  B,N64
N66:MOV  A,M
    ANA  E
    JZ   N65
    DCX  B
    MOV  A,C
    ORA  B
    JNZ  N66
    JMP  N67
N65:DCR  A
    JNZ  N65
    MOV  A,M
    ANA  E
    JNZ  N68
N67:LXI  H,N4E
    MVI  C,0BH
N69:ORA  M
    INX  H
    DCR  C
    JNZ  N69
    ORA  A
    JNZ  N53
N56:
	CALL	SOUNDNOT; выключить звук
	MVI  A,0DH
    CALL N0C
    MVI  A,04H
    CALL N0C
    RET
;
SOUNDNOT:		; выключить звук
	LDA	SOUNDC+PBASE
	ANI	NOT SNDEN
	STA	SOUNDC+PBASE
	RET
SOUNDEN:		; включить звук
	LDA	SOUNDC+PBASE
	ORI	SNDEN
	STA	SOUNDC+PBASE
	RET
;
N4B:MVI  C,1EH
    INX  H
    MOV  E,M
    INX  H
    MOV  D,M
    INX  H
    MOV  B,M
    XCHG
    LXI  D,N2C
N6B:PUSH B
    PUSH H
N6A:MVI  M,0FFH
    INX  H
    DCR  B
    JNZ  N6A
    POP  H
    POP  B
    DAD  D
    DCR  C
    JNZ  N6B
    RET
N4E:DS	 11
N49:DB   0CH,4,9,9,'ПРОВЕРКА КЛАВИАТУРЫ',0DH,0AH,0AH
    DB   ' F1   F2   F3   F4   F5  ',9,9,' СТОП',9,' ИЗ ВЗ СТ ',0DH,0AH
    DB   '   F6   F7   F8   F9  F10',0DH,0AH
    DB   ' ПФ ;  1  2  3  4  5  6  7  8  9  0  -  :  ВШ',0DH,0AH
    DB   '    +  !  "  #  $  %  &  ',27H,'  (  )     =  *',9,'  7  8  9',0DH,0AH
    DB   ' ТАБ Й  Ц  U  К  Е  Н  Г  Ш[ Щ] З  Х  ъ_',0DH,0AH
    DB   '      J  C  U  K  E  N  G  {  }  Z  H     ВК',9,'  4  5  6',0DH,0AH
    DB   ' УПР  Ф  Ы  В  А  П  Р  О  Л  Д  Ж  Э\ .',0DH,0AH
    DB   '       F  Y  W  A  P  R  O  L  D  V  | >',9,'  1  2  3',0DH,0AH
    DB   '  РЕГ  Я  Ч  С  М  И  Т  Ь  Б  Ю@ ,  /   РЕГ',0DH,0AH
    DB   '        Q  ~  S  M  I  T  X  B  ` <  ?',9,9,'  0   .',0DH,0AH
    DB   '   ФИКС АЛ',9,9,9,'   ГР СЕЛ',0DH,0AH,0AH,0
N50:DB   'Нажимая клавиши, погасите их изображение'
    DB   0DH
    DB   0AH
    DB   'Для прерывания теста нажмите одновременно УПР и СТОП ',0
N4A:DB   'PAH'
    DB   04H
    DB   'QFH'
    DB   04H
    DB   'RKH'
    DB   04H
    DB   'SPH'
    DB   04H
    DB   'TUH'
    DB   04H
    DB   '2iH'
    DB   04H
    DB   ';AP'
    DB   02H
    DB   '+DP'
    DB   02H
    DB   '!GP'
    DB   02H
    DB   '"JP'
    DB   02H
    DB   '#MP'
    DB   02H
    DB   '$PP'
    DB   02H
    DB   '%SP'
    DB   02H
    DB   '&VP'
    DB   02H
    DB   27H,'YP'
    DB   02H
    DB   '(\P'
    DB   02H
    DB   ')_P'
    DB   02H
    DB   ' bP'
    DB   02H
    DB   '-eP'
    DB   02H
    DB   '*hP'
    DB   02H
    DB   '5kP'
    DB   02H
    DB   '6AX'
    DB   03H
    DB   0AH
    DB   'EX'
    DB   02H
    DB   03H
    DB   'HX'
    DB   02H
    DB   15H
    DB   'KX'
    DB   02H
    DB   0BH
    DB   'NX'
    DB   02H
    DB   05H
    DB   'QX'
    DB   02H
    DB   0EH
    DB   'TX'
    DB   02H
    DB   07H
    DB   'WX'
    DB   02H
    DB   1BH
    DB   'ZX'
    DB   02H
    DB   1DH
    DB   ']X'
    DB   02H
    DB   1AH
    DB   '`X'
    DB   02H
    DB   08H
    DB   'cX'
    DB   02H
    DB   1FH
    DB   'fX'
    DB   02H
    DB   '0iX'
    DB   04H
    DB   '=A`'
    DB   04H
    DB   06H
    DB   'F`'
    DB   02H
    DB   19H
    DB   'I`'
    DB   02H
    DB   17H
    DB   'L`'
    DB   02H
    DB   01H
    DB   'O`'
    DB   02H
    DB   10H
    DB   'R`'
    DB   02H
    DB   12H
    DB   'U`'
    DB   02H
    DB   0FH
    DB   'X`'
    DB   02H
    DB   0CH
    DB   '[`'
    DB   02H
    DB   04H
    DB   '^`'
    DB   02H
    DB   16H
    DB   'a`'
    DB   02H
    DB   1CH
    DB   'd`'
    DB   02H
    DB   '.g`'
    DB   02H
    DB   '8Ah'
    DB   05H
    DB   11H
    DB   'Gh'
    DB   02H
    DB   1EH
    DB   'Jh'
    DB   02H
    DB   13H
    DB   'Mh'
    DB   02H
    DB   0DH
    DB   'Ph'
    DB   02H
    DB   09H
    DB   'Sh'
    DB   02H
    DB   14H
    DB   'Vh'
    DB   02H
    DB   18H
    DB   'Yh'
    DB   02H
    DB   02H
    DB   '\h'
    DB   02H
    DB   00H
    DB   '_h'
    DB   02H
    DB   ',bh'
    DB   02H
    DB   '/eh'
    DB   02H
    DB   '?hh'
    DB   05H
    DB   '>Cp'
    DB   04H
    DB   '9Hp'
    DB   02H
    DB   '7Kp'
    DB   17H
    DB   ':cp'
    DB   02H
    DB   '<fp'
    DB   04H
    DB   '3qH'
    DB   02H
    DB   '4tH'
    DB   02H
    DB   '1wH'
    DB   02H
    DB   'GqP'
    DB   02H
    DB   'Ht'
;
N01:EQU  0FA7FH
N07:EQU  3A7FH
N0D:EQU  0001H
N0E:EQU  0C000H
N0F:EQU  3ABFH
N2A:EQU  0FFBFH
N2B:EQU  4000H
N2C:EQU  0040H
N2F:EQU  7FC0H
N30:EQU  0FFC0H
N33:EQU  5FDEH
N34:EQU  601EH
N35:EQU  5E1FH
N36:EQU  0110H
N38:EQU  5E20H
N39:EQU  8010H
N40:EQU  0400H
N41:EQU  0FF7FH
N45:EQU  400DH
N4C:EQU  0004H
N51:EQU  0F8FFH
N52:EQU  0F907H
N55:EQU  0F840H
N57:EQU  0B00H
N58:EQU  0F800H
N5F:EQU  0FABFH
N63:EQU  0F880H
N64:EQU  0000H
    DB   'P'
    DB   02H
    DB   'IwP'
    DB   02H
    DB   'DqX'
    DB   02H
    DB   'EtX'
    DB   02H
    DB   'FwX'
    DB   02H
    DB   'Aq`'
    DB   02H
    DB   'Bt`'
    DB   02H
    DB   'Cw`'
    DB   02H
    DB   '@qh'
    DB   03H
    DB   'Nuh'
    DB   03H
;
ZUM:LXI  H,K00
    CALL MSG
    MVI  C,20H
K04:CALL K02
    MVI  A,07H
    CALL K03
    DCR  C
    JNZ  K04
    LXI  H,K05
    CALL MSG
    RET
K00:DB   'Тест формирователя звука:',0
;
;	Тест НКМЛ
;
MAG:
K07:LXI  H,K08
    CALL MSG	; 'тест НКМЛ'
    LXI  H,K09
    CALL MSG	; меню
    LXI  H,K0A
    CALL MSG	; ESC - меню, СТОП - выход из теста
    LXI  H,K0B
    CALL MSG	; 'наберите номер'
    CALL K0C	; ввод символа
    CPI  03H
    RZ		; СТОП
    CPI  31H
    JZ   K0D	; запись
    CPI  32H
    JZ   K0E	; чтение
    CPI  33H
    JZ   K0F	; управление мотором
    JMP  MAG
;
;	запись
;
K0D:
    LXI  H,K12
    CALL MSG	; 'пример 1'
    LXI  H,K13
    CALL MSG	; 'пример 2'
    LXI  H,K14
    CALL MSG	; 'пример 3'
    LXI  H,K0B
    CALL MSG	; 'наберите номер'
    CALL K0C	; 'ввод номера'
    STA  K1A
    CALL K1B
    JNZ  K0D	; недопустимый номер
    JMP  K1C
K1B:LDA  K1A
    CPI  31H
    MVI  B,00H
    JZ   K1D
    CPI  32H
    MVI  B,02H
    JZ   K1D
    CPI  33H
    MVI  B,04H
    JZ   K1D
    RNZ
K1D:MOV  A,B
    STA  K1E	; сохранить смещение
    RET
K1C:MVI  A,01H
    CALL K1F	; записать длинный маркер
;
;	запись 10 байт 0D3H
;
    MVI  B,0AH
K21:MVI  A,0D3H
    CALL K20
    DCR  B
    JNZ  K21
;
;	вычисление адреса сообщения 'пример N'
;
    MVI  B,08H
    LXI  H,K22
    CALL K23
    MOV  E,M
    INX  H
    MOV  D,M
    XCHG
;
;	запись 'пример N'
;
K24:MOV  A,M
    CALL K20
    DCR  B
    INX  H
    JNZ  K24
;
;	записать короткий маркер
;
K2B:XRA  A
    CALL K1F
;
;	вычисление адреса массива в HL
;
    LXI  H,K25
    CALL K23
    MOV  E,M
    INX  H
    MOV  D,M
    XCHG
;
;	запись массива
;
    MVI  B,00H
K26:MOV  A,M
    CALL K20
    DCR  B
    JNZ  K26
;
;	останов записи и мотора
;
    CALL K27
    LXI  H,RTN
    CALL MSG	; ВКПС
    JMP  MAG
;
;	чтение
;
K0E:CALL K2C	; включить мотор и читать маркер
    JC   K2D	; есть ошибкка
;
;	читать 10 байт
;
    MVI  B,0AH
K2F:CALL K2E
    JC   K2D
    DCR  B
    JNZ  K2F
;
;	читать 'пример N' в буфер K30
;
    MVI  B,08H
    LXI  D,K30
K31:CALL K2E
    JC   K2D
    STAX D
    INX  D
    DCR  B
    JNZ  K31
    STA  K1A	; сохранить N примера
    CALL K32	; выключить мотор
    CALL K1B	; вычислить N
    XRA  A
    STAX D	; 0 - ограничитель сообщения
    LXI  H,K30
    CALL MSG	; 'пример N'
    LXI  H,RTN
    CALL MSG	; ВКПС
K39:LXI  H,K33
    CALL MSG	; 'контрольная строка'
    CALL K2C	; включить мотор и читать маркер
    JC   K2D
;
;	чтение блока в буфер K34
;
    LXI  D,K34
    MVI  B,00H
K35:CALL K2E
    JC   K2D
    STAX D
    INX  D
    DCR  B
    JNZ  K35
    CALL K32	; выключить мотор
    CALL K36	; вывести считанное
    LXI  H,PROD
    CALL MSG	; ВКПС
	CALL	CONIN
    JMP  MAG
K36:LXI  H,K3A
    CALL K23
    MOV  E,M
    INX  H
    MOV  D,M
    XCHG
    MVI  B,08H
K3C:MOV  A,M
    CALL K3B
    INX  H
    DCR  B
    JNZ  K3C
    CALL K3D
    JMP  K3E
K3D:LXI  H,RTN
    CALL MSG
    LXI  H,K3F
    CALL MSG
    RET
K3E:LXI  H,K34
    MVI  B,00H
K40:MOV  A,M
    CALL K3B
    INX  H
    DCR  B
    JNZ  K40
    LXI  H,K41
K42:DCX  H
    MOV  A,L
    ORA  H
    JNZ  K42
    RET
K0C:PUSH H
    PUSH D
    PUSH B
    CALL CONIN
	PUSH	PSW
	MOV	C,A
	CALL	CONOUT
	LXI	H,RTN
	CALL	MSG
	POP	PSW
	JMP	K47
K2D:CALL K32
    LXI  H,K44
    CALL MSG
    LXI  H,K41
K45:DCX  H
    JNZ  K45
    JMP  MAG
K23:LDA  K1E
    MVI  D,00H
    MOV  E,A
    DAD  D
    RET
K2E:PUSH H
    PUSH D
    PUSH B
    CALL TAPIN
    JNC  K47
    JMP  K48
K20:PUSH H
    PUSH D
    PUSH B
    CALL TAPOUT
    JMP  K47
K2C:PUSH H
    PUSH D
    PUSH B
    CALL TAPION
    JNC  K47
K48:CALL K32
    STC
    JMP  K47
K32:PUSH H
    PUSH D
    PUSH B
    CALL TAPIOF
	JMP	K47
K27:PUSH H
    PUSH D
    PUSH B
    CALL TAPOOF
	JMP	K47
K53:PUSH H
    PUSH D
    PUSH B
    CALL SMOTR
    JMP  K47
K1F:PUSH H
    PUSH D
    PUSH B
    CALL TAPOON
K47:POP  B
    POP  D
    POP  H
    RET
;
;	управление мотором
;
K0F:
    LXI  H,K4F
    CALL MSG
    CALL K0C
    CPI  31H
    JZ   K50
    CPI  32H
    JZ   K51
    JMP  MAG
K50:MVI  A,01H
    JMP  K52
K51:XRA  A
K52:CALL K53
    JMP  MAG
    DB   02H
K10:DB   00H
K1A:DB   00H
K1E:DB   00H
    DB   00H
K30:DS	9	; буфер для 'пример N' при чтении
K4F:DB   'Включить - 1',0DH,0AH
    DB   'Выключить - 2',0DH,0AH,0
K44:DB   'ОШИБКА',0
K3F:DB   'Считано',0DH,0AH,0
K33:DB   'Контрольная строка',0DH,0AH,0
K0A:
    DB   'СТОП - конец теста',0
K08:DB   'Тест НКМЛ:',0DH,0AH,0AH,0
K12:DB   'Пример 1  00000000...',0DH,0AH,0
K13:DB   'Пример 2  11111111...',0DH,0AH,0
K14:DB   'Пример 3  01010101...',0DH,0AH,0
K09:DB   '1 - запись',0DH,0AH
    DB   '2 - чтение',0DH,0AH
    DB   '3 - мотор',0DH,0AH,0
PROD:	DB	0DH,0AH,0AH,'Для продолжения нажмите любую клавишу',0DH,0AH,0
K0B:DB   0DH
    DB   0AH
    DB   'номер ?',0
    DB   00H
K25:
	DW	PRIM1
	DW	PRIM2
	DW	PRIM3
PRIM1:
    DB   0,0,0,0,0,0,0,0,0
PRIM2:
    DB   0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
PRIM3:
    DB   55H,55H,55H,55H,55H,55H,55H,55H,55H
;
K34:	EQU	6000H
;
K22:	DW	K12
	DW	K13
	DW	K14
;
K3A:
	DW	PRIM1
	DW	PRIM2
	DW	PRIM3
K02:EQU  00C9H
K41:EQU  7D00H
TAPIN:EQU  0052H
TAPOUT:EQU  005BH
TAPION:EQU  004FH
TAPIOF:EQU  0055H
TAPOOF:EQU  005EH
SMOTR:EQU  0061H
TAPOON:EQU  0058H
;
LAN:
    LXI  H,G00
    CALL MSG	; 'тест адаптера л.с. подключен кабель или шлейф?'
    CALL G02	; получить потверждение
    JZ   G03	; да, переход
    LXI  H,G04
    CALL MSG	; проверка отменена
    RET
;
M4C:
G03:LDA  LANADR
    CMA
    ANI  0F0H
    RRC
    RRC
    RRC
    RRC
    STA  ADRRM
    ADI  00H
    DAA
    PUSH PSW
    LXI  H,G07
    CALL MSG	; 'номер рабочего места:'
    POP  PSW
    CALL G08	; вывод числа в HEX-виде
    LXI  H,RTN
    CALL MSG	; ВКПС
    LXI  H,PBASE2+LANC
    MVI  M,40H
    NOP
    MVI  M,5EH
    NOP
    MVI  M,05H
    DCR  L
    MOV  A,M
    INR  L
    XRA  A
G0B:DCR  A
    JNZ  G0B
    MOV  A,M
    CPI  85H
    JZ   G0C
    CALL G0D
    DB   01H,85H
G0C:DB   2EH
    DB   28H
    MOV  A,M
    ANI  08H
    JZ   G0F
    CALL G0D
    STAX B
    NOP
G0F:MVI  L,21H
    MVI  M,0DH
    XRA  A
G10:DCR  A
    JNZ  G10
    MOV  A,M
    CPI  0FFH
    JZ   G11
    CALL G0D
    INX  B
    RST  7
G11:MVI  L,28H
    MOV  A,M
    ANI  08H
    JNZ  G12
    CALL G0D
    INR  B
    DB   08H
G12:MVI  C,00H
    MVI  L,21H
    MVI  M,05H
    XRA  A
G13:DCR  A
    JNZ  G13
    DCR  L
    MOV  A,M
    INR  L
    CMP  C
    JZ   G14
    CALL G0D
    DCR  B
    NOP
G14:MVI  M,15H
    XRA  A
G15:DCR  A
    JNZ  G15
    MOV  A,M
    CPI  85H
    JZ   G16
    CALL G0D
    MVI  B,85H
    RET
G16:LXI  B,G17
G1C:DCR  L
    MOV  M,C
    INR  L
    MOV  A,C
    STA  G18
G19:MOV  A,M
    ANI  04H
    JZ   G19
    MOV  A,M
    CPI  87H
    JZ   G1A
    CALL G0D
    RLC
    ADD  A
G1A:DCR  L
    MOV  A,M
    INR  L
    CMP  C
    JZ   G1B
    CALL G0D
    DB   08H
G18:NOP
G1B:DCX  B
    MOV  A,C
    ORA  B
    JNZ  G1C
    LXI  H,G1D
    CALL MSG	; 'окончен'
    RET
G0D:MOV  E,A
    PUSH H
    LXI  H,G1E
    CALL MSG
    POP  H
    XTHL
    MOV  A,M
    INX  H
    MOV  D,M
    INX  H
    XTHL
    CALL G08
    MVI  A,09H
    CALL G1F
    MOV  A,E
    CALL G08
    MVI  A,20H
    CALL G1F
    MOV  A,D
    CALL G08
    PUSH H
    LXI  H,RTN
    CALL MSG	; ВКПС
    POP  H
    MOV  A,E
    RET
;
M4B:
G00:DB   'Тест адаптера локальной сети:',0DH,0AH
    DB   09H,'Подключен кабель или шлейф 4.137.080-02 ? (Д/Н):',0
;
LANADR:EQU  0FB38H
ADRRM:EQU  0F700H
PBASE2:EQU  0FB00H
LANC:EQU  21H
G17:EQU  0400H
G07:DB   0DH,0AH,9,'Номер рабочего места: ',0
G1E:DB   'ошибка  ',0
PRINTER:LXI  H,U00
    CALL MSG	; 'проверка принтера'
    CALL	CON
    JZ   IFP
    LXI  H,U04
NEW:CALL MSG	; 'проверка невозможна'
    RET
U03:LXI  H,U05
    CALL MSG	; 'принтер готов к работе?'
    CALL U06	; получить потверждение
    JNZ  U07
    XRA  A
    STA  U08	; сброс признака перекодировки
    LXI  H,U09
    CALL MSG	; 'загружаемый знакогенератор?'
    CALL U06	; получить потверждение
    JNZ  U0A
    LXI  H,U0B	; адрес таблицы знакогенератора
    LXI  B,U0C	; число элементов таблицы знакогенератора
U0F:PUSH B
    MOV  C,M
    CALL U0D	; вывод байта на принтер
    POP  B
    JZ   U0E	; состояние не готов
    INX  H
    DCX  B
    MOV  A,B
    ORA  C
    JNZ  U0F
    JMP  U10	; перейти к выводу на печать
U0A:LXI  H,U11
    CALL MSG	; 'перекодировка символов?'
    CALL U06
    JNZ  U10
    MVI  A,0FFH
    STA  U08	; установка признака перекодировки
U10:
	LXI	H,MS6313
	CALL	MSG
	CALL	U06
	JZ	MS13
	LXI	H,U13	; адрес текста
	LXI	B,U14-U13; число символов
	JMP	U1111
MS13:
	LXI	H,U14
	LXI	B,M25-U14
U1111:	PUSH	H
	PUSH	B
    LXI  H,U12
    CALL MSG	; 'вывод данных на печать:'
	POP	B
	POP	H
U15:PUSH B
    MOV  C,M
    CALL U0D	; вывод байта на принтер
    POP  B
    JZ   U0E
    INX  H
    DCX  B
    MOV  A,B
    ORA  C
    JNZ  U15
    LXI  H,U16
    CALL MSG	; 'окончен'
    RET
U07:LXI  H,U17
    CALL MSG	; 'прверка отменена'
    RET
U0E:LXI  H,U18
    CALL MSG	; 'состояние НЕ ГОТОВ'
    RET
;
IFP:
;**********************************************************
;
;	Программа проверяет работу интерфейса ПУ
;   и использует следующие линии разъема расширения:
;
;	KA0...KA7 - в качестве D0...D7;
;	KC0 - СТБПУ;
;	KC1 - ВБПУ;
;	KC4 - ЗНТПУ.
;
;***********************************************************
;
LSTDAT	EQU	30H	; регистр данных принтера
LSTSTS	EQU	38H	; регистр состояния
LSTCTL	EQU	33H	; регистр управления
LSTINT	EQU	6	; уровень прерывания по готовности
PIA3	EQU	08H	; адрес канала A порта расширения
PIC3	EQU	0AH	; адрес KC порта расширения
PIMC3	EQU	0BH	; адрес р-ра упр-я порта расширения
PBASE 	EQU	0FB00H	; базовый адрес в конфигурации NDOS
CONOUT	EQU	004CH	; вывод символа из р-ра C
IRISRG	EQU	28H	; адрес р-ра запросов прерываний
INT6	EQU	40H	; маска прерывания по гот. принтера
;
	LXI	H,SASK
	CALL	MSG
	CALL 	M37
	JNZ	U03
;
TEST:
	LXI	H,S0
	CALL	MSG
;
;  Настройка порта расширения: KA, KC0-KC3 на ввод,
;  			       KC4-KC7 на вывод
;
	LXI	H,PIMC3+PBASE
	MVI	M,93H
;
;  Проверка линии ВБПУ
;
	LXI	H,LSTCTL+PBASE
	MVI	M,08H	; записали "0"
;
	LDA	PIC3+PBASE; ждем "1"
	ANI	2
	JZ	ERRSEL
;
	MVI	M,09H	; записали "1"
;
	LDA	PIC3+PBASE; ждем "0"
	ANI	2
	JNZ	ERRSEL
;
;  Проверка линии ЗНТПУ
;
	LXI	H,COUNT
	MVI	M,0FFH
;
BUSY:
	LXI	H,PIMC3+PBASE
	LXI	D,LSTSTS+PBASE
	MVI	M,8	; записали "0"
;
	LDAX	D	; ждем "1"
	ANI	4
	JZ	ERRBYS
;
	LDA	IRISRG+PBASE
	ANI	INT6
	JZ	ERRINT
;
	MVI	M,9	; записали "1"
;
	LDAX	D	; ждем "0"
	ANI	4
	JNZ	ERRBYS
;
	LDA	IRISRG+PBASE
	ANI	INT6
	JNZ	ERRINT
;
	LXI	H,COUNT
	DCR	M
	JNZ	BUSY
;
;   Проверка линии СТБПУ
;
	LXI	H,LSTCTL+PBASE
	MVI	M,0AH	; записали "0"
;
	LDA	PIC3+PBASE; ждем "1"
	ANI	1
	JZ	ERRSTB
;
	MVI	M,0BH	; записали "1"
;
	LDA	PIC3+PBASE; ждем "0"
	ANI	1
	JNZ	ERRSTB
;
;   Проверка линий данных
;
	LXI	H,LSTDAT+PBASE
	LXI	D,PIA3+PBASE
;
	MVI	C,1
D1:	MOV	M,C
	LDAX	D
	CMA
	CMP	C
	JNZ	ERRDAT
;
	MOV	A,C
	RLC
	MOV	C,A
	JNC	D1
;
; проверка земли принтера
;
	LDA	PIC3+PBASE
	ANI	4
	JZ	TEST1
	LXI	H,SGND
	CALL	MSG
;
TEST1:
	LXI	H,U16
	CALL	MSG
	RET
;
;   обработка ошибок
;
ERRSEL:
	PUSH	H
	LXI	H,S1
	CALL	MSG
	LXI	H,PROD
	CALL	MSG
	POP	H
;
SEL1:	MVI	M,8
	MVI	M,9
	CALL	CONSOST
	JMP	SEL1
;
;
ERRBYS:
	PUSH	H
	LXI	H,S2
	CALL	MSG
	LXI	H,PROD
	CALL	MSG
;
	POP	H
BYS1:	MVI	M,8
	MVI	M,9
	CALL	CONSOST
	JMP	BYS1
;
;
ERRSTB:
	PUSH	H
	LXI	H,S3
	CALL	MSG
	LXI	H,PROD
	CALL	MSG
;
	POP	H
STB1:	MVI	M,0AH
	MVI	M,0BH
	CALL	CONSOST
	JMP	STB1
;
;
ERRDAT:
	PUSH	H
	LXI	H,S4
	CALL	MSG
	LXI	H,PROD
	CALL	MSG
;
	POP	H
	MVI	A,1
DAT1:	MOV	M,A
	RLC
	CALL	CONSOST
	JMP	DAT1
;
ERRINT:
	PUSH	H
	LXI	H,S6
	CALL	MSG
	POP	H
	JMP	BYS1
;
CONSOST:
	PUSH	H
	PUSH	PSW
	CALL	CONST
	ORA	A
	JZ	CONSOST1
	CALL	CONIN	; ввод паразитного символа
	POP	PSW
CONSOST1:
	POP	PSW
	POP	H
	RET
;
SASK:	DB	0AH,0DH,'Подключен кабель "ПУ - РАСШИРЕНИЕ" 4.137.080-01? (Д/Н) ',0
S0:	DB	0AH,0DH,'Тест интерфейса принтера:  ',0
S1:	DB	0AH,0DH,'Неисправна и тестируется линия ВБПУ',0
S2:	DB	0AH,0DH,'Неисправна и тестируется линия ЗНТПУ',0
S3:	DB	0AH,0DH,'Неисправна и тестируется линия СТБПУ',0
S4:	DB	0AH,0DH,'Неверные данные, тест данных',0
S6:	DB	0AH,0DH,'Нет прерывания от принтера, тест ЗНТПУ',0
SGND:	DB	'НЕТ ЗЕМЛИ',0
U00:DB   'Проверка принтера:',0
M21:
U04:DB   9,'Проверка невозможна',0DH,0AH,0
U05:DB   0DH,0AH,9,'Принтер готов к работе? (Д/Н) ',0
U09:DB   0DH,0AH,9,'Загружаемый знакогенератор? (Д/Н) ',0
U11:DB   0DH,0AH,9,'Перекодировка символов? (Д/Н) ',0
U12:DB   0DH,0AH,9,'Вывод на печать:',0
G04:
U17:DB   0DH,0AH,9,'Проверка отменена',0DH,0AH,0
U18:DB   ' состояние НЕ ГОТОВ',0DH,0AH,0
MS6313:	DB	0DH,0AH,'Принтер "Электроника МС6313" версии 130690/МС6307? (Д/Н): ',0
COUNT:	DB	0	; счетчик циклов проверки линии ЗНТПУ
U08:DB   00H	; ячейка признака перекодировки
;
;		таблица перекодировки
;
U1F:DB   0EEH,0D0H,0D1H,0E6H,0D4H,0D5H,0E4H,0D3H
    DB   0E5H,0D8H,0D9H,0DAH,0DBH,0DCH,0DDH,0DEH
    DB   0DFH,0EFH,0E0H,0E1H,0E2H,0E3H,0D6H,0D2H
    DB   0ECH,0EBH,0D7H,0E8H,0EDH,0E9H,0E7H,0EAH
    DB   0CEH,0B0H,0B1H,0C6H,0B4H,0B5H,0C4H,0B3H
    DB   0C5H,0B8H,0B9H,0BAH,0BBH,0BCH,0BDH,0BEH
    DB   0BFH,0CFH,0C0H,0C1H,0C2H,0C3H,0B6H,0B2H
    DB   0CCH,0CBH,0B7H,0C8H,0CDH,0C9H,0C7H,0CAH
;
;	выдача байта на принтер из р-ра C
;
M4D:
U0D:PUSH D
    MVI  B,05H
U1D:LXI  D,U19
U1C:LDA  U1A
    ANI  04H	; есть готовность принтера ?
    JNZ  U1B	; есть, переход
    DCX  D
    MOV  A,E
    ORA  D
    JNZ  U1C
    DCR  B
    JNZ  U1D
    POP  D
    RET
U1B:MOV  A,C
    CPI  0C0H	; русский алфавит ?
    JC   U1E	; нет, обход
    LDA  U08
    ORA  A	; нужна перекодировка ?
    JZ   U1E	; нет перекодировки
    PUSH H
    MOV  E,C
    MVI  D,00H
    LXI  H,U1F-0C0H
    DAD  D
    MOV  C,M
    POP  H
U1E:POP  D
    MOV  A,C
    CMA
    STA  U20
    ORA  C
    MVI  A,0BH
    STA  U21
    MVI  A,0AH
    STA  U21
    RET
;
;	Загружаемый знакогенератор
;
U0B:DB   1BH
    DB   ':'
    DB   00H
    DB   00H
    DB   00H
    DB   1BH
    DB   '%'
    DB   01H
    DB   00H
    DB   1BH
    DB   '&'
    DB   00H
    DB   0C0H
    DB   0FEH
    DB   8BH
    DB   00H
    DB   '>'
    DB   00H
    DB   08H
    DB   00H
    DB   1CH
    DB   '"'
    DB   00H
    DB   '"'
    DB   1CH
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   04H
    DB   0AH
    DB   ' '
    DB   0AH
    DB   ' '
    DB   1CH
    DB   02H
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '|'
    DB   82H
    DB   ' '
    DB   82H
    DB   ' '
    DB   82H
    DB   1CH
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   02H
    DB   00H
    DB   02H
    DB   '<'
    DB   03H
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   1CH
    DB   82H
    DB   ' '
    DB   82H
    DB   ' '
    DB   82H
    DB   '|'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   1CH
    DB   '"'
    DB   08H
    DB   '"'
    DB   08H
    DB   '"'
    DB   18H
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   18H
    DB   '$'
    DB   00H
    DB   '$[$'
    DB   00H
    DB   '$'
    DB   18H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   ' '
    DB   00H
    DB   ' '
    DB   00H
    DB   ' '
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '"'
    DB   14H
    DB   00H
    DB   08H
    DB   00H
    DB   14H
    DB   '"'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   04H
    DB   08H
    DB   10H
    DB   00H
    DB   '>'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   '$H'
    DB   10H
    DB   00H
    DB   '>'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   08H
    DB   00H
    DB   14H
    DB   00H
    DB   '"'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   06H
    DB   08H
    DB   10H
    DB   ' '
    DB   00H
    DB   '>'
    DB   00H
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   '>'
    DB   00H
    DB   10H
    DB   00H
    DB   08H
    DB   00H
    DB   10H
    DB   00H
    DB   '>'
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   08H
    DB   00H
    DB   08H
    DB   00H
    DB   '>'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   1CH
    DB   '"'
    DB   00H
    DB   '"'
    DB   00H
    DB   '"'
    DB   1CH
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   ' '
    DB   00H
    DB   ' '
    DB   00H
    DB   '>'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   10H
    DB   '*'
    DB   04H
    DB   '('
    DB   00H
    DB   '('
    DB   00H
    DB   '>'
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '?'
    DB   00H
    DB   '$'
    DB   00H
    DB   '$'
    DB   00H
    DB   18H
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   1CH
    DB   00H
    DB   '"'
    DB   00H
    DB   '"'
    DB   00H
    DB   '"'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   ' '
    DB   00H
    DB   ' '
    DB   1EH
    DB   ' '
    DB   00H
    DB   ' '
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '8'
    DB   01H
    DB   04H
    DB   01H
    DB   04H
    DB   01H
    DB   '>'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   '"'
    DB   14H
    DB   08H
    DB   00H
    DB   '>'
    DB   00H
    DB   08H
    DB   14H
    DB   '"'
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   '*'
    DB   00H
    DB   '*'
    DB   00H
    DB   '*'
    DB   14H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   0AH
    DB   00H
    DB   0AH
    DB   00H
    DB   0AH
    DB   04H
    DB   00H
    DB   8BH
    DB   00H
    DB   '>'
    DB   00H
    DB   0AH
    DB   00H
    DB   0AH
    DB   04H
    DB   00H
    DB   00H
    DB   '>'
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   14H
    DB   '"'
    DB   00H
    DB   '*'
    DB   00H
    DB   '*'
    DB   14H
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   '>'
    DB   00H
    DB   02H
    DB   00H
    DB   '>'
    DB   00H
    DB   02H
    DB   00H
    DB   '>'
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '"'
    DB   00H
    DB   '*'
    DB   00H
    DB   '*'
    DB   00H
    DB   1CH
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   '>'
    DB   00H
    DB   02H
    DB   00H
    DB   '>'
    DB   00H
    DB   02H
    DB   00H
    DB   '?'
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   '8'
    DB   00H
    DB   08H
    DB   00H
    DB   08H
    DB   00H
    DB   '>'
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   ' '
    DB   00H
    DB   '>'
    DB   00H
    DB   0AH
    DB   00H
    DB   0AH
    DB   04H
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   10H
    DB   00H
    DB   '|'
    DB   82H
    DB   00H
    DB   82H
    DB   '|'
    DB   00H
    DB   8BH
    DB   00H
    DB   0EH
    DB   10H
    DB   '(@'
    DB   88H
    DB   00H
    DB   88H
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   8CH
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   02H
    DB   00H
    DB   02H
    DB   00H
    DB   0FEH
    DB   00H
    DB   03H
    DB   00H
    DB   8BH
    DB   00H
    DB   03H
    DB   00H
    DB   '>@'
    DB   82H
    DB   00H
    DB   0FEH
    DB   00H
    DB   03H
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   82H
    DB   00H
    DB   8BH
    DB   00H
    DB   '8D'
    DB   00H
    DB   'D'
    DB   0BAH
    DB   'D'
    DB   00H
    DB   'D8'
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   0FEH
    DB   00H
    DB   80H
    DB   00H
    DB   80H
    DB   00H
    DB   80H
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   00H
    DB   82H
    DB   'D('
    DB   10H
    DB   '(D'
    DB   82H
    DB   00H
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   04H
    DB   08H
    DB   10H
    DB   ' @'
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   04H
    DB   'H'
    DB   90H
    DB   ' @'
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   10H
    DB   00H
    DB   '('
    DB   00H
    DB   'D'
    DB   00H
    DB   82H
    DB   00H
    DB   8BH
    DB   00H
    DB   0EH
    DB   10H
    DB   ' @'
    DB   80H
    DB   00H
    DB   80H
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   '@ '
    DB   10H
    DB   ' @'
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   10H
    DB   00H
    DB   10H
    DB   00H
    DB   10H
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   '|'
    DB   00H
    DB   82H
    DB   00H
    DB   82H
    DB   00H
    DB   82H
    DB   00H
    DB   '|'
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   80H
    DB   00H
    DB   80H
    DB   00H
    DB   80H
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   '`'
    DB   02H
    DB   94H
    DB   08H
    DB   90H
    DB   00H
    DB   90H
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   90H
    DB   00H
    DB   90H
    DB   00H
    DB   90H
    DB   00H
    DB   '`'
    DB   00H
    DB   8BH
    DB   00H
    DB   '|'
    DB   00H
    DB   82H
    DB   00H
    DB   82H
    DB   00H
    DB   82H
    DB   00H
    DB   'D'
    DB   00H
    DB   8BH
    DB   00H
    DB   80H
    DB   00H
    DB   80H
    DB   00H
    DB   0FEH
    DB   00H
    DB   80H
    DB   00H
    DB   80H
    DB   00H
    DB   8BH
    DB   00H
    DB   0E0H
    DB   02H
    DB   10H
    DB   02H
    DB   10H
    DB   02H
    DB   10H
    DB   02H
    DB   0FCH
    DB   00H
    DB   8BH
    DB   00H
    DB   0C6H
    DB   '('
    DB   10H
    DB   00H
    DB   0FEH
    DB   00H
    DB   10H
    DB   '('
    DB   0C6H
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   'l'
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   12H
    DB   00H
    DB   12H
    DB   00H
    DB   12H
    DB   00H
    DB   0CH
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   12H
    DB   00H
    DB   12H
    DB   0CH
    DB   00H
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   'D'
    DB   00H
    DB   82H
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   'l'
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   02H
    DB   00H
    DB   0FEH
    DB   00H
    DB   02H
    DB   00H
    DB   0FEH
    DB   00H
    DB   8BH
    DB   00H
    DB   'D'
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   92H
    DB   00H
    DB   '|'
    DB   00H
    DB   8BH
    DB   00H
    DB   0FEH
    DB   00H
    DB   02H
    DB   00H
    DB   0FEH
    DB   00H
    DB   02H
    DB   00H
    DB   0FFH
    DB   00H
    DB   8BH
    DB   00H
    DB   0F0H
    DB   00H
    DB   10H
    DB   00H
    DB   10H
    DB   00H
    DB   10H
    DB   00H
    DB   0FEH
    DB   00H
U13:DB   20H,0EH,'Тест проверки принтера',0DH,0AH,0AH
    DB   9,'ТАБ',9,'ТАБ',9,'ТАБ',9,'ТАБ',9,'ТАБ',0DH,0AH
	DB	'Возврат на шаг         =====',8,'/=',8,'/=',8,'/=',8,'/',0DH,0AH
    DB   'Отмена данных в буфере печати',18H,0DH,0AH
    DB   'Режим нормальной и ',0EH,'расширенной печати',0DH,0AH
    DB   'Режим нормальной и ',0FH,0EH,'расширенной печати со сжатием',0DH,0AH
    DB   1BH,2DH,31H,1BH,0FH
    DB   'Печать с подчеркиванием сжатых, ',12H,1BH,0EH,'расширенных и  '
    DB   14H,'нормальных знаков',1BH,2DH,30H,0DH,0AH
    DB   1BH
    DB   'E'
    DB   'Режим утолщенной печати',1BH,46H,0DH,0AH
    DB   1BH,47H,'Режим двойной печати',1BH,48H,0DH,0AH
    DB   1BH,45H,1BH,47H,'Режим утолщенной двойной печати',1BH,48H,1BH,46H,0DH,0AH
    DB   1BH,4DH,'Печать 12 знаков/дюйм',0DH,0AH
    DB   1BH,50H,'Печать 10 знаков/дюйм',0DH,0AH
    DB   'Печать со смещением вверх   Y=aX'
    DB   1BH
    DB   'S03'
    DB   1BH
    DB   'T+bX'
    DB   1BH
    DB   'S02'
    DB   1BH
    DB   'T+c'
    DB   0DH
    DB   0AH
    DB   'Печать со смещением вниз    H'
    DB   1BH
    DB   'S12'
    DB   1BH
    DB   'TSO'
    DB   1BH
    DB   'S14'
    DB   1BH
    DB   'T'
    DB   0DH
    DB   0AH
    DB   1BH
    DB   'A'
    DB   05H
    DB   1BH
    DB   'S0'
    DB   09H
    DB   'Печать уменьшенными',0DH,0AH
    DB   9,'знаками с шагом строк',0DH,0AH
    DB   9,'5/72 дюйма',1BH,54H,0DH,0AH,0AH
    DB   1BH,30H,'Шаг строк 1/8 дюйма',0DH,0AH
    DB   '   ------------',0DH,0AH
    DB   '   ------------',0DH,0AH
    DB   1BH,31H,'Шаг строк 7/72 дюйма',0DH,0AH
    DB   '   ------------',0DH,0AH
    DB   '   ------------',0DH,0AH
    DB   1BH,32H,'Шаг строк 1/6 дюйма',0DH,0AH
    DB   '   ------------',0DH,0AH
    DB   '   ------------',0DH,0AH
	DB	1BH,33H,14H,'Шаг строк 20/216 дюйма',0DH,0AH
    DB   '   ------------',0DH,0AH
    DB   '   ------------',1BH,32H,0DH,0AH,0DH,0AH,0DH,0AH
;
U14:	DB	1BH,'[5w Тест проверки принтера',1BH,'[0w',0DH,0AH
	DB	9,'ТАБ',9,'ТАБ',9,'ТАБ',9,'ТАБ',9,'ТАБ',0DH,0AH
	DB	'Возврат на шаг         =====',8,'/=',8,'/=',8,'/=',8,'/',0DH,0AH,0AH
	DB	'Режим нормальной и ',1BH,'[5wрасширенной печати',1BH,'[0w',0DH,0AH
	DB	'Режим нормальной и ',1BH,'[8wрасширенной печати со сжатием',1BH,'[0w',0DH,0AH
	DB	1BH,'[4w',1BH,'[4mПечать с подчеркиванием сжатых, ',1BH,'[5wрасширенных и ',1BH,'[0wнормальных знаков',1BH,'[m',0DH,0AH
	DB	1BH,'[1mРежим утолщенной печати',1BH,'[m',0DH,0AH
	DB	1BH,'[2mРежим двойной печати',0DH,0AH
	DB	1BH,'[1mРежим утолщенной двойной печати',1BH,'[m',0DH,0AH
	DB	1BH,'[2wПечать 12 знаков/дюйм',0DH,0AH
	DB	1BH,'[0wПечать 10 знаков/дюйм',0DH,0AH
	DB	'Печать со смещением вверх   Y=aX',1BH,'[5m3',1BH,'[m+bX',1BH,'[5m2',1BH,'[m+c',0DH,0AH
	DB	'Печать со смещением вниз    H',1BH,'[6m2',1BH,'[mSO',1BH,'[6m4',1BH,'[m',0DH,0AH
	DB	9,1BH,'[5m',1BH,'[3zПечать уменьшенными',0DH,0AH
	DB	9,'знаками с шагом строк',0DH,0AH
	DB	9,'5/72 дюйма',1BH,'[m',1BH,'[0z',0DH,0AH
	DB	1BH,'[2zШаг строк 1/8 дюйма',0DH,0AH
	DB	'   ------------',0DH,0AH
	DB	'   ------------',0DH,0AH
	DB	1BH,'[3zШаг строк 7/72 дюйма',0DH,0AH
	DB	'   ------------',0DH,0AH
	DB	'   ------------',0DH,0AH
	DB	1BH,'[0zШаг строк 1/6 дюйма',0DH,0AH
	DB	'   ------------',0DH,0AH
	DB	'   ------------',0DH,0AH
	DB	1BH,'[3zШаг строк 20/216 дюйма',0DH,0AH
	DB	'   ------------',0DH,0AH
	DB	'   ------------',1BH,'[0z',0DH,0AH,0AH
;
CONFIG:EQU  0F701H
U0C:EQU  0302H
U19:EQU  0000H
U1A:EQU  0FB38H
U20:EQU  0FB30H
U21:EQU  0FB33H
;
    MOV  A,H
    CALL O04
    MOV  A,L
O04:PUSH PSW
    RRC
    RRC
    RRC
    RRC
    CALL O05
    CALL O06
    POP  PSW
    CALL O05
;
O06:PUSH B
    PUSH D
    PUSH H
    MOV  C,A
    CALL CONOUT
O09:LDA  O08
    ORA  A
    JNZ  O09
    POP  H
    POP  D
    POP  B
    RET
;
;	п/п печати сообщения
;
MSG:MOV  A,M
    ORA  A
    RZ
    CALL O06
    INX  H
    JMP  MSG
;
M15:
    DB   0CH,4,'ФОРМАНТА ПК8020',0DH,0AH
    DB   'Качканар  1991',0DH,0AH
    DB   'КТДП версия 1.5'
M30:DB   0DH,0AH,0AH,0
M2B:DB   9,9,'Возможные режимы проверки:',0DH,0AH,0AH
    DB   9,'1 - Последовательное выполнение всех тестов',0DH,0AH,0AH
    DB   9,'2 - Циклический прогон автоматических тестов',0DH,0AH,0AH
    DB   9,'3 - Выполнение отдельных тестов',0DH,0AH,0AH
    DB   9,'СТОП - Прекращение работы программы',0DH,0AH,0AH,9,0
;
M57:DB   0DH,0AH,'0 - Смена режима ',9,'7 - Проверка клавиатуры',0DH,0AH
    DB   '1 - Тест АЦЗУ',9,9,'8 - Проверка формирователя звука',0DH,0AH
    DB   '2 - Тест процессора',9,'9 - Тест адаптера локальной сети',0DH,0AH
    DB   '3 - Тест ОЗУ',9,9,'A - Тест принтера',0DH,0AH
    DB   '4 - Тест ПЗУ',9,9,'B - Тест НКМЛ',0DH,0AH
    DB   '5 - Тест ГЗУ',9,9,'C - Тест интерфейса ИРПС и С2',0DH,0AH
    DB   '6 - Вывод информации',9,'D - Тест НГМД',0DH,0AH
    DB   9,9,9,'E - Тест контроллера прерываний',0DH,0AH,0AH,0
M2C:DB   9,'Выберите из списка: ',0
M45:DB   'Проверка окончена.',0
M6C:DB   'Тест АЦЗУ:',9,0
T35:DB   'Тест ОЗУ 8000-FFFF:',9,0
T1E:DB   'Тест ОЗУ 0000-7FFF:',0DH,0AH,0
T31:
M24:DB   9,'Ошибка ОЗУ:   ',0
M63:DB   'Перемещение КТДП:',0
M5D:DB   9,'окончено',0DH,0AH,0
T44:DB   'Тест ПЗУ:',9,0
T4D:DB   9,9,'Неисправность ПЗУ #',0
M8C:DB   'Тест процессора:',0
T1A:DB   9,'НЕИСПРАВНОСТЬ!',0
;
    DB   9,'окончен',0DH,0AH,0
N26:DB   0CH
    DB   04H
    DB   1BH
    DB   '=      '
    DB   'ПРОВЕРКА ОТОБРАЖЕНИЯ АЛФАВИТНО-ЦИФРОВОЙ ИНФОРМАЦИИ',0DH,0AH,0AH
    DB   '   Русский алфавит:',0DH,0AH
    DB   'А Б В Г Д Е Ж З И Й К Л М Н 0 П Р С Т У Ф Х Ц Ч Ш Щ '
    DB   0FFH,' Ы Ь Э Ю Я ',0DH,0AH
    DB   'а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ '
    DB   'ъ ы ь э ю я ',0DH,0AH
    DB   '   Латинский алфавит:',0DH,0AH
    DB   '@ A B C D E F G H I J K L M N O P Q R S T U V '
    DB   'W X Y Z [ \ ] ^ _ ',0DH,0AH
    DB   '` a b c d e f g h i j k l m n o p q r s t u v '
    DB   'w x y z { | } ~ '
    DB   10H
    DB   '?',0DH,0AH
    DB   '   Цифры и знаки:',0DH,0AH
    DB   '  ! " # $ % & ',27H,' ( ) * + , - . / 0 1 2 3 4 5 6 '
    DB   '7 8 9 : ; < = > ? ',0DH,0AH
    DB   10H
    DB   '  '
    DB   10H
    DB   01H
    DB   ' '
    DB   10H
    DB   02H
    DB   ' '
    DB   10H
    DB   03H
    DB   ' '
    DB   10H
    DB   04H
    DB   ' '
    DB   10H
    DB   05H
    DB   ' '
    DB   10H
    DB   06H
    DB   ' '
    DB   10H
    DB   07H
    DB   ' '
    DB   10H
    DB   08H
    DB   ' '
    DB   10H
    DB   09H
    DB   ' '
    DB   10H
    DB   0AH
    DB   ' '
    DB   10H
    DB   0BH
    DB   ' '
    DB   10H
    DB   0CH
    DB   ' '
    DB   10H
    DB   0DH
    DB   ' '
    DB   10H
    DB   0EH
    DB   ' '
    DB   10H
    DB   0FH
    DB   ' '
    DB   10H
    DB   10H
    DB   ' '
    DB   10H
    DB   11H
    DB   ' '
    DB   10H
    DB   12H
    DB   ' '
    DB   10H
    DB   13H
    DB   ' '
    DB   10H
    DB   14H
    DB   ' '
    DB   10H
    DB   15H
    DB   ' '
    DB   10H
    DB   16H
    DB   ' '
    DB   10H
    DB   17H
    DB   ' '
    DB   10H
    DB   18H
    DB   ' '
    DB   10H
    DB   19H
    DB   ' '
    DB   10H
    DB   1AH
    DB   ' '
    DB   10H
    DB   1BH
    DB   ' '
    DB   10H
    DB   1CH
    DB   ' '
    DB   10H
    DB   1DH
    DB   ' '
    DB   10H
    DB   1EH
    DB   ' '
    DB   10H
    DB   1FH
    DB   ' '
    DB   0DH
    DB   0AH
    DB   0AH
    DB   '   '
    DB   'Псевдографика:  '
    DB   80H
    DB   0A0H
    DB   96H
    DB   0A9H
    DB   98H
    DB   83H
    DB   0A4H
    DB   0B8H
    DB   87H
    DB   0A1H
    DB   0B2H
    DB   0ABH
    DB   0B6H
    DB   0B9H
    DB   90H
    DB   0B1H
    DB   0B5H
    DB   0BCH
    DB   9CH
    DB   8EH
    DB   9EH
    DB   0BEH
    DB   0BDH
    DB   80H
    DB   88H
    DB   99H
    DB   91H
    DB   80H
    DB   0AEH
    DB   0B3H
    DB   9DH
    DB   80H
    DB   0A8H
    DB   80H
    DB   94H
    DB   0AAH
    DB   95H
    DB   0DH
    DB   0AH
    DB   '                   '
    DB   80H
    DB   82H
    DB   0A5H
    DB   9AH
    DB   89H
    DB   0B0H
    DB   86H
    DB   8BH
    DB   0B4H
    DB   92H
    DB   0A3H
    DB   0BAH
    DB   0A7H
    DB   9BH
    DB   81H
    DB   93H
    DB   97H
    DB   8FH
    DB   8DH
    DB   0ACH
    DB   0ADH
    DB   0AFH
    DB   9FH
    DB   80H
    DB   0A2H
    DB   0A6H
    DB   84H
    DB   80H
    DB   0BBH
    DB   8CH
    DB   0B7H
    DB   80H
    DB   80H
    DB   0BFH
    DB   80H
    DB   85H
    DB   8AH
    DB   0DH
    DB   0AH
    DB   0AH
;
    DB   07H
   DB   '      Для продолжения проверки нажмите <ВК>:',0
;
RTN:
    DB   0DH,0AH,0
N29:DB   0CH
    DB   04H
    DB   1BH
    DB   '6 '
    DB   1BH
    DB   'Y _ '
    DB   1BH
    DB   'Y/  '
    DB   1BH
    DB   'Y/_ '
    DB   1BH
    DB   '7'
    DB   1BH
    DB   'Y !'
    DB   09H
    DB   'Проверка отображения графической информации'
    DB   1BH
    DB   'Y/!'
    DB   00H
N44:DB   0CH
    DB   04H
    DB   ' '
    DB   'ЯРКОСТЬ: 7'
    DB   1BH
    DB   'Y O'
    DB   'ЦВЕТ: БЕЛЫЙ',0DH,0AH,0AH
    DB   ' ЯРКОСТЬ: 6'
    DB   1BH
    DB   'Y"O'
    DB   'ЦВЕТ: ЖЕЛТЫЙ',0DH,0AH,0AH
    DB   ' ЯРКОСТЬ: 5'
    DB   1BH
    DB   'Y$O'
    DB   'ЦВЕТ: ЛИЛОВЫЙ',0DH,0AH,0AH
    DB   ' ЯРКОСТЬ: 4'
    DB   1BH
    DB   'Y&O'
    DB   'ЦВЕТ: КРАСНЫЙ',0DH,0AH,0AH
    DB   ' ЯРКОСТЬ: 3'
    DB   1BH
    DB   'Y(O'
    DB   'ЦВЕТ: ГОЛУБОЙ',0DH,0AH,0AH
    DB   ' ЯРКОСТЬ: 2'
    DB   1BH
    DB   'Y*O'
    DB   'ЦВЕТ: ЗЕЛЕНЫЙ',0DH,0AH,0AH
    DB   ' ЯРКОСТЬ: 1'
    DB   1BH
    DB   'Y,O'
    DB   'ЦВЕТ: СИНИЙ',0DH,0AH,0AH
    DB   ' ЯРКОСТЬ: 0'
    DB   1BH
    DB   'Y.O'
    DB   'ЦВЕТ: ЧЕРНЫЙ',0DH,0AH
    DB   1BH
    DB   '<'
    DB   00H
;
M38:DB   0CH,4,0
;
O05:EQU  00F7H
O08:EQU  0F8FFH
IFPS:
;***********************************************************
;
;	Программа проверяет работу последовательного
;		   интерфейса ПК8020
;
;**********************************************************
;
;
BCNTC	EQU	03H	; адрес регистра режима таймера
BCNTD	EQU	01H	; адрес регистра счета таймера
;
STR1S	EQU	01000000B; выбор счетчика 1
RLMB	EQU	00100000B; чтение/загрузка старшего байта
RLLB	EQU	00010000B; чтение/загрузка младшего байта
MODE3	EQU	00000110B; режим 3 (делитель частоты)
;
B9600	EQU	13	; скорость 9600 бод
B4800	EQU	26	; скорость 4800 бод
B2400	EQU	52	; скорость 2400 бод
B1200	EQU	104	; скорость 1200 бод
;
SERC	EQU	11H	; адрес регистра управления ВВ51
SERD	EQU	10H	; адрес регистра данных ВВ51
SERS	EQU	11H	; адрес регистра состояния ВВ51
;
R16X	EQU	00000010B; коэффициент деления частоты
;			   синхронизации 16
CL8	EQU	00001100B; длина символа 8 бит
ST2	EQU	11000000B; пауза при передаче 2 стоповых бита
PEHB	EQU	00010000B; разрешение контроля
USRST	EQU	01000000B; программный сброс
;
CLERR	EQU	00010000B; сброс признаков ошибок
TXEN	EQU	00000001B; разрешение работы передатчика
RXEN	EQU	00000100B; разрешение работы приемника
DTR	EQU	00000010B; сигнал "Готовность ПК"
;
TRDY	EQU	00000001B; признак готовности передатчика
RRDY	EQU	00000010B; признак готовности приемника
;
	LXI	H,SIFPS
	CALL	MSG
;
	CALL	CON
	JNZ	NEW-3
;	Инициализация таймера
;
	LXI	H,BCNTC+PBASE; адрес регистра упр-я таймера
	MVI	M,STMRM	; сч.1, чт/загр мл и ст байтов, дел. F
;
STMRM	EQU	STR1S OR RLMB OR RLLB OR MODE3
;
	MVI	L,BCNTD	; адрес р-ра счета таймера
	MVI	M,B1200	; коэф. счета для скорости 1200 бод
	MVI	M,0	; ст. байт коэф. счета
;
;	Инициализация контроллера последовательного интерфейса
;
	MVI	L,SERC	; адрес регистра управления ВВ51
	MVI	M,SERMD	; к.дел.16, дл.8 сим., 2ст., разр.кон.
;
SERMD	EQU	R16X OR CL8 OR ST2 OR PEHB
;
	MVI	M,SERCOM; сброс ош., вкл.пр.и перед., гот. ПК
;
SERCOM	EQU	CLERR OR TXEN OR RXEN OR DTR
;
	MVI	L,10H	; адрес регистра данных ВВ51
	MOV	A,M	; псевдоприем, сброс триг. гот. пр.
;
;  Выбор режима
;
	LXI	H,S14
	CALL	MSG	; подключен ли шлейф
;
	CALL	M37
	JZ	TESTIFPS
	JMP	U07	; вывести сообщение об отмене и выйти
;
TESTIFPS:
	MVI	B,0FFH
IFPS1:
	MOV	C,B
;
	LDA	SERS+PBASE
	ANI	TRDY
	JZ	ERRTX
;
	CALL	TX	; передать символ в линию
;
	CALL	TIMER
	LDA	SERS+PBASE
	ANI	RRDY
	JZ	ERRRX
;
	CALL	RX	; принять символ из линии
;
	CMP	B
	JNZ	ERRD
;
	DCR	B
	JNZ	IFPS1
	LXI	H,RTN
	CALL	MSG
	LXI	H,RTN
	CALL	MSG
	LXI	H,U16
	CALL	MSG
	JMP	EXIT
;
;
;   подпрограмма вывода символа в линию из регистра C
;
TX:
	MOV	A,C
	STA	SERD+PBASE; передача данных в линию
;
	RET
;
;   подпрограмма ввода символа из линии в регистр A
;
RX:
	LDA	SERD+PBASE; ввод данных из линии
;
	RET
;
EXIT:	LXI	H,SERC+PBASE; выход из теста
	MVI	M,USRST	; с программным сбросом ВВ51
	RET
;
;   Контроль сигналов
;
SIG:
	LXI	H,PROD
	CALL	MSG
;
SIG1:
	CALL	CONST	; опрос состояния консоли
	ORA	A
	JZ	$+9
	CALL	CONIN	; ввод паразитного символа
	JMP	EXIT
;
	MVI	C,55H
	LDA	SERS+PBASE
	ANI	TRDY
	JZ	$-5
	CALL	TX
	JMP	SIG1
;
TIMER:
	LXI	D,0FFFH
	DCX	D
	MOV	A,D
	ORA	E
	RZ
	JMP	TIMER+3
;
ERRTX:
	LXI	H,S12
	CALL	MSG
	JMP	SIG
;
ERRRX:
	LXI	H,S13
	JMP	ERRTX+3
;
ERRD:
	LXI	H,S15
	JMP	ERRTX+3
;
S12:	DB	0AH,0DH,'Не готов передатчик',0
S13:	DB	0AH,0DH,'Не готов приемник',0
SIFPS:	DB	0AH,0DH,'Тест ИРПС и С2:',0
S14:	DB	0AH,0DH,9,'Подключен шлейф ИРПС 4.137.080-03'
	DB	0AH,0DH,9,'или С2 4.137.080-04? (Д/Н)',0
S15:	DB	0AH,0DH,'Ошибка данных',0
;
;	Тест НГМД
;
NGMD:
    LXI  H,L02
    CALL MSG	; 'тест НГМД'
	CALL	CON
	JNZ	NEW-3
;
	LXI	H,L43
	CALL	MSG	; 'используйте технологический диск'
L0A:LXI  H,L04
    CALL MSG	; 'имя диска или ВК для выхода из теста'
    CALL CONIN
	PUSH	PSW
	MOV	C,A
	CALL	CONOUT
	POP	PSW
    CPI  0DH
    RZ
    STA  L06
    CPI  41H
    JZ   L07
    CPI  42H
    MVI  A,02H
    JZ   L08
    JMP  L0A
L07:MVI  A,01H
L08:	LXI	H,PBASE+DRVREG
	MOV	M,A
	ORI	MOTOR
	MOV	M,A	; включить мотор
	LXI	B,0
	LXI	H,PBASE+CMDREG
DEFLOOP:
	MOV	A,M
	RLC		; состояние ?
	JNC	NGMDTST	; есть готовность диска
	DCX	B
	MOV	A,B
	ORA	C
	JNZ	DEFLOOP
;		готовности диска не обнаружено
NRD:
	LXI	H,L44
	CALL	MSG
	RET
NGMDTST:
    LXI  H,L0C
    CALL MSG
    CALL CONIN
    CPI  0DH
    JNZ  L0A
    MVI  C,0AH
    CALL CONOUT
    SUB  A
    STA  L0D
    STA  L0E
    LXI  H,L01
    LXI  D,L0F
    MVI  A,4EH
    CALL L10
    LXI  D,L11
    MVI  A,00H
    CALL L10
    LXI  D,L12
    MVI  A,0F6H
    CALL L10
    MVI  M,0FCH
    INX  H
    LXI  D,L13
    MVI  A,4EH
    CALL L10
    LDA  L14
    MOV  C,A
    MVI  B,01H
L1A:LXI  D,L11
    MVI  A,00H
    CALL L10
    LXI  D,L12
    MVI  A,0F5H
    CALL L10
    MVI  M,0FEH
    INX  H
    MVI  M,00H
    INX  H
    MVI  M,00H
    INX  H
    MOV  M,B
    INX  H
    LDA  L15
    CPI  04H
    JNZ  L16
    DCR  A
L16:MOV  M,A
    INX  H
    MVI  M,0F7H
    INX  H
    LXI  D,L17
    MVI  A,4EH
    CALL L10
    LXI  D,L11
    MVI  A,00H
    CALL L10
    LXI  D,L12
    MVI  A,0F5H
    CALL L10
    MVI  M,0FBH
    INX  H
    LDA  L18
    CMA
    MOV  E,A
    LDA  L15
    CMA
    MOV  D,A
    INX  D
    MVI  A,0E5H
    CALL L10
    MVI  M,0F7H
    INX  H
    LXI  D,L19
    MVI  A,4EH
    CALL L10
    INR  B
    DCR  C
    JNZ  L1A
    LXI  D,L1B
    MVI  A,4EH
    CALL L10
    CALL L1C
L2A:MVI  A,04H
L22:PUSH PSW
    CALL L1D
    LXI  D,L01
    LXI  B,PBASE+DATREG
    MVI  M,0F0H
    CALL L1F
    CALL L20
    MOV  A,M
    ANI  5DH
    JZ   L21
    POP  PSW
    DCR  A
    JNZ  L22
    LXI  H,L23
    CALL MSG
    CALL CONIN
    CPI  0DH
    JZ   L24
    JMP  L0A
L21:POP  PSW
	MVI	A,4
L41:	PUSH	PSW
;
	MVI	A,5
	STA	SECREG+PBASE
	CALL	L1D	; включить мотор
	LXI	H,PBASE+CMDREG
	LXI	B,PBASE+DATREG
	MVI	M,84H	; чтение сектора
	CALL	L1F	; задержка
	CALL	TRKREAD
	MOV	A,M
	ANI	5DH
	JZ	L42
	POP	PSW
	DCR	A
	JNZ	L41
	LXI	H,LERRD
	CALL	MSG
	CALL	CONIN
	CPI	0DH
	JZ	L24
	JMP	L0A
;
L42:	POP	PSW
    LDA  L0E
    CPI  3CH
    JNZ  L25
	LXI	H,RTN
	CALL	MSG
    SUB  A
L25:INR  A
    STA  L0E
    MVI  C,2AH
    CALL CONOUT
L24:LXI  H,PBASE+DRVREG
    MOV  A,M
    ANI  10H
    JNZ  L26
    MOV  A,M
    ORI  10H
    MOV  M,A
    MVI  A,01H
    LXI  H,L14
    MOV  C,M
    LHLD L27
    XCHG
    LHLD L18
    DAD  D
    XCHG
    LXI  H,L28
L29:MOV  M,A
    DAD  D
    DCR  C
    JNZ  L29
    JMP  L2A
L26:MOV  A,M
    ANI  0EFH
    MOV  M,A
    LDA  L0D
    INR  A
    LXI  H,L2B
    CMP  M
    JNC  L2C
    STA  L0D
    MVI  B,00H
    LXI  H,L14
    MOV  C,M
    LHLD L27
    XCHG
    LHLD L18
    DAD  D
    XCHG
    DCX  D
    LXI  H,L2D
L2E:MOV  M,A
    INX  H
    MOV  M,B
    DAD  D
    DCR  C
    JNZ  L2E
    MVI  A,40H+10H+8+4+3
    CALL L2F
    JMP  L2A
L2C:LXI  H,PBASE+DRVREG
    MOV  A,M
    ANI  0EFH
    MOV  M,A
    CALL L1C
    LXI  H,L30
    LXI  D,L31
    MVI  C,20H
L32:LDAX D
    MOV  M,A
    INX  D
    INX  H
    DCR  C
    JNZ  L32
    MVI  A,00H
    STA  PBASE+TRKREG
    MVI  A,01H
    STA  PBASE+SECREG
    CALL L1D
    LXI  D,L30
    LXI  B,PBASE+DATREG
    MVI  M,0A4H
    CALL L1F
    CALL L20
    MOV  A,M
    ANI  5DH
    JZ   L35
    LXI  H,L36
    CALL MSG
L35:
	LXI	H,RTN
	CALL	MSG
LXI  H,T17
    CALL MSG
    JMP  L0A
L20:MOV  A,M
    RRC
    RNC
    RRC
    JNC  L20
    LDAX D
    STAX B
    INX  D
L39:SUB  A
L38:INR  A
    XRA  M
    JZ   L38
    RRC
    LDAX D
    STAX B
    RC
    INX  D
    JMP  L39
TRKREAD:
	MOV	A,M
	RRC
	RNC
	RRC
	JNC	TRKREAD
	LDAX	B
	JMP	TRKREAD
L1C:MVI  A,00000011B
L2F:LXI  H,PBASE+CMDREG
    MOV  M,A
    CALL L1F
L3B:MOV  A,M
    RRC
    JNC  L3B
L3C:MOV  A,M
    RRC
    JC   L3C
    RET
L1D:LXI  H,PBASE+DRVREG
    MOV  A,M
    ANI  0DFH
    MOV  M,A
    ORI  20H
    MOV  M,A
    LXI  H,PBASE+CMDREG
L3D:MOV  A,M
    RLC
    JC   L3D
    RET
L1F:MVI  A,0AH
L3E:DCR  A
    JNZ  L3E
    RET
L10:MOV  M,A
    INX  H
    INR  E
    JNZ  L10
    INR  D
    JNZ  L10
    RET
L02:DB   0DH
    DB   0AH
    DB   'Тест НГМД:',0
L43:	DB	0DH,0AH,'Для проверки используйте диск 133 мм DS/DD',0
L44:	DB	0DH,0AH,'Не готов',0DH,0AH,0
L04:DB   0DH
    DB   0AH
    DB   0AH
    DB   'Имя дисковода (ВК для выхода из теста) ?',0DH,0AH,0
L0C:DB   0DH
    DB   0AH
    DB   'Для проверки дисковода '
L06:DB   00H
    DB   ': введите ВК',0
L23:DB   0DH
    DB   0AH
    DB   'Сбой, введите ВК',0
L36:DB   0DH
    DB   0AH
    DB   'Ошибка записи',0
LERRD:	DB	0DH,0AH,'Ошибка чтения, введите ВК',0
;
L31:DB   00H
    DB   00H
    DB   00H
    DB   00H
    DB   00H
    DB   00H
    DB   00H
    DB   01H
    DB   01H
    DB   01H
    DB   03H
    DB   01H
    DB   05H
    DB   00H
    DB   0A0H
    DB   00H
    DB   '('
    DB   00H
    DB   04H
    DB   0FH
    DB   00H
    DB   8CH
    DB   01H
    DB   '?'
    DB   00H
    DB   0C0H
    DB   00H
    DB   ' '
    DB   00H
    DB   01H
    DB   00H
    DB   ':'
L18:DB   00H
L15:DB   04H
L27:DB   0BEH
    DB   00H
L14:DB   05H
L2B:DB   'P'
L0D:DB   00H
L0E:DB   00H
L01:EQU  2000H
DRVREG	EQU  39H
L0F:EQU  0FFB0H
L11:EQU  0FFF4H
L12:EQU  0FFFDH
L13:EQU  0FFCEH
L17:EQU  0FFEAH
L19:EQU  0FF7EH
L1B:EQU  0FC18H
DATREG	EQU  1BH
L28:EQU  L01+0A3H
L2D:EQU  L01+0A2H
L30:EQU  L01+0CDH
TRKREG	EQU  19H
SECREG	EQU  1AH
CMDREG	EQU  18H
MOTOR	EQU	20H
;
PIC:
;	Тест контроллера прерываний
;
SICP0	EQU	28H
ICW1	EQU	12H
SHORT	EQU	4
INTTBL	EQU	4000H
INT4	EQU	00010000B
SELRID	EQU	00001000B
SELEN	EQU	00000010B
SELIRR	EQU	00000000B
;
	LXI	H,SPIC
	CALL	MSG
;
	MVI	A,0C3H
	STA	INTTBL+10H
	LXI	H,NORM
	SHLD	INTTBL+11H
;
	DI
	LXI	H,SICP0+PBASE
	MVI	M,ICW1 + SHORT + (LOW INTTBL); СКИ1
	INR	L
	MVI	M,HIGH INTTBL	; СКИ2
	MVI	M,NOT INT4	; СКО1
	DCR	L
	MVI	M,SELRID + SELEN + SELIRR; СКО3
	EI
;
	LXI	B,0FFFFH
	DCX	B
	MOV	A,B
	ORA	C
	JNZ	$-3
;
	DI
	LXI	H,PICERR
	CALL	MSG
	JMP	OLD
;
NORM:
	DI
	LXI	H,U16
	CALL	MSG
	POP	H
;
OLD:
	LXI	H,SICP0+PBASE
	MVI	M,0F6H
	INR	L
	MVI	M,2
	LDA	0304H
	CPI	20H
	JZ	OLD2
;
	MVI	M,0F7H
	JMP	OLD2+2
OLD2:
	MVI	M,0E7H
	DCR	L
	MVI	M,0AH
;
	RET
;
SPIC:	DB	'Тест прерываний:',0
PICERR:	DB	0DH,0AH,'Нет прерывания #4',0DH,0AH,0
M66:DB   '$$'
	END
����������������������������������������������������������������
```