.TITLE MX .IDENT /V5.03/ .NLIST MMG$T=1 DEBUG$ = 1 .ENABLE LC .MCALL .DRDEF,.PRINT .IIF DF DEBUG$, TIM$IT=1 KOEFF = 1 KPAR1=172342 MXDSIZE=880. CSGO = 40000 CSWRT = 20000 CSSIDE= 10000 JSW = 44 .ASECT . = 200 BR 1$ BR 2$ 1$: MOV PC,R0 ADD #,R0 .PRINT 2$: CLC RTS PC LEN$: .ASCIi <007>/?MX-I-5.25" Single Density Floppy Disk Handler./ .asciz / Un_Soft 1991. V5.03/ .EVEN .RAD50 /KUZMIN/ .DRDEF MX,376,FILST$,MXDSIZ,MX$CSR,MX$VEC .DRSET NTRK,35.,NBLOK,NUM .IIF NDF TIM$IT, TIM$IT=0 .IIF NDF MMG$T,MMG$T=0 .IIF NDF ERL$G,ERL$G=0 .IIF NDF MXT$O,MXT$O=0 .IIF NDF MX$VEC,MX$VEC=0 .IIF NDF MX$CSR,MX$CSR=177130 ;****************** SET Mx NTRK=N ******************** NBLOK: MOV #385.,MXTRK ;мин. к-во блоков SUB R3,R0 ;R0<--N, R3<--35. BLE NBLOK2 NBLOK1: ADD #11.,MXTRK SOB R0,NBLOK1 NBLOK2: MOV MXTRK,54-6-.(PC);кол.блоков->54(загол.) RTS PC MXTRK: .WORD 80. .DRBEG MX MOV (PC)+,(PC)+ .WORD 3. ;RETRY NRETR: .WORD 0 MOV MXCQE,R3 MOV (R3)+,R0 ASL R0 ;#блока*2 MOV R0,BLKN2 TSTB (R3)+ ;пропуск Q.FUNC, Q.JNUM BITB #4,@R3 BNE ERROR ;ошибка MOVB (R3)+,R0 BIC #-4,R0 ASL R0 ASL R0 MOV CSRMX,R4 BIC #14,@R4 ;MX0 BIS R0,@R4 ;MXn BIC #177663,@R4 BIT #100,@R4 ;двиг. включен ? BNE .1124 ;-да, исп. R0,R3 BIS #100,@R4 ;включить MOV #<800./KOEFF>,R1 ;задержка по вн. JSR PC,DELAY ;таймеру .1124: ASR R0 ;MX.UNIT*2 ADD PC,R0 ADD #,R0 MOV R0,TRKCR TST @R0 BPL .1150 JSR PC,INIT .1150: MOV (R3)+,USBUFF ;Q.BUFF MOV (R3)+,WCNTI ;Q.WCNT BPL READ BIT #2000,@R4 ;запрет записи BNE ERROR BIS #20000,WRFLG NEG WCNTI BR PHYTRK READ: CLR WRFLG PHYTRK: MOV (PC)+,R3 ;вычисление BLKN2: .WORD 0 ;дорожки, сектора, MOV #8.,R2 ;стороны .1222: CMP #5400,R3 BHI .1234 ADD #-5400,R3 .1234: ROL R3 DEC R2 BGT .1222 MOVB R3,R2 CLRB R3 SWAB R3 INC R3 BIC #10000,@R4 CMP #11.,R3 BGE .1274 BIS #10000,@R4 SUB #11.,R3 .1274: .1302: MOV R2,TRACK MOV R3,NSECT BR INOUT .1376: ERROR: MOV MXCQE,R3 .1320: BIS #1,@-(R3) ENDMX: MOV MXCQE,R5 cmp mxlqe,R5 BNE 1$ BIS #2,@R4 BIC #100,@R4 1$: .DRFIN MX ;.1376 MOV CNT,WCNTI .1404: DEC NRETR BLE ERROR JSR PC,INIT INOUT: MOV (PC)+,R4 CSRMX: .WORD 177130 MOV TRACK,R0 SUB @TRKCR,R0 BPL 1$ NEG R0 BIC #40,@R4 ;от центра MOV #5377,.1512 ;DEC BR 2$ 1$: BIS #40,@R4 MOV #5277,.1512 ;INC 2$: TST R0 ;число дорожек для перехода BEQ .1520 .1506: JSR PC,STEP ;должен быть готов мотор .1512: INC @TRKCR SOB R0,.1506 .1520: MOV #11520,OPER ;MOV @R5,(R0)+ BIC #20000,@R4 ;чтение JSR PC,REAWRT MOV PC,R0 ADD #,R0 CMP TRACK,(R0)+ ;проверка номера дорожки BNE .1404 MOV NSECT,R3 .1556: DEC R3 BEQ .1570 ADD #402,R0 ;смещение в буфере дорожки BR .1556 .1570: TST WRFLG BNE .1606 MOV #12023,OPER1 ;BUFTRK-->@USBUFF BR .1626 .1606: MOV #12015,OPER ;MOV (R0)+,@R5 MOV #12320,OPER1 ;BUFTRK<--@USBUFF BIS #20000,@R4 .1626: .IF NE MMG$T MOV MXCQE,R3 MOV Q$PAR(R3),PARVAL .ENDC MOV USBUFF,R3 .1632: MOV #200,R2 MOV R3,USBUFF MOV WCNTI,CNT ;запомнить на сл. сбоя BNE 1$ JMP .2136 1$: .IF NE MMG$T ;d MFPS PRIOR ;d MTPS #340 MOV @#KPAR1,-(SP) MOV PARVAL,@#KPAR1 .ENDC OPER1: MOV (R0)+,(R3)+ DEC WCNTI BEQ ERW SOB R2,OPER1 ERW: .IF NE MMG$T MOV (SP)+,@#KPAR1 ;d MTPS PRIOR .ENDC TST R2 BNE ENDRW .IF NE MMG$T ADD #4,PARVAL .ENDC JSR PC,CTRSUM ;подсчет контрольной суммы .IF NE MMG$T ADD #-400,R3 MOV R3,-(SP) MOV MXCQE,R3 MOV PARVAL,Q$PAR(R3) MOV (SP)+,R3 .ENDC TST WRFLG BEQ .1702 MOV R2,(R0)+ ;запись контр. суммы BR .1714 .IF NE MMG$T PARVAL: .WORD 0 .ENDC .1702: CMP R2,(R0)+ .1704: BEQ 1$ JMP .1376 ;несовпадение контр. суммы 1$: MOV #3.,NRETR .1714: CMP #11.,NSECT BEQ .1732 INC NSECT BR .1632 .1732: MOV R3,USBUFF TST WRFLG BEQ .1750 .1744: JSR PC,REAWRT .1750: MOV #1,NSECT BIT #10000,@R4 BEQ .1776 INC TRACK BIC #10000,@R4 BR .2000 .1776: BIS #10000,@R4 .2000: JMP INOUT ENDRW: TST WRFLG BEQ .2112 DEC R2 BEQ .2024 .2020: CLR (R0)+ ;дозапись нулей SOB R2,.2020 .2024: JSR PC,CTRSUM MOV R2,(R0)+ BIT #1,NSECT BEQ .2052 BIT #10000,@R4 ;верх BNE .2102 BR .2060 .2052: BIT #10000,@R4 BEQ .2102 .2060: CMP #11.,NSECT BEQ .1744 MOV #200,R2 INC NSECT BR .2020 .2102: JSR PC,REAWRT JMP ENDMX .2112: DEC R2 BEQ .2122 .2116: TST (R0)+ SOB R2,.2116 .2122: .IF NE MMG$T ADD #4,PARVAL .ENDC JSR PC,CTRSUM CMP R2,(R0)+ BNE .1704 JMP ENDMX .2136: TST WRFLG BEQ .2112 BR .2020 REAWRT: BIC #2,@R4 ;выбор накопителя MOV #<20./KOEFF>,R1 JSR PC,DELAY MOV PC,R0 ADD #,R0 MOV #3.,R5 3$: MOV #77777,R3 2$: BIT #1000,@R4 BNE 1$ SOB R3,2$ SOB R5,3$ TST (SP)+ BR ERJ01 1$: MOV #2617,R3 MOV R4,R5 TST (R5)+ ;подстройка MFPS PRIOR MTPS #340 BIT #20000,@R4 BEQ .2242 ;чтение MOV #36,R1 BIS #40000,@R4 ;пуск .2230: TST @R4 ;запись синхрозоны(?) BPL .2230 CLR @R5 SOB R1,.2230 .2240: BR RWTRK .2242: BIS #40000,@R4 RWTRK: mov r1,-(sp) mov #77777,r1 rw.tr: TST @R4 Bmi op.er sob r1,rw.tr mov mxcqe,r1 bis #hderr$,@-(r1) mov (sp)+,r1 br .2256 op.er: mov (sp)+,r1 OPER: MOV @R5,(R0)+ SOB R3,RWTRK .2256: BIC #40000,@R4 MTPS PRIOR MXINT == .+2 ;точка аннулирования RTS PC STEP: BIS #20,@R4 ;шаг MOV #<5./KOEFF>,R1 JSR PC,DELAY RTS PC INIT: BIT #4000,@R4 ;бит "00" BNE .2352 BIC #40,@R4 ;от центра MOV #81.,R2 ;MAX кол-во дорожек (?) .2326: JSR PC,STEP BIT #4000,@R4 BNE .2352 SOB R2,.2326 .2344: TST (SP)+ ;для JSR PC ERJ01: JMP ERROR .2352: CLR @TRKCR RTS PC CTRSUM: SUB #400,R0 MOV #200,R1 CLR R2 .2372: ADD (R0)+,R2 SOB R1,.2372 .2376: RTS PC DELAY: BIS #200,@R4 ;бит таймера .2406: TSTB @R4 BPL .2406 SOB R1,.2406 .2420: BIC #200,@R4 RTS PC PRIOR: .WORD 0 USBUFF: .WORD 0 WCNTI: .WORD 0 CNT: .WORD 0 TRACK: .WORD 0 TRKCR: .WORD 0 NSECT: .WORD 0 WRFLG: .WORD 0 TRKTAB: .WORD 100000,100000,100000,100000 BUFTR: .BLKW 2617 .LIST .DRBOT MX,BOOT1,BREAD . = MXBOOT+40 BOOT1: NOP JMP BOOT TRSIZ:: .WORD 0 BTRKCR: .WORD 100000 MXUNIT: .BYTE 100,104,110,114 . = MXBOOT+104 BREAD:: CLR @#JSW ;вход по BOOT MXn: MOV #MX$CSR,R4 BIC #-400,@R4 MOV @#B$DEVU,R3 MOVB (R3),@R4 JSR PC,BDELAY JSR PC,BINIT MOV #,@#B$READ READ1: MOV #MX$CSR,R4 ;вход втор. загрузчика ASL R0 ;R0 # блока BIC #10002,@R4 ;R1 кол. слов JSR PC,BDELAY ;R2 адр. буфера MOV R0,R5 MOV #8.,R3 .10314: CMP #5400,R5 BHI .10326 ADD #-5400,R5 .10326: ROL R5 DEC R3 BGT .10314 MOVB R5,R3 CLRB R5 SWAB R5 INC R5 CMP #11.,R5 BGE .10364 BIS #10000,@R4 SUB #11.,R5 .10364: .10370: MOV R5,R0 SUB BTRKCR,R3 BPL .10416 NEG R3 BIC #40,@R4 MOV #5367,DEINC ;DEC BR .10430 .10416: BIS #40,@R4 MOV #5267,DEINC ;INC .10430: TST R3 BEQ .10446 .10434: JSR PC,BSTEP DEINC: INC BTRKCR SOB R3,.10434 .10446: DEC R0 BEQ .10460 ADD #201,R3 BR .10446 .10460: JSR PC,BDELAY MOV #2613,R0 CLR -(SP) MOV R4,R5 TST (R5)+ BIS #40000,@R4 .10502: TST @R4 BPL .10502 TST @R5 .10510: TST @R4 BPL .10510 CMP @R5,BTRKCR BNE BIOERR TST R3 BEQ .10540 .10526: TST @R4 BPL .10526 TST @R5 DEC R0 SOB R3,.10526 .10540: MOV #200,R3 CLR @SP .10546: TST @R4 BPL .10546 DEC R0 MOV @R5,@R2 ADD (R2)+,@SP DEC R1 BEQ .10614 SOB R3,.10546 .10566: TST @R4 BPL .10566 CMP @R5,@SP BNE BIOERR TST R1 BEQ .10630 SOB R0,.10540 .10604: TST (SP)+ BIC #40000,@R4 BR .10640 .10614: TST @R4 BPL .10614 DEC R3 BEQ .10566 ADD @R5,@SP BR .10614 .10630: TST (SP)+ BIC #40000,@R4 RTS PC .10640: BIT #10000,@R4 BNE .10654 BIS #10000,@R4 BR .10460 .10654: BIC #10000,@R4 BIS #40,@R4 JSR PC,BSTEP INC BTRKCR BR .10460 BDELAY: MOV #100,R5 BIS #200,@R4 .10706: TSTB @R4 BPL .10706 SOB R5,.10706 .10714: BIC #200,@R4 RTS PC BSTEP: BIS #20,@R4 JSR PC,BDELAY RTS PC BINIT: JSR PC,BSTEP BIT #4000,@R4 BEQ BINIT CLR BTRKCR RTS PC ;. = MXBOOT+664 BOOT: CLR BTRKCR MOV #,@#B$READ MOV #B$DNAME,@#B$DEVN .10770: MOV (SP)+,@#B$DEVU MOV #10000,SP JMP @#B$BOOT .DREND MX .END