.MCALL .MODULE .MODULE MY,VERSION=3,COMMENT=,AUDIT=YES ; Драйвер дисковводов для контроллера с удвоенной ;плотностью (MY); при обращении к MY0...MY3 работает как обычный, ;при обращении к MY4...MY7, эмулирует контроллер DZ Электроники-85 ;на приводах MY0...MY3 соответственно .SBTTL MACROS AND DEFINITIONS .IDENT /V 3.04/ .MCALL .DRDEF .ENABL LC .IIF NDF TIM$IT, TIM$IT=1 .IIF NDF MMG$T,MMG$T=0 .IIF NDF JSW,JSW=44 .IIF NDF KISAR0,KISAR0=172340 .DRDEF MY,375,FILST$!SPFUN$!VARSZ$,1600.,172140,170 .SBTTL INSTALLATION CHECKS .ASECT . = 200 br prompt BR ALLSET prompt: mov pc,r0 add #,r0 .mcall .print .print br allset pro: .asciz |?MY-I-My/Dz-emulater handler. Un_Soft 1991. V3.04| .even .rad50 /KUZMIN/ .SBTTL SET OPTIONS .DRSET STEP,177740,STEPS,NUM .DRSET NTRK,35.,TRACKS,NUM .DRSET RETRY,8.,NRETR,NUM .DRSET ON,177740,HEAON,NUM .DRSET OFF,177740,HEAOFF,NUM NRETR: CMP R0,R3 BHI ERSET MOV R0,IRET BNE .+2 TST (PC)+ ERSET: SEC RTS PC CONST: .WORD 1 ;время перекл. дорожек .WORD 405 ;время опускания головки .WORD 1005 ;время подъема головки HEAON: BIC R3,R0 BIS R0,CONST+2 BR ALLSET HEAOFF: BIC R3,R0 BIS R0,CONST+4 BR ALLSET STEPS: BIC R3,R0 MOV R0,CONST ALLSET: MOV PC,R1 ADD #,R1 MOV #3,R2 3$: MOV #21,@#MY$CSR 1$: TSTB @#MY$CSR BPL 1$ MOV (R1)+,@# 2$: BIT #40,@#MY$CSR BEQ 2$ SOB R2,3$ RTS PC TRACKS: MOV #700.,NEWSIZ SUB R3,R0 BLT ERSET 1$: ADD #20.,NEWSIZ SOB R0,1$ BITB #4,R1 ;R1-->Unit...? BNE ERSET MOV R1,R0 ASL R1 ADD PC,R1 ADD #,R1 MOV NEWSIZ,@R1 RTS PC NEWSIZ: .WORD 1600. .SBTTL DRIVER ENTRY .DRBEG MY MOV (PC)+,(PC)+ IRET: .WORD 8. RETRY: .WORD CLR DZ$FLG ;MY MOV MYCQE,R3 MOV (R3)+,UBLKN ;Q.BLKN MOVB (R3)+,R0 ;Q.FUNC MOVB (R3)+,R1 ;Q.JNUM,JUNIT, R3-->Q.BUFF BITB #4,R1 BEQ 33$ INC DZ$FLG BICB #4,R1 33$: CMPB R0,#373 BNE DWRIT ASL R1 ;Size of ADD PC,R1 ADD #,R1 MOV (R1),-(SP) TST DZ$FLG BEQ 34$ ASR @SP 34$: .IF NE MMG$T MOV MYCQE,R4 JSR PC,@$PTWRD .IFF MOV (SP)+,@(R3)+ .ENDC JMP FINISH DZ$FLG: .WORD 0 DWRIT: MOVB R1,UNITMY BICB #370,UNITMY .IF NE MMG$T MOV MYCQE,R5 cmp (R5)+,(R5)+ JSR PC,@$MPPTR MOV (SP)+,UBUFF MOV (SP)+,R3 BIT #1700,R3 BEQ 13$ JMP FATE 13$: ash #-4,r3 MOVB R3,UNITMY+1 ;расширение адреса MOV (R5),UWCNT .IFF MOV (R3)+,UBUFF MOV (R3)+,UWCNT .ENDC BPL 1$ MOV #103,CODK NEG UWCNT BR 2$ 1$: MOV #101,CODK 2$: MOV (PC)+,R3 ;вычисление #дорожки и сектора UBLKN: .WORD 0 TST DZ$FLG BEQ SETMY ;установлено NoDZ CLR R2 DIV #10.,R2 MOV R2,R0 CLR R2 DIV #5,R2 MOV R2,R1 ADD R0,R3 CLR R2 DIV #5,R2 ASL R3 INC R3 ADD R1,R3 INC R0 CMP #120,R0 BGT 8$ SUB #120,R0 8$: MOVB R0,NTRCK MOVB R3,NSEC CMP #400,UWCNT ;можно читать только BGE 9$ ;один блок за раз MOV UWCNT,DZWCNT MOV #400,UWCNT SUB #400,DZWCNT BR 10$ 9$: CLR DZWCNT 10$: BR SNSEC SETMY: MOV #8.,R2 3$: CMP #5000,R3 BHI 4$ ADD #-5000,R3 4$: ROL R3 DEC R2 BGT 3$ MOVB R3,R2 CLRB R3 SWAB R3 INC R3 CMP #10.,R3 BGE 5$ BISB #4,UNITMY SUB #10.,R3 BR 6$ 5$: BICB #4,UNITMY 6$: MOVB R2,NTRCK SNSEC: MOVB R3,NSEC MOV PC,R0 ADD #,R0 MOV (PC)+,R4 CSRMY: .WORD 1$: BIT #40,(R4) ;DONE BEQ 1$ MORE: MOV CODK,(R4) ;IE ! RD/WR 1$: TSTB (R4) ;TR=1 BPL 1$ MOV R0,@# ;#UNITMY, таблица параметров RTS PC .SBTTL INTERRUPT ENTRY POINT .DRAST MY,5 .FORK FKBLK MOV CSRMY,R4 BIC #100,@R4 ;IE TST @R4 ;будет вставка BPL FINISH ;TR MOV PC,R0 ADD #,R0 DEC RETRY BNE MORE FATE: MOV MYCQE,R4 BIS #1,@-(R4) FINISH: TSTB DZ$FLG BEQ 1$ TST DZWCNT BLE 1$ MOV DZWCNT,UWCNT ADD #1000,UBUFF INC UBLKN JMP 1$: .DRFIN MY ERR: CLR FKBLK+2 BIC #100,@CSRMY BR FINISH DZWCNT: .WORD 0 ;.1600 .WORD 0 CODK: .WORD 0 FKBLK: .BLKW 4 TABLE: .WORD 1600. ;размеры носителей UNIT 0 - 3 .WORD 1600. .WORD 1600. .WORD 1600. UNITMY: .WORD 0 ;таблица параметров UBUFF: .WORD 0 NSEC: .BYTE 0 NTRCK: .BYTE 0 UWCNT: .WORD 0 .SBTTL BOOTSTRAP DRIVER .DRBOT MY,BOOT0,BREAD,CONTROL=QBUS .=MYBOOT+40 BOOT0: JMP PBOOT ;вход из нач. загрузчика .=MYBOOT+210 ;прогр. чтения загрузчика BREAD: CLR @#JSW ;вход по BOOT DEV: MOV #MY$CSR,R4 1$: BIT #40,@R4 BEQ 1$ MOVB @#B$DEVU,BUNIT BICB #374,BUNIT ;профилактика MOV #,@#B$READ ;вход из вторичного загр. BRE1: MOV #MY$CSR,R4 MOV #10,R3 .1716: CMP #5000,R0 BHI .1730 ADD #-5000,R0 .1730: ROL R0 DEC R3 BGT .1716 MOVB R0,R3 CLRB R0 SWAB R0 INC R0 CMP #12,R0 BGE .1770 BISB #4,BUNIT SUB #10.,R0 BR .1776 .1770: BICB #4,BUNIT .1776: MOVB R3,BTRACK MOVB R0,BSECT MOV R1,BWCNT MOV R2,BUADR MOV #8.,R0 ;RETRY 2$: BIT #40,@R4 BEQ 2$ .2030: MOV #1,@R4 3$: TSTB @R4 BPL 3$ MOV #532,@# 4$: BIT #40,@R4 BEQ 4$ TST @R4 BPL .2064 SOB R0,.2030 .2062: BR BIOERR .2064: RTS PC PBOOT: MOV #10000,SP ;прогр. загрузчик MOV #MY$CSR,R4 1$: BIT #40,@R4 BEQ 1$ MOV @#,R5 SWAB R5 BIC #-4,R5 MOV R5,BUNIT MOV #1000,R2 MOV #2,R0 MOV #2000,R1 JSR PC,BRE1 MOV R5,R0 MOV R5,@#B$DEVU MOV #250,@#B$READ MOV #B$DNAM,@#B$DEVN JMP @#B$BOOT BUNIT: .WORD ;таблица параметров BUADR: .WORD ;нач.адрес,сектор,дорожка,счетчик BSECT: .BYTE BTRACK: .BYTE BWCNT: .WORD .DREND MY .END