ASMB,Q,R,C HED RT4G5 - I/O TABLE GENERATION SEGMENT. NAM RT4G5,5,90 92067-16320 REV.2001 790817 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 3 ****************************************************** * * NAME: RT4G5 * SOURCE PART #: 92067-18320 * REL PART #: 92067-16320 * WRITTEN BY: JJC,KFH,JH,GAA * ****************************************************** SPC 1 * * ENTRY POINT NAMES * ENT \IOTB,\TBLS * * EXTERNAL REFERENCE NAMES * EXT \LSTS,\TLST EXT \LST1,\LST4,\LST5 EXT \IDXS,\IDX,\TIDN EXT \ID6,\ID8 EXT \IFIX,\FIX,\PFIX EXT \FIX1,\FIX2,\FIX3,\FIX4 EXT \LNKX,\LNK,\LNKS EXT \LNK1,\LNK2,\LNK3 * EXT \CURL,\CPL2,\TBUF EXT \SYS,\USER EXT \SRET EXT \OCTN,\CONV,\GETN,\GINT,\GET#,\GETC,\DCON EXT \ADBP,\NABP,\CMFL EXT \READ,\SPAC,\GNER,\INER,\ABOR,\MESS,\IRER EXT \ABDO,\ADSK EXT \SSID,\ASKY,\SKYA EXT \PREL * A EQU 0 B EQU 1 SUP ************************************************************************ * SKP *************************************************************************** * * 780126 * * THE FOLLOWING BLOCK OF STORAGE FOR VARIABLES PRECEEDS, * AND IS REFERENCED BY, EACH SEGMENT. IT IS NOT OVERLAID * AS EACH NEW SEGMENT IS LOADED INTO MEMORY. * * THE LOCATION OF EACH VARIABLE MUST BE THE SAME IN ALL * SEGMENTS. IF A CHANGE IS MADE, MAKE THE SAME CHANGES * IN THE REST OF THE SEGMENTS. * *************************************************************************** * * TB30 BSS 160 TRACK MAP TABLE/HEADER RECORD BUFFER * ILIST BSS 64 USER SYSTEM PROG IDENT ADDR LIST CURIL BSS 1 CURRENT ILIST ADDRESS * SYSCH BSS 1 SUBCHANNEL OF SYSTEM UNIT. DCHNL BSS 1 CHANNEL OF SYSTEM DISK UNIT AUXCH BSS 1 SUBCHANNEL OF AUX UNIT. DSIZE BSS 1 DISK SIZE -NO. OF TRACKS. #SUBC BSS 1 # DISC SUBCHANNELS DEF'D (7905/7920) DAUXN BSS 1 AUXILIARY DISK SIZE. ADS# BSS 1 AUX DISC SECTORS/TRACK. * * RELOCATION BASE TABLE. RBTA BSS 1 ABSOLUTE PROGRAM BASE. TPREL BSS 1 CURRENT PROGRAM BASE ADDRESS. TPBRE BSS 1 BASE PAGE RELOCATION ADDRESS. COMAD BSS 1 CURRENT COMMON RELOCATION BASE. BSS 1 ABS PROGRAM BASE FOR MR CODE. * WDCNT BSS 1 TEMPORARY WORD COUNTER. DSKSY BSS 1 INITIAL ID SEGMENT DISK ADDRESS IDSP BSS 1 POSITION OF 1ST ID SEG. IN SECT TTYCH BSS 1 SYSTEM TTY CHANNEL NO. * PLFLG BSS 1 PROGRAM LOAD. FLAG = -1/0 = L/NL DSCNT BSS 1 DISK SEGMENT SECTOR COUNT * NXFLG BSS 1 ENT/EXT FLAG = -1/0 EXCNT BSS 1 SYMBOL COUNTER * LCNT BSS 1 CURRENT \LBUF COUNT DCNT BSS 1 CURRENT DBUF COUNT CURAI BSS 1 CURRENT IBUF COUNT * CPLS BSS 1 ADDRESS OF TOP OF FIXED CP LINK IMAGE CPL1 BSS 1 ADDRESS OF LOW CURRENT PAGE LINK SPECS. CPL1H BSS 1 NUMBER OF CURRENT PAGE LINKS ASSIGNED CPL2H BSS 1 IN LOW AND HIGH AREA RESPECTIVELY URBP1 BSS 1 LWA R/T DISC RES BP LINK AREA CURAK BSS 1 CURRENT KBUF ADDRESS * CURAT BSS 1 CURRENT \TBUF ADDRESS TCNT BSS 1 CURRENT \TBUF COUNT * CURAP BSS 1 CURRENT PLIST ADDRESS * AMAD BSS 1 CURRENT MLIST ADDRESS * IXCNT BSS 1 ID EXTENSION COUNT IDEXC BSS 1 CURRENT ID EXT'S USED IDEX BSS 1 ADDRESS OF ID EXTENSION TABLE * LICNT BSS 1 LONG ID SEGMENT COUNT SSCNT BSS 1 BG. SEG ID COUNT * DSKID BSS 1 DISK ID SEGMENT ADDRESS KEYCN BSS 1 TOTAL KEYWORD COUNT KEYCT BSS 1 CURRENT KEYWORD COUNT * MLIST BSS 11 MEMORY MAP BUFFER * TEMP1 BSS 1 TEMP2 BSS 1 LWH1 BSS 1 LWH2 BSS 1 LWH3 BSS 1 LWH4 BSS 1 L01 BSS 1 * FSYBP BSS 1 FIRST WORD SYS BP LINKAGE SYSAD BSS 1 CURRENT ID SEGMENT ADDRESS * TBREL BSS 1 CURRENT BP RELOC ADDR PBREL BSS 1 INITIAL BP RELOC ADDR * RELAD BSS 1 CURRENT CORE RELOCATION ADDRESS * BSBAD BSS 1 BG SEGMENT BP RELOC ADDR BSPAD BSS 1 BG SEGMENT PROG RELOC ADDR * LFLAG BSS 1 PROGRAMS-LOADED FLAG IMAIN BSS 1 CURRENT MAIN IDENT INDEX. HDFLG BSS 1 HEADING FORMAT FLAG CIDNT BSS 1 CURRENT MAIN IDENT INDEX. * AEQT BSS 1 ADDRESS OF EQUIPMENT TABLE CEQT BSS 1 NO. ENTRIES IN EQUIPMENT TABLE SPLCO BSS 1 SPOOL EQT COUNT DVMAP BSS 1 ADDRESS OF DRIVER MAP TABLE * DPFLG BSS 1 DP RELOCATION FLAG, 0=YES, -1=NO DPLN BSS 1 PAGE LENGTH OF DRIVER PARTITION DPADD BSS 1 START ADDR OF DRIVER PARTITION DSKDP BSS 1 DISK ADDRESS OF DP #2 PAGE# BSS 1 NEXT PHYSICAL PAGE TO ALLOCATE DPNUM BSS 1 CURRENT DP# -1, OR TOT DP PAGES SDID BSS 1 IDENT IDEX OF SYS DISK DRIVER LWDP1 BSS 1 LAST WORD OF DP, +1 FWSDA BSS 1 FIRST WORD OF SDA * ASQT BSS 1 ADDR OF DEVICE REFERENCE TABLE CSQT BSS 1 NO. ENTRIES IN DEV. REF. TABLE * AINT BSS 1 ADDRESS OF INTERRUPT TABLE * DSKIN BSS 1 DISK ADDR OF INT CODE RECORD INTCN BSS 1 RECORD COUNT OF INT CODE * IDSAV BSS 1 INDEX OF CURRENT IDENT. DSKMN BSS 1 INITIAL MAIN DISK ADDRESS BSSDP BSS 1 INITIAL DISK RES MAIN BSS DISP PRENT BSS 1 PRIMARY ENTRY POINT DBLAD BSS 1 CURRENT DBL ADDRESS REKEY BSS 1 INSTRUCTION TYPE BYTE INSCN BSS 1 INSTRUCTION TYPE COUNTER INSTR BSS 1 CURRENT INSTRUCTION PAGNO BSS 1 CURRENT PAGE NO. OPRND BSS 1 CURRENT OPERAND PLGTH BSS 1 PROGRAM LENGTH * DRT2 BSS 1 DISK DRT ENTRY ( SYSTEM) DRT3 BSS 1 AUX DISK DRT ENTRY * LIBFG BSS 1 LDTYP BSS 1 * SCH1 BSS 1 INDEX OF IDENT OF PGM TO BE SCHEDULED SCH3 BSS 1 ADDRESS OF CURRENT ID SEGMENT SCH4 BSS 1 ADDRESS OF THE SCHEDULED PGM ID SEG FGBGC BSS 1 BACKGROUND USING FG COMMON FLAG $LIBR BSS 1 INDEX OF $LIBR ENT $LIBX BSS 1 INDEX OF $LIBX ENT CUPRI BSS 1 * BLLO BSS 1 -(LOWER BUFFER LIMIT) BLHI BSS 1 -(UPPER BUFFER LIMIT) * MEM6 BSS 1 MEM12 BSS 1 * COMRT BSS 1 MAXIMUM RT COM LENGTH COMBG BSS 1 MAXIMUM BG COM LENGTH COMSZ BSS 1 #WORDS COMMON DECLARED IN CURRENT MAIN RTCAD BSS 1 RT COMMON ADDRESS BGCAD BSS 1 BG COMMON ADDRESS FPCOM BSS 1 FIRST PAGE OCCUPIED BY COMMON LPCOM BSS 1 LAST PAGE CONTAINING ANY COMMON * FPSAM BSS 1 1ST PAGE CONTAINING S.A.M. FWSAM BSS 1 1ST WORD CONTAINING S.A.M. SYMAD BSS 1 VALUE FOR AVMEM IN SCOM SAM#1 BSS 1 SIZE OF FIRST CHUNK OF SAM SAM#2 BSS 1 SIZE OF SECOND CHUNK OF SAM SAM2P BSS 1 START PAGE OF SAM #2 LWTAI BSS 1 LAST WORD OF TABLE AREA I FOR SAM#0 FWPRV BSS 1 FIRST WORD FOR PRIVILEGED PROGRAMS * FWSYS BSS 1 FIRST WORD OF SYSTEM CODE LPSYS BSS 1 LAST PAGE CONTAINING SYS LWSYS BSS 1 LAST WORD OF SYSTEM LPSLB BSS 1 LAST PAGE OF SLOW BOOT LWSLB BSS 1 LAST WORD OF SLOW BOOT MTYPE BSS 1 MAIN PROGRAMS'S TYPE * HIBP BSS 1 BP LINK MODE FOR FIXUP ENTRIES LOLNK BSS 1 LOW LINK FOR SSGA,LIB, OR SYS HILNK BSS 1 HI LINK USED BY MEM RES PRG BPINC BSS 1 BP LINK ALLOCATION MODE, -1=DOWN,1=UP BPLMT BSS 1 LAST AVAIL BP LINK IN CURRENT MODE, +1 * TPMAX BSS 1 HWM FOR RELOCATION OF BG MAINS & SEGS MAXPT BSS 1 NUM PARTS. ALLOWED MAT. BSS 1 ADDRESS OF MEMORY ALLOCATION TABLE * SSGA. BSS 1 FWA SSGA MAP. BSS 1 PTR TO MEU RES MAP MPFT. BSS 1 PTR TO MPFT * EMLNK BSS 1 EMA SYMBOL'S LINK EMLST BSS 1 LST INDEX OF EMA SYMBOL EMDSK BSS 1 DISK ADDR OF EMA PROGRAM * * MEMORY RESIDENT AREA POINTERS * MRACM BSS 1 MR ACCESS COMMON FLAG (>0 IF YES) LBCAD BSS 1 FIRST WORD OF MEMORY RES LIBRARY LEND BSS 1 LAST WORD OF MEMORY RES LIBRARY FWMRP BSS 1 FIRST WORD OF MEMORY RES PROGRAM AREA EMRP BSS 1 LAST WORD OF MEMORY RES PROGRAM AREA FPMRP BSS 1 FIRST PAGE OF MEMORY RES PROGRAM AREA FPMBP BSS 1 PAGE # FOR MEMORY RES BASE PAGE MRP# BSS 1 # PAGES OCCUPIED BY MRL & MRP'S DSKMB BSS 1 DISK ADDRESS OF MEMORY RES BASE PAGE DSKMR BSS 1 DISK ADDRESS OF MEMORY RESIDENT LIB/PROG AREA DSKBP BSS 1 SYSTEM DISK ADDRESS * DSKAV BSS 1 NEXT AVAILABLE DISK ADDRESS DSKLC BSS 1 DISK ADDRESS OF LIBRARY CODE DSKLB BSS 1 DISK ADDR OF LIBRARY ENTRY PTS DSKUT BSS 1 UTILITY PROG DISK ADDRESS DSKBS BSS 1 DISK ADDR OF MAIN BG DISK RES BP DSKBR BSS 1 CURRENT MAIN BG DISK RES DISK AD ADICT BSS 1 ADDR OF DISK DICTIONARY LBCNT BSS 1 RESIDENT LIBR ENTRY PT COUNT SYCNT BSS 1 SYSTEM ENTRY POINT COUNT KEYAD BSS 1 CURRENT KEYWORD ADDRESS * SYBAD BSS 1 ADDR OF FIRST BP LINK FOR BG IDSAD BSS 1 ADDR OF FIRST ID SEGMENT ABSID BSS 1 IDENT ADDR FOR NEXT BG SEG SCAN IDMBS BSS 1 BG MAIN ADDRESS FOR BS REF * SYTRK BSS 1 DISC ADDR WHERE SYSTEM BEGINS - TRACK SYSEC BSS 1 DISC ADDR WHERE SYSTEM BEGINS - SECTOR * SSGAF BSS 1 SSGA ACCESS FLAG SPAR2 BSS 1 SPARE VARIABLE SPAR3 BSS 1 SPARE VARIABLE SPAR4 BSS 1 SPARE VARIABLE SPAR5 BSS 1 SPARE VARIABLE * ********************************************************* * * * END OF COMMON STORAGE BLOCK FOR ALL SEGMENTS. * * * ********************************************************* * SPC 4 AILST DEF ILIST ATB30 DEF TB30 SKP * * NOTE THE FOLLOWING RESOLVES DEF'S TO EXTERNALS * GIO LDA N GET LOOP COUNTER STA TEMP1 SAVE IN TEMP LOCATION LDB LSTAA GET ADDRESS OF WHERE LIST ROUTINE LOCATED LOOP LDA B HERE WE CHASE DOWN OUR OWN LDA A,I INDRECTS RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 STA B,I AND SAVE IT AGAIN INB ISZ TEMP1 DONE? JMP LOOP NO JMP \SRET RETURN TO MAIN. * SPC 1 N DEC -1 LSTAA DEF *+1 ATBUF DEF \TBUF+0 SKP * THIS SECTION OF CODE GENERATES THE I/O TABLES FOR THE SYSTEM. * THESE INCLUDE THE EQUIPMENT TABLE (EQT), DEVICE REFERENCE * TABLE (DRT), INTERRUPT TABLE (INT), AND DRIVER MAP TABLE (DVMAP). * * THE EQT RECORDS HAVE THE FOLLOWING FORMAT: * * N1,DVRN2<,D><,B><,T><,X><,S><,M> * * N1 = CHANNEL NO. (2 OCTAL DIGITS) * N2 = DRIVER CLASS. CODE (2 OCTAL DIGITS) * D = DMA FLAG (OPTIONAL) * B = BUFFERING FLAG (OPTIONAL) * T = TIME-OUT VALUE TO BE ENTERED * X = EQT EXTENSION SIZE TO BE ENTERED * S = SYSTEM DRIVER AREA * M = SYSTEM DRIVER AREA WITH MAPPING * * IF T IS ENTERED, A VALUE FOR THE DEVICE'S TIME-OUT * CLOCK MUST BE NEXT ENTERED IN RESPONSE TO: * ' T = ' * THE OPERATOR MUST ENTER A POSITIVE DECIMAL NUMBER * OF UP TO FIVE DIGITS. THIS IS THEN THE NUMBER OF * TIME BASE GENERATOR INTERRUPTS (10 MSEC INTERVALS) * BETWEEN THE TIME IO IS INITIATED ON THE DEVICE AND * THE TIME AFTER WHICH THE DEVICE SHOULD HAVE INTERRUPTED. * IF THE DEVICE HAS NOT INTERRUPTED BY THIS TIME, IT * IS CONSIDERED TO HAVE TIMED-OUT. * * * EACH DRT RECORD CONSISTS OF A 2-DIGIT NO. SPECIFYING THE * CORRESPONDING ENTRY IN THE EQUIPMENT TABLE * AND AN OPTIONAL 1-DIGIT NO. SPECIFYING A * SUBCHANNEL WITHIN THAT ENTRY. FOR EXAMPLE, IN * RESPONSE TO THE MESSAGE: 5 = ?, THE RESPONSE 6 INDICATES THAT * THE LOGICAL UNIT NO. 5 IS TO USE DEVICE 6 IN EQT. * WHEREAS THE RESPONSE 6,2 INDICATES THAT THE * LOGICAL UNIT NO. 5 IS TO USE SUBCHANNEL 2 OF * DEVICE 6 IN EQT. * * * THE INT RECORDS HAVE ONE OF THE FOLLOWING FORMATS: * * N1,EQT,N2 * N1,PRG,NAME * N1,ENT,ENTRY * N1,ABS,N3 * * N1 = CHANNEL NO. (2 OCTAL DIGITS - MUST BE IN INCREASING ORDER) * EXCEPTION: IF N1 = 04 (POWER - FAIL), * THIS ENTRY DOES NOT HAVE TO BE IN ORDER. ALSO, * ONLY AN ENT OR AN ABS TYPE ENTRY IS ACCEPTED * FOR N1 = 04. * N2 = EQT NO. * NAME = PROGRAM NAME TO BE SCHEDULED * ENTRY = ENTRY POINT TO WHICH TRANSFER IS TO BE MADE * N3 = ABSOLUTE VALUE (6 OCTAL DIGITS) * * * GENERATE EQUIPMENT TABLE (EQT) * \IOTB NOP JSB \SPAC SEND A SPACE LDA PAGE# CONVERT CURRENT PAGE # CMA,INA TO DECIMAL ASCII LDB MS32A AND STUFF IN MESSAGE. JSB \CONV STUFF. LDA P30 LDB MES32 JSB \MESS PRINT: TABLE AREA I <>: * JSB \SPAC MAKE IT LOOK NICE. LDA \PREL SET STARTING ADDRESS STA AEQT OF EQT'S CLA STA CEQT CLEAR NO. OF EQT ENTRIES STA SPLCO CLEAR THE SPOOL EQT COUNT STA BPONL ?AND THE BASE PAGE ONLY FLAG CCA SET DRT2 AND STA DRT2 DRT3 STA DRT3 TO IMPOSSIBLE NUMBERS LDA ATB30 ADA P65 SET FOR HEADER RECORD STA HEADR STORAGE JSB \SPAC LDA P22 LDB MES25 MES25 = ADDR: EQT TABLE ENTRY JSB \MESS PRINT: EQUIPMENT TABLE ENTRY * JSB SFIX GET A FIXUP ENTRY IF NEEDED SEQT JSB \SPAC SEND \SPAC LDA CEQT CPA P63 OVER LAST ALLOWED DEFINITION? JMP BLEQT YES, MAX OF 63 CMA LDB ATBUF THE CURRENT EQT JSB \CONV NUMBER TO ASCII LDA \TBUF+2 SET IN THE SETNO STA MESEQ EQT MESSAGE BUFFER LDA P7 GET MESSAGE LENGTH LDB MESQE SEND MESSAGE "EQT XX?" AND JSB \READ GET EQT RECORD FROM TTY LDA N2 JSB \GETN MOVE 2 CHARS TO \TBUF CPA "/E" CHARS = /E? JMP EQTFX YES - SET DEVICE REF TABLE (SQT) * LDA CEQT GET NUMBER OF DEFINED EQT'S CPA P63 IF OVER LIMIT JMP EQTOV THEN SEND ERROR UNTIL /E JSB \GINT RE-INITIALIZE LBUF SCAN LDA P2 JSB \GET# GET 2 OCTAL DIGITS, CONVERT JMP IOERR INVALID DIGIT JSB \GETC GET NEXT CHAR FROM LBUF CPA BLANK CHAR = COMMA? JMP CLDBU YES - SET CHNL NO., CLEAR D,B,U * IOERR LDA ERR24 SET CODE = INVALID CHNL IN EQT JSB \GNER PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * BLEQT LDA BLNKS SET EQT # TO BLANKS JMP SETNO IN PROMPT * EQTOV LDA ERR35 SET CODE = OVER 63 DEFINED EQT'S CMA,INA SIGNAL NO TR TO THE OPERATOR JSB \GNER PRINT THE DIAGNOSTIC JMP SEQT CONTINUE UNTI /E ENTERED * CLDBU LDB \OCTN GET I/O CHANNEL NO. STB IOADD SET I/O ADDRESS CLA STA IODMA CLEAR DMA FLAG STA IOBUF CLEAR AUTOMATIC BUFFERING FLAG STA IOSDM CLEAR SDA/MAPPING WORD STA XLNTH CLEAR EXTENSION LENGTH STA \FIX3,I CLEAR THE STA \FIX4,I FLAG WORDS STA \FIX2,I STA TVAL AND TIME OUT VALUE CCA STA TFLAG CLEAR TIME-OUT FLAG LDA N2 JSB \GETN MOVE 2 CHARS TO \TBUF CPA "DV" CHAR = "DV"? CLA,INA,RSS YES - CONTINUE JMP DVERR INVALID DRIVER NAME JSB \GETN MOVE 1 CHAR TO \TBUF (CHAR 3) JMP STYPE GET DRIVER TYPE * DVERR LDA ERR25 SET CODE = INVALID DRIVER NAME JSB \GNER PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * STYPE STA X. SAVE KEY CHARACTER (R FOR STD.) LDA N2 JSB \GETN MOVE 2 CHARS TO \TBUF STA .YY SAVE 2 ASCII CHARS FOR I.XX,C.XX CCA ADA \CURL ADJUST CURRENT LBUF ADDR STA \CURL RESET \CURL TO CONVERT TYPE LDA P2 JSB \GET# GET 2 OCTAL CHARS, CONVERT JMP DVERR INVALID DRIVER NAME * LDB \OCTN GET DRIVER TYPE BLF,BLF ROTATE TO UPPER B STB IOTYP SET DRIVER TYPE JSB \GETC GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP GENEQ SCAN FOR I.XX, C.XX CPA BLANK CHAR = COMMA? RSS YES - CONTINUE JMP DVERR NO - INVALID DRIVER NAME * CCA STA \FIX1,I STA DFLAG SET DMA-IN FLAG STA BFLAG SET BUFFERING-IN FLAG STA XFLAG SET EQT EXTEND FLAG STA SFLAG SET SDA FLAG STA MFLAG SET MAPPING FLAG * INDBU CCA STA \CMFL SET COMMA FLAG = NO COMMA IN JSB \GETC GET NEXT CHAR FROM LBUF CPA "D" CHAR = D? JMP SEDMA YES - SET DMA CODE * CPA "B" CHAR = B? JMP SETBU YES - SET BUFFERING CODE * CPA "T" CHAR = T? JMP SETIM YES - SET TIME-OUT FLAG * CPA "X" CHAR = X? JMP SETEX YES GO SET UP EQT EXTENSION * CPA "S" CHAR = S? JMP SETSD YES - SET SDA CODE FOR DVMAP * CPA "M" CHAR = M? JMP SETSM YES = SET SDA/MAPPING CODE FOR DVMAP * UNERR LDA ERR26 SET CODE = INVALID D,B,T,X JSB \GNER PRINT DIAGNOSTIC JMP SEQT GET NEXT EQT RECORD * SETIM ISZ TFLAG SKIP - FIRST T ENTERED JMP UNERR DUPLICATE T'S ENTERED JMP TEQU GET THE TIME OUT VALUE * * EQTST JSB \GETC GET NEXT CHAR FROM LBUF CPA ZERO END OF BUFFER? JMP GENEQ SCAN FOR I.XX, C.XX * CPA BLANK CHAR = COMMA? JMP INDBU YES - GET NEXT D,B,U, ENTRY JMP UNERR NO - INVALID D,B,U CHARACTER * SEDMA ISZ DFLAG SKIP - FIRST D ENTERED JMP UNERR DUPLICATE D'S ENTERED * LDA MSIGN SET BIT 15 = 1 FOR DMA FLAG STA IODMA SET DMA CODE JMP EQTST TEST FOR NEXT OPERAND * SETBU ISZ BFLAG SKIP - FIRST B ENTERED JMP UNERR DUPLICATE B'S ENTERED * LDA BIT14 SET BIT14 = 1 STA IOBUF SET AUTOMATIC BUFFERING CODE JMP EQTST TEST FOR NEXT OPERAND * SETSD ISZ SFLAG SKIP - FIRST S ENTERED JMP UNERR DUPLICATE S'S ENTERED * LDA BIT14 SET BIT 14 = 1 JMP SETS2 IN IOSDM FOR DVMAP * SETSM ISZ MFLAG SKIP - FIRST M ENTERED JMP UNERR DUPLICATE M'S ENTERED * LDA BIT13 SET BIT 13 (MAPPING) IOR BIT14 AND BIT 14 (SDA) TO 1 SETS2 IOR IOSDM IN WORD FOR DVMAP STA IOSDM JMP EQTST TEST FOR NEXT OPERAND * SETEX ISZ \FIX1,I SKIP FIRST X ENTERED JMP UNERR NO BITCH * TEQU STA I.XX SAVE THE TYPE FLAG JSB \GETC GET THE NEXT CHARACTER CPA EQU IF NOT "=" RSS JMP UNERR BITCH * LDA N5 GET DECIMAL NUMBER JSB \GET# JMP UNERR ILLEGAL NUMBER SO BITCH * LDB I.XX GET THE TYPE FLAG CPB "X" IF EXTENSION JMP QEXT SAVE THE LENGTH OF THE EXTENSION STA TVAL SET THE TIME OUT VALUE JMP EQTST GO GET THE NEXT OPERAND * QEXT STA XLNTH SAVE EXTENSION SIZE STA \FIX3,I FOR BUILDING IT LDB \PREL SET ADDRESS OF ADB P12 EQT 13 STB \FIX2,I FOR LATER FIXUP JMP EQTST GET NEXT OPERAND * GENEQ LDA X. GET THE KEY CHARACTER STA SFLAG AND SAVE **TEMPORAY** CPA "R" IF R THEN USE LDA "." A PERIOD. IOR "INL" SET "I" IN UPPER HALF STA X. SET FOR LST SEARCH LDB ENT GET ADDRESS JSB \LSTS LOOK FOR SYMBOL JMP DVERR ILLEGAL DRIVER ENT NOT FOUND. * LDA \LST4,I RETRIEVE IDENT INDEX OF STA \TIDN DRIVER MAIN, AND JSB \IDX SET IT UP JSB \ABOR BETTER BE THERE! LDA \ID6,I MUST BE A TYPE 0 MODULE AND M177 SZA JMP DVERR ELSE ERROR * LDB IOADD GET CHANNEL # CPB DCHNL WAS IT THE SYSTEM DISC RSS CHANNEL? JMP COMPS NO CLA MAKE SURE SDA JMP CHSM WASN'T SPECIFIED FOR IT * COMPS LDA \ID8,I WAS AN EQT PREVIOUSLY SSA,RSS DEFINED FOR THIS DRIVER? JMP SETFX NO, SO NEEDN'T CHECK AND SMBIT THE S,M SPECIFICATIONS CHSM CPA IOSDM (OR ABSENCE OF EITHER/BOTH) JMP SETFX OK, NEW CONFORMS WITH OLD, DISC NOT SDA * LDA ERR23 SET CODE = EQT DOESN'T DEFINE JSB \GNER SAME S,M SPECS FOR DRIVER - OR THE JMP SEQT SYSTEM DISC WAS SPECIFIED AS SDA * SETFX JSB SFIX GET A NEW FIXUP ENTRY LDA HIDIR SET 0 INSTR, HIBP BIT, DIRECT ADDR STA \FIX2,I CLA STA \FIX3,I CLEAR OFFSET CCA SET ADA \TLST LST INDEX OF STA \FIX4,I I.XX STA TEMP2 SAVE FOR NOCXX LDA \PREL GET EQT2 ADDRESS WHERE INA I.XX ADDRESS IS TO BE STA \FIX1,I STORED DURING FIXUP * JSB SFIX GET A NEW FIXUP ENTRY LDA HIDIR SET 0 INSTR CODE, HIBP BIT, STA \FIX2,I AND DIRECT ADDRESS CLA STA \FIX3,I CLEAR OFFSET LDA \PREL SET EQT3 ADDRESS ADA P2 WHERE C.XX ADDRESS IS TO BE STA \FIX1,I STORED DURING FIXUP * LDA X. GET THE I. OR WHAT EVER XOR B5000 CHANGE IT TO C. OR WHAT EVER STA X. AND RESET LDB ENT SCAN THE LST JSB \LSTS FOR THE "C.YY" ENTRY POINT. JMP NOCXX C.XX NOT FOUND IN LST CCA SET LST ADA \TLST INDEX OF C.XX * STCXX STA \FIX4,I IN FIXUP ENTRY LDA X. IF THIS IS CPA "CS" DVS43 THEN LDA .YY COUNT CPA "43" A ISZ SPLCO SPOOL EQT * LDA IOADD SAVE THE CHANNEL AND AND M377 TYPE IN THE HEADER ALF,ALF RECORD LDB IOTYP BLF,BLF IOR B STA HEADR,I ISZ HEADR * CLA LDB \PREL GET THE ADDRESS JSB \ABDO PUT OUT I/O LIST POINTER CLA ENTRY POINT TO BE FIXED UP JSB \ABDO OUTPUT ABSOLUTE DVRXX ENT ADDR LDA C.XX GET DRIVER EXIT POINT JSB \ABDO OUTPUT ABSOLUTE DVRXX COMP. ADDR LDA IODMA GET DMA CODE IOR IOBUF ADD BUFFERING CODE IOR IOADD ADD CHANNEL NO. JSB \ABDO OUTPUT D,B,U, CHANNEL * LDA IOTYP GET EQUIPMENT TYPE CODE AND M7000 ISOLATE UPPER 7 BITS SZA SKIP - TYPE = 0,1 CLA,RSS SET STATUS = 0, SKIP LDA BLANK SET STATUS = 40(8) IOR IOTYP ADD EQUIPMENT TYPE CODE JSB \ABDO OUTPUT EQUIPMENT TYPE, STATUS * ADB P6 INDEX TO EQT12 LDA XLNTH GET EXTENSION SIZE JSB \ABDO AND SEND IT TO THE DISC INB STEP TO EQT14 LDA TVAL GET THE TIME OUT VALUE SZA IF ZERO LEAVE IT CMA ELSE SET IT TO ONES COMPLEMENT JSB \ABDO SEND TIME OUT TO EQT INB SET THE ADDRESS STB \PREL OF THE NEXT EQT * LDB DDVMP GET DVMAP BUFFER ADDRESS ADB CEQT FOR STORAGE LDA IOSDM SET POSSIBLE S,M BITS IOR MSIGN AND EQT DEFINED BIT IOR \ID8,I STA \ID8,I IN DRIVER IDENT RAL POSITION S BIT TO 15 SSA SKIP IF NOT SDA JMP SDAEQ GO SET DVMAP ENTRY FOR SDA DRIVER * CCA GET DRIVER IDENT INDEX ADA \TIDN FOR SCAN ON RELOCATION IOR BIT14 SET TO DISTINGUISH FROM SDA,PAGE # IN ENTRY STA B,I AND STORE IN DVMAP ENTRY JMP NEXTE SET UP FOR NEXT EQT * SDAEQ STB MFLAG SAVE DVMAP ENTRY ADDR **TEMP** LDB MSIGN BIT 15 MUST BE SET FOR SDA RAL POSITION M BIT TO 15 SSA SKIP IF NO MAPPING INB SET BIT 0 IF DRIVER MAPS STB MFLAG,I AND STORE IN DVMAP * NEXTE JSB SFIX GET A NEW FIXUP TABLE ENTRY IF NEEDED ISZ CEQT INCR EQT ENTRY COUNT JMP SEQT PROCESS NEXT EQT RECORD *