;-----------------------
;	Mailer. physical
;	(c) LAV'1995

;	Corrected by MKT 11.7.96

MODULL==137000	;420
EMSBUF==35000
DMCNF== 24000	;FREMEM	;34000
DATABF==34000
FREBUF=	36000
TICK=	50.

;	MKDOS:
savdir	==120042
dirfin	==120026
subtek	==120010
subdir	==120013
DIR	==120014
screen	==120074

;------ Автомат ---------
MTPROG::JSR	PC,INFTIM
	MOV	SP,(PC)+
INST:	.WORD	0
	CLR	(PC)+
17$:	.WORD	0
	MOV	#TICK,TIME
	BR	15$

1$:	TSTB	105
	BEQ	13$
15$:	JSR	PC,KEY
	CMP	R0,#3
	BEQ	14$
	CMP	R0,#14
	BNE	13$
132$:	MOV	VINT,R0		;Oстановить двигатель винчестера на время
	BEQ	51$		;ожидания в програмном режиме.
	MOV	#65437,(R0)	;@#177740	;;;;;;;;;;;;;
51$:	MOV	SP,17$
	MOV	#40000,R0
	MOV	#10000,R1
18$:	CLR	(R0)+
	CLR	(R0)+
	SOB	R1,18$
13$:	CMP	TIME,#TICK
	BLO	1$
	CMP	TSC,#31
	BNE	131$
	TST	17$
	BEQ	132$
131$:	SUB	#TICK,TIME
	TST	TSC
	BNE	2$
	MOV	#59.,TSC
	TST	TMN
	BNE	3$
	MOV	#59.,TMN
	TST	THR
	BNE	5$
	CLR	INST
	BR	4$
5$:	DEC	THR
	BR	4$
3$:	DEC	TMN
	BR	4$
2$:	DEC	TSC
4$:	MOV	#TXT31,R2
	MOV	#THR,R3
	MOV	#3,R4
6$:	MOV	(R3)+,R1
	CLR	R0
10$:	INC	R0
	SUB	#10.,R1
	BPL	10$
	ADD	#10.,R1
	ADD	#57,R0
	MOVB	R0,(R2)+
	ADD	#60,R1
	MOVB	R1,(R2)+
	MOVB	#':,(R2)+
	SOB	R4,6$
	MOVB	#1,-1(R2)
	JSR	R0,TBLK
	.WORD	TXT32,IFT,0
	TST	17$
	BEQ	19$
	MOV	(PC)+,R0
30$:	.WORD	100000
	MOV	(R0)+,R1
	BIC	#20000,R0
	MOV	R0,30$
	BIC	#177017,R1
	BIS	#1000,R1
	MOV	R1,177664
19$:	TST	INST
	BNE	1$
	MOV	#"ZZ,104
	MOV	#"WW,EKEY
14$:	MOV	#1330,177664
	RTS	PC

THR::	.WORD 0
TMN::	.WORD 0
TSC::	.WORD 0

;------ Point session ---
MTZABR::Call	ini
	JSR PC,TEKBSS	; Куда звоним?
	Jsr	pc,rinit
	Mov #DATABF,R1	;Передаем строку инициализации
	Mov #15.,R0
1$:	Tstb (R1)+
	Bne 1$
	Sob R0,1$
	;cmpb	(r1),#'A	;А ЕСТЬ ЛИ СТРОКА ИНИЦИАЛИЗАЦИИ?
	;bne	mtzbr1
	;beq	3$
	br	3$
2$:	jsr	pc,sbyte
3$:	movb	(r1)+,r0
	bne	2$
	jsr	pc,crout
MTZBR2:	JSR	PC,GETNUM	; Номер давай!
	JSR	PC,MTDIAL
	BCC	MTTERM
	JMP	ZZ		;BCS ZZ

MTTERM::mov	#z2,4
	mov	sp,z2+2
	JSR PC,EUROPA
	JSR PC,CLE
	JSR PC,DIND

	CLR TIME	; Пауза после CONECT
	JSR PC,LOATM	; Грузим терминалку
51$:	CMP TIME,#<2*50.>
	BLO 51$

;	JSR PC,RINIT	; очистить буфер
	JSR PC,EMWAIT	; Ждать REQ
	BCS Z4
	JSR PC,EMSINQ
	JSR PC,EMSDTR	; Передать EMSI_DAT
	BCS Z4
	JSR PC,EMSDRC	; Принять EMSI_DAT
	BCS Z4
	JSR PC,WFREQ	; Ждать готовности boss'a / зав. хендшейка...
	BCS Z4

	MOV	#BPM,R5
	CALL	PRTMSG
	JSR	PC,DECDAT	; Декодировать EMSI_DAT
	call	savprt		;!

	clr	(pc)+
flg:	.word	0		; флаг обрыва при передаче
	MOV	#1026,RECSEN
	JSR	PC,TRMZM	; Сессия Zmodem (send)

	mov	dir,r3		;проверить, остались ли выд. файлы
	mov	30(r3),r0
	add	#<500-30>,r3
11$:	add	#30,r3
	cmpb	(r3),#377
	beq	11$
	bit	#100000,22(r3)
	beq	12$
	inc	flg
	tst	(pc)+
12$:	sob	r0,11$
	jsr	pc,izwrat	;инв.выделения, т.е. выделить уже переданное
	mov	#txt40,r0	;для перемещения в др.подкаталог.
	mov	#7,r2
	jsr	pc,ffn
	movb	(r3),r2
	mov	dir,r3
	mov	30(r3),r0
	add	#<500-30>,r3
13$:	add	#30,r3
	cmpb	(r3),#377
	beq	13$
	bit	#100000,22(r3)
	beq	14$
	movb	r2,1(r3)
	bic	#100000,22(r3)
14$:	sob	r0,13$
	jsr	pc,@savdir
	jsr	pc,dsks
	tst	flg		;после передачи оставались выд.файлы?
	BEQ	Z3
Z4:	CALL	ATH0
	BR	mtzbr2		;тогда перезваниваем!


Z3:	TSTB	XONOFF		;JSR	PC,WFREQ
	BNE	1$		;BCS	Z2
	JSR	PC,LOATM
	mov	#1024,recsen
	br	2$
1$:	JSR 	PC,loatm2
	clr	recsen
2$:	jsr	pc,trmzm
	;bcs	z4
	CALL	ATH0

z2:	MOV #0,SP
	MOV #2,4
ZZ:	mov #actb,r0
	mov #10.,r1
1$:	tstb (r0)+
	beq	2$
	;call	ath0
	jmp	mtzabr
2$:	sob r1,1$
	mov ekey,R0
	MOV	R0,104
	clr (pc)+
EKEY:	.WORD 0
	CMPB	R0,#'W		;Если запускались из програмного режима,
	BNE	1$		;то по окончании остановить движок винта
	MOV	VINT,R0
	BEQ	1$
	MOV	#65437,(R0)	;@#177740	;;;;;;;;;;;;;
	jsr	pc,key
1$:	RTS PC

;------ Повесить трубку ---
Ath0::	clr	time
	cmp	time,#1*50
	blo	.-6
	mov	#plus,r1
	call	inout
	cmp	time,#3*50
	blo	.-6
	call	inout
	call	crout
	cmp	time,#4*50
	blo	.-6
	rts	pc

plus:	.asciz	/+++/
	.asciz	/ath0/
	.even

;;------ Отладчик ----
;otl::	mov	#z2,4
;	mov	sp,z2+2
;	mov	#actb,r0
;	mov	#10.,r1
;	clrb	(r0)+
;	sob	r1,.-2
;	call	loatm
;	jmp	z1

;------ Загрузить терминалку ------
loatm2:	mov #bpzm,r1
	br  .+6
LOATM:	MOV #BPTM,R1
	MOV MTRM,177716
	EMT 36
	TSTB 1(R1)
	beq 1$
	mov #txt30,r1
	br quit
1$:	MOV MIMG,177716
	Jmp DSKS
BPTM:	.WORD 13,40000,0
	.ASCII/TM              /
	.BLKb 24

bpzm:	.word 13,40000,0
	.ascii/zm.img          /
	.blkb 24

quit::	mov r1,-(sp)
	mov #40000,177662
	mov mimg,177716
	jsr pc,100140
	mov	(sp)+,r1
	clr	r2
	emt	20
	halt

;------ Куда звоним? ---
TEKBSS:	CLR R0
2$:	CMP R0,#11.
	BEQ 1$
	TSTB ACTB(R0)
	BNE 3$
	INC R0
	BR 2$
3$:	CLRB ACTB(R0)
	ADD #60,R0
	MOVB R0,NUMSS
	JMP MTCONF
1$:	TST (SP)+
	RTS PC
;------ Передать управление дылде ----
TRMZM::	JSR PC,IZWRAT
	MOV #40000,R2
	MOV R2,177662
	MOV #320,306
	MOV SP,SPDLD
	mov	mmlr,R5
	TST	RECSEN
	BEQ	1$
	MOV	#56000,R5	;Для TERM95
1$:	MOV	R5,ml+2
	movb	xonoff,XON
	mfps	psw
	mov	#emod-modul,r3
	MOV	#modul,R0
	MOV	#MODULL,R1
2$:	MOVb (R0)+,(R1)+
	sob	r3,2$
	CLR R0
	MOV #20000,R1		;перемещаем мейлер в страницу MMLR
	MOV R5,177716
3$:	MOV (R0)+,(R2)+
	SOB R1,3$
	MOV #1000,R0
	MOV #17000,R1
	MOV #40000,R2
	MOV MTRM,177716
	JMP	@#MODULL

modul:	BR	M11			; #420
	MOV	#40000,@#177662
	MOV	(PC)+,SP
SPDLD:	.WORD 1
	CLR	R0
	MOV	#40000,R1
	MOV	#20000,R2
ML:	MOV	#1,@#177716
12$:	MOV	(R1)+,(R0)+
	SOB	R2,12$
	MOV	#16000,@#177716
	CLR	@#177662
	mtps	(pc)+
psw:	.word	0
	RTS PC
M11:	MOV	(R2)+,(R0)+
	SOB	R1,.-2
	MOV	#16000,@#177716
	mov	#MODULL+2,-(sp)	;420
	tst	recsen
	bne	1$
	Jmp	@#1000
1$:	.WORD	112737		;movB	#XON,@#1022
xon:	.WORD	0,1022
	movb	#377,@#1030
	call	@#1000
	mov	@(pc)+,r0
recsen::.word	0
	CLR	@#177662
	bis	#100,@#176560
	mtps	#0
	Jmp	(r0)
emod:

;------ Выделить файлы на передачу -----
IZWRAT:	MOV #TXT33,R0		;Выделения инвертируются !!!
	MOV #7.,R2
	JSR PC,FFN
	BCC 3$
	CMPB #'$,NUMSS
	BNE 5$
	MOV #TXT36,R1
	JMP	QUIT
5$:	MOVB #'$,NUMSS
	BR	IZWRAT
3$:	mov	#100000,r2
	MOVB (R3),R5
	MOV dir,R3
	MOV 30(R3),R1
	ADD #450,R3
1$:	ADD #30,R3
	TSTB (R3)
	BMI 1$
	CMPB 1(R3),R5
	BNE 2$
	xor r2,22(R3)
2$:	SOB R1,1$

	MOV #TXT34,R0
	MOV #9.,R2
	JSR PC,FFN
	BCS 4$
	MOVB (R3),subdir
	movb (r3),subtek
4$:	RTS PC

;---- переместить имя из R0 в буф. и найти его в каталоге
FFN:	MOV #326,R1
10$:	MOVB (R0)+,(R1)+
	SOB R2,10$
	MOV #16.,R2
11$:	MOVB #40,(R1)+
	SOB R2,11$
	MOV #320,306
	MOV 120014,R3
	JMP @dirfin

;------ Ждать готовности ZM ----
WFREQ:	MOV #15.,(PC)+
4$:	.WORD 0
2$:	JSR PC,SETTIM
	.WORD <3.*50.>
21$:	JSR PC,RBYTE
	BCS 1$
	CMPB R0,#'*
	BNE 21$
22$:	JSR PC,RBYTE
	BCS 1$
	CMPB R0,#'*
	BEQ 22$
	CMPB R0,#30
	BNE 21$
	CLC
	RTS PC
1$:	JSR PC,CROUT
	JSR PC,CROUT
	JSR PC,EMSACK
	JSR PC,EMSACK
	DEC 4$
	BNE 2$
	SEC
	RTS PC
;------ Ждать EMSI_REQ ----
EMWAIT:	MOV #20.,1$
	MOV #TXT20,R0
	MOV #EMSBUF,R1
21$:	MOVB (R0)+,(R1)+
	BNE 21$
2$:	JSR PC,SETTIM
	.WORD <3.*50.>
	JSR PC,RDEMS
	BCS 4$
	CMP RDDCRC,CALCRC
	BNE 4$
	MOV #WIN2,R5
	JSR PC,PRIEMS
	CMPB EMSBUF+5,#'R
	BNE 4$
	CMP EMSBUF+6,#"EQ
	BEQ 66$
4$:	JSR PC,CROUT
	DEC (PC)+
1$:	.WORD 0
	BNE 2$
	SEC
	RTS PC
66$:	CLC
	RTS PC
;------ NAK -------
EMSNAK:	JSR PC,EMGST
	.ASCIZ/NAK/
	JSR PC,EMGEN
	JSR PC,EMSOUT
	JSR PC,CROUT
	RTS PC
;------ ACK -------
EMSACK:	JSR PC,EMGST
	.ASCIZ/ACK/
	JSR PC,EMGEN
	JSR PC,EMSOUT
	JSR PC,CROUT
	RTS PC
;------ INQ -------
EMSINQ:	JSR PC,EMGST
	.ASCIZ/INQ/
	JSR PC,EMGEN
	JSR PC,EMSOUT
	JSR PC,CROUT
	RTS PC
;------ Принять EMSI_DAT ----
EMSDRC:	CLR TRIES

2$:	INC TRIES
	CMP TRIES,#6
	BHI 66$
	CMP TRIES,#1
	BEQ 3$
	JSR PC,EMSNAK

3$:	JSR PC,SETTIM
	.WORD <20.*50.>

4$:	JSR PC,RDEMS
	BCS 2$
	CMP RDDCRC,CALCRC
	BEQ 42$
	CMPB EMSBUF+5,#'D
	BEQ 2$
	BR 4$
42$:	MOV #WIN2,R5
	JSR PC,PRIEMS

	CMPB EMSBUF+5,#'H
	BNE 41$
	CMP EMSBUF+6,#"BT
	BEQ 3$

41$:	CMPB EMSBUF+5,#'D
	BNE 4$
	CMP EMSBUF+6,#"AT
	BNE 4$

	MOV #EMSBUF,R0	; Запишем в буфер, потом поймем...
	MOV #FREBUF,R1
	MOV #200,R2
44$:	.REPT 4
	MOV (R0)+,(R1)+
	.ENDR 
	SOB R2,44$

5$:	JSR PC,EMSACK
	JSR PC,EMSACK
	TST (PC)+
66$:	SEC
	RTS PC
;------ Передать EMSI_DAT -----
EMSDTR:	CLR (PC)+
TRIES:	.WORD 0

2$:	JSR PC,DATGEN
	JSR PC,EMSOUT
	JSR PC,CROUT
	INC TRIES
	CMP TRIES,#6
	BHI 8$
	JSR PC,SETTIM
	.WORD <20.*50.>

4$:	JSR PC,RDEMS
	BCS 2$
	CMP RDDCRC,CALCRC
	BNE 4$
	MOV #WIN2,R5
	JSR PC,PRIEMS

	CMPB EMSBUF+5,#'R
	BNE 41$
	CMP EMSBUF+6,#"EQ
	BEQ 4$

41$:	CMPB EMSBUF+5,#'A
	BNE 4$
	CMP EMSBUF+6,#"CK
	BNE 4$

5$:	JSR PC,RDEMS
	BCS 8$
	MOV #WIN2,R5
	JSR PC,PRIEMS
	TST (PC)+
8$:	SEC
	RTS PC
;------ Прочитать символ -------
RBYTE::	TST (PC)+
ETIME::	.WORD 0
	BEQ 1$
	CMP TIME,ETIME
	BHI 2$
1$:	MOV TBYTE,R0
	CMP R0,UBYTE
	BEQ RBYTE
	MOVB (R0)+,R0
	INC TBYTE
	BIC #4000,TBYTE
11$:	TST (PC)+
2$:	SEC
	RTS PC
;------ Распознать EMSI ----
RDEMS:	JSR PC,RBYTE
	BCS 3$
	CMPB R0,#'E
	BNE RDEMS
	MOV #TXT20+1,R1
	MOV #4,R2
1$:	JSR PC,RBYTE
	BCS 3$
	CMPB R0,(R1)+
	BNE RDEMS
	SOB R2,1$
	MOV #EMSBUF+5,R1
	MOV #3,R2
	JSR PC,RDSTR
	BCS 3$
	CMPB EMSBUF+5,#'D
	BNE 10$
	CMP EMSBUF+6,#"AT
	BNE 10$
	MOV #4,R2
	JSR PC,RDSTR
	BCS 3$
	SUB #4,R1
	JSR PC,DECHEX
	MOV R5,R2
	JSR PC,RDSTR
	BCS 3$
10$:	MOV R1,-(SP)
	MOV #4,R2
	JSR PC,RDSTR
	MOV (SP),R1
	JSR PC,DECHEX
	MOV R5,RDDCRC
	CLRB (R1)+
	MOV (SP)+,R5
	MOV #EMSBUF,R1
	SUB R1,R5
	JSR PC,CRC16
	MOV CRC,CALCRC
3$:	RTS PC
RDDCRC:	.WORD 0
CALCRC:	.WORD 0
;------ Сравнить CRC16 ----
COMCRC:	MOV #TXT23,MCRC
	CMP RDDCRC,CALCRC
	BEQ 1$
	MOV #TXT24,MCRC
	BR 2$
1$:	TST (PC)+
2$:	SEC
	RTS PC
;------ Декодировать ш. число ----
DECHEX:	CLR R5
	MOV #4,R2
4$:	MOVB (R1)+,R3
	CMP R3,#'9
	BLOS 2$
	BIC #177640,R3
	SUB #'A-10.,R3
	CMP R3,#15.
	BHI 1$
	BR 3$
2$:	SUB #60,R3
3$:	ASL R5
	ASL R5
	ASL R5
	ASL R5
	BIS R3,R5
	SOB R2,4$
	TST (PC)+
1$:	MOV #1,R5
	RTS PC
;------ Прочитать строку с модема ----
RDSTR:	JSR PC,RBYTE
	BCS 1$
	MOVB R0,(R1)+
	SOB R2,RDSTR
	CLC
1$:	RTS PC
;------ Settime ---
SETTIM::
	MOV (SP),R0
	MOV (R0)+,ETIME
	CLR TIME
	RTS R0
;------ Передать байт ----
SBYTE::	TSTB 176564
	BPL SBYTE
	TSTB xonOFF
	beq SB1
SB2:	tst (PC)+
FBUSY::	.WORD 0
	bne SB2
SB1:	MOVB R0,176566
	RTS PC
;------ Создать номер телефона -----
GETNUM:	clr	fldial
	MOV	#DATABF,R0
	MOV	#14.,R1
1$:	TSTB	(R0)+
	BNE	1$
	SOB	R1,1$
	MOV	#326,R1
2$:	MOVB	(R0)+,(R1)+
	beq	3$
	cmpb	(r0),#'&
	BNE	2$
	inc	fldial
	clrb	(r1)
3$:	RTS	PC
;------ Подставить следующий номер для многолинеек -----
NMTWO::	Mov	#databf,r0
	Mov	#14.,R1
1$:	Tstb	(r0)+
	bne	1$
	sob	r1,1$
	mov	6$,r2
	beq	7$
2$:	cmpb	(r0)+,#'&
	bne	2$
	sob	r2,2$
7$:	mov	#326,r1
3$:	movb	(r0)+,(r1)+
	beq	4$
	cmpb	(r0),#'&
	bne	3$
	inc	6$
	br	5$
4$:	clr	(pc)+
6$:	.word	1
5$:	rts	pc
;------ Сделать строчку EMSI_DAT -----
DATGEN:	JSR PC,EMGST
	.ASCIZ/DAT/
	ADD #4,R1
	MOV #TXT21,R0
1$:	MOVB (R0)+,(R1)+
	BNE 1$
	DEC R1
	MOV #DATABF,R0
	MOV #5.,R2
3$:	MOVB #'{,(R1)+
2$:	MOVB (R0)+,(R1)+
	BNE 2$
	MOVB #'},-1(R1)
	SOB R2,3$
	MOV #3,R2

	MOV #TXT35,R5	; Неизменные конфиги 
31$:	MOVB #'{,(R1)+
21$:	MOVB (R5)+,(R1)+
	BNE 21$
22$:	TSTB (R0)+
	BNE 22$
	MOVB #'},-1(R1)
	SOB R2,31$

	MOV #TXT22,R2
4$:	MOVB (R2)+,(R1)+
	BNE 4$
	DEC R1
	MOV #6.,R2
6$:	MOVB #'[,(R1)+
5$:	MOVB (R0)+,(R1)+
	BNE 5$
	MOVB #'],-1(R1)
	SOB R2,6$
	MOVB #'},(R1)+
	MOV R1,-(SP)
	SUB #<EMSBUF+12.>,R1
	MOV R1,R5
	MOV #<EMSBUF+8.>,R1
	JSR PC,HEXOUT
	MOV (SP)+,R1
	JSR PC,EMGEN
	RTS PC
;------ Напечатать действие. R5 - Адрес пар. окна ---
PRIEMS:	MOV R5,R0
	MOV #EMSBUF+5,R1
	MOV #3,R2
11$:	CMPB (R0)+,(R1)+
	BNE 1$
	SOB R2,11$
	BR  3$
1$:	MOV R5,R1
	MOV #EMSBUF+5,R0
	MOVB (R0)+,(R1)+
	MOVB (R0)+,(R1)+
	MOVB (R0)+,(R1)+
	MOV #1,10(R5)
	JSR PC,SCROLL
	MOV R5,-(SP)
	MOV #1,R0
	JSR PC,PRCHR
	MOV #EMSBUF,R1
	MOV (SP),R5
	MOV 4(R5),R2
	MOV #8.,R3
	JSR PC,STRLN
	MOV (SP),R5
	TSTB 3(R5)
	BEQ 2$
	MOV (SP),R5
	MOV 4(R5),R2
	ADD #20.,R2
	MOV MCRC,R5
	JSR PC,STRING
2$:	CLR (SP)+
	RTS PC
3$:	MOV 4(R5),R2
	ADD #9.,R2
	INC 10(R5)
	MOV 10(R5),R0
	ADD #60,R0
	MOVB R0,TXT26
	MOV #TXT25,R5
	JSR PC,STRING
	RTS PC
MCRC:	.WORD TXT23
;------ Строка длины Const
STRLN::	MOVB (R1)+,R0
	MOV R1,-(SP)
	MOV R3,-(SP)
	JSR PC,PRCHR
	MOV (SP)+,R3
	MOV (SP)+,R1
	SOB R3,STRLN
	RTS PC
;------ Сдвинуть экран -----
SCROLL:	CMP 4(R5),6(R5)
	BNE 1$
	MOV 12(R5),R0
	MOV R0,R1
	ADD #1200,R1
	MOV #<6*12>,R2
	MOV #24.,R3
3$:	MOV #5,R4
2$:	.REPT 4
	MOV (R1)+,(R0)+
	.ENDR
	SOB R4,2$
	ADD R3,R1
	ADD R3,R0
	SOB R2,3$
	MOV #12,R2
5$:	MOV #20.,R3
4$:	CLR (R0)+
	SOB R3,4$
	ADD #24.,R0
	SOB R2,5$
	RTS PC
1$:	ADD #1200,4(R5)
	RTS PC
WIN1:	.BLKW 2
SCAD1:	.WORD 0,52014+<6*1200>
	.WORD 0,52014
WIN2:	.BYTE 0,0,0,1
SCAD2:	.WORD 0,52114+<13.*1200>
	.WORD 0,52114+<7*1200>
;------ Передать на линию буфер ---
EMSOUT:	MOV #WIN1,R5
	JSR PC,PRIEMS

	MOV #'*,R0
	JSR PC,SBYTE
	JSR PC,SBYTE
	MOV #EMSBUF,R1
2$:	MOVB (R1)+,R0
	BEQ 1$
	JSR PC,SBYTE
	BR 2$
1$:	RTS PC
;------ Вывести CR ----
CROUT::	MOV #15,R0
	JMP SBYTE
;------ DUPLEX INDICATOR --------
DIND:	MOV #<52014+<7*1200>>,R0
	MOV #20.,R1
1$:	MOV #-1,(R0)+
	SOB R1,1$
	RTS PC
;------ Очистить окно -------
CLE::	MOV #52014,R0
	MOV #<14.*12>,R1
	MOV #5,R2
	MOV #<100-40.>,R3
2$:	MOV R2,R4
1$:	CLR (R0)+
	CLR (R0)+
	CLR (R0)+
	CLR (R0)+
	SOB R4,1$
	ADD R3,R0
	SOB R1,2$
	MOV #52014,SCAD1
	MOV #52114+<1200*7>,SCAD2
	RTS PC
;------ Создать EMSI-строку ---
EMGST:	MOV #EMSBUF,R1
	MOV #TXT20,R0
2$:	MOVB (R0)+,(R1)+
	BNE 2$
	DEC R1
	MOV (SP),R0
	MOVB (R0)+,(R1)+
	MOVB (R0)+,(R1)+
	MOVB (R0)+,(R1)+
	INC R0
	RTS R0
EMGEN:	MOV R1,R0
	MOV R1,R5
	MOV #EMSBUF,R1
	SUB R1,R5
	JSR PC,CRC16
	MOV R0,R1
	MOV CRC,R5
	JSR PC,HEXOUT
	CLRB (R1)+
	RTS PC
;------ Шестнадцатеричное число ---
HEXOUT:	MOV R5,R4
	SWAB R4
	JSR PC,HSO1
	MOV R5,R4
	SWAB R4
	JSR PC,HSO
BHEX:	MOV R5,R4	; младший байт 
	JSR PC,HSO1
	MOV R5,R4
	JSR PC,HSO
	RTS PC
HSO1:	ASR R4
	ASR R4
	ASR R4
	ASR R4
;	BR HSO
HSO:	BIC #177760,R4
	CMP R4,#9.
	BHI 1$
	ADD #60,R4
2$:	MOVB R4,(R1)+
	RTS PC
1$:	ADD #<'a-10.>,R4
	BR 2$
;------ Запротоколировать DAT --------
DECDAT:	MOV #TXT28,R5
	JSR PC,PRTMSG
	MOV #FREBUF,R1
31$:	MOV #EMSBUF,R0
3$:	TSTB (R1)
	BEQ 5$
	CMPB (R1),#'}
	BNE 1$
	CMPB 1(R1),#'{
	BNE 2$
4$:	MOVB (R1)+,(R0)+
	MOVB #12,(R0)+
	CLRB (R0)
	MOV #EMSBUF,R5
	JSR PC,PRTMSG
	BR 31$
1$:	CMPB (R1),#']
	BNE 2$
	CMPB 1(R1),#'[
	BEQ 4$
2$:	MOVB (R1)+,(R0)+
	BR 3$
5$:	MOVB #12,(R0)+
	CLRB (R0)
	MOV #EMSBUF,R5
	JSR PC,PRTMSG
	RTS PC
;------ Записать протокол ----
SCRUK::	.WORD 40000
SAVPRT:	Mov	#7,r2		;проверка о необходимости протоколирования.
	call	in2		;сделать протокол ATI6;
1$:	movb	(r1)+,r0
	beq	3$
	call	@tst2
	cmpb	r0,#'F
	bne	1$
	br	2$
3$:	MOV	#TXT41,R0
	MOV	#6.,R2
	JSR	PC,FFN
	BCS	4$
	MOVB	(R3),subdir
	movb	(r3),120010

4$:	mov	#"00,Lognum
5$:	cmpb	Lognum+1,#'9
	bne	6$
	incb	Lognum
	movb	#'0-1,Lognum+1
6$:	incb	Lognum+1

	MOV	#TXT42,R0
	MOV	#12.,R2
	JSR	PC,FFN
	bcc	5$
	MOV	#320,R1
	MOV	#32,(R1)+
	MOV	#40000,(R1)+
	MOV	MLOG,177716
	MOV	SCRUK,R0
	CLRB	(R0)+
	BIC	#40001,R0
	MOV	R0,(R1)+

	MOV	#320,R1
	JSR	PC,120002
	MOV	MIMG,177716
2$:	RTS PC

;------ Протоколирование строки ---
PRTMSG::MOV SCRUK,R0
	MOV MLOG,177716
2$:	TSTB	(R5)
	BEQ 1$
	MOVB (R5)+,(R0)+
	BIC #100000,R0
	BIS #040000,R0
	BR 2$
1$:	MOV R0,SCRUK
	MOV MIMG,177716
	RTS PC

;------ ТEXT ----
TXT20:	.ASCIZ/EMSI_/
TXT21:	.ASCIZ/{EMSI}/
TXT22:	.ASCIZ/{IDENT}{/
TXT23:	.ASCIZ/CRC Ok.../
TXT24:	.ASCIZ/bad CRC!/
TXT25:	.ASCII/Repeat: /
TXT26:	.BYTE 0,0
TXT27:	.ASCII/ONECT/
TXT28:	.ASCIZ<12>/Получена строка EMSI_DAT/<12>
TXT30:	.ASCIZ/?IMG-F-Нет файла внешнего протокола/
TXT32:	.BYTE 7
TXT31:	.ASCIZ/00:00:000/
TXT33:	.ASCII<177>/OUT_#/
NUMSS:	.BYTE 0
TXT34:	.ASCII<177>/DOWNLOAD/
txt40:	.ascii<177>/Upload/
txt41:	.ascii<177>/Image/
	.EVEN
TXT42:	.ASCII/Image#/
Lognum:	.ASCII/00.LOG    /
TXT35:	.ASCIZ/ImageMail for BK0011/
	.ASCIZ/1.22/
	.ASCIZ/(c) Andrey Lelikov & Mihail Korolew/
TXT36:	.ASCIZ/?IMG-F-Отсутствует подкаталог для передачи/
.EVEN
.WORD 0
.END
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              