ASMB,R,Q,C * NAME: SWAP * SOURCE: 92070-18158 * RELOC: 92070-16158 * 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 SWAP,0 92070-16158 REV.1941 790807 ENT $DREL,$SWAP,$SWLU,$XEQ3 ENT $$SWA,$.SWA * EXT $XEQ1,$TEST,$LDRS,$LDBG EXT $XS1,$XS2,$FWBG,$LDAB EXT $BGRS,$SWTA,$BGBP,$ROM EXT $LOAD,$DISC,$SC * SUP * A EQU 0 B EQU 1 * * $XEQ3 CPB $TEST JMP SELF THE BACKGROUND PROGRAM IS THE TEST PROGRAM ADB =D15 STB TEMP LDA B,I AND =B77 CPA =B2 JMP CN? I/O SUSPENDED, CHECK FOR CONTROL REQUEST CPA =B60 JMP PRIO? SCHEDULED, COMPARE PRIORITIES LDBZ? LDA $LDRS SZA JMP LDAB? THE RESIDENT IS BEING LOADED OR SWAPPED LDB $BGRS ADB =D27 STB DISC CPA B,I JMP ALC VIRGIN COPY NOT AVAILABLE ON DISC ADB =D-19 CPA B,I IF THE PRIMARY ENTRY POINT IS ZERO, JMP OVRLA THEN NOT DISPATCHED SINCE LAST LOAD LDB DISC,I RRL 8 PUT SWAP AREA NO. IN A-REG SZA JMP OVRLA NOT DISPATCHED SINCE SWAP OUT * ALC LDA SWT# TRY TO ALLOCATE A SWAP AREA CMA,INA,SZA,RSS JMP $XEQ1 NO SWAP AREAS AVAILABLE STA TEMP LP LDB SWTP GET CURRENT INDEX INB CPB SWEND LDB $SWTA END OF VALID TABLE, RESET TO START STB SWTP LDA B,I SZA,RSS JMP FND THIS ONE IS AVAILABLE ISZ TEMP JMP LP JMP $XEQ1 NONE AVAILABLE * * SELF LDA $XS1+4 SLA JMP $XEQ1 NOT SWAPPING, NOTHING CAN BE DONE NOW ADB =D6 LDA B,I COMPARE PRIORITY OF TEST PROGRAM LDB $SC TO HIGHEST PRIORITY SCHEDULED PROGRAM ADB =D6 CPA B,I JSB $LDAB ABORT SWAP JMP $XEQ1 * * CN? ADB =D-14 LDA B,I TYPE OF I/O REQUEST AND =B10003 Z-BIT AND TYPE CPA =B3 JMP LDBZ? SWAPPABLE CONTROL REQUEST JMP $XEQ1 FORGET IT * * PRIO? ADB =D-9 LDA B,I PRIORITY OF RESIDENT CMA,INA LDB $TEST ADB =D6 ADA B,I SUBTRACT FROM TEST PRIORITY SSA,RSS JMP $XEQ1 RESIDENT TAKES PRIORITY JMP LDBZ? * * LDAB? LDB $XS1+4 GET REQUEST CODE SLB,RSS JMP $XEQ1 DO NOT ABORT SWAP OUT LDB $XS1+5 CPB $FWBG JSB $LDAB ABORT LOAD IF MAIN BACKGROUND PROGRAM JMP $XEQ1 BUT NOT IF SEGMENT OR REAL-TIME PROGRAM * * OVRLA LDA TEMP,I RAL,CLE,ERA CLEAR 'MR' BIT STA TEMP,I JMP $LDBG OVERLAY CURRENT RESIDENT * * FND LDA $BGRS STA B,I SET 'IN USE' FLAG IN TABLE CMB ADB $SWTA OFFSET IN TABLE IS SWAP AREA NO. CMB,INB MAKE IT POSITIVE LDA DISC,I ALF,ALF RRR 8 MERGE SWAP AREA NO. WITH DISC LU STA DISC,I ALF,ALF AND =B377 LDB =B20002 WRITE REQUEST + 'UE' BIT RQCD STB $XS1+4 SAVE REQUEST CODE STB $XS2+4 TWICE ADA =D-1 MPY BLK/A COMPUTE OFFSET IN SWAP FILE STA TEMP CLE LDB MBLOK+1 ADD TO STARTING BLOCK OF FILE ADA MBLOK SEZ INB DIV BLK/T DIVIDE INTO TRACKS AND BLOCKS RBL,CLE CONVERT BLOCKS TO SECTORS DST $XS1+7 * * DLD BBLOK ADD OFFSET TO FIRST BASE PAGE BLOCK ADA TEMP SEZ INB DIV BLK/T DIVIDE INTO TRACKS AND BLOCKS RBL CONVERT BLOCKS TO SECTORS DST $XS2+7 * * LDA $SWLU STA $XS1+1 SAVE LU STA $XS2+1 TWICE LDA $BGBP STA $XS2+5 START OF BASE PAGE LDA SZBP STA $XS2+6 SIZE OF BASE PAGE LDA $FWBG STA $XS1+5 STARTING ADDRESS FOR MAIN * LDB $BGRS STB $LDRS FLAG AS OCCUPYING $LOAD ADB =D22 LDB B,I CURRENT HIGH SSB LDB $ROM ALL MEMORY BIT SET CMA,INA ADA B SUBTRACT LOW STA $XS1+6 SIZE OF MAIN * LDB $TEST USE PRIORITY OF TEST PROGRAM ADB =D6 LDA B,I STA $XS1+9 STA $XS2+9 JSB $LOAD START SWAP JMP $XEQ1 * * TEMP NOP DISC NOP * * $SWAP LDB =B20001 READ REQUEST + 'UE' BIT JMP RQCD * * $DREL NOP RELEASE SWAP AREA LDA $DISC,I ALF,ALF AND =B377 SWAP AREA NO. SZA,RSS JMP $DREL,I NONE ADA =D-1 ADA $SWTA CLB CLEAR 'IN USE' FLAG STB A,I LDA $DISC,I AND =B377 CLEAR SWAP AREA NO. STA $DISC,I JMP $DREL,I * * * $SWLU NOP LU OF SWAPPING DISC SWTR NOP STARTING TRACK OF SWAP FILE SWSEC NOP STARTING SECTOR OF SWAP FILE SWT# NOP NUMBER OF VALID SWAP AREAS SWTP NOP CURRENT SWAP TABLE POINTER SWEND NOP ADDRESS OF LAST VALID ENTRY +1 SZBP NOP SIZE OF BASE PAGE IN WORDS BLK/T NOP NO. OF 128 WORD BLOCKS PER TRACK BLK/A NOP NO. OF BLOCKS PER SWAP AREA MBLOK OCT 0,0 STARTING BLOCK FOR MAIN BBLOK OCT 0,0 STARTING BLOCK FOR BASE PAGE * * $$SWA EQU * STANDARD MODULE $.SWA DEC 0 STANDARD MODULE END