ASMB,Q,R,C HED RT4G8 - DRIVER PARTITION LOADING CONTROL SEGMENT NAM RT4G8,5,90 92067-16323 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: RT4G8 * SOURCE PART #: 92067-18323 * REL PART #: 92067-16323 * WRITTEN BY: KFH * ****************************************************************** SPC 1 * * ENTRY POINT NAMES * ENT \\LDP * * EXTERNAL REFERENCE NAMES * EXT \DPLD,\PREL,\TBUF EXT \CBPA,\CPL2 EXT \CONV,\ABDO,\DSKA EXT \ADSK,\PTYP,\TMSK EXT \SPAC,\GNER,\MESS,\IRER,\ABOR EXT \ADBP,\NUMP EXT \IDX,\TIDN,\ID1,\ID3,\ID4,\ID5,\ID6,\ID8 EXT \IFIX,\FIX,\FIX1 EXT \CUBP,\UCBP,\ICBP,\CBPA EXT \SYS,\USRS,\USER EXT \LRBP,\URBP,\SRET EXT \DDON * * A EQU 0 B EQU 1 SUP ************************************************************************ * SKP *************************************************************************** * * 770913 * * 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 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 SKP * NOTE THE FOLLOWING RESOLVES ARITHMETIC DEF'S TO EXTERNALS * SEG8 CCA GET LOOP COUNTER STA TEMP1 SAVE LDB LSTAA GET ADDRESS OF LIST LOOP LDA B,I GET ADDRESS RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 STA B,I AND SAVE IT AGAIN INB ISZ TEMP1 JMP LOOP JMP \SRET RETURN TO MAIN * * LSTAA DEF *+1 ATBUF DEF \TBUF+0 SKP * PROGRAM CONSTANT FACTORS P10 DEC 10 P13 DEC 13 P15 DEC 15 P17 DEC 17 P24 DEC 24 M37 OCT 37 M177 OCT 177 M1000 OCT 1000 M1777 OCT 1777 M7777 OCT 77777 M3777 OCT 37777 M1776 OCT 177776 * LWSBP OCT 1645 * MES64 DEF *+1 ASC 9,PARTITION DRIVERS MESDP DEF *+1 ASC 2,DP DO NOT REARRANGE MESPD NOP THESE ASC 9, <>: LINES MESD1 DEF MESDP+8 SKP * * LOADING CONTROL FOR DRIVER PARTITIONS: * - CHOOSES THE NEXT PARTITION DRIVER TO RELOCATE * - ZERO-FILLS ANY REMAINING DRIVER PARTITION SPACE * - UPDATE DRIVER MAP TABLE ENTRIES WITH CORRECT * PHYSICAL DP PAGE # * * ON ENTRY: * A-REG = -1 IF DRIVER PARTITION #1 IS TO BE RELOCATED * = 0 IF DRIVER PARTITIONS #2 ONWARD ARE TO BE * RELOCATED WITH THE REMAINING PRD'S * \\LDP SSA,RSS JMP DP2ON GO LOAD DRIVER PARTITIONS #2 ... * * RELOCATE DRIVERS INTO DRIVER PARTITION #1 ONLY * ADA \PREL DETERMINE THE LAST WORD OF TA I STA LWTAI AND SAVE FOR COMPUTING SAM#0 IOR M1777 AND ROUND TO THE START OF THE INA NEXT PAGE STA DPADD SAVE LOGICAL STARTING ADDRESS OF DP'S JSB CPAG# CONVERT IT TO A PHYSICAL PAGE # AND STA PAGE# FOR UPDATING DVMAP ENTRIES * ADA DPLN ADD # PAGES PER PARTITION STA FPCOM AND SET FIRST COMMON PAGE ALF,ALF MOVE TO CORRECT FORMAT RAL,RAL AS A MEMORY ADDRESS STA LWDP1 AND SAVE AS LAST WORD OF A DP, +1 * LDA SDID GET IDENT INDEX OF SYSTEM DISK DRIVER AND M3777 TO BE RELOCATED STA CIDNT INTO DP #1 CLA SET PROGRAM TYPE STA \PTYP FOR SCDRV/IDSCN STA DPFLG SIGNAL DP RELOCATION MODE JSB \SPAC JSB \SPAC * JMP LOADD NOW LOAD DP #1 * DP1DN LDA LWDP1 SET THE RELOCATION ADDRESS FOR SSGA STA \PREL STA SSGA. AND SAVE FOR MPFT SETTING CCA TURN OFF DP RELOCATION STA DPFLG MODE JMP \DDON RETURN TO LOADING CONTROL IN RT4G3 SKP * * RELOCATE REMAINING PARTITION-RESIDENT DRIVERS INTO DP 'S #2 ONWARD * DP2ON STA \PTYP SET IDENT SCAN TYPE STA DPFLG SIGNAL DP RELOCATION MODE INA NOW SET THE # OF DP'S ALREADY STA DPNUM RELOCATED * LDA P17 SEND LDB MES64 HEADING: JSB SETHD "PARTITION DRIVERS" * * INITIALIZE FOR PARTITION DRIVER LOADING * CCA SET FOR TOP-DOWN LINK STA BPINC ALLOCATION ADA PBREL SAVE LOWEST LINK TO STA BPLMT ALLOCATE(LESS 1) STA HILNK AND HIGHEST SYSTEM LINK ALLOCATED * INA SET BP SCAN ARE TO LOWEST LINK STA \CUBP ABOVE HIGHEST SYSTEM LINK ADA \ADBP AND SAVE ITS RT4GN STA \ICBP IMAGE AREA * LDA LWSBP SET UPPER BP LINK SCAN AREA STA \UCBP BELOW SCOM * CCA ADA LOLNK SET FIRST LINK ADDRESS TO STA PBREL FOLLOW LAST TA-II LINK * CLA CLEAR SO THE SYSTEM-ONLY LINKS STA \LRBP ON BP WILL NOT STA \URBP BE SHARED * LDA M1000 FIXUP LINKS MUST GO IN STA HIBP HIGH BASE PAGE * * JSB DSKEV FORCE EVEN SECTOR BOUNDARY FOR DP #2 STA DSKDP AND SAVE DISK ADDR OF DP #2 (FOR $SBTB) * LDA LPSLB GET PHYSICAL PAGE # FOLLOWING INA THE SLOW BOOT/SAM #1 STA PAGE# AND SET STARTING PAGE FOR DP #2 * * JMP LOADD NOW LOAD THE DRIVER PARTITIONS * DPDON LDB PAGE# NEXT AVAILABLE PAGE # STB FPMBP IS THE MEMORY RESIDENT BASE PAGE * CMB,INB DETERMINE IF THERE WERE EVEN ADB \NUMP ENOUGH PHYSICAL PAGES SSB FOR THE DRIVER PARTITIONS JMP PGOV NOPE * LDA LPSLB DETERMINE THE # OF PAGES USED CMA BY DP'S #2 ONWARD ADA FPMBP STA DPNUM AND SAVE CCA TURN OFF DP STA DPFLG RELOCATION MODE * JMP \DDON RETURN TO RT4G3 FOR MEMORY RESIDENT LOADING * * PGOV LDA ERR61 SEND ERROR DIAGNOSTIC JSB \IRER NO MORE PHYSICAL PAGES ERR61 ASC 1,61 SKP * * SUBROUTINE LOADD: * LOADS DRIVER PARTITION #1, OR DRIVER PARTITIONS #2 ONWARD * * ON ENTRY THE FOLLOWING HAVE ALREADY BEEN SET UP: * - DPNUM CONTAINS THE # OF DP'S ALREADY BUILT * - BPINC,BPLMT,\CUBP,\ICBP,\UCBP,PBREL,\LRBP,\URBP INITIALIZED * FOR LINK ALLOCATION * - HIBP SET TO ALLOCATE LINKS IN UPPER BASE PAGE * - PAGE# INITIALIZED TO THE PHYSICAL PAGE # OF THE NEXT DP * * LOADD EQU * * * SEARCH FOR A PARTITION-RESIDENT DRIVER * NEWDP JSB SCDRV SCAN IDENTS JMP DPDON NO MORE - DONE WITH DP'S RSS GOT A PRD! JMP NEWDP NO, IT WAS AN SDA DRIVER * * PRINT DP HEADING * SHEAD LDA DPNUM CONVERT CMA PARTITION NUMBER LDB ATBUF TO ASCII JSB \CONV AND LDA \TBUF+2 STORE STA MESPD IN MESSAGE LDA PAGE# CONVERT PAGE # CMA,INA TO ASCII DECIMAL LDB MESD1 AND STUFF HERE. JSB \CONV LDA P24 PRINT : LDB MESDP DP XX <>: JSB \MESS PRINT: DP XX: JSB \SPAC * LDA \CBPA RESET THE CP LINK AREA TO "EMPTY" STA \CPL2 LAST CP AREA = LAST BP AREA STA CPLS LAST "SAVE" CP AREA = LAST BP AREA LDA DPADD SET STARTING RELOCATION STA \PREL ADDRESS LDB DPNUM DON'T CHANGE SPECIFICATION SZB MAPS YET IF STILL DP #1 JSB \USRS INITIALIZE \ABDO MAP * * LOAD THE DRIVER INTO THE PARTITION * LPRD LDA \ID3,I GET USAGE WORD CLB,INB AND SET IOR B THE LOADED BIT STA \ID3,I AND RESTORE * JSB \DPLD LOAD THE PROGRAM VIA \NLOD (RT4G4) JSB INCAD UPDATE PBREL & \PREL LDB LWDP1 GET LAST LOGICAL WORD ADDRESS CMB,INB OF A DP, AND CHECK FOR OVERFLOW ADB A OF THIS DRIVER'S RELOCATION SSB JMP SCDVM IT FIT, NOW GO UPDATE THE DVMAP ENTRIES * LDA ERR59 IRRECOVERABLE ERROR JSB \IRER SEND DIAGNOSTIC, AND THEN TERMINATE ERR59 ASC 1,59 SEND DRIVER IS TOO LARGE FOR A DP * * * SCAN THE DRIVER MAP TABLE FOR ENTRIES MATCHING * THE CURRENT DRIVER IDENT, AND UPDATE THE ENTRIES * TO THE STARTING PAGE OF ITS PARTITION. * SCDVM STB LEFTO SAVE NEGATIVE # WORDS LEFT IN DP JSB \SYS DVMAP IS IN THE SYSTEM MAP LDB DVMAP GET ITS MEMORY ADDRESS LDA CEQT AND THE NUMBER OF ENTRIES CMA SET A NEGATIVE STA TEMP1 LOOP COUNTER * SCDV1 ISZ TEMP1 BUMP ENTRY COUNTER RSS CONTINUE CHECKING FRO MATCHING IDENTS JMP MORE? DONE WITH THIS DRIVER - FIND NEXT JSB DPRW GET THE CONTENTS OF THE NEXT ENTRY RAL CHECK FOR A NON-UPDATED ENTRY SSA,RSS FROM A PRD-DRIVER JMP SCDV1 WAS AN SDA, OR UPDATED PRD AND M7777 CLEAR THE SIGN BIT RAR AND SHIFT BACK TO CORRECT POSITION CPA IMAIN IS THIS FOR THE CURRENT DRIVER? RSS YES, A MATCH JMP SCDV1 NO, CONTINUE THE SCAN * LDA PAGE# ??? GET STARTING PAGE OF THIS PARTITION ADB N1 MOVE BACK TO ENTRY ADDRESS JSB \ABDO AND UPDATE IT JMP SCDV1 LOOK FOR MORE OF THE SAME * * * SEE IF ANOTHER DRIVER WILL FIT INTO THIS PARTITION * MORE? LDA P10 RESET SCAN TO START AT BEGINNING STA CIDNT OF IDENT TABLE MORE1 JSB SCDRV SCAN FOR A PRD JMP ZFIL NO MORE, ZERO-FILL REMAINDER OF DP RSS JMP MORE1 AN SDA - TRY AGAIN * LDA \ID8,I GET THE DRIVER'S MAIN PROGRAM SIZE AND M3777 ADA LEFTO DOES IT FIT INTO DP? SSA,RSS JMP MORE1 NO, TRY FOR ANOTHER * JSB CPL? IF CPL'S IN EFFECT, GET ESTIMATED SIZE JMP MORE1 NOW IT'S TOO BIG, TRY FOR ANOTHER * LDA DPNUM DON'T CHANGE MAPS IF STILL DP #1 SZA JSB \USER RESET CORRECT OUTPUT MAP LDA \ID3,I GET USAGE WORD OF DRIVER CLB,INB AND SET IOR B THE LOADED BIT STA \ID3,I AND RE-STORE * LDA \ADSK GET THE CURRENT DISK ADDRESS STA EMDSK AND SAVE IN CASE OF BACKUP *TEMP* JSB \DPLD LOAD THE DRIVER AFTER PREV. ONE IN DP * * DETERMINE IF DP OVERFLOW OCCURRED - IN WHICH CASE BACKUP * MUST BE DONE * LDB LWDP1 GET LAST LOGICAL WORD ADDRESS OF A DP,+1 CMB,INB AND CHECK FOR OVERFLOW OF THIS ADB TPREL DRIVER'S RELOCATION SSB,RSS JMP DPOV TOO BAD! * STB LEFTO SAVE #WORDS STILL LEFT IN THIS DP JSB INCAD UPDATE \PREL & PBREL JMP SCDVM+1 GO FILL IN THIS DRIVER'S DVMAP ENTRIES * * DRIVER PARTITION OVERFLOW * DPOV JSB \SPAC SEND THE WARNING ONLY LDA P26 THAT A DP OVERFLOWED LDB BKUPM NO OPERATOR RECOVERY JSB \MESS * LDA IMAIN MAKE SURE THAT THE STA \TIDN CORRECT IDENT ENTRY JSB \IDX IS IN CORE JSB \ABOR NOT THERE! LDA \ID3,I NOW CLEAR ITS AND M1776 LOAD BITS STA \ID3,I LDA EMDSK RESET THE DISK ADDRESS TO STA \ADSK THE VALUE BEFORE THE DRIVER WAS LOADED JSB CLFIX CLEAR ANY FIXUP ENTRIES CREATED BY IT JMP MORE1 SEE IF ANY OTHER DRIVERS WILL FIT * * * ZERO-FILL THE REMAINDER OF THE DP SINCE NO MORE WILL FIT IN IT * ZFIL LDA DPNUM RESET TO USER'S MAP SZA JSB \USER FOR DP'S #2 ... CCA POSITION TO THE LAST ADA \PREL USED ADDRESS IN THIS DP STA B AND SAVE IOR M1777 ROUND TO LAST WORD ON PAGE CPA B ANY CHANGE? JMP NEXT? NO, SO NO FILL NECESSARY LDB A GET LAST WORD ADDRESS CLA AND ZERO-FILL UP TO AND INCLUDING JSB \ABDO THAT ADDRESS * * INITIALIZE FOR LOADING THE NEXT DRIVER PARTITION * NEXT? LDA DPNUM IF THIS WAS THE FIRST DP SZA,RSS JMP DP1DN THEN WE'RE DONE FOR NOW ISZ DPNUM ELSE BUMP TO THE NEXT DP # * JSB DSKEV FORCE OUTPUT OF LAST SECTOR LDA \PREL GET # WORDS LEFT IN CURRENT CMA,INA DRIVER PARTITION ADA LWDP1 JSB CPAG# AND CONVERT TO THE NUMBER OF AND M37 UNUSED PAGES IN IT CMA,INA AND SUBTRACT FOR DP LENGTH ADA DPLN TO DETERMINE ACTUAL NUMBER ADA PAGE# USED STA PAGE# NOW SET THE STARTING PAGE OF THE NEXT DP * LDA P10 RESET IDENT INDEX FOR STA CIDNT SCAN JMP NEWDP GO START A NEW DRIVER PARTITION * LEFTO NOP BKUPM DEF *+1 ASC 13,DRIVER PARTITION OVERFLOW P26 DEC 26 SPC 4 * * * CONVERT THE ADDRESS IN THE A-REG TO A PAGE # * CPAG# NOP ALF,RAL ROTATE PAGE BITS RAL TO LOW BYTE AND M1777 AND MASK THEM JMP CPAG#,I SKP * * SCDRV SCANS THE IDENT TABLE FOR DRIVERS OF TYPE 0 * WHOSE NAME BEGINS WITH "DV". * * RETURN: (P+1) END OF IDENTS * (P+2) PARTITION-RESIDENT DRIVER * (P+3) SDA DRIVER * * SCDRV NOP * NEXTD JSB IDSCN SCAN IDENTS FOR A TYPE 0 JMP SCDRV,I END OF IDENTS * LDA \ID1,I GET CHARACTERS 1 & 2 CPA "DV" OF NAME, AND COMPARE RSS MUST BEGIN WITH DV JMP NEXTD TRY NEXT DRIVER LDA \ID8,I CHECK IF AN EQT SSA,RSS DEFINED FOR IT (BIT 15 SET) JMP NEXTD NOPE LDB \ID3,I GET LOADED FLAG SLB IF ALREADY LOADED JMP NEXTD THEN SKIP IT * ISZ SCDRV BUMP EXIT RAL NOW CHECK IF AN SDA SSA (BIT 14 WAS SET) ISZ SCDRV YES, BUMP EXIT JMP SCDRV,I RETURN * "DV" ASC 1,DV SKP * * PRINT HEADING, INITIALIZE IDX * * THE SETHD SUBROUTINE PRINTS THE HEADINGS FOR THE DIFFERENT * TYPES OF PROGRAMS LOADED, SETS THE NO-PROGRAMS-LOADED-YET * FLAG, AND ORIGINS THE SCAN OF IDENT. * * CALLING SEQUENCE: * A = NO. CHARS. (POS.) IN MESSAGE * B = ADDRESS OF MESSAGE * JSB SETHD * * RETURN: CONTENTS OF A AND B ARE DESTROYED * SETHD NOP DST \TBUF SAVE THE MESSAGE JSB \SPAC NEW LINE DLD \TBUF NOW JSB \MESS PRINT HEADING JSB \SPAC NEW LINE CCA STA LFLAG SET PROGRAMS-LOADED FLAG = -1 LDA P10 GET FIRST IDENT INDEX STA CIDNT SET IDENT ADDRESS FOR ID SCAN JMP SETHD,I RETURN