|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 52736 (0xce00)
Notes: pts_type(SC)
Names: »DRFD02.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/DRFD02.SC«
IDENT DRFD02 REL 11.0 81-02-27 870105041100 =4, REL 11.0 81-02-18 =4, CRN UPDATED FOR SEQ READ IF ERROR =3, REL 11.0 81-01-27 =3, DATA SET NBR IN ECBCW1 =2, REL 11.0 81-01-26 =2, NOT OP. IF WRONG CH. UNIT =1, PRR 11.0 80-11-19 ,ATTACH BIT CLEARED BY RECOVERY AND =1, NOT IBM NOT WORKING * ********************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DRFD02 = DRIVER FOR FLEXIBLE DISK * * * * * * ********************************************* * * * THIS DISK DRIVER HANDLES UP TO FOUR DAISY * CHAINED FLEXIBLE DISK DRIVES PTS 6879 OR PTS 6791 * CONNECTED TO CPU VIA CHANNEL UNIT F1MZ/B ON * MULTIPLEX CHANNEL * * EJECT DRFD02 * * ORDERS: * * /00 TEST STATUS * /01 PHYSICAL READ * /02 SEQUENTIAL READ -IBM DISC ONLY- * /05 BASIC WRITE * /06 SEQUENTIAL WRITE -IBM DISC ONLY- * /11 PHYSICAL READ * /15 PHYSICAL WRITE * /1F FORMAT VOLUME * /24 WRITE DELETED DATA * /26 LOCK * /31 REWIND -IBM DISC ONLY- * /37 LOAD * /38 UNLOAD * * ENTRY PARAMETERS: * * A5 STACK BASE * A6 DWT-ADDRESS * A7 ORDER * A8 ECB-ADDRESS EJECT DRFD02 * *********** * * * ENTRIES * * * *********** * ENTRY FDADR ACTIVATION ADDRESS ENTRY IHFD INTERRUPT HANDLER ENTRY FDON RECOVERY ROUTINE ENTRY DWFD01 DWT-ADDRESS EJECT DRFD02 * ************* * * * EXTERNALS * * * ************* * EXTRN INXDWT INDEXED DISPLACEMENT IN DWT EXTRN TDISP DISPATCHER EXTRN TENDIO ENDIO EXTRN DISIOE REQUEST ERROR EXTRN DISEND PERFORM TENDIO AND TDISP EXTRN VOLCLR CLEAR VOLUME NAME EXTRN VOLNAM VOLUME NAME ADDRESS EXTRN VOLGET VOLUME NAME TO DWT AND SET NVL EXTRN NVLCHK CHECK FOR NEW VOLUME LOADED EXTRN DWTST STATUS EXTRN DWTECB ECB ADDRESS EXTRN DWTOR DWT INDEX AND ORDER EXTRN DWTORD ORDER/INDEX SAVE AREA EXTRN DWTSB2 STACK BASE 2 IN DWT EXTRN SAVE8 SAVE A1-A8 ON A15 STACK EXTRN SETIMP TIMER EXTRN PFPOST PWF POST PROC. FLAG EXTRN TASCII EBCDIC TO ASCII TAB EXTRN TEBCDIC ASCII TO EBCDIC TAB EXTRN ECBBA ECB BUFFER ADDRESS EXTRN ECBRL ECB REQUESTED LENGTH EXTRN ECBEL ECB EFFECTIVE LENGTH EXTRN ECBCW1 ECB CONTROL WORD 1 EXTRN ECBCW2 ECB CONTROL WORD 2 EJECT DRFD02 * ************************ * * * CONDITIONAL ASSEMBLY * * * ************************ * * * A PROGRAM VERSION INCLUDING TOSS DISC FORMAT * IS OBTAINED BY SETTING TOSS EQU 1. * X:A EQU 1 TOSS EQU X:A * * A PROGRAM VERSION INCLUDING IBM DISC FORMAT * IS OBTAINED BY SETTING IBM EQU 1. * X:B EQU 0 IBM EQU X:B * * A PROGRAM VERSION LEAVING OUT THE CODE CONVERSION * ASCII-EBCDIC IS OBTAINED BY SETTING ASCEBC EQU 0 * X:C EQU 1 ASCEBC EQU X:C * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 0 * EJECT DRFD02 * * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 1 * * * ANTI ASCEBC CONDITIONAL ASSEMBLY * IFT ASCEBC=1 EBCASC EQU 0 XIF IFT ASCEBC=0 EBCASC EQU 1 XIF * EJECT DRFD02 * ************* * * * CONSTANTS * * * ************* * DEVIND EQU 10 DEVICE INDEX CUADR EQU 09 CONTROL UNIT ADDRESS MUXADR EQU CUADR+CUADR MUX-ADDRESS BOE EQU 28 BEGIN OF EXTENT POSITION EOE EQU 34 END OF EXTENT POSITION EOD EQU 74 END OF DATA POSITION TIME EQU 20 DELAY - POWER ON * * * ORDERS * OR:TES EQU 0 TEST STATUS OR:BAR EQU /01 BASIC READ OR:SER EQU /02 SEQUENTIAL READ OR:BAW EQU /05 BASIC WRITE OR:SEW EQU /06 SEQUENTIAL WRITE OR:PHR EQU /11 PHYSICAL READ OR:PHW EQU /15 PHYSICAL WRITE OR:FOV EQU /1F FORMAT VOLUME OR:DDW EQU /24 WRITE DELETED DATA OR:LCK EQU /26 LOCK OR:REW EQU /31 REWIND OR:LOD EQU /37 LOAD OR:ULD EQU /38 UNLOAD * EJECT DRFD02 * * * RETURN CODES * * RC:RET EQU /100 RETRIES PERFORMED RC:NOD EQU /804 NO DATA RC:NOP EQU 1 NOT OPERABLE RC:ILE EQU /8008 ILLEGAL LENGTH RC:REQ EQU /8000 REQUEST ERROR RC:IBM EQU /400 IBM DISC RC:EOD EQU /1000 END OF DATA RC:EOE EQU /2000 END OF EXTENT RC:WRP EQU /240 WRITE PROTECTED RC:FOR EQU /800 FORMAT RC:IDS EQU /10 ILLEGAL DATA SET LABEL MS:128 EQU 2002 MAX SECTOR NUMBER FORMAT (128-1) MS:256 EQU 4004 MAX SECTOR NUMBER FORMAT (256-2D) IN:WE1 EQU /8080 1ST WER INSTRUCTION IN:LCK EQU /4 LOCK BIT INDICATOR IN:ULC EQU /FB UNLOCK INDICATOR IN:IBM EQU /1 IBM INDICATOR IN:TOS EQU /FE TOSS INDICATOR EBC:VO EQU /E5D6 EBCDIC FOR 'VO' EBC:L1 EQU /D3F1 EBCDIC FOR 'L1' EJECT DRFD02 * ********** * * * TABLES * * * ********** * DATA 0 DATA DEVIND DEVICE INDEX FDADR DATA FDAD ACTIVATION ADDRESS DATA 0 ABORT ROUTINE ADDRESS * EJECT DRFD02 * ********** * TESTST * ********** * * TEST STATUS ORDER * * TESTST EQU * CF A15,NVLCHK ORS A1,DWTRC,A6 NVL INDICATOR CM DWTSEC,A6 READ SECTOR 0 CF A5,REAPRB PREPARE FOR READ TO BUFFER CF A5,CIOI00 READ CF A5,WRIPRE PREPARE CIO WRITE TO BUFFER CF A5,CIOI00 ANKL A1,/200 ORS A1,DWTRC,A6 WRITE PROTECTED LDK A1,/80 INDICATE TEST STATUS SC A1,DWT:FC,A6 CF A5,VO:NAM GET VOLUME NAME AND STATUS ORS A1,DWTRC,A6 FORMAT TO RC ANK A1,/7 RF(NZ) TEST50 ERROR CF A15,VOLNAM VOLUME NAME TO BUFFER IF REQUESTED LDK A1,0 RESET RETURN CODE TEST50 EQU * ABL END:IO END REQUEST * EJECT DRFD02 * ************** * * * ACTIVATION * * * ************** * FDAD EQU * ACTIVATION ENTRY CM DWTRC,A6 CLEAR RC ACCUMELATOR CF A5,GETPAR GET DEVICE DEPENDENT PARAMETERS IFT MMUPAG=1 MLR 2,A8 BUFFER ADDRESS SLC A1,4 ANK A1,/3 SRL A2,1 WORD MODE MS 2,DWTBA,A6 18 BIT BUFFER ADDRESS XIF IFT MMUPAG=0 LD A1,ECBBA,A8 BUFFER ADDRESS ST A1,DWTBA,A6 XIF LD A2,DWTOR,A6 SAVE INDEX AND ORDER ST A2,DWTORD,A6 LDKL A1,IN:WE1-/80 1ST WER INSTRUCTION * EJECT DRFD02 * * LDR A3,A7 ORDER RB(Z) TESTST TEST STATUS IFT TOSS=1 IFT IBM=0 SUK A3,OR:BAR-OR:TES RF(Z) READ BASIC READ SUK A3,OR:BAW-OR:BAR RF(Z) WRITE BASIC WRITE SUK A3,OR:PHR-OR:BAW RF(Z) READ PHYSICAL READ SUK A3,OR:PHW-OR:PHR RF(Z) WRITE PHYSICAL WRITE SUK A3,OR:FOV-OR:PHW ABL(Z) FORMAT FORMAT VOLUME SUK A3,OR:DDW-OR:FOV RF(Z) DDWRIT WRITE DELETED DATA SUK A3,OR:LCK-OR:DDW ABL(Z) LOCKDO LOCK SUK A3,OR:LOD-OR:LCK ABL(Z) LOAD LOAD SUK A3,OR:ULD-OR:LOD ABL(Z) UNLOAD UNLOCK XIF * IFT IBM=1 SUK A3,OR:BAR-OR:TES RF(Z) READ BASIC READ SUK A3,OR:SER-OR:BAR ABL(Z) SQREAD SEQUENTIAL READ SUK A3,OR:BAW-OR:SER RF(Z) WRITE BASIC WRITE SUK A3,OR:SEW-OR:BAW ABL(Z) SQWRIT SEQUENTIAL WRITE SUK A3,OR:PHR-OR:SEW RF(Z) READ PHYSICAL READ SUK A3,OR:PHW-OR:PHR RF(Z) WRITE PHYSICAL WRITE SUK A3,OR:FOV-OR:PHW ABL(Z) FORMAT FORMAT VOLUME SUK A3,OR:DDW-OR:FOV RF(Z) DDWRIT WRITE DELETED DATA SUK A3,OR:LCK-OR:DDW ABL(Z) LOCKDO LOCKDO SUK A3,OR:REW-OR:LCK ABL(Z) REWIND REWIND SUK A3,OR:LOD-OR:REW ABL(Z) LOAD LOAD SUK A3,OR:ULD-OR:LOD ABL(Z) UNLOAD UNLOAD XIF * EJECT DRFD02 * * REQERR EQU * ABL DISIOE REQUEST ERROR ER:ILE EQU * LDKL A1,RC:ILE ABL DISEND * EJECT DRFD02 * * ********** * DDWRIT * * WRITE * * READ * ********** * * WRITE DELETED DATA , WRITE AND READ * * DDWRIT EQU * LDKL A3,/800 CIO REGISTER WRITE EQU * ADK A3,/1 CIO REGISTER ADKL A1,/4000 1ST WER REGISTER READ EQU * CF A5,CIOPRE PREPARE FOR CIO CF A15,NVLCHK CHECK IF NEW VOLUME LOADED ADK A1,0 RB(NZ) TEST50 NEW VOLUME LOADED : END IO * EJECT DRFD02 * * LD A4,DWTFOR,A6 FORMAT LD A1,ECBRL,A8 REQUESTED LENGTH RB(Z) ER:ILE ILLEGAL LENGTH LD A2,ECBCW2,A8 START SECTOR RB(N) REQERR ILLEGAL SECTOR NUMBER CWK A2,MS:256-13 MAX TOSS SECTOR NUMBER RB(NL) REQERR ILLEGAL SECTOR NUMBER ST A1,DWTRL,A6 SAVE LENGTH LDR A3,A1 SRL A3,7 NUMBER OF 128 SECTORS SRC A4,2 FORMAT RF(N) TRA500 FORM: (256-2D) IFT TOSS+IBM=2 SLC A4,1 RF(N) TRA300 IBM FORMATED XIF IFT TOSS=1 SLL A2,1 START SECTOR XIF IFT TOSS+IBM=2 CWK A2,MS:128 MAX SECTOR NUMBER RB(NL) REQERR ILLEGAL SECTOR NUMBER RF TRA400 TRA300 EQU * XIF IFT IBM=1 SLL A1,1 ADK A3,78 SPARE TRACK SECTORS CWK A2,MS:128-78 MAX IBM SECTOR NUMBER RB(NL) REQERR ILLEGAL SECTOR NUMBER TRA400 EQU * XIF ADKL A3,MS:256-MS:128 ADJUST SECTOR NUMBER RF TRA590 CHECK VALUE * EJECT DRFD02 * * TRA500 EQU * IFT TOSS+IBM=2 SLC A4,1 RF(N) TRA525 IBM FORMATTED XIF IFT TOSS=1 CWK A2,13 RF(NL) TRA550 NOT TRACK ZERO SLL A2,1 PHYSICAL SECTOR NUMBER RF TRA600 TRA525 EQU * XIF IFT IBM=1 CWK A2,MS:256-104 MAX IBM SECTOR NUMBER RB(NL) REQERR ILLEGAL SECTOR NUMBER CWK A2,26 RF(NL) TRA530 SLL A1,1 ADR A3,A2 END OF BUFFER SECTOR SUK A3,26 RF(N) TRA600 TRACK ZERO ANK A3,1 ODD OR EVEN RB(NZ) ER:ILE ILLEGAL LENGTH TRA530 EQU * SRL A3,1 NUMBER OF 256 SECTORS ADK A3,104 SPARE SECTORS RF TRA590 XIF IFT TOSS=1 TRA550 EQU * ADK A2,13 SRL A3,1 XIF * EJECT DRFD02 * * TRA590 EQU * ADR A3,A2 LAST SECTOR NUMBER CWK A3,MS:256 MAX SECTOR NUMBER RB(G) ER:ILE INCORRECT LENGTH TRA600 EQU * ANK A1,/FF RB(NZ) ER:ILE ILLEGAL LENGTH IFT CPU852=0 DVK 26 A1,A2 PHYSICAL SECTOR NUMBER XIF IFT CPU852=1 LDR A1,A2 LDK A2,0 LDKL A3,/D00 26 SHIFTED DVK26A EQU * SLL A2,1 SUR A1,A3 RF(NN) DVK26B ADR A1,A3 RF DVK26C DVK26B EQU * ADK A2,1 DVK26C EQU * SRC A3,1 CWK A3,26 RB(NL) DVK26A XIF IFT TOSS+IBM=2 SRC A4,1 FORMAT XIF IFF TOSS+IBM=2 ADK A4,0 XIF RF(N) IOR100 (256-2D) SLL A2,1 * EJECT DRFD02 * * IOR100 EQU * ST A1,DWTSEC,A6 SECTOR NUMBER ON CYLINDER SC A2,DWTSEC,A6 CYLINDER NUMBER IOR200 EQU * IFT TOSS+IBM=2 IFT ASCEBC=1 LD A4,DWTFOR,A6 FORMAT SRC A4,1 RF(NN) IOR250 TOSS DISC XIF IFT IBM+ASCEBC=2 LD A3,DWTIOR,A6 GET IO ORDER RF(NZ) IOR220 WRITE ORDER CF A5,CIOI00 PERFORM READ LDR A3,A1 SAVE RETURN CODE CF A5,ASCMOV TRANSFORM AND MOVE TO USER LDR A1,A3 GET RETURN CODE RF(NZ) ENDIOR READ ERROR RF IOR230 UPDATE PARAMETERS IOR220 EQU * WRITE IBM SECTOR CF A5,EBCDIC MOVE FROM USER AND TRANSFORM CF A5,CIOI00 WRITE ON DISC RF(NZ) ENDIOR ERROR LC A1,DWTOR+1,A6 GET ORDER SUK A1,/15 RF(NE) IOR230 NOT READ AFTER WRITE CF A5,CIOIVF VERIFY RF(NZ) END:IO ERROR IOR230 EQU * CF A5,GETLEN GET LENGTH OF IO CF A5,INCSEC INCREMENT SECTOR NUMBER LDR A2,A7 LENGTH OF IO IFT TOSS=1 =1 RF IOR400 =1 XIF IFF TOSS+EBCASC=0 * EJECT DRFD02 * * IOR250 EQU * TOSS DISC LD A3,DWTSEC,A6 START SECTOR NUMBER ECR A2,A3 ANK A3,/FF SECTOR NUMBER NGR A3,A3 26-A3 ADK A3,26 ANK A2,/FF CYLINDER AND HEAD NUMBER RF(Z) IOR260 1ST TRACK LD A4,DWTFOR,A6 FORMAT SRC A4,2 RF(NN) IOR260 (128-1) SLL A3,1 LENGTH LEFT ON TRACK IOR260 EQU * SLL A3,6 WORD MODE LD A4,DWTRL,A6 REST OF IO SRL A4,1 WORD MODE CWR A3,A4 RF(L) IOR275 LDR A3,A4 REST OF TRACK IN ONE IO IOR275 EQU * LDKL A4,/F000 ANS A4,DWTWE1,A6 RESET LENGTH IN 1ST WER ORS A3,DWTWE1,A6 LENGTH TO 1ST WER CF A5,CIO:WR PERFORM READ/WRITE RF(NZ) END:IO READ/WRITE ERROR LC A1,DWTOR+1,A6 GET ORDER SUK A1,/15 RF(NE) IOR300 NOT READ AFTER WRITE CF A5,CIO:VF PERFORM VERIFY RF(NZ) END:IO VERIFY ERROR * EJECT DRFD02 * * IOR300 EQU * CF A5,INCCYL NEXT HEAD AD A2,DWTSEC,A6 NEXT TRACK ANKL A2,/FF00 SECTOR 0 ST A2,DWTSEC,A6 SECTOR ID LD A2,DWTWE1,A6 GET LENGTH OF PERFORMED IO SLL A2,4 SRL A2,3 CHARACTERS IOR400 EQU * XIF ADS A2,ECBEL,A8 UPDATE ECBEL NGR A3,A2 IFT MMUPAG=1 LDK A1,0 SRL A2,1 DA DWTBA,A6 ANK A1,/3 MS 2,DWTBA,A6 XIF IFT MMUPAG=0 ADS A2,DWTBA,A6 XIF ADS A3,DWTRL,A6 RB(NZ) IOR200 NEXT TRACK/SECTOR LDK A1,0 RESET RETURN CODE ENDIOR EQU * RF END:IO REQUEST READY * EJECT DRFD02 * ********** * FORMAT * ********** * * FORMAT EQU * CF A15,NVLCHK ADK A1,0 RF(NZ) END:IO ERROR: NEW VOLUME LOADED CF A5,WRIPRE PREPARE FOR WRITE LDK A2,36 FORM10 EQU * CM FD:BUF,A2 CLEAR BUFFER SUK A2,2 RB(NN) FORM10 CF A15,VOLCLR CLEAR VOLUME NAME IN DWT LDKL A1,'TO' LDKL A2,'SS' LDKL A4,FD:BUF+32 TOSS INDICATION ADDRESS LDK A3,IN:TOS INDICATE TOSS DISC ANS A3,DWTFOR,A6 LD A3,ECBCW1,A8 TOSS/IBM INDICATOR RF(Z) FORM40 TOSS CM DWTSEC,A6 WRITE SECTOR 0 CF A5,CIOI00 LDK A3,IN:IBM INDICATE IBM DISC ORS A3,DWTFOR,A6 LDKL A1,EBC:VO 'VO' LDKL A2,EBC:L1 'L1' LDK A3,6 WRITE SECTOR 6 LDKL A4,FD:BUF IBM INDICATION ADDRESS FORM40 EQU * STR A1,A4 INDICATE TOSS/IBM ST A2,2,A4 ST A3,DWTSEC,A6 CF A5,CIOI00 WRITE SECTOR * EJECT DRFD02 * * ********** * END:IO * ********** * * * END:IO EQU * CF A5,SETPAR SET DISC DEPENDENT PARAMETERS OR A1,DWTRC,A6 GET COLLECTED RC CF A15,TENDIO T:DISP EQU * ABL TDISP END:30 EQU * LDK A1,1 NOT OPERABLE ORS A1,DWTST,A6 RECOVERY DONE =1 RB END:IO * EJECT DRFD02 * ********** * LOCKDO * ********** * * LOCK ORDER * LOCKDO EQU * CF A5,LOCK LOCK DOOR RB(NZ) END:IO NOT OPERABLE LDK A2,IN:LCK ORS A2,DWTFOR,A6 INDICATE LOCKED IFT IBM=1 LD A1,DWTFOR,A6 GET FORMAT ANK A1,1 SRC A1,6 INDICATE TOSS/IBM XIF RB END:IO * EJECT DRFD02 * ********** * LOAD * ********** * * LOAD ORDER * * INPUT : A4 = DOUBLED INDEX + A6 LOAD EQU * CF A5,LOCK LOCK DOORS RF(NZ) END:UL ERROR LDK A2,IN:LCK ORS A2,DWTFOR,A6 INDICATE DOOR LOCKED CF A5,VO:NAM GET VOLUME NAME ANK A1,/F RF(NZ) END:UL ERROR UNLOCK DOOR IFT TOSS+IBM=2 LD A2,DWTFOR,A6 SRC A2,1 RB(NN) END:IO TOSS DISC XIF IFT IBM=0 RB END:IO XIF IFT IBM=1 * EJECT DRFD02 * * LD A4,ECBCW1,A8 DATA SET NUMBER =3 LDR A3,A4 SAVE NUMBER SUK A4,7 RF(N) LOA:85 ILLEGAL DATA SET NUMBER IFT TOSS=1 SRC A2,1 XIF IFT TOSS=0 LD A2,DWTFOR,A6 GET FORMAT SRC A2,2 XIF IFT IBM=1 RF(NN) LOA:10 (128-1) SUK A4,77-25 CWK A3,25 RF(NG) LOA:10 HEAD 0 SUK A3,26 DATA SET NUMBER ON TRACK 1 SRC A3,1 SECTOR NUMBER IN RIGHT BYTE ORKL A3,/100 HEAD 1 LOA:10 EQU * SUK A4,25-7 RF(P) LOA:85 ILLEGAL DATA SET NUMBER CF A15,INXDWT ST A3,DWTDSS,A4 SAVE DATA SET NUMBER CF A5,REAPDS PREPARE READ DATA SET CF A5,CIOI00 READ LDR A3,A1 GET RETURN CODE SRL A3,7 ORR A1,A3 RF(NZ) END:UL ERROR UNLOAD * EJECT DRFD02 * * LDKL A7,FD:BUF+BOE ADDRESS TO BOE LD A4,DWTDSS,A4 GET DATA SET NUMBER RF(NN) LOA:20 1ST DATA SET IN BUFFER ADK A7,/80 2ND DATA SET IN BUFFER LOA:20 EQU * CF A5,IBMTRA TRANSFORM TO BINARY ST A3,DWTBOE,A4 SAVE BEGINNING OF EXTENT CF A5,DECBOE CURRENT RECORD NUMBER=BOE-1 ADK A7,EOE-BOE-5 ADDRESS TO EOE CF A5,IBMTRA ST A3,DWTEOE,A4 END OF EXTENT ADK A7,EOD-EOE-5 ADDRESS TO EOD CF A5,IBMTRA ST A3,DWTEOD,A4 END OF DATA LDKL A1,RC:IBM INDICATE IBM DISC RB END:IO END REQUEST LOA:85 EQU * LDKL A1,RC:REQ REQUEST ERROR RF END:UL UNLOAD * XIF EJECT DRFD02 * ********** * UNLOAD * ********** * * UNLOAD ORDER * IFT IBM=1 UNLOAD EQU * IFT TOSS+IBM=2 LD A1,DWTFOR,A6 GET FORMAT SRC A1,1 RF(NN) UNL:50 TOSS DISC XIF IFT IBM=1 LD A3,DWTEOD,A4 END OF DATA RF(Z) UNL:50 NOT OPENED CF A5,SECBIN CONVERT TO BINARY ST A3,ECBCW2,A8 EOD TO ECB LD A3,DWTDSS,A4 DATA SET SECTOR ID CF A5,REAPDS PREPARE READ DATA SET CF A5,CIOI00 READ RF(NZ) END:UL READ ERROR LDKL A1,FD:BUF+EOD EOD ADDRESS LD A3,DWTDSS,A4 DATA SET NUMBER RF(NN) UNL:20 1ST DATA SET IN SECTOR ADK A1,/80 2ND DATA SET IN SECTOR * EJECT DRFD02 * * UNL:20 EQU * LC A7,DWTEOD,A4 END OF DATA LDR A2,A7 SAVE END OF DATA ANK A2,1 ORK A2,/F0 HEAD NUMBER SC A2,2,A1 HEAD NUMBER TO BUFFER SRL A7,1 CF A5,BINDEC EBCDIC CODE STR A3,A1 TRACK NUMBER TO BUFFER LD A7,DWTEOD,A4 GET SECTOR NUMBER ADK A7,1 IBM SECTOR NUMBER CF A5,BINDEC A3=SECTOR NUMBER IN EBCDIC SC A3,4,A1 SECTOR NUMBER TO BUFFER ECR A3,A3 SC A3,3,A1 CF A5,WRIPRE PREPARE FOR WRITE CF A5,CIOI00 RF(NZ) END:UL WRITE ERROR CM DWTEOD,A4 INDICATE NOT OPENED XIF END:UL EQU * ORS A1,DWTRC,A6 SAVE RETURN CODE IFT IBM=0 UNLOAD EQU * XIF UNL:50 EQU * CF A5,UNLOCK UNLOCK DOORS RF(NZ) ENDIO LDK A2,IN:ULC INDICATE UNLOCKED DRIVE ANS A2,DWTFOR,A6 UNLOCKED DOOR ENDIO EQU * ABL END:IO * IFT IBM=1 EJECT DRFD02 * ********** * SQREAD * ********** * * SEQUENTIAL READ * SQREAD EQU * CF A5,REAPRE PREPARE FOR READ CF A5,IBMCHK CHECK IBM PARAMETERS LD A3,DWTCRN,A4 GET CRN CF A5,INCSE0 CRN+1 ECR A3,A3 LEFT BYTE CC A3,DWTEOD,A4 END OF DATA ECR A3,A3 RIGHT BYTE RF(NE) SQR:10 LEFT BYTES NOT EQUAL CC A3,DWTEOD+1,A4 EOD SQR:10 EQU * RF(NL) ENDEOD ERROR : END OF DATA CF A5,SECBIN SECTOR ID IN BINARY ST A3,ECBCW2,A8 CRN TO ECB IFT ASCEBC=1 CF A5,CIOI00 READ SECTOR ANK A1,1 JUST NOT OPERABLE =4 RB(NZ) ENDIO READ ERROR CF A5,ASCMOV TRANSFORM AND MOVE LD A3,DWTSEC,A6 GET CRN+1 ADK A4,DWTCRN CRN ADDRESS RF SQW:90 END REQUEST XIF IFT IBM=1 IFT ASCEBC=0 CF A5,CIO:WR READ ANK A1,1 JUST NOT OPERABLE =4 RB(NZ) ENDIO ERROR LD A3,DWTSEC,A6 CURRENT RECORD NUMBER ADK A4,DWTCRN ADDRESS RF SQW:90 XIF IFT IBM=1 * EJECT DRFD02 * * ENDEOD EQU * LDKL A1,RC:EOD END OF DATA RB ENDIO * EJECT DRFD02 * ********** * SQWRIT * ********** * * SEQUENTIAL WRITE * SQWRIT EQU * CF A5,WRIPRE PREPARE FOR WRITE CF A5,IBMCHK CHECK IBM PARAMETERS LD A3,DWTEOD,A4 EOD ECR A3,A3 LEFT BYTE CC A3,DWTEOE,A4 LEFT CHARACTERS ECR A3,A3 RF(NE) SQW:10 CC A3,DWTEOE+1,A4 RIGTH CHARACTERS SQW:10 EQU * RF(G) ENDEOE ERROR: END OF EXTENT ST A3,DWTSEC,A6 END OF DATA CF A5,SECBIN CONVERT TO BINARY ST A3,ECBCW2,A8 EOD TO ECB IFT ASCEBC=1 CF A5,EBCDIC CF A5,CIOI00 WRITE SECTOR RB(NZ) ENDIO ERROR XIF IFT ASCEBC=0 IFT IBM=1 CF A5,CIO:WR PERFORM IO RB(NZ) ENDIO ERROR XIF IFT IBM=1 CF A5,INCSEC DWTSEC+1 ADK A4,DWTEOD ADDRESS TO EOD * EJECT DRFD02 * * SQW:90 EQU * STR A3,A4 UPDATED POINTER LD A3,ECBRL,A8 REQUESTED LENGTH ST A3,ECBEL,A8 EFFECTIVE LENGTH RB ENDIO ENDEOE EQU * LDKL A1,RC:EOE END OF EXTENT RB ENDIO * EJECT DRFD02 * ********** * REWIND * ********** * REWIND EQU * CF A5,IBMCH5 CHECK IF IBM DISK LD A3,DWTBOE,A4 ST A3,DWTEOD,A4 EOD=BOE CF A5,DECBOE GET CRN RB ENDIO * XIF EJECT DRFD02 * ******************** * * * RECOVERY ROUTINE * * * ******************** * FDON EQU * CF A15,SAVE8 SAVE A1-A8 ON STACK LDKL A6,DWFD01 DWT ADDRESS LDKL A4,/7FFE SET UNIT BUSY AND RECOVERY ON =1 ANS A4,DWTST,A6 =1 * EJECT DRFD02 * * DELAY 2 SEC * LD A4,DWTTP,A6 RF(Z) FDON10 NO TIMER SET LDKL A4,-TIME ST* A4,DWTTP,A6 RESTART TIMER RF F:DISP FDON10 EQU * LDK A4,DWTTP ADR A4,A6 LDR A1,A6 SAVE A6 CF A15,SETIMP DATA FDON20,TIME * F:DISP EQU * ABL T:DISP * * TIME OUT ROUTINE * FDON20 EQU * LDR A6,A1 CM DWTTP,A6 FDRE00 EQU * LDKL A5,/7FFE SET UNIT BUSY AND RECOVERY ON =1 ANS A5,DWTST,A6 =1 LDKL A5,DWTSB2 ADR A5,A6 GET STACK BASE LDK A3,/F8 FILE CODE ST A3,DWT:FC,A6 LDK A3,3 4 VOLUMES * EJECT DRFD01 * * * READ VOLUME NAME * FDONLD EQU * SC A3,DWTOR,A6 GET VOLUME NAME CF A5,LOCK LOCK DOOR RF(NZ) FDON19 OPERABLE CF A5,GETPAR GET DEVICE DEPENDENT PARAMETERS CF A5,VO:NAM CF A5,SETPAR SET DEVICE DEPENDENT PARAMETERS ANK A1,/F RF(Z) FDON21 NO ERROR FDON19 EQU * LDK A1,6 NOT OPERABLE CF A15,VOLCLR CLEAR VOLUME NAME RF FDON24 FDON21 EQU * LD A4,DWTFOR,A6 GET FORMAT PARAMETERS ANK A4,IN:LCK RF(NZ) FDON25 FDON24 EQU * CF A5,UNLOCK FDON25 EQU * LDK A3,0 LC A3,DWTOR,A6 GET INDEX FOR LAST VOL. SUK A3,1 RB(NN) FDONLD NEXT VOLUME EJECT DRFD02 * * RESTART IO * IM DWTST,A6 INDICATE RECOVERY OVER LD A8,DWTECB,A6 ECB ADDRESS ABL(Z) END:IO NO REQUEST ON LD A7,DWTORD,A6 GET INDEX AND ORDER ST A7,DWTOR,A6 CM ECBEL,A8 RESET EFFECTIVE LENGTH ANK A7,/3F ORDER ABL FDAD * EJECT DRFD02 * ********************* * * * INTERRUPT HANDLER * * * ********************* * * INPUT FROM CU : * BIT 1 : READY INTERRUPT * BIT 4 : DELETED DATA ADDRESS MARK * BIT 5 : SECTOR NOT FOUND * BIT 6 : SEEK ERROR * BIT 7 : WRITE PROTECT * BIT8,9: DRIVE NUMBER * BIT 10: RETRY * BIT 11: PROGRAM ERROR * BIT 12: FULL TRACK PROCESSED * BIT 13: DATA FAULT * BIT 14: THROUGHPUT ERROR * BIT 15: NOT OPERABLE * * OUTPUT REGISTER A1: * BIT 4 : NO DATA * BIT6,9: WRITE PROTECTED * BIT 7 : RETRIES PERFPRMED (IN DWTRC) * BIT 11: FORMAT * BIT 13: CRC ERROR * BIT 14: SEEK ERROR / THROUGHPUT ERROR * BIT 15: NOT OPERABLE * * A5 = STACK POINTER * A6 = DWT ADDRESS * A8 = ECB ADDRESS * EJECT DRFD02 * * IHFD EQU * CF A15,SAVE8 SAVE REGISTERS ON STACK SST A1,CUADR GET STATUS RF(A) IHFD00 CORRECT CH. UNIT =2 CIO A1,0,CUADR =2 SST A1,CUADR =2 RB(NA) *-2 =2 LDK A1,1 SET RETURN CODE =2 IHFD00 EQU * =2 LDR A2,A1 LDKL A6,DWFD01 DWT ADDRESS LD A8,DWTECB,A6 ECB ADDRESS SLL A2,1 RB(N) FDRE00 READY INTERRUPT ANK A1,/17 SLL A2,3 BIT4 RF(NN) IHFD10 NOT SET ORKL A1,RC:NOD NO DATA IHFD10 EQU * SLC A2,3 BIT7 RF(NN) IHFD20 NOT SET ORKL A1,RC:WRP WRITE PROTECTED IHFD20 EQU * SLL A2,3 BIT10 RF(NN) IHFD30 NOT SET LDKL A3,RC:RET RETRIES PERFORMED ORS A3,DWTRC,A6 SAVE RC IHFD30 EQU * * EJECT DRFD02 * * SRL A2,2 BIT5 , BIT6 ANK A2,/6 SECTOR NOT FOUND,SEEK ERROR RF(Z) IHFD50 NO SEEK ERROR ORR A1,A2 LDK A2,/FF DUMMY CYLINDER NUMBER ST A2,DWTCYN,A6 IHFD50 EQU * CF A15,INXDWT LD A5,DWTA5,A6 STACK POINTER RTN:CR EQU * SET CR ACCORDING TO A1 ADK A5,4 UPDATE STACK POINTER ADK A1,0 SET CR ABR* A5 RETURN * EJECT DRFD02 * ******************************************* * * * S U B R O U T I N E S * * * ******************************************* * * ********** * GETPAR * ********** * * GET DEVICE DEPENDENT PARAMETERS * * INPUT : A6 = DWT ADDRESS * * OUTPUT* * A4 = DOUBLED INDEX + A6 * GETPAR EQU * CF A15,INXDWT LD A1,DWTPAR,A4 GET DEVICE DEPENDENT PARAMETERS SC A1,DWTFOR+1,A6 FORMAT PARAMETER ECR A1,A1 SC A1,DWTCYN+1,A6 PRESENT CYLINDER NUMBER RTN A5 * EJECT DRFD02 * * ********** * SETPAR * ********** * * SET DEVICE DEPENDENT PARAMETERS * SETPAR EQU * LD A2,DWTCYN,A6 PRESENT HEAD POSITION ECR A2,A2 LC A2,DWTFOR+1,A6 PRESENT FORMAT PARAMETERS CF A15,INXDWT ST A2,DWTPAR,A4 SAVE DRIVE DEPENDENT PARAMETERS RTN A5 * EJECT DRFD02 * ********** * VO:NAM * ********** * * VO:NAM EQU * LDK A3,IN:LCK RESET ALL BUT LOCK/UNLOCK INDICATOR ANS A3,DWTFOR,A6 LDK A3,0 CYLINDER 0 CF A5,SEEKA3 SEEK RF(NZ) VOL900 RETURN IFT TOSS=1 LDK A3,0 READ ORDER CF A5,CIOVOL RF(NZ) VOL900 ERROR IFT CPU852+IBM=2 LD A2,FD:BUF+32 CWK A2,'TO' RF(NE) VOL200 NO TOSS DISC LD A2,FD:BUF+34 CWK A2,'SS' RF(NE) VOL200 XIF IFT TOSS+IBM=2 IFT CPU852=0 ML 2,FD:BUF+32 DSK 'TO','SS' RF(NE) VOL200 NO TOSS DISC XIF IFT TOSS=1 VOL100 EQU * TOSS FORMATED LDKL A2,FD:BUF ADDRESS TO VOLUME NAME IFT IBM=1 LDK A1,0 INDICATE TOSS RF VOL500 XIF IFT IBM=1 * EJECT DRFD02 * * VOL200 EQU * CHECK IF IBM DISC LDKL A2,FD:BUF+40 DONT OVERLAP TOSSS LABEL LDK A3,/18 READ SECTOR 6 CF A5,CIOVO1 RF(NZ) VOL900 ERROR IFT TOSS=1 LD A2,FD:BUF+40 CWK A2,EBC:VO EBCDIC FOR 'VO' RB(NE) VOL100 TOSS DISC LD A2,FD:BUF+42 CWK A2,EBC:L1 EBCDIC FOR 'L1' RB(NE) VOL100 TOSS DISC XIF IFT IBM=1 LDKL A2,FD:BUF+44 VOLUME NAME ADDRESS IFT ASCEBC=1 LDR A4,A2 LDK A7,10 CF A5,ASCII TRANSFORM TO ASCII XIF IFT IBM=1 LDK A1,IN:IBM INDICATE IBM DISC * XIF EJECT DRFD02 * * VOL500 EQU * ORS A1,DWTFOR,A6 INDICATE TOSS/IBM SRC A1,6 RC: TOSS/IBM ORS A1,DWTRC,A6 LD A3,DWT:FC,A6 FILE CODE AND TEST STATUS INDICATOR CF A15,VOLGET VOLUME NAME TO DWT LD A8,DWTECB,A6 ECB ADDRESS TO A8 LDKL A3,/4000 READ SECTOR 0 HEAD 1 CF A5,CIOVOL SRL A1,3 ANK A1,2 FORMAT (256-2D) OR (128-1) XRK A1,2 ORS A1,DWTFOR,A6 INDICATE FORMAT SRC A1,6 RC:FORMAT VOL900 EQU * RTN A5 * EJECT DRFD02 * ********** * GETLEN * * GETLE0 * ********** * * GET LENGTH ACCORDING TO FORMAT * GETLEN EQU * LC A7,DWTSEC,A6 SECTOR ID ANK A7,/7F CYLINDER AND HEAD NO RF(Z) GETL05 TRACK 0 GETLE0 EQU * LD A7,DWTFOR,A6 FORMAT ANK A7,2 RF(NZ) GETL10 (256-2D) GETL05 EQU * LDK A7,1 GETL10 EQU * SLL A7,7 *128 RTN A5 * IFT IBM+MMUPAG=2 EJECT DRFD02 * ********** * GETPAG * ********** * * GET PAGE ID * GETPAG EQU * ML 2,DWTBA,A6 BUFFER ADDRESS RB(Z) RTN:CR SET CR DLA 4 GET PAGE SRC A1,6 ST A1,DWTPAG,A6 ADKL A1,/400 NEXT PAGE ST A1,DWTPAG+2,A6 SRL A2,3 LOGICAL ADDRESS RB RTN:CR * XIF IFT IBM+ASCEBC=2 EJECT DRFD02 * ********** * ASCII * ********** * * TRANSFORM EBCDIC TO ASCII CODE * * INPUT : A4 =BUFFER ADDRESS * A7 =LENGTH * * OUTPUT: A1,A4,A7 CHANGED * ASCII EQU * ENB ADR A4,A7 ASC:10 EQU * SUK A4,1 LCR A1,A4 EBCDIC CHARACTER ANK A1,/FF LC A1,TASCII,A1 TRANSFORM TO ASCII SCR A1,A4 PUT ASCII CHAR. IN OUTPUT BUFFER SUK A7,1 RB(P) ASC:10 INH RTN A5 * EJECT DRFD02 * ********** * ASCMOV * ********** * * FUNCTION: TRANSFORMS A STRING FROM EBCDIC TO * ASCII CODE AND MOVES IT FROM FD:BUF TO USER BUFFER * INPUT STRING ADDRESS IS BUF * OUTPUT: A1,A2, CHANGED * A4 = INDEXED DWT ADDRESS * A7 CHANGED * ASCMOV EQU * CF A5,GETLEN IFT MMUPAG=0 LD A4,DWTBA,A6 BUFFER ADDRESS CF A5,ASCII XIF IFT IBM+ASCEBC=2 IFT MMUPAG=1 LDKL A4,FD:BUF DRIVER BUFFER ADDRESS ENB CF A5,ASCII CF A5,GETLEN CF A5,GETPAG GET PAGE IDENTITY TS -30,A15 SAVE RUNNING TASK'S MMU TL DWTPAG,A6 LOAD MMUTABLE LDR A1,A4 DRIVER BUFFER ADDRESS MVSU A7 MOVE SECTOR TO USER BUFFER TL -30,A15 RESTORE MMU TABLE FROM STACK XIF IFT IBM+ASCEBC=2 LDK A1,0 RESET RC RF IBMT60 * EJECT DRFD02 * ********** * EBCDIC * ********** * * FUNCTION: EBCDIC TRANSFORMES A STRING FROM ASCII TO * EBCDIC CODE * OUTPUT STRING IS PUT IN DRIVER BUFFER * * OUTPUT: A1 CHANGED * A4 = BUFFER ADDRESS * A7 CHANGED EBCDIC EQU * IFT IBM+MMUPAG=2 IFT ASCEBC=1 LDKL A4,FD:BUF BUFFER ADDRESS CF A5,GETLEN CF A5,GETPAG RF(Z) EBC:05 SYSTEM AREA LDR A1,A2 LOGICAL ADDRESS SOURCE TS -30,A15 SAVE RUNNING TASK'S MMU TL DWTPAG,A6 LOAD MMU TABLE LDR A2,A4 DESTINATION ADDRESS MVUS A7 MOVE SECTOR TO DRIVER BUFFER TL -30,A15 RESTORE MMU TABLE FROM STACK RF EBC:07 EBC:05 EQU * LDR A4,A2 BUFFER ADDRESS SLL A4,1 EBC:07 EQU * * EJECT DRFD02 * * XIF IFT ASCEBC+IBM=2 ENB IFT MMUPAG=0 IFT IBM+ASCEBC=2 LD A4,DWTBA,A6 BUFFER ADDRESS XIF IFT IBM+ASCEBC=2 CF A5,GETLEN ADR A4,A7 EBC:10 EQU * SUK A4,1 LCR A1,A4 GET ASCII CHAR. ANK A1,/FF LC A1,TEBCDIC,A1 SC A1,FD:BUF-1,A7 SUK A7,1 RB(P) EBC:10 INH INHIBIT INTERRUPTS RTN A5 XIF IFT IBM=1 * EJECT DRFD02 * ********** * BINDEC * ********** * * FUNCTION: BINDEC TRANSFORMS A BINARY NUMBER TO TWO * EBCDIC-CODED DIGITS (DECIMAL) * * INPUT: A7 BINARY NUMBER * * OUTPUT: A3 EBCDIC CODED DECIMAL DIGITS * A7 CHANGED * BINDEC EQU * LDKL A3,/EFF0 EBCDIC CHARACTERS ANK A7,/7F BIN:10 EQU * ADKL A3,/100 ADD 10 IN EBCDIC SUK A7,10 RB(NN) BIN:10 ADK A7,10 NUMBER 0-9 ORR A3,A7 RTN A5 * EJECT DRFD02 * ********** * IBMTRA * ********** * * TRANSFORM SECTOR IDENTIFIER FROM EBCDIC CODE * TO BINARY CODE * * FORMAT : TTHSS (EBCDIC CODE) * TT=TRACK,H=HEAD,SS=SECTOR * * INPUT : A7 = ADDRESS TO TTHSS * * OUTPUT : A3 = TTH IN LEFT BYTE AND SS IN RIGHT BYTE * A7 = ADDRESS TO TTHSS + 5 * = A6+DOUBLE INDEX * IBMTRA EQU * CF A5,EBCBI2 TRANSFER EBCDIC - BIN LDR A3,A1 SAVE TRACK NUMBER SLL A3,1 IN POSITION LDK A4,1 TRANSFER HEAD NUMBER CF A5,EBCBIN EBCDIC-BINARY ORR A3,A1 HEAD NUMBER IN POSITION LD A2,DWTFOR,A6 GET FORMAT SRC A2,2 RF(NN) IBMT05 (128-1) SUK A1,1 HEAD NUMBER IBMT05 EQU * SUK A1,1 RF(NN) IBMT70 HEAD NUMBER TOO HIGH CF A5,EBCBI2 EBCDIC-BINARY ECR A3,A3 TRACK AND HEAD NO TO LEFT BYTE SUK A1,1 PHYSICAL SECTOR NUMBER ORR A3,A1 SECTOR NUMBER TO RIGHT BYTE * EJECT DRFD02 * * ECR A4,A3 ANK A4,/FF CYL NO AND HEAD NO SUK A4,1 RF(NP) IBMT70 TRACK 0: ERROR LD A2,DWTFOR,A6 GET FORMAT SRC A2,2 RF(NN) IBMT10 (128-1) SUK A4,2 DECREMENT TRACK NO IBMT10 EQU * CWK A4,FD:BUF+EOD+5 RF(E) IBMT15 EOD CWK A4,FD:BUF+EOD+/45 RF(NE) IBMT20 BOE OR EOE IBMT15 EQU * SUK A4,147 2*74-1 RF(G) IBMT70 INCORRECT TRACK NUMBER RF(L) IBMT40 TRACK OK RETURN SUK A1,0 CHECK SECTOR NUMBER IF LAST TRACK RF IBMT50 IBMT20 EQU * EOD ADK A2,0 FORMAT RF(NN) IBMT30 (128-1) SUK A4,1 IBMT30 EQU * SUK A4,145 2*73-1 RF(P) IBMT70 INCORRECT TRACK,HEAD IBMT40 EQU * SUK A1,25 IBMT50 EQU * CHECK SECTOR NUMBER RF(G) IBMT70 INCORRECT SECTOR NUMBER IBMT60 EQU * CF A15,INXDWT RTN A5 * EJECT DRFD02 * * IBMT70 EQU * ERROR LDK A1,RC:IDS RC: ERROR ABL END:UL * EJECT DRFD02 * * ********** * SECBIN * ********** * * CONVERT SECTOR IDENTIFIER TO BINARY CODE * * SECBIN EQU * LDR A1,A3 LD A2,DWTFOR,A6 FORMAT ANK A2,/2 RF(NZ) SECB05 (256-2D) SRL A3,1 SECB05 EQU * SRL A3,8 TRACK AND HEAD LDR A2,A3 SLL A3,5 *32 SLL A2,2 *4 SUR A3,A2 *28 SRL A2,1 *2 SUR A3,A2 *26 ANK A1,/FF ADR A3,A1 LOGICAL SECTOR NUMBER RTN A5 * EJECT DRFD01 * ********** * EBCBIN * ********** * * EBCBIN TRANSFORM EBCDIC CODED DIGITS TO * BINARY. RANGE OF EBCDIC CODE /F0 - /F9 IS CHECKED * INPUT: A4 ADDRESS TO FIRST DIGIT * A7 = NUMBER OF DIGITS * OUTPUT: A1 BINARY * A4 = A4 + A7 * WORKING REG: A2,A7 * EBCBI2 EQU * LDK A4,2 TWO DIGITS EBCBIN EQU * LDK A1,0 DEC:10 LCR A2,A7 DIGIT ANK A2,/FF SUK A2,/F0 RB(N) IBMT70 SUK A2,9 RB(P) IBMT70 NOT DIGIT ADK A2,9 ADK A7,1 ADDRESS TO NEXT DIGIT SUK A4,1 RF(Z) DEC:30 DEC:20 SUK A2,1 RB(N) DEC:10 NEXT DIGIT ADK A1,/A MULTIPLY BY 10 RB DEC:20 DEC:30 ADR A1,A2 RTN A5 * EJECT DRFD02 * * ********** * IBMCHK * * IBMCH5 * ********** * * IBM CHECK OF PARAMETERS * * INPUT : A4=INDEXED DWT ADDRESS * OUTPUT : A4 UNCHANGED * IBMCHK EQU * LD A1,DWTFOR,A6 GET FORMAT LD A2,ECBRL,A8 REQUESTED LENGTH SRC A1,2 RF(NN) IBMC10 (128-1) SUK A2,128 IBMC10 EQU * SUK A2,128 ABL(NZ) ER:ILE ILLEGAL LENGTH IBMCH5 EQU * LD A2,DWTEOD,A4 END OF DATA RF(Z) REQERO NOT OPENED DATA SET IFT ASCEBC=0 CF A5,GETLE0 GET LENGTH SRL A7,1 ORS A7,DWTWE1,A6 XIF IFT IBM=1 CF A15,NVLCHK ADK A1,0 ABL(NZ) END:IO NEW VOLUME LOADED IFT TOSS=1 LD A2,DWTFOR,A6 GET FORMAT SRC A2,1 RB(N) IBMT60 IBM DISC XIF IFT TOSS=0 RB IBMT60 XIF IFT IBM=1 REQERO EQU * REQUEST ERROR ABL DISIOE * EJECT DRFD02 * ********** * INCSEC * ********** * * INCREMENT SECTOR IDENTIFIER * * OUTPUT: A3 = SECTOR ID * INCSEC EQU * LD A3,DWTSEC,A6 SECTOR ID INCSE0 EQU * ADK A3,1 CCK A3,/1A00 SECTOR 26 RF(L) INCS10 SAME TRACK CF A5,INCCYL NEXT TRACK ADR A3,A2 SUK A3,26 SECTOR 0 INCS10 EQU * ST A3,DWTSEC,A6 INCREMENTED SECTOR ID RTN A5 * EJECT DRFD02 * ********** * DECBOE * ********** * * CRN = A3-1 * DECBOE EQU * CCK A3,0 RF(NZ) DECS10 CF A5,INCCYL NEXT TRACK SUR A3,A2 ORK A3,26 DECS10 EQU * SUK A3,1 ST A3,DWTCRN,A4 CURRENT RECORD NUMBER RTN A5 * XIF EJECT DRFD02 * * ********** * INCCYL * ********** * * NEXT TRACK OF SECTOR ID * * INCCYL EQU * LD A2,DWTFOR,A6 C1R A2,A2 ANK A2,2 (128-1)/(256-2D) INDICATOR ADK A2,2 NEXT TRACK SLL A2,7 IN POSITION RTN A5 * EJECT DRFD02 * ********** * REAPRE * * WRIPRB * * WRIPRE * * CIOPRE * ********** * * PREPARE FOR CIO START * IFT IBM=1 REAPDS EQU * ANKL 3,/7FFF ST A3,DWTSEC,A6 SECTOR IDENTIFIER XIF REAPRB EQU * IFT MMUPAG=0 LDKL A1,FD:BUF BUFFER ADDRESS ST A1,DWTBA,A6 BUFFER ADDRESS SAVE AREA XIF * REAPRE EQU * READ LDKL A1,IN:WE1-/80 1ST WER LDK A3,0 CIO REGISTER RF CIOPRE * WRIPRE EQU * WRITE LDKL A1,IN:WE1+/4000-/80 LDK A3,1 * CIOPRE EQU * GENERAL ST A1,DWTWE1,A6 ST A3,DWTIOR,A6 RTN A5 * EJECT DRFD02 * * ********** * LOCK * * UNLOCK * * SEEK * * CIO:WR * * CIO:VF * ********** * * * LOCK EQU * LDKL A3,/0400 RF CIO:00 UNLOCK EQU * LDKL A3,/0C00 RF CIO:00 SEEK EQU * LD A3,DWTSEC,A6 GET CYLINDER NUMBER SRL A3,9 CW A3,DWTCYN,A6 PRESENT CYLINDER NUMBER RF(E) CIORTN RETURN WITHOUT SEEK SEEKA3 EQU * ST A3,DWTCYN,A6 SLL A3,2 IN POSITION ORK A3,3 ORDER CODE RF CIO:00 * EJECT DRFD02 * * CIOIVF EQU * LDKL A3,/400 VERIFY RF CIOI03 CIOI00 EQU * IBM IO ROUTINE CF A5,SEEK ANK A1,/F RF(NZ) CIOERR SEEK ERROR LDK A3,0 WRITE/READ CIOI03 EQU * CF A5,GETLEN GET LENGTH LDR A1,A7 SRL A1,1 OR A1,DWTWE1,A6 1ST WER LDKL A2,FD:BUF BUFFER OR A3,DWTIOR,A6 IFT MMUPAG=0 RF(NZ) CIOWE2 WRITE ORDER LD A2,DWTBA,A6 BUFFER ADDRESS XIF RF CIOWE2 * CIOVOL EQU * LDKL A2,FD:BUF CIOVO1 EQU * LDKL A1,/8020 RF PERCIO * IFF TOSS+EBCASC=0 EJECT DRFD02 * * CIO:VF EQU * LDKL A3,/400 VERIFY RF CIOWER CIO:WR EQU * CF A5,SEEK ANK A1,/F RF(NZ) CIOERR SEEK ERROR LDK A3,0 READ/WRITE CIOWER EQU * IFT MMUPAG=0 LD A1,DWTWE1,A6 LD A2,DWTBA,A6 2ND WER OR A3,DWTIOR,A6 IO REGISTER XIF IFF TOSS+EBCASC=0 IFT MMUPAG=1 ML 2,DWTBA,A6 GET 18 BIT BUFFER ADDRESS SRC A1,4 OR A1,DWTWE1,A6 1ST WER SLL A2,1 2ND WER OR A3,DWTIOR,A6 IO REGISTER XIF CIOWE2 EQU * LD A4,DWTSEC,A6 SECTOR NUMBER ANK A4,/FF SLL A4,2 IN POSITION ORR A3,A4 IN ORDER WORD LC A4,DWTSEC,A6 TRACK NUMBER ANK A4,1 HEAD NUMBER SRC A4,2 IN POSITION ORR A3,A4 IN ORDER WORD * EJECT DRFD02 * * PERCIO EQU * WER A1,MUXADR WER A2,MUXADR+1 CIO:00 EQU * LD A2,PFPOST RF(NZ) CIO:AB POWER FAILURE POST PROCESSING ON CF A15,INXDWT EX DWTCIO,A4 EXECUTE CIO LDK A1,RC:NOP ABL(3) END:30 CU ADDRESS UNKNOWN CIO:AB EQU * ST A5,DWTA5,A6 SAVE STACK POINTER ABL T:DISP DISPATCH CIORTN EQU * LDK A1,0 RESET RC CIOERR EQU * RTN A5 * EJECT DRFD02 * * ********** * FD:BUF * ********** * * FLEXIBLE DISK BUFFER * FD:BUF EQU * RES 64 IFT IBM=1 RES 64 XIF * EJECT DRFD02 * ********************* * * * DEVICE WORK TABLE * * * ********************* * DWFD01 EQU * DATA 0 DATA /8000 DWT STATUS DATA 0 ECB ADDRESS DATA 0 ORDER DATA FDADR ACTIVATION ADDRESS DATA 0 TTAB-ADDRESS DATA 0 WAIT/ACTIVATE INDICATOR DATA 0 TERMINAL QUEUE * IFT MMUPAG=1 DATA 0 SAVE AREA USER ECB ADDRESS DATA DEVECB MMU ECB ADDRESS XIF * DWTA5 EQU *-DWFD01 DATA 0 DWTRC EQU *-DWFD01 RETURN CODE SAVE AREA DATA 0 DATA 0 DATA 0 DATA 0,0,0,0 STACK (3 LEVELS) DATA 0 ORDER SAVE AREA * EJECT DRFD02 * * DATA /8000 NVL INDICATOR 0 DATA /8000 NVL INDICATOR 1 DATA /8000 NVL INDICATOR 2 DATA /8000 NVL INDICATOR 3 DWTVO0 EQU *-DWFD01 VOLUME NAME NO 0 DATA /FFFF,/FFFF,/FFFF DWTVO1 EQU *-DWFD01 VOLUME NAME NO 1 DATA /FFFF,/FFFF,/FFFF DWTVO2 EQU *-DWFD01 VOLUME NAME NO 2 DATA /FFFF,/FFFF,/FFFF DWTVO3 EQU *-DWFD01 VOLUME NAME NO 3 DATA /FFFF,/FFFF,/FFFF DWTTP EQU *-DWFD01 TIMER POINTER DATA 0 DWTCIO EQU *-DWFD01 CIO START CIO A3,1,CUADR UNIT 0 CIO A3,1,CUADR+/10 UNIT 1 CIO A3,1,CUADR+/20 UNIT 2 CIO A3,1,CUADR+/30 UNIT 3 * EJECT DRFD02 * * IFT IBM=1 DWTBOE EQU *-DWFD01 BEGINNING OF EXTENT DATA 0,0,0,0 DWTEOD EQU *-DWFD01 END OF DATA DATA 0,0,0,0 DWTEOE EQU *-DWFD01 END OF EXTENT DATA 0,0,0,0 DWTCRN EQU *-DWFD01 CURRENT RECORD NO DATA 0,0,0,0 DWTDSS EQU *-DWFD01 DATA SET LABEL SECTOR DATA 0,0,0,0 * IFT IBM+MMUPAG=2 DWTPAG EQU *-DWFD01 PAGE ADDRESS TO USER BUFFER DATA 0,0 XIF EJECT DRFD02 * * DWT:FC EQU *-DWFD01 FILE CODE DATA /F8 DWTPAR EQU *-DWFD01 DEVICE DEPENDENT PARAMETERS DATA /FF00,/FF00,/FF00,/FF00 HEAD POS,LOCK/UNLOCK,2D/1S,TOSS/IBM DWTFOR EQU *-DWFD01 PRESENT FORMAT PARAMETER DATA 0 DWTCYN EQU *-DWFD01 PRESENT CYLINDER NUMBER DATA /FFFF DWTSEC EQU *-DWFD01 SECTOR NUMBER ON CYLINDER DATA 0 DWTWE1 EQU *-DWFD01 1ST WER REGISTER DATA 0 DWTRL EQU *-DWFD01 LENGTH OF IO DATA 0 DWTBA EQU *-DWFD01 BUFFER ADDRESS IFT MMUPAG=1 DATA 0,0 XIF IFT MMUPAG=0 DATA 0 XIF DWTIOR EQU *-DWFD01 CIO REGISTER DATA 0 * IFT MMUPAG=1 DEVECB EQU * DATA 0,0,0,0,0,0,0 XIF * * * END