$-MACRO
MNPORT	EQU	0FB20H	;порт передатчика
INT3	EQU	08
MSKREG	EQU	29H
EOI	EQU	20H	;конец прерывания
EOIREG	EQU	28H
OUTPUT	EQU	1
LANS	EQU	21H	;адреса регистров адаптера
LAND	EQU	20H	;локальной сети
PBASE2	EQU	0FB00H	;начальный адрес страницы с адресами
			;портов периферийных БИС
PKTNUM	EQU	0F76CH	;номер текущего пакета
ADRRM	EQU	0F700H	;номер рабочего места
CONFIG	EQU	6000H	;указатель используемой конфигурации
			;памяти
RPHL	EQU	6002H	;ячейки для сохранения значений рабочих
RPSP	EQU	6004H	;регистров в момент прерывания
STACK	EQU	6046H	;нижняя граница программного стека
RECPKT	EQU	6046H	;буфер для приема пакета
PKTPTR	EQU	60ABH	;текущий адрес в буфере приема
PACKET	EQU	60ADH	;буфер для передачи пакета
DATA	EQU	60B1H	;поле данных передаваемого пакета
DATPTR	EQU	610BH	;текущий адрес в поле данных
TEMP1	EQU	610DH	;рабочие ячейки
TEMP2	EQU	610EH	;
TEMP3	EQU	610FH	;
TIPOBL	EQU	6110H	;тип области ОЗУ РМУ
TIPOBL1	EQU	6111H	;тип области ОЗУ РМП при передаче в РМП
BUFF	EQU	80H	;рабочий буфер
BUFPNT	EQU	6112H	;текущие адреса буферов ввода-
OUTPNT	EQU	6114H	;вывода
STATE	EQU	6116H	;текущее состояние процесса приема/
			;передачи
IMXTRY	EQU	200
BUFEND	EQU	6117H	;конечный адрес буфера ввода-вывода
TEMPORY	EQU	6119H	;рабочие ячейки
CNTBYTE	EQU	611BH	;
FILBUF	EQU	611CH	;рабочий буфер
SIZE	EQU	6181H	;
ARGBLK	EQU	6182H
ADROBL	EQU	61A2H	;массив для хранения адреса в кодах
			;КОИ-8
;ЯЧЕЙКИ БЕЙСИКА
VARTAB	EQU	66B8H	;конечный адрес прикладной программы
			;в Бейсике
TXTTAB	EQU	63BFH	;начальный адрес прикладной программы
			;в Бейсике
;
BEGBAS	EQU	61A6H
STRPNT	EQU	61A8H	;стартовый адрес прикладной программы
STRPROG	EQU	61AAH	;начальный и конечный адреса области
ENDPROG	EQU	61ACH	;при записи из ОЗУ на диск
;ЯЧЕЙКИ БЕЙСИКА
L0CAA	EQU	336FH
L0BA2	EQU	326FH
STKTOP	EQU	63BBH	;нижняя граница стека интерпретатора
			;Бейсик
;
RGBASE2	EQU	0FA00H	;базовые адреса системного регистра
RGBASE4	EQU	0BF00H	;
SYSREG	EQU	7FH	;относительный адрес системного 
			;регистра
CBFPTR	EQU	61AEH	;текущий адрес рабочего буфера
OUTNW	EQU	61B0H	;адрес возврата при прерываниях
FGS	EQU	61B2H	;флаг приема
FGR	EQU	61B3H	;флаг ответа
WRN8	EQU	61B4H
NUMTRY	EQU	61B5H	;количество попыток передачи
			;пакета
NUMPKT	EQU	61B6H	;количество переданных/принятых пакетов
NUMRTR	EQU	61B8H	;количество повторных попыток
OTL	SET	0
	MACLIB	KERMACT
	ORG	0EE2H
INPKT:	SHLD	RPHL		;сохранение значений рабочих
	POP	H		;регистров для возврата в
	SHLD	OUTNW		;прерванную программу
	PUSH	H
	PUSH	PSW
	LXI	H,0
	DAD	SP
	SHLD	RPSP
	LXI	SP,STACK-2	;установка программного стека
	POP	H
	PUSH	B
	PUSH	D
	MOV	B,H
	MOV	C,L
	LDA	CONFIG		;анализ текущей конфигурации 
	CPI	40H		;памяти
	JZ	INPKT0
	MVI	A,40H
	STA	RGBASE4+SYSREG
;П/ПРОГРАММА ПРИЕМА ПАКЕТА
;ИНФОРМАЦИИ
INPKT0:	MVI	A,EOI
	STA	EOIREG+PBASE2
	LDA	0FB21H
	LDA	MNPORT		;ввод байта из ЛС
	CPI	1
	JNZ	INPKT1		;продолжение пакета
	LXI	B,0		;начало пакета
	LXI	H,RECPKT
	SHLD	PKTPTR
INPKT1:	LHLD	PKTPTR
	MOV	M,A
	INX	H
	PUSH	B
	DCR	B
	POP	B
	JNZ	INPKT2
	SUI	1DH
	MOV	C,A		;вычисление длины пакета
INPKT2:	INR	B
	MOV	A,B
	SUB	C
	JZ	RPACK		;переход к анализу пакета
	SHLD	PKTPTR
RETURN:
	LDA	CONFIG		;установка конфигурации BASIC
	CPI	40H
	JZ	RET1
	STA	RGBASE2+SYSREG
RET1:	MOV	H,B		;возврат в прерванную     
	MOV	L,C		;программу
	POP	D
	POP	B
	PUSH	H
	LHLD	RPSP
	SPHL
	POP	PSW
	POP	H
	LHLD	OUTNW
	PUSH	H
	LHLD	RPHL
	EI
	RET	
RPACK:				;обработка пакета
	DI			;запрещение прерываний
	MVI	A,0FFH
	STA	MSKREG+PBASE2	;перекачка информации из
	LXI	H,RECPKT	;RECPKT в PACKET
	SHLD	PKTPTR
	LXI	H,DATA
	SHLD	DATPTR
RPACK0:	CALL	GETCHR
	CPI	SOH
	JNZ	SENDNAK
RPACK1:	CALL	GETCHR;
	STA	PACKET+1	;ДЛИНА ПАКЕТА
	MOV	C,A
	LDA	CURCHK
	SUI	'1'
	MOV	B,A
	MOV	A,C
	SUI	' '+3
	SUB	B
	STA	ARGBLK+1	;РАСПАКОВАННАЯ ДЛИНА ПАКЕТА
	MVI	B,0
	CALL	GETCHR;
	STA	ARGBLK		;N ПАКЕТА
	STA	PACKET+2
	ADD	C
	MOV	C,A
	MVI	A,0
	ADC	B
	MOV	B,A
	LDA	ARGBLK
	SUI	' '
	STA 	ARGBLK
	MOV	B,A
	LDA	PKTNUM
	CMP	B
	STA	PKTNUM
	CALL	GETCHR
	STA	TEMP1		; ТИП ПАКЕТА
	ADD	C
	MOV	C,A
	MVI	A,0
 	ADC	B
	MOV	B,A
	LDA	ARGBLK+1
	STA	TEMP2
	LXI	H,DATA
	SHLD	DATPTR
RPACK2:	LDA	TEMP2
	SUI 	1
	JM	RPACK3
	STA	TEMP2
	CALL	GETCHR
	LHLD	DATPTR
	MOV	M,A
	INX	H
	SHLD	DATPTR
	ADD	C
	MOV	C,A
	MVI	A,0
	ADC	B
	MOV	B,A
	JMP	RPACK2
RPACK3:	CALL	GETCHR
	SUI	' '
	STA	TEMP3		; КОНТРОЛЬНАЯ СУММА
	MOV	A,C
	ANI	0C0H
	RLC	
	RLC
	ADD	C
	ANI	3FH
	MOV	B,A
	LDA	TEMP3
	CMP	B		;проверка контрольной суммы
	JNZ	SENDNAK
	LHLD	DATPTR
	MVI	M,0
	LDA	TEMP1		;анализ типа пакета
ANTYPE:	CPI	'A'
	JZ	RADDR		;пакет адресации
	LDA	FGS 		;флаг приема 
	DCR	A
	JNZ	SEND5		;если пакет предназначен
	LDA	TEMP1		;другому РМУ
	CPI	'N'		;пакет неподтверждения
	JZ	RNAK
	CPI	'Y'		;пакет подтверждения
	JZ	RYES
	CPI	'R'		;пакет инициализации приема
	JZ	RRINIT
	CPI	'S'		;пакет инициализации посылки
	JZ	RSINIT
	CPI	'D'		;пакет данных
	JZ	RDATA
	CALL	OK		;обеспечение возврата в ко-
				;мандный режим Бейсика
	LDA	TIPOBL
	CPI	'2'
	CZ	CONBAS		;настройка на адреса интерпре-
				;татора Бейсик
	CALL	SENDYES
	LDA	TIPOBL
	CPI	'7'
	JNZ	OUTPRG
	CALL	DELAY
	CALL	MET1
	LHLD	STRPNT
	SHLD	OUTNW		;переход к выполнению передан-
				;ной прикладной программе
OUTPRG:	CALL	RECOVERY	; ВОССТАНОВЛЕНИЕ ПРОГРАММЫ
	JMP	SEND5
SENDYES:LDA	FGR		;анализ наличия флага ответа
	DCR	A
	CZ	YES		;посылка пакета подтверждения
	JMP	MET1
SENDNAK:LDA	FGR		;анализ наличия флага ответа
	DCR	A
	JZ	NAK		;посылка пакета неподтверждения
	CALL	MET1
	JMP	RETURN
GETCHR:	LHLD	PKTPTR
	MOV	A,M
	INX	H
	SHLD	PKTPTR
	RET
RADDR:				;обработка адресного пакета
	LXI	H,0
	SHLD	FGS
	SHLD	WRN8
	SHLD	NUMPKT
	SHLD	NUMRTR
	LXI	H,DATA+1	; ОБРАБОТКА ПАКЕТА АДРЕСАЦИИ
	MOV	A,M
	CALL	EQUADR
	CPI	0
	JNZ	RADDR1
	STA	FGR
	LXI	H,DATA
	MOV	A,M
	SUI	'0'
	JNZ	RADDR3
	INR	A
	JMP	RADDR2
RADDR1:	STA	FGR
RADDR2:	STA	FGS
IF	OTL EQ 1
	PRINT	C1
ENDIF
RADDR3:	CALL	SENDYES
	JMP	RETURN
EQUADR:	XCHG	
	LXI	H,TAB2
EQUADR0:CMP	M
	JNZ	EQUADR1
	INX	H
	MOV	B,M
	LDA	ADRRM
	CMP	B
	JZ	EQUADR2
	MVI	A,0
	RET
EQUADR2:MVI	A,1
	RET
EQUADR1:PUSH	PSW
	MOV	A,M
	CPI	0
	JZ	EQUADR2-3
	POP	PSW
	INX	H
	INX	H
	JMP	EQUADR0
RRINIT:	STA	STATE
	LDA	DATA	; ОБРАБОТКА ПАКЕТА ИНИЦИАЛИЗАЦИИ ПРИЕМА
	STA	TIPOBL
	CPI	'0'		; АЦЗУ
	JNZ	RINIT20
	CLS			; ЧИСТКА ЭКРАНА
	POSCUR	1,1		; КУРСОР В ЛЕВЫЙ ВЕРХНИЙ УГОЛ
	JMP	RINIT21
RINIT20:CALL	ADOBL
	LDA	TIPOBL
	ANI	'3'	
	CPI	'3'
	CZ	ASCBIN		; КОИ8--> ДВОИЧН.
	LDA	TIPOBL
	CPI	'2'
	JNZ	RINIT21
	LHLD	TXTTAB
	DCX	H
	SHLD	BEGBAS
	SHLD	BUFPNT
RINIT21:	CALL	DELAY
	CALL	SENDYES
IF OTL EQ 1
	PRINT	C2
ENDIF
RINIT22:LXI	H,IMBAS
	SHLD	OUTNW
	JMP	RETURN
YES:	LDA	ARGBLK		
	CALL	COUNTP		;увеличение счетчика пакетов
	MVI	A,0
	STA	ARGBLK+1
	MVI	A,'Y'
	CALL	DELAY
	CALL	SPACK		;посылка пакета подтверждения
IF OTL EQ 1
	PRINT	C6
ENDIF
	RET
NAK:	MVI	A,0
	STA	ARGBLK+1
	MVI	A,'N'
	CALL	DELAY
	CALL	SPACK		;посылка пакета неподтверждения
IF OTL EQ 1
	PRINT	C7
ENDIF
	JMP RETURN
TAB2:	DB	30H,0,31H,1,32H,2,33H,3,34H,4
	DB	35H,5,36H,6,37H,7,38H,8,39H,9
	DB	41H,0AH,42H,0BH,43H,0CH,44H,0DH
	DB	45H,0EH,46H,0FH,0
;П/ПРОГРАММА ПРЕОБРАЗОВАНИЯ АДРЕСА
;ИЗ КОИ-8 В ДВОИЧНУЮ ФОРМУ
;ПРЕДСТАВЛЕНИЯ
ASCBIN:	LXI	B,0		
	LXI	H,0		
	SHLD	BUFPNT
TABLE1:	LXI	H,DATA+1
	DAD	B
	XCHG
	PUSH	B
	CALL	TABR
	POP	B
	CPI	0
	JZ	T3
	LXI	H,TAB3
	DAD	B
	DAD	B
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG
	CALL	TA1
T3:	INX	B
	MVI	A,4
	CMP	C
	JNZ	TABLE1
	LHLD	BUFPNT
	SHLD	STRPNT
	RET	
TABR:	MVI	B,16
	LXI	H,TAB2
T2:	LDAX	D
	CMP	M
	JZ	T1
	INX	H
	INX	H
	DCR	B
	JNZ	T2
T1:	INX	H
	MOV	A,M
	RET
TA1:	XCHG
	LHLD	BUFPNT
	DAD	D
	DCR	A
	SHLD	BUFPNT
	JNZ	TA1+4
	RET
TAB3:	DW	4096
	DW	256
	DW	16
	DW	1
RDATA:				;обработка пакета данных
IF OTL EQ 1
	PRINT	C3
ENDIF
	LHLD	ARGBLK
	MOV	A,H
	CALL	PTCHR
	CALL	DELAY
	CALL	SENDYES
	JMP	SEND5	
DELAY:	PUSH	PSW		;задержка посылки пакета
	MVI	B,01H
DELS:	XRA	A
DELK:	DCR	A
	JNZ	DELK
	DCR	B
	JNZ	DELS
	POP	PSW
	RET
PTCHR:	STA	TEMP1		; ДЛИНА ПАКЕТА
	LXI	H,DATA
	SHLD	OUTPNT		; СЧЕТЧИК ТЕКУЩЕГО БАЙТА
	LDA 	RQUOTE
	MOV	B,A
	MVI	C,0
	LDA	QUOT8
	ORA	A
	JZ	PTCHR1
	LDA	QBCHR
	MOV	C,A
PTCHR1:	LXI	H,TEMP1
	DCR	M
	RM
PTCHR2:	LHLD	OUTPNT 		; ОБРАБОТКА СИМВОЛА
	MOV	A,M
	INX	H
	SHLD	OUTPNT
	MVI 	E,0
	CMP	C
	JNZ	PTCH2A
	MVI	E,80H
	LDA	TEMP1
	DCR	A
	STA	TEMP1
	MOV	A,M
	INX	H
	SHLD	OUTPNT
PTCH2A:	CMP	B
	JNZ	PTCHR3
	MOV	A,M
	INX	H
	SHLD	OUTPNT
	LXI	H,TEMP1
	DCR	M
	MOV	D,A	
	ANI	80H
	ORA	E
	MOV	E,A
	MOV	A,D
	ANI	7FH
	CMP	B
	JZ	PTCHR3
	CMP	C
	JZ	PTCHR3
	MOV	A,D
	ADI	40H
	ANI	7FH
PTCHR3:	ORA	E
	MOV	H,A
	LDA	TIPOBL
	CPI	'0'		; ОЗУ?
	MOV	A,H
	JZ	PRACZU		; АЦЗУ
	LHLD	BUFPNT
	MOV	M,A
	INX	H
	SHLD	BUFPNT
	JMP	PTCHR1
PRACZU:	PUSH	B
	PRTSYM
	POP	B
	JMP	PTCHR1
SEND:	MVI	A,'A'
	STA	STATE
SEND1:	XRA	A
	STA	PKTNUM
	STA 	NUMTRY
	STA 	WRN8
	LXI	H,0
	SHLD	NUMPKT
	SHLD	NUMRTR
IF OTL EQ 1
	NOP
	NOP
	NOP
	NOP
	NOP
ENDIF
SEND2:	LDA	STATE		;анализ текущего состояния
	CPI	'A'		;процесса передачи
	JZ	SADR
SEND2A:	CPI	'D'
	JZ	SDATA1
SEND3:	CPI	'R'
	JZ	SRINIT
SEND4:	CPI	'Z'
	CZ	SEOF
	LDA	TIPOBL
	CPI	'2'
	JZ	SEND6
	CPI	'3'
	JZ	SEND6
	CPI	'5'
	JNZ	SEND5
	SUB	A
	STA	6200H	;ОБНУЛЕНИЕ ПРИЗНАКА ЗАПОЛНЕНИЯ ПЯ
SEND5:	CALL	MET1
	JMP	RETURN
SEND6:	
	CALL	OK
	JMP	SEND5
RNAK:	LDA	NUMTRY		;обработка пакета 
	CPI	IMXTRY		;неподтверждения
	JZ	SEND5
	INR	A
	STA	NUMTRY
	LDA	FGR
	ORA	A
	JZ	SEND5
	CALL	DELAY
	CALL	SPACK
	JMP	RETURN
RYES:
IF OTL EQ 1
	PRINT	C12
ENDIF
	LDA	FGR
	ORA	A
	JZ	SEND5
	MVI	A,1
	STA	NUMTRY
	LDA	NUMPKT
	CALL	COUNTP
	JMP	SEND2
SADR:	LDA	NUMPKT
	STA	ARGBLK
	MVI	A,'0'
	STA	DATA+1
	MVI	A,'1'
	STA	DATA
	MVI	A,2
	STA	ARGBLK+1
	MVI	A,'A'
	CALL	DELAY
	CALL	SPACK
	MVI	A,'R'
	STA	STATE
IF OTL EQ 1
	PRINT C8
ENDIF
	JMP	RETURN
RSINIT:	LDA	DATA+5		;обработка пакета 
	STA	TIPOBL1		;инициализации посылки
	CALL	STAADR
	MVI	A,1
	STA	NUMTRY
	LDA	DATA
	STA	TIPOBL
	CALL	ASCBIN
IF OTL EQ 1
	PRINT	C5
ENDIF
	CALL	SENDYES
	MVI	A,'R'
	STA	STATE
	JMP	SEND1
STAADR:	MVI	B,4
	LXI	H,DATA+6
	LXI	D,ADROBL
STAADR1:MOV	A,M
	STAX	D
	DCR	B
	RZ
	INX	H	
	INX	D
	JMP	STAADR1
SRINIT:	LDA	NUMPKT		;посылка пакета 
	STA	ARGBLK		;инициализации приема
	MVI	A,5
	STA	ARGBLK+1
	LDA	TIPOBL1
	MVI	B,4
	LXI	H,ADROBL
	LXI	D,DATA+1
	CALL	STAADR1
	LDA	TIPOBL1
	STA	DATA
	CALL	SDATA
	MVI	A,'R'
	CALL	DELAY
	CALL	SPACK
	MVI	A,'D'
	STA	STATE
IF OTL EQ 1
	PRINT	C9
ENDIF
	LDA	TIPOBL
	CPI	'2'
	JZ	RINIT22
	CPI	'3'
	JZ	RINIT22
	JMP	RETURN
;П/програмные сравнения
COMP:	PUSH	H
	LHLD	BUFEND
	XCHG
	POP	H
	MOV	A,H
	CMP	D
	RC
	JNZ	RSKP
	MOV	A,L
	CMP	E
	RC
	JMP	RSKP
	RET
ADOBL:	INR	A		;определение начальной и
	SUI	30H		;конечной границ области
	LXI	H,0
	DAD	SP
	SHLD	TEMPORY
	LXI	SP,TABOBL
ADOBL1:	POP	H
	SHLD	BUFPNT
	POP	H
	SHLD	BUFEND
	DCR	A
	JNZ	ADOBL1
	LHLD	TEMPORY
	SPHL
	RET
TABOBL:	DW	0FC00H	;Нач.адрес АЦЗУ
	DW	0FFFFH	;конечный адрес АЦЗУ
	DW	91D1H	;Нач. адрес гр.ЗУ
	DW	0F000H	;Конечный адрес гр.ЗУ
	DW	91D1H	;Нач.адрес БЭЙСИКа
	DW	0F000H	;Kонеч.адрес БЕЙСИКа
	DW	6800H	;Начальный адрес ОЗУ
	DW	0F700H	;Конечный адрес ОЗУ
	DW	0	;диск
	DW	0	;диск
	DW	6201H	;Нач.адрес ПЯ
	DW	6300H	;конеч.адрес ПЯ
	DW	6200H	;нач.адрес признака заполнения ПЯ
	DW	6201H	;конеч.адрес признака заполнения ПЯ
	DW	6800H
	DW	0F700H
SDATA:	LDA	TIPOBL
	LHLD	BUFPNT
	PUSH	H
	CALL	ADOBL
	POP	H
	LDA	TIPOBL		;настройка на заданный тип
	CPI	'2'		;области
	JNZ	SDATA0
	MVI	A,0FFH
	LHLD	TXTTAB
	DCX	H
	SHLD	BEGBAS
	MOV	M,A
	SHLD	BUFPNT
	LHLD	VARTAB
	SHLD	BUFEND
SDATA0:	CPI	'3'		;ОЗУ
	RNZ	
	LHLD	STRPROG
	SHLD	BUFPNT
	LHLD	ENDPROG
	SHLD	BUFEND
	RET
SDATA1:	CALL	GMCHR		;посылка пакета данных
	JMP	SDATA2
	STA	SIZE
	MVI	A,'D'
SDATA3:	STA	STATE
	JMP 	SDATA7
SDATA2:	LDA	TIPOBL
	CPI	'2'
	JNZ	SDATA21
	SUB	A
	LHLD	BEGBAS
	MOV	M,A
SDATA21:MVI	A,'Z'
	JMP	SDATA3
GMCHR:	LDA	SQUOTE		
	MOV	C,A		
	LDA	CURCHK		
	SUI	'1'		
	MOV	B,A		
	LDA	SPSIZ		
	SUI	5		
	SUB	B		
	STA	TEMP1		
	LXI	H,FILBUF	
	SHLD	CBFPTR		
	MVI	B,0		
GMCHR1:	LDA	TEMP1
	DCR	A		
	JP	GMCHR2		
	MOV	A,B		
	JMP	RSKP
GMCHR2:	STA	TEMP1
	LHLD	BUFPNT
	MOV	A,M
	CPI	0
	JZ	TAT1
GMCHR3:	CALL	COMP
	JMP	$+6
         JMP     GMCEOF
       	LHLD	BUFPNT		
	MOV	A,M		
	INX	H
	SHLD	BUFPNT
	MOV	D,A		
	ANI	80H		
	MOV	E,A		
	JZ	GMCH4A		
	LDA	QUOT8		
	ORA	A
	JZ	GMCH4A		
	LDA	TEMP1		
	CPI	2		
	JM	GMCHR9		
	DCR	A
	STA	TEMP1
	LHLD	CBFPTR		
	LDA	QBCHR		
	MOV	M,A		
	INX	H		
	SHLD	CBFPTR		
	INR	B		
	MVI	E,0		
GMCH4A:	MOV	A,D		
	ANI	7FH		
	MOV	D,A		
	CPI	' '		
	JM	GMCHR5		
	CPI	7FH		
	JZ	GMCHR5		
	LDA	QUOT8		
	ORA	A
	JZ	GMCH4C		
	LDA	QBCHR		
	CMP	D		
	JZ	GMCH4B		
GMCH4C:	MOV	A,D		
	CMP	C		
	JNZ	GMCHR8		
GMCH4B:	LXI	H,TEMP1		
	DCR	M		
	LHLD	CBFPTR		
	MOV	M,C		
	INX	H
	SHLD	CBFPTR
	INR	B		
	MOV	A,D		
	JMP	GMCHR8
GMCHR5:	ORA	E		
	CPI	('Z'-100O)	
	JNZ	GMCHR7		
	JMP	GMCHR6
TAT1:	INX	H
	CMP	M
	JZ	TAT2
	DCX	H
	SUB	A
	JMP	GMCHR3
TAT2:
	INX	H
	CMP	M
	JZ	TAT3
	DCX	H
	JMP	TAT1+5
TAT3:
	LDA	TIPOBL
	CPI	'1'
	JZ	TAT4
	CPI	'5'
	JNZ	TAT5
TAT4:	MVI	A,1AH
	INX	H
	MOV	M,A
	SHLD	BUFEND
TAT5:
	DCX	H
	JMP	TAT2+5
GMCHR6:	MVI	A,('Z'-100O)	
GMCHR7:	STA	TEMP2		
	LXI	H,TEMP1		
	DCR	M		
	LHLD	CBFPTR		
	MOV	M,C		
	INX	H
	SHLD	CBFPTR
	INR	B		
	LDA	TEMP2		
	ADI	40H		
	ANI	7FH		
GMCHR8:	LHLD	CBFPTR		
	ORA	E		
	MOV	M,A		
	INX	H
	SHLD	CBFPTR
	INR	B		
	JMP	GMCHR1		
GMCHR9:	
	LHLD	BUFPNT
	DCX	H
	SHLD	BUFPNT		
	MOV	A,B		
	JMP	RSKP		
GMCEOF: MOV     A,B
        STA     SIZE
	MVI	A,0FFH		
	RET
SDATA7:	LXI	H,DATA
	SHLD	DATPTR
	LXI	H,FILBUF
	SHLD	CBFPTR
	MVI	B,0
SDATA11:LHLD	CBFPTR
	MOV	A,M	;СЧИТЫВАНИЕ СИМВОЛА ИЗ FILBUF
	INX	H
	SHLD	CBFPTR	;ПЕРЕХОД К СЛЕДУЮЩЕМУ СИМВОЛУ
	LHLD	DATPTR
	MOV	M,A	;ПЕРЕЗАПИСЬ СИМВОЛА В МАССИВ DATA
	INX	H
	SHLD	DATPTR
	INR	B
	LDA	SIZE	;ПРОВЕРКА НА КОНЕЦ МАССИВА FILBUF
	CMP	B
	JP	SDATA11		;ЕСЛИ НЕ КОНЕЦ
SDATA12:LDA	SIZE
	STA	ARGBLK+1
	LDA	PKTNUM
	STA	ARGBLK
	MVI	A,'D'
	CALL	DELAY
	CALL	SPACK
IF OTL EQ 1
	PRINT	C10
ENDIF
	JMP	RETURN
SEOF:	LDA	PKTNUM
	STA	ARGBLK
	XRA	A
	STA	ARGBLK+1
	MVI	A,'Z'		;посылка признака конца файла
	CALL	DELAY
	CALL	SPACK
	MVI	A,'B'
	STA	STATE
IF OTL EQ 1
	PRINT	C11
ENDIF
	RET
SPACK:	DI			;формирование и посылка пакета
	STA	ARGBLK+2
	LXI	H,PACKET	;ЗАПОЛНЕНИЕ ЗАГОЛОВКА ПАКЕТА
	MVI	A,SOH
	MOV	M,A
	INX	H
	LDA	CURCHK
	SUI	'1'
	MOV	B,A
	LDA	ARGBLK+1
	ADI	' '+3
	ADD	B
	MOV	M,A
	INX	H
	LXI	B,0
	MOV	C,A
	LDA	ARGBLK
	ADI	' '
	MOV	M,A
	INX	H
	ADD	C
	MOV	C,A
	MVI	A,0
	ADC	B
	MOV	B,A
	LDA	ARGBLK+2
	MOV	M,A
	INX	H
	ADD	C
	MOV	C,A
	MVI	A,0
	ADC	B
	MOV	B,A
SPACK2:	LDA	ARGBLK+1	;ПОДСЧЕТ КС ПАКЕТА
	ORA	A
	JZ	SPACK3
	DCR	A
	STA	ARGBLK+1
	MOV	A,M
	INX	H
	ADD	C
	MOV	C,A
	MVI	A,0 
	ADC	B
	MOV	B,A
	JMP	SPACK2
SPACK3:	MOV	A,C	;ПРЕОБРАЗОВАНИЕ КС К ГРАФИЧЕСКОМУ
			;ВИДУ
	ANI	0C0H
	RLC
	RLC
	ADD	C
	ANI	3FH
	ADI	' '
	MOV	M,A
	INX	H
SPACK7:	LDA	SEOL	;ЗАСЫЛКА В ПАКЕТ СИМВОЛА КОНЦА СТРОКИ
	MOV	M,A
	INX	H
	XRA	A
	MOV	M,A	;ЗАСЫЛКА ПРИЗНАКА КОНЦА ПАКЕТА
OUTPKT:	LDA	SPAD	;ПОБАЙТНАЯ ПЕРЕСЫЛКА СТРОКИ В ЛС
	STA 	TEMP1
OUTPK2:	LDA	TEMP1
	DCR	A
	ORA	A
	JM	OUTPK6
	STA	TEMP1
	LDA	SPADCH
	MOV	E,A 
	CALL	OUTMDM
	JMP	OUTPK2
OUTPK6:	LXI	H,PACKET
OUTLUP:	MOV	A,M
	ORA	A
	JZ	OUTLUD
	MOV	E,A
	CALL	OUTMDM
	LDA	TACFLG
	CMP	M
	JNZ	OUTPK8
	MOV	E,A
	CALL	OUTMDM
OUTPK8:	INX	H
	JMP	OUTLUP
OUTLUD:
MET:	LDA	LANS+PBASE2
	ANI	85H
	CPI	85H
	JNZ	MET
MET1:	LDA	LAND+PBASE2	;снятие запрета на прерывания
	MVI	A,EOI
	STA	EOIREG+PBASE2
	MVI	A,NOT INT3
	STA	MSKREG+PBASE2
	RET
RSKP:	POP	H
	INX	H
	INX	H
	INX	H
	PCHL	
R:	RET
OUTMDM:	PUSH	H
	LXI	H,PBASE2+LANS
OUTMD2:	MOV	A,M
	ANI	85H
	CPI	85H
	JNZ	OUTMD2
	LXI	H,MNPORT
	MOV	M,E
	POP	H
	RET
COUNTP:	INR	A
	ANI	3FH
	STA	PKTNUM
	LHLD	NUMPKT
	INX	H
	SHLD	NUMPKT
	RET
;;;;;;;;;;;;;;;;;;;;;;
;СОПРЯЖЕНИЕ С БЕЙСИКОМ
;;;;;;;;;;;;;;;;
CONBAS:	SUB	A		;подготовка принятой программы
	LHLD	BEGBAS		;для работы с интерпретатором
	MOV	M,A		;Бейсика 
	CALL	L0CAA
	INX	H
	INX	H
	SHLD	VARTAB		;АДРЕС КОНЦА БЕЙСИК-ПРОГРАММЫ 
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RECOVERY:			;чистка рабочих ячеек
	SUB	A
	STA	PKTNUM
	LXI	H,0
	SHLD	NUMPKT
	RET
OK:	LXI	H,L0BA2		;обеспечение выхода в командный
	SHLD	OUTNW		;режим интерпретатора Бейсик
	LHLD	STKTOP
	DCX	H
	DCX	H
	DCX	H
	DCX	H
	SHLD	RPSP
	MVI	A,40H
	STA	CONFIG
	RET
SOH	EQU	1		;признак начала пакета
SQUOTE:	DB	23H		;константы преобразования
RQUOTE:	DB	23H		;информации к графическому виду
QUOT8:	DB	0		;
QBCHR:	DB	'&'		;
SPSIZ:	DB	20H
CPMFLG:	DB	0
CURCHK:	DB	31H		;тип контрольной суммы
TACFLG:	DB	0
SEOL:	DB	0DH		;признак конца пакета
SPAD:	DB	0
SPADCH:	DB	0
IMBAS:	MVI	C,4		;блокировка клавиатуры в 
XXXX:	LXI	H,0FFFFH	;процессе передачи
XXX:	DCX	H
	MOV	A,H
	ORA	L
	JNZ	XXX
	DCR	C
	JNZ	XXXX
	JMP	IMBAS
IF OTL EQ 1
C1:	DB	0DH,0AH,'ПАКЕТ А ПРИНЯТ$'
C2:	DB	0DH,0AH,'ПАКЕТ R ПРИНЯТ$'
C3:	DB	0DH,0AH,'ПАКЕТ D ПРИНЯТ$'
C4:	DB	0DH,0AH,'ПАКЕТ Z ПРИНЯТ$'
C5:	DB	0DH,0AH,'ПАКЕТ S ПРИНЯТ$'
C6:	DB	0DH,0AH,'ACK$'
C7:	DB	0DH,0AH,'NACK$'	
C8:	DB	0DH,0AH,'ПАКЕТ А ПЕРЕДАН$'
C9:	DB	0DH,0AH,'ПАКЕТ R ПЕРЕДАН$'
C10:	DB	0DH,0AH,'ПАКЕТ D ПЕРЕДАН$'
C11:	DB	0DH,0AH,'ПАКЕТ Z ПЕРЕДАН$'
C12:	DB	0DH,0AH,'ПАКЕТ Y ПРИНЯТ$'
PRTSTR:	LDAX	D
	CPI	'$'
	JZ	R
	PUSH	D
	PRTSYM
	POP	D
	INX	D
	JMP	PRTSTR
ENDIF
	END	INPKT
