	.TITLE	TRK
;	.include	/fmz.mlb/

;	dbg = 1

	rap = 177010
	rdp = 177014
	
.Macro	REL	Command	arg1,arg2	?l

.if	b	<arg2>
$'l	==	.
	COMMAND	ARG1
.iff
$'l	==	.+2
	COMMAND	ARG1,ARG2
.endc
	.save
	.psect	reltab
	.word	$'l
	.restore
.ENDM
.if	df	dbg
.MACRO	.PRI	LABEL
	EMT	56
REL	.WORD	T'LABEL
.ENDM
.MACRO	.EPRI	LABEL
	.PRI	LABEL
.ENDM
.endc
.macro	push	const
	tstb	(r4)
	bpl	.-2
	mov	r1,(r5)
.endm
.macro	break	cod
.iif	df	dbg	.EPRI	E'cod
	jsr	r2,exit
	.word	cod
.endm

CSR	=	23204

STEPTM	=	23260
HEADTM	=	23264
SECTRS	=	23270
REGALL	=	23274

MOTDLY	=	23216
TRKCOR	=	23226
NTRACK	=	23254

TDEV	=	135406
TSS	=	135412
TSPERT	=	135422
TGAP	=	135426

SAVERG	=	134316
RESTRG	=	134356

GETPT	=	176376
PUTPT	=	176422
TIME	=	175400

STEP	=	132276
MARKER	=	134132
TIMER	=	134210
CTIMER	=	134242
WCRC	=	134256
RCRC	=	134300

	.psect	pp$prg
LO$BEG::
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.radix 10
SUBSEC::
	.BYTE	1,6,2,7,3,8,4,9,5,10
.radix 8

CODERR::.BYTE	-1
DRIVE::	.BYTE	-1
TRACK::	.BYTE	0.
SEC::	.BYTE	2
buff::	.word	buf$rd/2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	; отсюда начнется буфер в ОЗУ ЦП

DISK::
.iif	df	dbg	.PRI	0
	MOVB	#-1,CODERR
	mov	@#csr,-(sp)
	CALL  @#GETPT	  		; @131204
	JSR   R5,@#TIMER		; @131210
	.WORD	10                     	; @131214
REL	.WORD	LAB1                   	; @131216
	.WORD	107                    	; @131220

2$:	TSTB	CODERR
	BMI	2$
	mov	(sp)+,@#csr
	RETURN

LAB1:	CALL  @#CTIMER         		; @131224
	clr	@#177710
	TST	@#177714
	CALL  @#SAVERG			; @131234
	BIC   #175754,@#CSR    		; @131240

1$:	TSTB  DRIVE            		; Верх/низ
	BPL   2$               		; @131276
	BIS   #40,@#CSR        		; @131300
	MOVB  #1,ID           		; @131306
	BR    3$               		; @131314

2$:	BIC   #40,@#CSR        		; @131316
	CLRB  ID              		; @131324
3$:	BICB  #374,DRIVE       		; @131330
	MOVB  TRACK,ID+1      		; @131336
	CLR   R1               		; @131344
	MOVB  DRIVE,R1         		; @131346
	MOVB  STEPTM(R1),STPDLY		; @131352
	MOVB  HEADTM(R1),LOADLY		; @131360
REGIM = :.+4
	MOVB  REGALL(R1),#0
MAXSCT= :.+4
	MOVB  SECTRS(R1),#0
	TSTB  SEC           		; @131402
	BMI   E11              		; @131406
	CMPB  SEC,MAXSCT    		; @131410
	BHI   E11              		; @131416
	CMPB  #5,MAXSCT        		; @131420
	BEQ   4$               		; @131426
	MOV   #2,CODSEC        		; @131430
	BR    5$               		; @131436

4$:	MOV   #3,CODSEC        		; @131440
codsec = :.+2
5$:	MOV   #0,R0        		; @131446
GAP    = :.+4
	MOVB  TGAP(R0),#0
	ASL   R0               		; @131460
SECSIZ = :.+4
	MOV   TSS(R0),#0
	BR	.OK1

E11:
	break	11	
.OK1:	MOVB  DRIVE,R1         		; @131542
.TRACK = :.+2
	MOV   R1,#0
	ADD   #NTRACK,.TRACK   		; @131552
	JSR   R5,@#TIMER		; @131560
	.WORD	101                    	; @131564
REL	.WORD	LAB2                   	; @131566
	.WORD	107                    	; @131570
	BIT   #2000,@#CSR      		; @131572
	BNE   1$               		; @131600
	BIS   #20,@#CSR        		; @131602
	MOV   @#MOTDLY,DLY       	; @131610
	BR    ..OK1            		; @131616
1$:	MOVB  @#CSR,R0         		; @131620
	BICB  #374,R0          		; @131624
	CMPB  TDEV(R1),R0      		; @131630
	BNE   2$               		; @131634
	CALL  @#RESTRG	 		; @131636
	BR    .LAB2            		; @131642
loadly =:.+2
2$:	MOV   #0,DLY       		; @131644
..OK1:	BIC   #3,@#CSR         		; @131652
	BISB  TDEV(R1),@#CSR   		; @131660
	BIS   #2000,@#CSR      		; @131666
	MOV   @#CSR,@#177130   		; @131674
	CALL  @#RESTRG			; @131702
	RTI                    		; @131706

LAB2:	CALL  @#CTIMER         		; @131710
	TST	@#177714
	DEC   DLY              		; @131714
	BNE	rti$

.LAB2:	JSR   R5,@#TIMER		; @131726
	.WORD	101                    	; @131732
REL	.WORD	LAB3                   	; @131734
	.WORD	107                    	; @131736
	TSTB  @.TRACK          		; @131740
	BPL   OK2              		; @131744
	MOVB  #200,@.TRACK     		; @131746
	BIC   #100,@#CSR       		; @131754
	MOV   @#CSR,@#177130   		; @131762
	BIS   #200,@#CSR       		; @131770
INT1    =     .
	BIT   #1,@#177130      		; @131776
	BEQ   3$               		; @132004
	BIC   #200,@#CSR       		; @132006
	CLRB  @.TRACK          		; @132014
	BR    OK2              		; @132020

3$:	DECB  @.TRACK          		; @132022
	BNE   .4$             		; @132026
	BIC   #200,@#CSR       		; @132030
	MOVB  #377,@.TRACK  		; @132036
	break	7
.4$:	MOV   @#CSR,@#177130  		; @132056
	MOV   STPDLY,DLY       		; @132064
	RTI                    		; @132072

LAB3:	CALL  @#CTIMER         		; @132074
	TST	@#177714
	DEC   DLY              		; @132100
	BNE   rti$
	BR    INT1             		; @132106


LAB5:	CALL  @#CTIMER         		; @132322
	TST	@#177714
	DEC	(pc)+
dly:	.word	0
	BNE	rti$
	DECB  cx
	BNE   OK8              		; @132340

OK2:	CMPB  @.TRACK,TRACK    		; @132112
	BEQ   OK3              		; @132120
	BHI   OK4              		; @132122
	INCB  @.TRACK          		; @132124
	BMI   E10              		; @132130
	BIT   #100,@#CSR       		; @132132
	BNE   OK7              		; @132140
	BIS   #100,@#CSR       		; @132142
	BR    OK6              		; @132150
E10:
	break	10
OK4:	DECB  @.TRACK          		; @132164
	BIT   #1,@#177130      		; @132170
	BEQ   OK5              		; @132176
	CLRB  @.TRACK          		; @132200
	BR    OK2              		; @132204

OK5:	BIT   #100,@#CSR       		; @132206
	BEQ   OK7              		; @132214
	BIC   #100,@#CSR       		; @132216
OK6:	MOV   @#CSR,@#177130   		; @132224
REL	MOV   #LAB4,@#304      		; @132232
	RTI                    		; @132240

LAB4:	CALL  @#CTIMER         		; @132242
OK7:	MOVB  REGIM,CX       		; @132246
stpdly =:.+2
OK8:	MOV   #0,DLY       		; @132254
REL	MOV   #LAB5,@#304      		; @132262
	CALL  @#STEP           		; @132270
rti$:	RTI                    		; @132274

OK3:	BIC   #14,@#CSR        		; @132346
	MOV   @#TRKCOR,CX      		; @132354
	CMPB  #1,REGIM         		; @132362
	BEQ   1$               		; @132370
	ASRB  CX             		; @132372
	ASRB  CX+1           		; @132376
1$:	CMPB  CX,@.TRACK     		; @132402
	BHI   3$               		; @132410
	CMPB  CX+1,@.TRACK   		; @132412
	BHI   2$               		; @132420
	BIS   #4,@#CSR         		; @132422
	BR    3$               		; @132430

2$:	BIS   #10,@#CSR        		; @132432
3$:	MOV   @#CSR,@#177130   		; @132440
REL	MOV   #LAB6,@#304      		; @132446
	RTI                    		; @132454

LAB6:	CALL  @#CTIMER         		; @132456
	CLRB  @#177710         		; @132462
	CALL  @#SAVERG			; @132466

;	MOV	#177130,R4       		; @132472
;	MOV	#177132,R5
;	BIT	#4,(R4)          		; @132512
	MOV	#177130,R4
	MOV	r4,R5
	BIT	#4,(R5)+
	BEQ   FORMAT               		; @132516
	break	6

FORMAT:	
	MOV   @#CSR,R3			; @134474
	SWAB	(pc)+
id:	.blkw	1
	MOVB  SEC,R2        		; @134514
	BIC   #177774,R2       		; @134520
	BNE   .1$              		; @134524
	break	13
.1$:	MOVB  TSPERT(R2),CX  		; @134540
	MOVB  TGAP(R2),GAP     		; @134546
	asl	r2
	MOV	TSS(R2),tss$
	MOV	#1750,R0         		; @134570
;rel	mov	#mwait,r1
	mov	buff,@#rap
2$:	TST   (R4)  
	BPL   ..4$  
	SOB   R0,2$ 
.3$:	TST   (R5)             		; @134602
	break	14
..4$:
	mov	#47116,r1
	MOV	r1,(R5)      		; @134622
	MOV   #6200,R0         		; @134616
rel	mov   #subsec,r2
 
5$:
	TST   (R4)             		; @134626
	BMI   7$               		; @!34630

	push
	SOB   R0,5$            		; @134642
	BR    .3$              		; @134644

;7$:	MOV   #20,R0		; зона  1
;7$:	MOV   #20.,R0		; зона  1
7$:	MOV   #32.,R0		; зона  1
;7$:	MOV   #50.,R0		; зона  1
	TST	@#177714
	TST	@#177714
	clr	@#177710
	TST	@#177714
;	mtps	#340
..22$:
	TST   (R5)             		; @135206
	MOV   r1,(R5)      		; @134652
8$:
	push
	SOB   R0,8$            		; @134666

;	MOV   #6,R0		; зона синхр. сектора
	MOV   #8.,R0		; зона синхр. сектора
	clr	r1
;	.rept	7.
;	push
;	.endr
9$:	push
	SOB   R0,9$            		; @134704

	mov	#120641,r1		; адресный маркер
	mov	r3,r0
	push
	bis	#1000,r0
	MOV   R0,(R4)          		; @134722
	mov	#177241,r1
11$:
	push

	MOV   ID,r1		; дорожка + сторона
	push
	MOV   R3,(R4)          		; @134750

	movb	(r2)+,r1	; Номер сектора
	bis	#1000,r1		; Nсектора & длина
13$:
	push
	mov	#47116,r1
;	MOV   #13,R0
	MOV   #11,R0
14$:	BIT   #40000,(R4)      		;***************
	BEQ   14$              		; @134770
	MOV   r1,(R5)      		; @134772

15$:
	push
	SOB   R0,15$           		; @135006
	clr	r1
;	MOV   #6,R0            		; @135010
	MOV   #8.,R0
16$:				; зона сынхронизации данных
	push
	SOB   R0,16$           		; @135024

;	.rept	7.
;	push
;	.endr

	mov	r2,-(sp)
	mov	#rdp,r2
	mov	#120641,r1
	mov	r3,r0
	bis	#1000,r0

	push
	MOV   R0,(R4)
	mov	#175641,r1
	push
tss$ =:.+2
	MOV   #-1,R0
	mov	(r2),r1
	push		; ?????????????????
	DEC   R0               		; @135074
	MOV   R3,(R4)          		; @135072

20$:	
	inc	@#rap
	mov	(r2),r1
	push
	SOB   R0,20$           		; @135106
	inc	@#rap
	mov	(sp)+,r2

	MOVB  GAP,R0           		; @135112
	mov	#47116,r1
21$:	BIT   #40000,(R4)      		; @135116
	BEQ   21$              		; @135122

	DECB  (pc)+             		; @135124
cx:	.word	0
	BNE   ..22$              		; @135130
;	beq	22$
;	jmp	..22$

22$:	MOV   #1750,R0         		; @135132
23$:	TST   (R4)             		; @135136
	BMI   OK13             	; @135140
24$:
	push
	SOB   R0,23$           		; @135152

	TST   (R5)             		; @135154
.iif	df	dbg	.PRI	.E14
	break	14
OK13:
	MOV   #6.,R0
1$:
	push
	SOB   R0,1$            		; @135204
	TST   (R5)             		; @135206
	TST   (R5)             		; @135206

OKEXIT:	CLRB  CODERR           		; @134416
	BR	.OKEXIT
EXIT:
	movb	(r2),coderr
	mov	(sp)+,r2
.iif	df	dbg	.PRI	EXIT
.OKEXIT:
	JSR   R5,@#TIME			; @134426
	.WORD	372                    	; @134432
REL	.WORD	LAB9                   	; @134434
	CALL  @#RESTRG			; @134436
	CLR   @#177710         		; @134442
	CALL  @#PUTPT            	; @134446
	CLR	@#rap
	movb	coderr,@#rdp	; в 0 ячейку ОЗУ ЦП 
	RTI                    		; @134452

LAB9:	BIC   #2037,@#CSR      		; @134454
	MOV   @#CSR,@#177130   		; @134462
	RETURN                 		; @134470

.if	df	dbg
TE11:	.ASCIZ	<20.>"E11 "
TE7:	.ASCIZ	<20.>"E7  "
TE10:	.ASCIZ	<20.>"E10 "
TE6:	.ASCIZ	<20.>"E6  "
TE100:	.ASCIZ	<20.>"E100"
TE101:	.ASCIZ	<20.>"E101"
TE102:	.ASCIZ	<20.>"E102"
TE2:	.ASCIZ	<20.>"E2  "
TE1:	.ASCIZ	<20.>"E1  "
TE4:	.ASCIZ	<20.>"E4  "

TE13:	.ASCIZ	<20.>"E13 "
TE14:	.ASCIZ	<20.>"E14 "
T.E14:	.ASCIZ	<20.>".E14"

TEXIT:	.ASCIZ	<30.>"EXIT"

T0:	.ASCIZ	<0>"                                        "
.endc
	.EVEN

LO$END::


buf$wr	== disk + 200.
buf$rd	== buf$wr + <10. * 1000>

memcpu	== buf$rd + <12. * 1000>
st$are	== memcpu
	.END

                                                                                                                                                                                                                                                                                                                                 