ASMB,R,Q,C * NAME: LOAD * SOURCE: 92070-18156 * RELOC: 92070-16156 * PGMR: HLC * * * **************************************************************** * * (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. * * **************************************************************** * * NAM LOAD,0 92070-16156 REV.1941 800124 ENT $EX08,$EX28,$LDAB,$XEQ2 ENT $LDRS,$LOAD,$LDBG ENT $XS1,$XS2,$$LOA,$.LOA * EXT $XQT,$LIST,$XEQ,$A EXT $LOBP,$LOW,$RQP2,$DREL EXT $SCXX,$HIGH,$TRAK EXT $CSEG,$HIBP,$SUSP EXT $PRIO,$PRAM,$RQP3 EXT $NAME,$WRKS,$EXEX EXT $XSIO,$SCHD,$ZZZZ EXT $IDSQ,$ERMG,$IOCL EXT $XEQ1,$TEST,$BGRS EXT $XEQ3,$SWAP,$SISZ EXT $FWBG,$WORK * A EQU 0 B EQU 1 * $EX08 EQU * JSB AVAIL SUSPEND CALLER IF $LOAD NOT AVAILABLE LDB $LOBP,I (A=0) RRL 6 SHIFT SEGMENT COUNT TO A CMA,INA,SZA,RSS JMP SC05 NO SEGMENTS, NAME NOT FOUND STA MLU STA BLU LDA $LOW,I SEGMENT IDENTIFIERS START AT LOW MAIN STA MRQ CLA LP1 LDB =D-7 CHECK ALL SEGMENT IDENTIFIERS ADA MRQ,I ISZ MRQ FOR ACCIDENTAL ALTERATION INB,SZB JMP LP1+1 CPA MRQ,I CLA,RSS CHECKSUM OK JMP SC05 NAME NOT FOUND, SOMEONE CLOBBERED IT ISZ MRQ ISZ MLU JMP LP1 * LDB $RQP2 ALL CHECKSUMS OK INB STB MSC SET UP POINTERS TO NAME INB LDA B,I AND =B177400 STA MPR * LDB $LOW,I LP2 STB $A,I LDA B,I CHECK FOR MATCH CPA $RQP2,I INB,RSS JMP NEXT DOES NOT MATCH LDA B,I CPA MSC,I INB,RSS STILL OK JMP NEXT LDA B,I AND =B177400 CPA MPR JMP FND FOUND IT!! NEXT LDB $A,I ADB $SISZ ISZ BLU LAST NAME CHECKED? JMP LP2 SC05 LDB =D5 JMP $SCXX NOT FOUND, ABORT * * FND XOR B,I ADA $TRAK,I ADD TRACK OFFSET TO MAIN TRACK STA MTR * INB LDA B,I STA $SUSP,I POINT OF SUSPENSION * INB STB MRQ SAVE POINTER FOR 'READ' LDA $HIGH,I STA MLO LOW MAIN OF SEGMENT = HIGH MAIN OF MAIN CMA,INA ADA B,I COMPUTE SIZE STA MSZ LDA $CSEG,I ELA 'AM' BIT IN E-REG LDA B,I RAL,ERA ADD 'AM' BIT TO CURRENT SEGMENT HIGH STA $CSEG,I STORE CURRENT HIGH SWAP LIMIT * LDA $HIBP,I AND =B1777 STA BLO LOW BP OF SEGMENT = HIGH BP OF MAIN * LDA $PRIO,I PRIORITY OF CALLER LDB $XQT JSB READ LOAD IT!! * LDB $XQT JSB $PRAM PASS PARAMETERS TO THE SEGMENT DEF $RQP3,I ISZ $LIST NEED TO SCAN SCHEDULED LIST JMP $XEQ * * AVAIL NOP SUSPEND CALLER IF $LOAD NOT AVAILABLE CLA CPA $LDRS JMP AVAIL,I LDB $XQT JSB $LIST NOT FREE, SUSPEND THE CALLER OCT 56 JMP $XEQ * * * HED REAL-TIME PROGRAM LOAD * $EX28 EQU * JSB $NAME FIND PROGRAM NAME DEF $RQP2,I SZB,RSS JMP SC05 NOT FOUND LDA $WRKS,I SSA JMP $EXEX ALREADY IN MEMORY CPB $LDRS JMP $EXEX CURRENTLY BEING LOADED ADB =D20 LDA B,I CPA $FWBG JMP $EXEX BACKGROUND PROGRAM JSB AVAIL SUSPEND CALLER IF $LOAD NOT AVAILABLE JSB PREP SET UP LOAD PARAMETERS LDA $PRIO,I PRIORITY OF CALLER LDB $WORK JSB READ LOAD IT JMP $EXEX * * HED DISC LOAD SUBROUTINE * READ NOP LOAD PROGRAM OR SEGMENT FROM DISC STA MPR SAVE PRIORITY STA BPR STB $LDRS ID SEGMENT OF OCCUPANT ADB =D27 LDA B,I DISC LU (SWAP AREA = 0) STA MLU STA BLU * ISZ MRQ LDA BLO CMA,INA ADA MRQ,I SUBTRACT LOW BASE PAGE TO FIND SIZE AND =B1777 STA BSZ CLA LDB MRQ,I GET BASE PAGE TRACK OFFSET RRL 6 IN A ADA MTR ADD TO MAIN TRACK STA BTR * ISZ MRQ LDA MRQ,I RAL AND =B776 STA MSC MAIN SECTOR LDA MRQ,I RRR 7 AND =B776 STA BSC BASE PAGE SECTOR * LDA =B20001 READ REQUEST CODE + 'UE' BIT STA MRQ STA BRQ JSB $LOAD MAKE I/O REQUEST JMP READ,I * * SKP * $LOAD NOP LOAD/SWAP CALL LDA =D-5 STA RTRY? ALLOW FIVE RETRIES LDB $LDRS ADB =D15 STB DSTAT STATUS ADDRESS JSB XSIO DO THE I/O JMP $LOAD,I * * XSIO NOP SYSTEM I/O REQUESTS LDA =D-2 STA DONE? TWO REQUESTS PER LOAD OR SWAP LDA DSTAT,I RAL,CLE,ERA CLEAR THE 'MR' BIT STA DSTAT,I $XS1 JSB $XSIO START LOAD OF MAIN MLU NOP DEF COMP COMPLETION ROUTINE NOP LINKAGE MRQ NOP MLO NOP MSZ NOP MTR NOP MSC NOP MPR NOP NOP RESERVED * LDA BSZ SKIP SECOND REQUEST IF NO LINKS SZA,RSS JMP NULL * $XS2 JSB $XSIO START LOAD OF BASE PAGE BLU NOP DEF COMP COMPLETION ROUTINE NOP LINKAGE BRQ NOP BLO NOP BSZ NOP BTR NOP BSC NOP BPR NOP NOP RESERVED JMP XSIO,I * NULL ISZ DONE? JMP XSIO,I * $LDRS NOP ID SEGMENT OF OCCUPANT DSTAT NOP ADDRESS OF STATUS WORD DONE? NOP COMPLETION COUNT RTRY? NOP RETRY COUNT * * SKP * COMP EQU * A REQUEST HAS BEEN COMPLETED OR ABORTED ISZ DONE? JMP $XEQ FIRST COMPLETION (NOT SURE WHICH) LDA DSTAT,I ISZ $LOAD JMP TLOG NOT ABORTED, CHECK THE TRANSMISSION LOG * LDB MRQ LOADING OR SWAPPING? SLB JMP IO? LOAD REQUEST * LDB $LDRS SWAP REQUEST JSB $IDSQ SET UP POINTERS TO THE ID SEG JSB $DREL RELEASE THE SWAP AREA LDA DSTAT,I IOR =B100000 SET THE 'MR' BIT STA DSTAT,I * IO? AND =B77 CPA =D2 JMP DONE I/O SUSPENDED, WAIT FOR I/O COMPLETION * LDA DSTAT,I ALF,ALF LDB $LDRS SLA STB $ZZZZ 'OF' BIT SET, ABORT THE PROGRAM DONE CLA STA $LDRS CLEAR OCCUPANT FLAG JSB $SCHD SCHEDULE $LOAD WAITERS OCT 56 ISZ $LIST FLAG FOR DISPATCHER JMP $XEQ * * TLOG IOR =B100000 SET THE 'MR' BIT STA DSTAT,I LDA MPR CHECK MAIN TRANSMISSION LOG XOR MSZ AGAINST REQUESTED SIZE LDB BPR BASE PAGE TLOG CPB BSZ SZA CLA,RSS JMP DONE TRANSMISSION COMPLETE ISZ RTRY? JMP RTRY TRY IT AGAIN LDB $LDRS TOO MANY RETRIES, LOAD FAILED STA $LDRS CLEAR THE LOAD RESIDENT FLAG JSB $IDSQ SET UP POINTERS TO ID SEGMENT LDA =ASW SWAP FAILURE LDB MRQ IF REQUEST CODE = 2 SLB LDA =ALD LOAD FAILURE IF CODE = 1 LDB =A JSB $ERMG ABORT THE PROGRAM JMP DONE * * RTRY STA MPR MAKE IT TOP PRIORITY STA BPR JSB XSIO RESTART THE REQUEST JMP $XEQ * HED ABORT CURRENT LOAD * $LDAB NOP ABORT CURRENT LOAD OR SWAP CCB CPB $LOAD JMP $LDAB,I ALREADY ABORTED STB $LOAD SET ABORT FLAG JSB $IOCL CLEAR LOAD OF BASE PAGE DEF BLU * * DO NOT SWITCH ORDER OF CALLS * JSB $IOCL CLEAR LOAD OF MAIN DEF MLU JMP $LDAB,I * * HED DISPATCHER LOAD EXTENSION * $XEQ2 ADB =D27 LDA B,I SZA,RSS JMP $XEQ1 MEMORY RESIDENT ADB =D-7 LDA B,I LOW MAIN ADDRESS CPA $FWBG JMP BGLD BACKGROUND PROGRAM * LDA $LDRS REAL TIME PROGRAM SZA JMP $XEQ1 $LOAD NOT AVAILABLE * LOAD JSB PREP SET UP LOAD PARAMETERS LDB $TEST ADB =D6 LDA B,I PRIORITY LDB $TEST JSB READ LOAD IT! JMP $XEQ1 * * BGLD LDB $BGRS SZB JMP $XEQ3 ALREADY A PROGRAM IN BACKGROUND LDB $LDRS SZB JMP $XEQ1 $LOAD IS NOT AVAILABLE $LDBG LDB $TEST STB $BGRS TEST PROGRAM IS NEW BACKGROUND RESIDENT ADB =D27 LDA B,I IF A SWAP AREA HAS BEEN ALLOCATED, ALF,ALF AND =B377 SZA JMP $SWAP THE PROGRAM MUST BE SWAPPED IN ADB =D-7 ADDRESS OF LOW MAIN JMP LOAD * * PREP NOP SET UP LOAD REQUEST PARAMETERS LDA B,I STA MLO LOW MAIN ADDRESS CMA,INA INB ADA B,I STA MSZ SIZE OF MAIN * ADB =D2 STB MRQ SAVE POINTER FOR 'READ' LDA B,I AND =B1777 LOW BASE PAGE STA BLO * ADB =D3 LDA B,I STA MTR MAIN TRACK JMP PREP,I * * $$LOA EQU * STANDARD MODULE $.LOA DEC 0 STANDARD MODULE END