;************************************************************ ;* WARIANT DRAJWERA wIN^ESTERA sm 5508, a.sANXKOW * ;* ISPOLXZOWAN W KA^ESTWE SISTEMNOGO S 14 I@LQ 1990 G. * ;* POSLEDNQQ KORREKCIQ 26 I@LQ 1990, PRI MMG$T = 1 RABOTAET* ;************************************************************ .LIST ME .NLIST BIN .NLIST SEQ .LIST TTM .NLIST CND .MCALL .DRDEF .DRDEF DW,53,,22777,174000,300 DWDS=DW$CSR SYSPTR = 54 P1EXT = 432 .SBTTL SET OPTIONS .DRSET RETRY,662.,O.RTRY,NUM .DRSET WRITE,1,O.WRIT,NO .DRSET WCHECK,1,O.WCHK,NO O.RTRY: CMP R0,R3 BHI O.BAD MOV R0,$RETRY BNE O.GOOD BR O.BAD O.WRIT: NOP TST (PC)+ SEC ROL #0 .456=.-2 BIC #177776,.456 .466: MOVB R1,R0 CMP R0,R3 BHI O.BAD MOV R0,-(SP) ADD PC,R0 ADD #,R0 MOVB .456,@R0 JSR PC,.600 MOV (SP)+,R0 BCS O.GOOD CMP @#54,R1 BHI .534 MOV #100000,346(R1) .534: ADD #6,R1 ADD R0,R1 MOVB .456,@R1 O.GOOD: TST (PC)+ O.BAD: SEC RTS PC O.WCHK: BR .566 .WORD 0 CLR DWWCHK BR .574 .566: MOV #177777,DWWCHK .574: CLC RTS PC .600: MOV PC,R0 ADD #,R0 MOV PC,-(SP) ADD #<.630-.>,@SP EMT 342 ;.DSTAT R0,@SP BCS O.BAD MOV .634,R1 BEQ O.BAD BR O.GOOD .630: .WORD DWSTS .632: .WORD .634: .WORD 0 .636: .WORD DWDSIZE DWNAME: .RAD50 "DW " .SBTTL DRIVER ENTRY .DRBEG DW BR .1020 NOWRIT: .WORD 0 ;[NO]WRITE $RETRY: .WORD 10 .1020: .IF NE MMG$T ASR #1 BCC DWENT MOV @#SYSPTR,R5 MOV P1EXT(R5),(PC)+ $P1EXT: .WORD 0 DWENT: .ENDC MOV DWCQE,R5 MOV #DW$CSR,R4 TST .1224 BEQ .1052 MOV #10,20(R4) ;NA^. USTANOWKA MOV #177777,.1224 ;FLAG NA^.USTANOWKI .1052: MOV #1000.,R1 .1056: MOV #100000,R3 .1062: TST 20(R4) BPL .1076 ;SWOBODEN .1070: SOB R3,.1062 .1072: SOB R1,.1056 ;\MULQCIQ TAJM-AUTA(.IF B TIM$IT...) BR .1216 ;OBLOM... .1076: ASL #100000 BCC .1136 ;PARAMETRY UVE USTANOWLENY BIT #400,20(R4) BNE .1136 ;MEDLENNYJ POISK, 5 m MOV #306.,MAXCIL ;USTANOWKA PARAMETROW DLQ MOV #19584.,MAXBLK ;10 m DISKA MOV #19519.,.1250 ;dLINA PRI ZAME]ENII(?).BAD .1136: MOV $RETRY,RETRY ;INIC. S^ET^IKA POWTOROW CLR .1230 CLR .1232 ;PRIZN.= ^TENIE CLR .1234 MOV @R5,R3 ; Q$BLKN MOVB Q$UNIT(R5),R0 BIC #177770,R0 BNE .1212 ;TOLXKO DW0 - O[IBKA MOVB Q$FUNC(R5),R0 ADD #5,R0 CMP R0,#6 BLO .1256 .1212: JMP .2664 ;O[IBKA .1216: JMP .2664 DWWCHK: .WORD 0 ;FLAG WCHECK .1224: .WORD 177777 RETRY: .WORD 0 .1230: .WORD 0 ;0 ILI -1 .1232: .WORD 0 ;PRIZN.^TENIQ(+)-ZAPISI(-)-WOZWR(0)? .1234: .WORD 0 WCNT: .WORD 0 .1240: .WORD 0 ;# CIL. .1242: .WORD 0 ;# POWERHN. .1244: .WORD 0 ;# SEKTORA MAXBLK: .WORD 9792. .1250: .WORD 9727. MAXCIL: .WORD 153. .1254: .WORD 0 .1256: ASL R0 ADD PC,R0 ADD #<.1270-.>,R0 ADD @R0,PC ;PEREHOD PO KODU FUNKCII .1270: .WORD .1770-.1270 ;WOZWR.DLINU-20(DLQ TABL.ZAME]ENIQ ?) .1272: .WORD .2664-.1270 ;WKL@^.^TENIQ I WOZWRAT .WORD .2664-.1270 .1276: .WORD .1304-.1270 .1300: .WORD .1304-.1270 .1302: .WORD .1310-.1270 ;ZAPISX(?) .1304: MOV SP,(PC)+ ;(SP)=? .1306: .WORD 0 ;....? .1310: BIT #1,Q$BUFF(R5) BNE .1616 ;NE^ETNYJ ADRES BUFERA MOV #1,.1232 ;PRIZNAK = ^TENIE (?) TST Q$WCNT(R5) BMI DW$WRT BNE DW$READ JMP DWEXIT DW$WRT: BIT #20000,16(R4) BNE .1612 ;O[IBKA ZAPISI ASL #0 BCS .1366 TST NOWRIT BNE .1616 ;USTANOWLENO set dw nowrite .1366: MOV #20000,.1234 MOV #100000,.1232 ;ZAPISX NEG Q$WCNT(R5) ;ZAPISX,ISP-Q KAK E]E ODIN FLAG DW$READ: MOV R3,R1 ;q$blkn TST .1306 ;PRIZN.RABOY S UMENX[.DLINOJ BEQ .1426 CMP R3,MAXBLK BCC .1616 BR .1436 .1426: CMP R3,.1250 ;ISPOLXZOWANIE TABLICY ZAME]ENIQ ? BCC .1616 INC R1 .1436: BIC #-20,R1 ;# SEKTORA ASR R3 ASR R3 ASR R3 ASR R3 MOV R3,R2 BIC #177774,R2 ASR R3 ASR R3 BIC #177000,R3 CMP R3,MAXCIL .1472: BCC .1616 MOV R3,.1240 ;TEK. # CILINDRA MOV R2,.1242 ;TEK. # POWERHNOSTI MOV R1,.1244 ;TEK. # SEKTORA .1512: MOV .1240,12(R4) MOV .1242,14(R4) MOV .1244,6(R4) TST .1232 ;^TENIE/ZAPISX BMI .1552 MOV #40,16(R4) ;^TENIE SEKTORA BR .1576 .1552: BIC #1,.1232 MOV #60,16(R4) ;ZAPISX SEKTORA JSR R0,.2002 MOV (R2)+,@R4 MOV R5,@R4 .1576: CLR .1306 BIS #100,@#174020 ;ZAPRERITX PRERYWANIE RTS PC .1612: JMP .2664 .1616: JMP .2664 .1622: BIT #20000,16(R4) ;SSYLKA NA \TU TO^KU OTSUTSTWUET ?! BNE .1612 ;O[IBKA ZAPISI MOV #20000,.1234 CMP Q$WCNT(R5),#20 BCS .1616 MOV #20,Q$WCNT(R5) BIT #1,Q$BUFF(R5) BNE .1616 ;NE^ETN. ADR BUFERA MOV R3,R2 BIC #177770,R2 CMP R2,#4 BHIS .1616 ;# POWERHNOSTI > 3 ASR R3 ASR R3 ASR R3 CMP R3,MAXCIL BHIS .1616 MOV R3,.1240 MOV R2,.1242 .1726: MOV .1240,12(R4) ;# CILINDRA MOV .1242,14(R4) ;# POWERHN. MOV #120,16(R4) ;FORMATIROWANIE !!! .1750: JSR R0,.2002 MOV (R2)+,@R4 MOV R5,@R4 BIS #100,@#174020 RTS PC .IF EQ MMG$T .1770: MOV .1250,@Q$BUFF(R5) .IFF .1770: MOV R4,-(SP) MOV .1250,-(SP) MOV R5,R4 CALL @$PTWRD MOV (SP)+,R4 .ENDC JMP DWEXIT .2002: MOV R5,-(SP) MOV R4,-(SP) MOV (R0)+,.2126 MOV (R0)+,.2150 MOV R4,R3 ADD #20,R3 ADD #10,R4 MOV Q$BUFF(R5),R2 MOV Q$WCNT(R5),R1 BEQ .2132 MOV R1,WCNT CMP R1,#400 BLOS .2060 MOV #400,R1 .2060: TST .1232 BPL .2074 ASL #100000 BCS .2100 .2074: SUB R1,WCNT .2100: .IF NE MMG$T MOV Q$PAR(R5),PARVAL JSR R0,@$P1EXT .WORD PARVAL-. .IFF MOV R2,.1254 TST .1232 BPL .2120 ASL #100000 BCS .2126 .2120: ADD #1000,.1254 .ENDC .2126: HALT ;S@DA PI[ETSQ KOMANDA SM. .2002 .2130: SOB R1,.2126 .IF NE MMG$T PARVAL: .WORD 0 TST .1232 BPL 1$ ASL #100000 BCS 2$ 1$: ADD #<256./32.>,PARVAL 2$: .ENDC .2132: MOV @R3,R5 BMI .2154 ASR R5 BCS .2154 ASLB R5 BPL .2132 .2146: CLR R5 .2150: .WORD 0 ;S@DA PI[ETSQ KOMANDA, SM .2002 BR .2132 .2154: TSTB @R3 BPL .2162 BR .2154 .2162: MOV (SP)+,R4 MOV (SP)+,R5 RTS R0 .2170: MOV R4,R2 ADD #20,R2 MOV R4,R3 ADD #10,R3 .2204: MOV @R2,R1 ASR R1 BCS .2222 ASLB R1 BPL .2204 MOV @R3,R1 BR .2204 .2222: TSTB @R2 BPL .2230 .2226: .WORD 0 .2230: RTS PC .2232: JMP .2664 .2236: JMP DWEXIT .DRAST DW,4 .2252: BIC #100,@#174020 ; ZAPRET PRERYWANIQ .FORK DWFBLK ; 2720 .2266: MOV DWCQE,R5 MOV #DW$CSR,R4 TST 20(R4) BMI .2232 ;ZANQTO BIT .1234,16(R4) ;O[IBKA|ZAPR.DAN.|...(NE SOWSEM KORREKTNO) BNE .2232 BIT #400,16(R4) ;O[IBKA BNE .2452 TST .1230 BNE .2562 ; IF ERR$L MOV .1232,R0 BEQ .2236 BPL .2370 TST DWWCHK BEQ .2402 ASR R0 BCC .2362 JSR PC,.2170 .2356: BR .2402 .2362: INC .1232 BR .2624 .2370: BMI .2402 JSR R0,.2002 MOV @R4,(R2)+ ;\TI KOMANDY WSTAWLQ@TSQ WMESTO MOV @R4,R5 ;HALTOW .2402: MOV WCNT,6(R5) BEQ .2236 .IF NE MMG$T MOV PARVAL,Q$PAR(R5) .IFF MOV .1254,4(R5) .ENDC TST .1232 BPL .2434 ASL #100000 BCS .2436 .2434: INC @R5 .2436: MOV @R5,R3 MOV $RETRY,RETRY JMP DW$READ .2452: TST .1230 BNE .2664 BIT #3000,4(R4) BNE .2664 TSTB 20(R4) BPL .2502 JSR PC,.2170 .2502: BIT #10000,4(R4) BEQ .2562 MOV 16(R4),R3 BIT #20000,R3 BNE .2664 BIC #127777,R3 CMP #50000,R3 BNE .2664 MOV #-1,.1230 MOV #20,16(R4) BIS #100,@#174020 RTS PC .2562: DEC RETRY BEQ .2664 CLR .1230 TST .1232 BEQ .2620 BPL .2614 BIT #1,.1232 BNE .2624 .2614: JMP .1512 .2620: JMP .1726 .2624: MOV .1240,12(R4) MOV .1242,14(R4) MOV .1244,6(R4) MOV #40,16(R4) ;^TENIE, BEZ OBNULENIQ \L.O^EREDI BIS #100,@#174020 RTS PC .2664: BIS #1,@Q$CSW(R5) CLR .1306 DWEXIT: CLR .1224 .DRFIN DW DWFBLK: .BLKW 5 .SBTTL BOOTSTRAP DRIVER .DRBOT DW,BOOT1,READ . = DWBOOT+40 BOOT1: JMP @#BOOT-DWBOOT . = DWBOOT+210 READ: MOV #DW$CSR,R4 MOV #23,.3162 .3160: DEC (PC)+ .3162: .WORD 23 BEQ .3326 ;OBLOM... MOV #10,20(R4) ;INIT MOV #1750,R3 .3200: MOV #100000,R5 .3204: TST 20(R4) BPL .3220 ;GOTOW(NET ZANQTOSTI) SOB R5,.3204 SOB R3,.3200 BR .3326 ;OBLOM... .3220: MOV R0,-(SP) MOV R1,-(SP) .3224: MOV @SP,R1 CMP R1,#400 BLOS .3240 MOV #400,R1 .3240: SUB R1,@SP MOV 2(SP),R0 INC 2(SP) MOV R0,R5 INC R5 BIC #177760,R5 MOV R5,6(R4) ASR R0 ASR R0 ASR R0 ASR R0 MOV R0,R5 BIC #177774,R5 MOV R5,14(R4) ASR R0 ASR R0 BIC #177000,R0 BIT #400,20(R4) BNE 37$ ;MEDLENNYJ POISK, 5 m MOV #306.,MAXCB ;USTANOWKA PARAMETROW DLQ 10 m 37$: CMP R0,#231 MAXCB = .-2 BCS .3332 .3326: JMP @#BIOERR-DWBOOT .3332: MOV R0,12(R4) MOV #40,16(R4) MOV R4,R0 ADD #20,R0 MOV R4,R5 ADD #10,R5 .3360: TST @R0 BMI .3360 .3364: MOV #1000,R3 .3370: SOB R3,. BIT #400,16(R4) BEQ .3414 ADD R1,@SP MOV (SP)+,R1 MOV (SP)+,R0 DEC R0 BR .3160 .3414: MOV #23,.3162 .3422: TSTB @R0 BPL .3422 .3426: MOV @R5,(R2)+ .3430: SOB R1,.3422 .3432: BIT #1,@R0 BNE .3450 TSTB @R0 BPL .3432 TST @R5 BR .3432 .3450: TST @SP BNE .3224 CMP (SP)+,(SP)+ CLC RTS PC . = DWBOOT+574 BOOT: MOV #10000,SP MOV #2,R0 MOV #<4*400>,R1 MOV #1000,R2 JSR PC,READ MOV #READ-DWBOOT,@#B$READ MOV #B$DNAM,@#B$DEVN CLR @#B$DEVU JMP @#B$BOOT .DREND DW .SBTTL INSTALL CHECK .ASECT .=200 NOP 1$: MOV #DW$CSR,R0 TST 20(R0) BMI 1$ CMP #401,0(R0) BNE 2$ TST (PC)+ 2$: SEC RTS PC .END .SBTTL I/O QUEUE ELEMENT FORMAT DSECT GLOBAL=YES DS Q.LINK,1,GLOBAL=NO DS Q.CSW DS Q.BLKN DS Q.FUNC,1 BYTE DS Q.JNUM,0 BYTES DS Q.UNIT,1 BYTE DS Q.BUFF DS Q.WCNT DS Q.COMP .IF NE MMG$T DS Q.PAR DS Q.FREE,2 .ENDC QESIZE = ..TEMP QWDSIZ = QESIZE/2