|
|
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: 55458 (0xd8a2)
Notes: pts_type(SC)
Names: »SYSLOD.SC«
└─⟦110b7ed5e⟧ Bits:30009664 Philips computer tape "600106"
└─⟦this⟧ »TOSSWORK/SYSLOD.SC«
└─⟦1fa4b7c7b⟧ Bits:30009694 Philips computer tape "600410A"
└─⟦this⟧ »MODMON/SYSLOD.SC«
└─⟦38a30a456⟧ Bits:30009662 Philips computer tape "600104"
└─⟦this⟧ »M:92OD/SYSLOD.SC«
└─⟦470bcbfc6⟧ Bits:30009709 Philips computer tape "M_92LP"
└─⟦this⟧ »M:92LP/SYSLOD.SC«
└─⟦726a6c4ca⟧ Bits:30009685 Philips computer tape "600309"
└─⟦this⟧ »M:PTB/SYSLOD.SC«
└─⟦dab19bdd7⟧ Bits:30009677 Philips computer tape "600218"
└─⟦this⟧ »M:261/SYSLOD.SC«
IDENT SYSLOD REL 9.2 79-12-19 870105040920 =1,LRN ONE SECTOR TOO GREAT REL 9.2 79-12-19 ST ENTRY SYSLOD ENTRY SYSBAS ENTRY NUMSEG ENTRY PRGLG1 *************************** * * * ENTRIES AND EXTERNALS * * * *************************** EXTRN CONVRT EXTRN LDALEN EXTRN FREQUE EXTRN INTLT1 EXTRN PAGQUE EXTRN REL EXTRN SCLASS EXTRN SCTADA EXTRN SCTANO EXTRN SCTBLK EXTRN SCTBUG EXTRN SCTCDT EXTRN SCTDCT EXTRN SCTDMC EXTRN SCTDMI EXTRN SCTDML EXTRN SCTDMT EXTRN SCTEFA EXTRN SCTLAC EXTRN SCTLAP EXTRN SCTMMC EXTRN SCTMMP EXTRN SCTMSZ EXTRN SCTNOS EXTRN SCTNOP EXTRN SCTNPE EXTRN SCTOPT EXTRN SCTPAG EXTRN SCTPLD EXTRN SCTPSZ EXTRN SCTSEG EXTRN SCTSFA EXTRN SCTSWB EXTRN SCTTTT EXTRN TCLASS EXTRN TTMJOB EJECT EXTRN M:REL RELOCATION CONSTANT EXTRN SAVE01 EXTRN SAVE02 EXTRN SAVE03 EXTRN SAVE04 EXTRN SAVE05 EXTRN SAVE06 EXTRN SAVE07 EXTRN SAVE08 EXTRN SAVE09 EXTRN SAVE10 EXTRN SAVE11 EXTRN SAVE12 EXTRN SAVE20 EXTRN SAVE22 EXTRN SAVE25 EXTRN ERROR EXTRN MMDDIV EXTRN TABBE EXTRN MMEND EXTRN MOVE * * CONDITIONAL ASSEMBLY * TEST=1 GIVES TEST VERSION * TEST EQU 0 EJECT ******************************* * CONFIGURATION FILE (CONFIG) * ******************************* * TASK DEFINITION BLOCK: TDBBT EQU 0 1A BLOCK TYPE TDBNT EQU TDBBT+1 2N NUMBER OF TASKS TDBID EQU TDBNT+2 6A TASK ID SAVE09 VALUE TDBMC EQU TDBID+6 6A MATCHING TASK CLASS TDBTL EQU TDBMC+6 6A TASK LEVEL TDBNC EQU TDBTL+6 2N NUMBER OF TERMINAL DEVICE CLASSES * TDBFST EQU TDBNC+2 SAVE05 TERM DEF TDC EQU 7 TERMINAL DEVICE CLASS TLC EQU 6 LINE CONNECTION TDBREC EQU TDC+TLC TDB-RECORD LENGTH * SDC EQU 7 SPECIAL DEVICE CLASS-RECORD * * COMMON DEVICE DEF. BLOCK: CDBBT EQU 0 1A BLOCK TYPE CDBNC EQU CDBBT+1 2N NUMBER OF SPEC. DEV. CLASSES SDCFST EQU CDBNC+2 SAVE05 SDC-RECORD * * * USER WORK BLOCK TYPE DEF. BLOCK UDBBT EQU 0 1A BLOCK TYPE UDBNU EQU UDBBT+1 3A NUMBER OF UWB TYPES * UDBFST EQU UDBNU+3 SAVE05 UDB-RECORD NAMUWB EQU 3 NAME OF UWB NUMUBL EQU 3 NUMBER OF BLOCKS UDBREC EQU NAMUWB+NUMUBL UDB RECORD-LENGTH **************** * SOP-HANDLING * **************** SOP EQU /2E DEVICE ADDRESS LMP1 EQU /400 LAMP 1 CODE LMP2 EQU /200 LMP3 EQU /100 LMP4 EQU /80 LMP5 EQU /40 LMP6 EQU /20 LMP7 EQU /10 LMP8 EQU 8 LMP9 EQU 4 LMP10 EQU 2 LMP11 EQU 1 EJECT ********************* * OTHER CONSTANTS * ********************* NUMSEG EQU 10 DISPL. TO NUMBER OF SEGMENTS IN S:GTAB COMLG EQU 4 LENGTH OF COMMON PART PAGSIZ EQU /1000 PHYSICAL PAGE SIZE CBLEN EQU 256 CASSETTE BUFFER LENGTH BLKLEN EQU 6 SEGMENT BLOCK LENGTH PAGLG EQU 8 PAGE LENGTH IN S:GTAB PRGLG1 EQU 2 NCHTID EQU 5 NBR OF CHAR. IN TID RECORD SWPFEL EQU 14 FILE EXTENT LENGTH EJECT *********************** * CASSETTE HANDLING * *********************** CHCR EQU /E DEVICE ADDRESS FOR CASSETTE LOCK EQU /2 LOCK CASSETTE SBOT EQU 8 SEARCH BEGINNING OF TAPE STMF EQU /C SEARCH TAPEMARK FORWARD * * DISC/FLEXIBLE DISC HANDLING * BUFLEN EQU 402 DISC/FLEXIBLE DISC BUFFER LENGTH RECLEN EQU 9 CONFIGURATION FILE RECORD LENGTH FDCU EQU /09 FLEXIBLE DISC CU ADDRESS FDIOP EQU FDCU+FDCU MUX ADDRESS MUXCC EQU /80CD 1:ST MUX WORD QBLFAC EQU 9 BLOCKING FACTOR * * DATA AREA DEFINITION * SYSBAS EQU * MXBUF DATA 0 DISC/FLEXIBLE DISC BUFFER ADDRESS DEVTAB DATA /1909,/1101,/0828 SWPTAB DATA '$S','WA','P ',' ' EJECT ***************************************************************** * CALL-FORMAT, PERFORMS: CFR A14,A13 * * DATA [REL-ADDRESS] * * * ***************************************************************** CALL FORM 16=/F697,16 EJECT ****************************************************** * * * APPLICATION LOAD PART OF SYSLOD * * =============================== * * * * ENTRY: A1 - APPLICATION DISC ADDRESS * * A2 - PROGRAM LOAD DEVICE * * A3 - APPLICATION NUMBER * * A9 - SAVE09 OF FREE AREA * * A13 - MONITOR SAVE09 ADDRESS * * * * EXIT: * * * * SUBROUTINES: CASSIN,SOPIN,CHCRIO,LODCOM * * LODSEG,REBUF,MOVBUF,RDBLK, * * CONLOD,CONEX,MOVREV * * * ****************************************************** SYSLOD EQU * * * SAVE REGISTERS * ST A1,SCTADA SAVE APPLICATION DISC ADDRESS ST A2,SCTPLD SAVE PROGRAM LOAD DEVICE ST A3,SCTANO APPLICATION NUMBER ST A9,SCTSFA SAVE SAVE09 OF FREE AREA IFT TEST=1 LDKL A14,SYSBAS LDR A13,P ADKL A13,10 LD A1,SCTBUG ABR(NZ) A1 XIF EJECT * * INDICATE SYSLOD RUNS * LDKL A1,LMP1 OTR A1,0,SOP * * INIT POINTER TO SUBROUTINE HANDLER (A13), STACK BASE (A14) * AND ADDRESS TO GETPSW-ROUTINE * LDR A8,P RETURN ADDRESS LDKL A3,REL+2 RELOCATION ROUTINE CFR A8,A3 LDKL A5,/5555 LOAD TEST PATTERN LDK A6,64 INIT PAGE COUNTER LD A1,SCTOPT GET OPTION WORD ANK A1,1 MMU IN SYSTEM? RF(Z) AP:100 NO! EJECT * * EXECUTION PATH FOR SYSTEMS WITH MMU OPTION EXCLUSIVELY * SLL A6,2 UPPER SAVE20=256 KB LDK A1,0 MMU ENTRY POINTER AP:010 EQU * LD A2,TABBE GET PAGE ADDRESS SUKL A2,/400 DECREMENT PHYSICAL PAGE ADDRESS ST A2,TABBE STORE IT BACK TL TABBE LOAD MMU REGISTERS ES A5,PAGSIZ-2,A1 STORE TEST PATTERN EL A2,PAGSIZ-2,A1 GET MEMORY CONTENT CWR A2,A5 COMPARE WITH TEST PATTERN RF(E) AP:200 SUK A6,4 DECREMENT NUMBER OF PAGES RB AP:010 * * END OF EXECUTION PATH FOR SYSTEMS WITH MMU OPTION EXCLUSIVELY * EJECT AP:100 EQU * * * EXECUTION PATH FOR SYSTEMS WITHOUT MMU OPTION EXCLUSIVELY * LDKL A1,PAGSIZ-2 SAVE09 AT /FFFE AP:110 EQU * SUKL A1,PAGSIZ NEXT PHYSICAL PAGE LDR* A2,A1 SAVE OLD MEMORY CONTENT STR A5,A1 STORE TEST PATTERN CWR* A5,A1 CHECK IF MEMORY RF(E) AP:120 MEMORY END FOUND SUK A6,4 DECREMENT NUMBER OF PHYSICAL PAGES RB AP:110 AP:120 EQU * STR A2,A1 RESTORE OLD MEMORY CONTENT * * END OF EXECUTION PATH FOR SYSTEMS WITHOUT MMU OPTION EXCLUSIVELY * EJECT * * COMMON EXECUTION PATH * AP:200 EQU * ST A6,SCTMSZ SAVE NUMBER OF PHYSICAL PAGES * * GET APPLICATION DISC ADDRESS * LD A11,SCTADA * * INIT POINTER TO READ BUFFER. INIT DEVICE ADDRESS FOR READ-ROUTINE LD A9,SCTSFA POINTER TO READ BUFFER LDR A3,A9 SAVE LD A2,SCTPLD GET PROGRAM LOAD DEVICE LDR A1,A2 SAVE * * CHECK PROGRAM LOAD MEDIUM * ANK A2,/C0 CHECK IF CASSETTE RF(P) AP:210 YES! ADKL A3,BUFLEN+8 NEW START OF FREE AREA ST A3,SCTSFA ST A9,MXBUF FLEXIBLE DISC/DISC BUFFER ADDRESS ADKL A9,2 SKIP CYLINDER ID LDR A2,A1 GET PROGRAM LOAD DEVICE SRC A2,1 CHECK BIT 15 RF(N) AP:220 FLEXIBLE DISC RF AP:230 DISC AP:210 EQU * * * PROGRAM LOAD DEVICE = CASSETTE * ADKL A3,CBLEN NEW START OF FREE AREA ST A3,SCTSFA SAVE LDKL A1,RDBLK GET SUBROUTINE ADDRESS ST A1,READ STORE IN PROGRAM LOAD SUBROUTINE AP:215 EQU * CF A14,RDBLK READ ONE CASSETTE BLOCK LDR A1,A1 TAPE MARK? RF(Z) AP:235 NO! CF A14,CASSIN INIT APPLICATION CASSETTE RB AP:215 EJECT AP:220 EQU * * * PROGRAM LOAD DEVICE = FLEXIBLE DISC * * * MODIFY SCTPLD: /F8 - DRIVE 1, /F9 - DRIVE 2 * ANK A2,8 SRL A2,3 ORK A2,/F8 ST A2,SCTPLD * * INIT FLEXIBLE DISC * CF A14,FDINIT * * READ FIRST SECTOR FROM FLEXIBLE DISC * CF A14,FRDSEC RF AP:235 EJECT AP:230 EQU * * * PROGRAM LOAD DEVICE = DISC * * * MODIFY SCTPLD: /F0 - CARTRIDGE DISC, /F1 - FIX DISC * ANK A2,/10 SRL A2,4 XRK A2,1 ORK A2,/F0 ST A2,SCTPLD * * INITIALIZE DISC COMMANDS * CF A14,DUINIT * * READ FIRST SECTOR FROM DISC * CF A14,RDSEC EJECT AP:235 EQU * * * COMMON EXECUTION PATH * * * SAVE INFORMATION ABOUT THE LOAD MODULE * LDR* A6,A9 GET SAVE09 ADDRESS (UNSEGMENTED APPL.) ST A6,SAVE09,A13 SAVE LD A6,2,A9 GET TOTAL NUMBER OF SECTORS AD* A6,SCTADA ST A6,SAVE11,A13 SAVE LAST SECTOR NUMBER LD A6,COMLG,A9 GET LENGTH OF COMMON PART ST A6,SAVE04,A13 SAVE LD A3,PRGLG1+8,A9 GET PROGRAM TYPE CWK A3,'CR' CREDIT APPLICATION? RF(NE) AP2350 NO! LD A3,PAGLG+8,A9 PHYSICAL PAGE SIZE ST A3,SCTPSZ SAVE AP2350 LD A5,SCTMSZ GET NUMBER OF PHYSICAL PAGES LD A1,SCTOPT GET OPTION WORD ANK A1,1 MMU IN SYSTEM? RF(Z) AP:240 NO! EJECT * * EXECUTION PATH FOR SYSTEMS WITH MMU OPTION * LD A3,SCTPSZ GET PAGE SIZE LDR A1,A3 SAVE ANKL A1,/03FF EVEN 4K-MULTIPLE? RF(Z) AP:236 YES! LDK A1,LMP8 CALL ERROR INDICATE PAGE SIZE ERROR AP:236 EQU * SRL A3,2 LOGICAL PAGE SIZE SLL A5,8 MAP IT ON MMU ANKL A5,/FC00 PAGE ADDRESS IN 6 LEFTMOST BITS LDR A1,A5 SAVE * * CHECK IF CREDIT APPLICATION * LD A2,PRGLG1+8,A9 CWK A2,'CR' ABL(NE) AP:330 NOT CREDIT! LD A2,NUMSEG+8,A9 NUMBER OF RESIDENT SEGMENTS ABL(Z) AP:330 NO SEGMENTS! RF AP:245 * * END OF EXECUTION PATH EXCLUSIVELY FOR SYSTEMS WITH MMU OPTION * EJECT AP:240 EQU * * * EXECUTION PATH EXCLUSIVELY FOR SYSTEMS WITHOUT MMU OPTION * SLL A5,10 HIGHEST PHYSICAL AND LOGICAL MEMORY ADDRESS LDR A1,A5 SAVE * * CHECK IF CREDIT APPLICATION * LD A2,PRGLG1+8,A9 CWK A2,'CR' RF(NE) AP:275 NOT CREDIT LD A2,NUMSEG+8,A9 NUMBER OF SEGMENTS RF(Z) AP:275 NO SEGMENTS! EJECT AP:245 EQU * * * COMMON EXECUTION PATH * ST A2,SCTNOS SAVE NUMBER OF SEGMENTS LD A4,SCTOPT GET OPTION WORD ANK A4,2 DISC PAGING? RF(Z) AP:260 NO! LD A4,SCTPLD GET PROGRAM LOAD DEVICE SUK A4,/F0 CHECK IF CASSETTE RF(N) AP:260 CASSETTE - LOAD ALL SEGMENTS! * * COMPUTE NUMBER OF CORE RESIDENT PAGES * CM SAVE05,A13 RESET COUNTER LDR A6,A9 START OF APPLICATION ADK A6,14 START OF SEGMENT BLOCKS AP:250 EQU * ADK A6,6 NEXT SEGMENT BLOCK LDR* A4,A6 GET SEGMENT TYPE CCK A4,'RR' CORE RESIDENT SEGMENT? RF(NE) AP:255 NO! IM SAVE05,A13 INCREMENT RESIDENT SEGMENT COUNTER AP:255 EQU * SUK A2,1 MOORE SEGMENTS? RB(NZ) AP:250 YES! LD A2,SAVE05,A13 NUMBER OF RESIDENT SEGMENTS RF(Z) AP:270 NO RESIDENT SEGMENTS! AP:260 EQU * ST A2,SCTNOP SAVE NUMBER OF PAGES AP:265 EQU * SUR A5,A3 DECREMENT PHYSICAL MEMORY ADDRESS SUK A2,1 DECREMENT NUMBER OF PAGES RB(P) AP:265 ST A5,SAVE22,A13 SAVE PHYS.ADDRESS TO FIRST SEGMENT AP:270 EQU * LD A2,SCTOPT GET OPTION WORD ANK A2,1 MMU IN SYSTEM? RF(NZ) AP:292 YES! * * END OF COMMON EXECUTION PATH * EJECT * * EXECUTION PATH EXCLUSIVELY FOR SYSTEMS WITHOUT MMU OPTION * ST A5,SAVE08,A13 AP:275 EQU * LDR A8,A5 LD A10,COMLG,A9 GET LENGTH OF COMMON PART ADKL A10,3 RESERV ONE EXTRA WORD ANKL A10,/FFFE SUR A8,A10 COMPUTE LOAD-ADDRESS LD A1,SCTSFA GET START OF FREE AREA TNM A1,A8 RF(NN) AP:280 CWR A1,A8 RF AP:285 AP:280 CWR A8,A1 AP:285 RF(G) AP:290 LDKL A1,LMP3 CALL ERROR MEMORY OVERFLOW! AP:290 EQU * ST A8,SAVE07,A13 SAVE APPLLICATION LOAD-ADDRESS ST A8,SAVE01,A13 SAVE APPLICATION LOAD-ADDRESS LDR A12,A8 RELOCATION BASE LD A10,COMLG,A9 GET LENGTH OF COMMON PART ABL AP:355 EJECT AP:292 EQU * * * EXECUTION PATH FOR SYSTEMS WITH MMU OPTION * LDR A4,A5 SAVE ANKL A5,/FC00 GET 6 LEFTMOST BITS LDR A6,A5 SAVE SUR A4,A5 COMPUTE PHYSICAL DISPLACEMENT EJECT * * STORE ADDRES(ES) TO PHYSICAL PAGE(S) HOLDING * THE FIRST LOGICAL PAGE * LDKL A7,MMEND GET END OF MMU TABLE LDKL A8,16 INIT MMU ENTRY POINTER AP:295 EQU * SUK A7,2 DECREMENT MMU ENTRY ADDRESS SUKL A8,1 DECREMENT MMU ENTRY POINTER SUKL A3,/400 DECREMENT PHYSICAL PAGE ADDRESS RB(P) AP:295 RF(Z) AP:300 EVEN 4K-BYTES PAGES * * RESERV ONE EXTRA MMU ENTRY WHEN PAGE SIZE * IS NOT AN EVEN MULTIPLE OF 4K * SUK A7,2 SUKL A8,1 AP:300 EQU * LD A3,SCTNOP ANY CORE RESIDENT SEGMENTS? RF(NZ) AP:302 YES! LDR A5,A1 GET ADDRESS TO END OF MEMORY LDK A4,0 RESET PAGE SIZE RF AP:310 AP:302 LDR A3,A7 SAVE MMU ENTRY ADDRESS TO LOGICAL PAGE AP:305 EQU * STR A6,A3 STORE ADDRESS TO PHYSICAL PAGE ADK A3,2 INCREMENT MMU ENTRY ADDRESS CWK A3,MMEND END OF MMU TABLE? RF(E) AP:310 YES! ADKL A6,/400 INCREMENT PHYSICAL PAGE ADDRESS RB AP:305 AP:310 EQU * LDR A4,A4 ANY PHYSICAL DISPLACEMENT? RF(NZ) AP:315 YES! SUKL A5,/400 NEXT PHYSICAL PAGE ADDRESS * AP:315 EQU * SLL A4,2 PHYSICAL DISPLACEMENT AP:325 EQU * * * SAVE LOGICAL ADDRESS OF SAVE05 SEGMENT * LDR A2,A8 GET MMU ENTRY SLL A2,12 MOVE TO 4 LEFTMOST BITS ANKL A2,/F000 MMU ENTRY TO LOGICAL PAGE ST A2,SCTLAP SAVE ADR A2,A4 ADD DISPLACEMENT ST A2,SAVE08,A13 SAVE LDR A2,A8 GET MMU ENTRY FOR FIRST PAGE SUK A2,17 INDEX RELATIVE TTAB ENTRY ADR A2,A2 BYTE DISPLACEMENT ST A2,SCTMMP SAVE IN SYSTAB * * COMPUTE NUMBER OF PAGE ENTRIES * LDKL A2,16 SUR A2,A8 ST A2,SCTNPE RF AP:335 AP:330 EQU * * * THIS ENTRY IS ENTERED IF MMU OPTION IN SYSTEM BUT * THE APPLICATION LOADED WAS UNSEGMENTED (CORE RESIDENT) * SUKL A5,/400 INIT POINTER TO LAST PAGE LDKL A4,PAGSIZ PHYSICAL PAGE SIZE LDKL A7,MMEND END OF MMU TABLE LDKL A8,16 MMU ENTRY POINTER EJECT AP:335 EQU * LDR A4,A4 ANY DISPLACEMENT? RF(NZ) AP:337 LDKL A4,PAGSIZ AP:337 EQU * * * COMPUTE APPLICATION SAVE09 ADDRESS * * A1 - LAST PHYSICAL PAGE NUMBER * A4 - DISPLACEMENT IN PAGE * A5 - PHYSICAL PAGE ADDRESS * A7 - MMU ENTRY ADDRESS * A8 - CURRENT MMU ENTRY * LD A2,COMLG,A9 COMLG OF CORE RESIDENT PART ADK A2,3 RESERV ONE EXTRA WORD ANKL A2,/FFFE MAKE EVEN LENGTH RF AP:344 AP:340 EQU * * RESERV ENTRIES IN MMU TABLE FOR PHYSICAL PAGE ADDRESSES TO COMMON PA * SUR A2,A4 AREA LEFT IN CURRENT PAGE LDKL A4,PAGSIZ PHYSICAL PAGE SIZE SUKL A8,1 DECREMENT MMU ENTRY POINTER RF(NN) AP:342 AP:341 EQU * LDKL A1,LMP7 INDICATE TABBE OVERFLOW! CALL ERROR AP:342 EQU * SUK A1,1 DECREMENT PAGE POINTER SUK A7,2 DECREMENT MMU ENTRY ADDRESS STR A5,A7 STORE PAGE ADDRESS IN MMU SUKL A5,/400 NEXT PAGE AP:344 EQU * TNM A2,A4 PROGRAM LENGTH > 32 KB? RF(NN) AP:345 NO! CWR A4,A2 RF AP:348 AP:345 EQU * CWR A2,A4 AP:348 EQU * RB(G) AP:340 AP:350 EQU * LDR A2,A2 RF(Z) AP:351 SUKL A8,1 RB(N) AP:341 TABBE OVERFLOW! SUK A7,2 NEXT TABBE ENTRY STR A5,A7 STORE PAGE ADDRESS AP:351 EQU * SUR A4,A2 MODIFY DISPLACEMENT LDR A2,A8 GET MMU ENTRY SUKL A8,17 ADR A8,A8 BYTE DISPLACEMENT ST A8,SCTMMC SAVE IN SYSTAB SLL A2,12 MOVE TO 4 LEFTMOST BITS LDR A8,A2 ADR A8,A4 COMPUTE LOGICAL ADDRESS ST A8,SAVE07,A13 SAVE IN TEMPORARY AREA LDR A12,A8 LOAD RELOCATION BASE LDR* A1,A7 GET ADDRESS TO PHYSICAL PAGE ANKL A1,/C000 GREATER THAN 64K? RF(Z) AP:353 NO! LDKL A1,0 UPPER LIMIT 64 KB RF AP:354 AP:353 EQU * LDR* A1,A7 GET PHYSICAL ADDRESS SLL A1,2 ADR A1,A4 ADD DISPLACEMENT LD A2,SCTSFA GET START OF FREE AREA TNM A1,A2 ON SAME SIDE OF 32K-LIMIT RF(NN) AP3532 YES! CWR A2,A1 RF AP3534 AP3532 CWR A1,A2 AP3534 RF(G) AP:354 LDKL A1,LMP3 CALL ERROR MEMORY OVERFLOW AP:354 EQU * ST A1,SAVE01,A13 SAVE LD A10,COMLG,A9 LOAD COMLG OF COMMON PART TL TABBE LOAD MMU REGISTERS * * READ AND RELOCATE CORE RESIDENT PART OF APPLICATION * * A8 - APPLICATION LOAD ADDRESS * A10 - LENGTH OF CORE RESIDENT PART * A12 - RELOCATION BASE * AP:355 EQU * LD A1,SCTEFA GET END OF FREE AREA SUK A1,1 MODIFY ST A1,SCTEFA STORE ST A8,SCTLAC CF A14,LODCOM LOAD CORE RESIDENT PART LD A8,SAVE08,A13 GET LOGICAL ADDRESS TO FIRST PAGE * * CHECK IF CREDIT APPLICATION * LD A2,SCTLAC START OF APPLICATION ADKL A2,PRGLG1 SECOND WORD IN SEGMENTT TABLE CALL GETCON GET CONTENT CWK A1,'CR' CREDIT? RF(NE) CONLOD NOT CREDIT! LD A1,SCTNOS NUMBER OF SEGMENTS RF(Z) CONLOD NO SEGMENTS! SUR A12,A12 RELOCATION BASE = ZERO FOR SEGMENTS LD A1,SCTOPT GET OPTION WORD ANK A1,1 MMU IN SYSTEM? RF(Z) AP:360 NO! TS MMDDIV,A13 SAVE MMU REGISTER CONTENTS AP:360 EQU * * * READ AND RELOCATE THE SEGMENTS * * A8 - LOGICAL ADDRESS OF SAVE05 SEGMENT * A10 - SEGMENT LENGTH * A12 - RELOCATION BASE * LD A2,SCTLAC GET LOGICAL ADDRESS TO APPLICATION ADKL A2,BLKLEN+BLKLEN LD A1,SAVE06,A13 GET SEGMENT COUNTER AP:365 EQU * RF(Z) AP:370 ADK A2,BLKLEN NEXT BLOCK SUK A1,1 DECREMENT BLOCK COUNTER RB AP:365 AP:370 EQU * * * CHECK IF DISC PAGING * LD A1,SCTOPT GET OPTION WORD ANK A1,2 DISC PAGING? RF(Z) AP:376 NO! * * CHECK IF CORE RESIDENT SEGMENT * CALL GETCON GET SEGMENT TYPE CCK A1,'RR' CORE RESIDENT SEGMENT? RF(E) AP:376 YES: LOAD THIS SEGMENT! * * BYPASS THIS SEGMENT AND CHECK NEXT * LD A1,SAVE06,A13 GET SEGMENT COUNTER LD A2,SCTNOS GET TOTAL NUMBER OF SEGMENTS ADK A1,1 INCREMENT CWR A1,A2 LAST SEGMENT? RF(E) CONLOD YES! ST A1,SAVE06,A13 SAVE CURRENT SEGMENT NUMBER RB AP:360 EJECT AP:376 EQU * ADK A2,2 DISC SECTOR ADDRESS CALL GETCON GET DISC SECTOR ADDRESS LDR A11,A1 SAVE AD A11,SCTADA ADD START ADDRESS #79-01-03 AP:378 EQU * ADK A2,2 SEGMENT LENGTH CALL GETCON GET SEGMENT LENGTH LDR A10,A1 SAVE ADKL A10,1 ANKL A10,/FFFE MAKE EVEN LENGTH ST A8,SAVE07,A13 CF A14,LODSEG LOAD SEGMENT LD A1,SAVE06,A13 GET SEGMENT COUNTER LD A2,SCTNOS GET TOTAL NUMBER OF SEGMENTS ADK A1,1 INCREMENT SEGMENT COUNTER CWR A1,A2 ALL SEGMENTS LOADED? RF(E) CONLOD YES! ST A1,SAVE06,A13 STORE SEGMENT COUNTER LD A4,SCTPSZ GET PAGE LENGTH LD A1,SCTOPT GET OPTION WORD ANK A1,1 MMU IN SYSTEM? RF(NZ) AP:379 YES! ADR A8,A4 COMPUTE ADDRESS TO NEXT PAGE RB AP:360 EJECT AP:379 EQU * LDR A1,A4 SAVE ANKL A4,/0C00 GET MODULO 4K DISCRIMINANT RF(Z) AP:380 NO DISCRIMINANT! ADR A1,A8 COMPUTE LOGICAL ADDRESS TO NEXT PAGE LDR A4,A1 SAVE ANKL A4,/0C00 GET MODULO 4K DISCRIMINANT ANKL A1,/F000 LOGICAL ADDRESS TO NEXT PAGE ANKL A8,/F000 LOGICAL ADDRESS TO CURRENT PAGE SUR A1,A8 COMPUTE PHYSICAL INCREMENT AP:380 EQU * LD A8,SCTLAP GET LOGICAL PAGE ADDRESSE ANKL A8,/F000 SKIP DISPLACEMENT LDR A2,A8 SAVE ADR A8,A4 COMPUTE LOGICAL ADDRESS TO NEXT PAGE SRL A2,12 MOVE TO 4 RIGHTMOST BITS ADR A2,A2 2*MMU ENTRY ADR A2,A13 ADKL A2,MMDDIV MMU ENTRY ADDRESS LDR A3,A13 ADKL A3,MMDDIV+32 SRL A1,2 MAP PHYSICAL ADDRESS ON MMU AP:385 EQU * ADRS A1,A2 LOGICAL ADDRESS TO NEXT PAGE ADK A2,2 NEXT MMU ENTRY CWR A2,A3 RB(NE) AP:385 TL MMDDIV,A13 LOAD MMU REGISTERS RB AP:360 EJECT ********************************************************** * * * LOAD CONFIGURATION PART OF SYSLOD * * ================================= * * * * ENTRY: A9 - BUFFER ADDRESS * * * * EXIT: * * * * SUBROUTINES: CASSIN,RDBLK,MOVBUF * * * ********************************************************** CONLOD EQU * LD A1,SCTPLD GET PROGRAM LOAD DEVICE SUK A1,/F0 CHECK DEVICE TYPE RF(NN) CONRAD NOT CASSETTE * * PROGRAM LOAD DEVICE = CASSETTE * CON:30 EQU * LDR A1,A9 START OF BUFFER ADKL A1,CBLEN ST A1,SAVE03,A13 SAVE POINTER TO END OF BUFFER ST A1,SAVE08,A13 CF A14,RDBLK READ ONE BLOCK CF A14,RDBLK READ NEXT BLOCK LDR A1,A1 TAPEMARK? RF(Z) CON:50 NO! CF A14,CASSIN INIT CONFIGURATION CASSETTE CON:40 EQU * CF A14,RDBLK READ NEXT BLOCK LDR A1,A1 TAPEMARK? RF(NZ) CONEX YES! CON:50 EQU * * * COMPUTE NUMBER OF CHARACTERS IN THIS BLOCK * LD A1,SAVE03,A13 GET CURRENT POINTER IN BUFFER LDR A2,A1 SAVE LDK A3,0 RESET CHARACTER COUNTER LDR A4,A9 GET SAVE09 OF BUFFER CON:60 EQU * LCR A5,A4 GET CHARACTER IN BUFFER CCK A5,';;' CHECK IF SPACE RF(E) CON:70 NO MOORE CHARACTERS CON:65 EQU * CWK A3,CBLEN END OF BUFFER? RF(E) CON:75 YES! CW A1,SAVE01,A13 MEMORY OVERFLOW? RF(E) MEMOFL YES! ADK A1,1 INCREMENT DESTINATION POINTER ADK A3,1 INCREMENT CHARACTER COUNTER ADK A4,1 INCREMENT BUFFER POINTER RB CON:60 CON:70 EQU * LC A5,1,A4 GET NEXT CHARACTER CCK A5,';;' TWO SEMI-COLONS? RF(NE) CON:75 NO! CWK A3,NCHTID CHECK IF END OF RECORD RB(E) CON:65 NO: SEMI-COLON CHARACTER IN RECORD CON:75 EQU * ST A1,SAVE03,A13 SAVE CURRENT DESTINATION LDR A1,A9 GET SAVE09 OF BUFFER CALL MOVE RB CON:40 MEMOFL EQU * LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR CONEX EQU * * * UNLOAD CASSETTE IF NO APPLICATION DATA ON SAME CASSETTE * CF A14,RDBLK READ NEXT BLOCK LDR A1,A1 APPLICATION DATA? RF(NZ) CON:80 NO! LDK A1,/D CF A14,CHCRIO SEARCH TAPEMARK REVERSE CF A14,RDBLK BYPASS TAPEMARK RF CON:90 CON:80 EQU * LDK A1,/F CF A14,CHCRIO UNLOAD CASSETTE CON:90 EQU * ABL CONMOV EJECT CONRAD EQU * * * LOAD CONFIGURATION DATA FROM DISC/FLEXIBLE DISC * CF A14,GETFIL GET CONFIGURATION FILE LDR A1,A9 GET START OF BUFFER ADKL A1,BUFLEN-2 END OF BUFFER ST A1,SAVE08,A13 SAVE END OF BUFFER ADK A1,8 START OF SAVE BUFFER =2 ST A1,SAVE03,A13 SAVE =2 LDKL A10,0 RESET RECORD COUNTER COR:10 EQU * * * READ ONE SECTOR FROM RANDOM ACCESS DEVICE * CF A14,READS READ SECTOR READS EQU *-2 LDR A8,A9 GET START OF BUFFER COR:20 EQU * * * COMPUTE NUMBER OF CHARACTERS IN THIS RECORD * LD A1,SAVE03,A13 GET CURRENT POINTER IN BUFFER LDR A2,A1 SAVE LDK A3,0 RESET CHARACTER COUNTER LDR A4,A8 START OF RECORD COR:30 EQU * LCR A5,A4 GET CHARACTER CCK A5,';;' END OF RECORD? RF(E) COR:40 YES! COR:35 EQU * CWK A3,RECLEN MAXIMUM SIZE ACHIEVED? RF(E) COR:40 YES! CW A1,SAVE01,A13 MEMORY OVERFLOW? RB(E) MEMOFL YES! ADK A1,1 INCREMENT BUFFER POINTER ADK A3,1 INCREMENT CHARACTER COUNTER ADK A4,1 INCREMENT RECORD POINTER RB COR:30 LOOP COR:40 EQU * LC A5,1,A4 GET NEXT CHARACTER CCK A5,';;' TWO SEMICOLONS? RF(NE) COR:45 NO! CWK A3,NCHTID CHECK IF END OF RECORD RB(E) COR:35 NO: SEMICOLON CHARACTER IN RECORD COR:45 EQU * ST A1,SAVE03,A13 SAVE CURRENT DESTINATION LDR A1,A8 START OF RECORD CALL MOVE ADKL A10,1 INCREMENT RECORD COUNTER CW A10,SAVE20,A13 LAST RECORD RF(E) COR:50 YES! ADKL A8,RECLEN+1 INCREMENT RECORD POINTER CW A8,SAVE08,A13 END OF BUFFER RB(E) COR:10 NEXT RECORD RB COR:20 NEXT SECTOR COR:50 EQU * LDK A3,'S' SC A3,GET:25+1 MODIFY INSTRUCTION SC A3,GET:60+1 MODIFY INSTRUCTION CF A14,GETFIL * * UNLOCK FLEXIBLE DISC * LD A1,SCTPLD GET LOAD DEVICE SUK A1,/F8 CHECK TYPE RF(N) COR:60 NOT FLEXIBLE DISC LD A1,SCTOPT GET OPTION WORD ANK A1,2 DISC PAGING? RF(NZ) COR:60 YES; DON'T UNLOCK LDK A1,/C UNLOCK ORDER EX FRD:10 EXECUTE COMMAND RB(NA) *-4 LOOP UNTIL ACCEPTED EX FRD:40 SENSE STATUS RB(NA) *-4 LOOP UNTIL ACCEPTED COR:60 EQU * EJECT CONMOV EQU * * * MOVE CONFIGURATION DATA TO END OF SYSTEM AREA * LD A1,SAVE08,A13 GET SAVE09 OF CONFIGURATION DATA LD A3,SCTPLD GET PROGRAM LOAD DEVICE SUK A3,/F0 CASSETTE? RF(N) CMOV10 YES! ADK A1,8 START OF SAVE BUFFER CMOV10 LD A3,SAVE03,A13 GET END OF CONFIGURATION DATA LD A2,SAVE01,A13 GET END OF SYSTEM AREA CM -2,A2 MAKE SURE CONFIGURATION FILE SUK A2,1 IS FOLLOWED BY X'00' SUR A3,A1 LENGTH OF CONFIGURATION DATA SUR A2,A3 TO-ADDRESS * ANKL A2,/FFFE MAKE EVEN ADDRESS CALL MOVE ST A2,SAVE01,A13 SAVE START OF CONFIGURATION DATA LDR A1,A9 GET START OF FREE AREA LDR A12,A2 END OF FREE AREA SUR A12,A1 SUBTRACT MONITOR END ST A12,M:REL,A13 SAVE RELOCATION CONSTANT LD A2,SAVE01,A13 GET START OF CONFF * * MOVE SYSLDA+SYSLDM+DWT-PROTOTYPES TO END OF FREE AREA * MOPRO SUK A1,2 SUK A2,2 LDR* A4,A1 STR A4,A2 CWR A1,A13 RB(NE) MOPRO LDR A1,A2 SAVE NEW LOCATION OF SYSLDA AD A2,LDALEN,A2 BYPASS SYSLDA ABR A2 CONTINUE EXECUTION IN SYSLDM EJECT ************************************************************************ * SUBROUTINES USED IN THE APPLICATION AND CONFIGURATION LOADING PHASE O ************************************************************************ ******************************* * SOPIN - READ SOP SWITCHES * * ========================= * * * * ENTRY: * * * * EXIT: A1 - SOP INPUT * * BIT 6 - SWITCH 1 * * BIT 15 - SWITCH 10 * * * * WORK REGISTERS: A1 * * * * SUBROUTINES: * * * ******************************* SOPIN EQU * CIO A1,1,SOP INR A1,0,SOP RB(NA) *-2 RTN A14 EJECT ******************************************************* * CASSIN - CASSETTE INITIATING ROUTINE * * ==================================== * * * * REFERENCED IN: SYSLOD -LOADING PART- * * * * ENTRY: * * * * EXIT: * * * * WORK REGISTERS: A1,A3 * * * * SUBROUTINES: SOPIN,CHCRIO * * * ******************************************************* CASSIN EQU * LDK A1,/F CF A14,CHCRIO UNLOAD CASSETTE LDKL A3,LMP1+LMP2 INDICATE EXPECTED SWITCHES OTR A3,0,SOP CAS:10 EQU * CF A14,SOPIN READ SOP ANKL A1,/0300 ALLOWED SWITCHES? RB(Z) CAS:10 NO! LDKL A3,LMP1 SWITCH ON LOAD LAMP OTR A3,0,SOP SRL A1,8 RIGHT ALIGN ANK A1,1 SELECT UNIT CF A14,CHCRIO SELECT UNIT LDK A1,LOCK CF A14,CHCRIO LOCK CASSETTE ANK A3,1 CASSETTE OPERABLE? RB(NZ) CAS:10 NO! LDK A1,SBOT CF A14,CHCRIO SEARCH BEGINNING OF TAPE LDK A1,STMF CF A14,CHCRIO SEARCH TAPEMARK FORWARD RTN A14 EJECT ********************************************* * CHCRIO - CASSETTE I/O EXECUTING ROUTINE * * ======================================= * * * * REFERENCED IN: CASSIN,SYSLOD * * * * ENTRY: A1 - I/O INSTRUCTION COMMAND * * * * EXIT: * * * * WORK REGISTERS: A1,A3 * * * * SUBROUTINES: * * * ********************************************* CHCRIO EQU * CIO A1,1,CHCR SST A3,CHCR RB(NA) CHCRIO RTN A14 EJECT ************************************************** * * * RDBLK - READ ONE CASSETTE BLOCK * * =============================== * * * * REFERENCED IN: SYSLOD * * * * ENTRY: A9 - CASSETTE BUFFER POINTER * * * * EXIT: A2 - NUMBER OF CHARACTERS IN BLOCK * * * * WORK REGISTERS: A1,A2,A3,A4,A5 * * * * SUBROUTINES: * ************************************************** RDBLK EQU * LDK A5,0 RDB:10 EQU * LDR A3,A9 SAVE09 OF BUFFER LDK A2,0 RESET CHARACTER COUNTER LDR A4,A3 SAVE SAVE09 OF BUFFER ADKL A3,CBLEN END OF BUFFER LDK A1,/A CIO A1,1,CHCR READ BLOCK RF(NA) RDERR3 RDB:20 EQU * INR A1,0,CHCR RF(NA) RDB:30 CWR A4,A3 END OF BUFFER? RF(E) RDERR YES! SCR A1,A4 STORE CHARACTER ADK A2,1 INCREMENT CHARACTER COUNTER ADK A4,1 INCREMENT BUFFER POINTER RDB:30 EQU * SST A1,CHCR RB(NA) RDB:20 ANKL A1,/FCFF CHECK STATUS LDR A4,A1 SAVE STATUS RF(Z) RDBEX OK SLC A4,3 CHECK IF TAPEMARK RF(N) RDBEX OK IF TAPEMARK RDERR EQU * * * READ ERROR HAS OCCURRED: MAKE ANOTHER ATTEMPT TO READ * THE SAME BLOCK IF NOT 3 ATTEMPTS ALREADY HAS BEEN MADE * ADK A5,1 NEXT ATTEMPT CWK A5,3 THIRD ATTEMPT? RF(E) RDERR3 YES - GIVE UP! LDK A1,/E REVERSE ONE BLOCK CIO A1,1,CHCR EXECUTE ORDER RB(NA) *-2 LOOP UNTIL ACCEPTED RB RDB:10 RDERR3 EQU * LDKL A1,LMP2 CALL ERROR RDBEX EQU * RTN A14 EJECT *********************************** * * * DUINIT - INITIALIZE DISC UNIT * * ============================= * * * * REFERENCED IN: SYSLOD,GETFIL * * * * ENTRY: A1 - DEVICE ADDRESS * * * * EXIT: * * * * WORK REGISTERS: A2 * * * * SUBROUTINES: * * * *********************************** DUINIT EQU * * * INIT SUBROUTINE ADDRESSES * LDKL A2,RDSEC GET SUBROUTINE ADDRESS ST A2,READ READ PROGRAM ST A2,READS READ CONFIGURATION DATA ST A2,READVL READ VOLUME LABEL ST A2,READCF READ CONFIGURATION DATA * * INIT DISC COMMANDS * ADS A1,RDS:10 ADS A1,RDS:20 ADS A1,RDS:60 ADS A1,RDS:70 RTN A14 EJECT *********************************************** * * * RDSEC - READ ONE SECTOR FROM DISC * * ================================= * * * * REFERENCED IN: SYSLOD * * * * ENTRY: A9 - BUFFER ADDRESS + 2 * * * * A11 - SECTOR NUMBER * * * * EXIT: * * * * WORK REGISTERS: A1,A2 * * * * SUBROUTINES: ERROR * * * *********************************************** RDSEC EQU * * * DERIVE CYLINDER NUMBER FROM SECTOR NUMBER * LDR A1,A11 GET SECTOR NUMBER SRL A1,5 CYLINDER NUMBER IN BITS 4-12 SLL A1,3 ORK A1,2 SET BIT 14 * * SEEK CYLINDER * RDS:10 CIO A1,1,0 SEEK COMMAND RB(NA) *-2 LOOP UNTIL ACCEPTED * * CHECK STATUS * RDS:20 SST A1,0 SENSE STATUS RB(NA) RDS:20 LOOP UNTIL ACCEPTED * * COMPUTE PHYSICAL SECTOR NUMBER * RDS:30 LDR A2,A11 GET SECTOR NUMBER ANK A2,/10 GET BIT 11 LDR A1,A11 GET SECTOR NUMBER SLL A1,1 ADR A1,A11 ANK A1,/F ADR A1,A2 SLL A1,2 * * INIT MUX WORDS * LDKL A2,MUXCC LOAD FIRST MUX WORD RDS:40 WER A2,/10 WRITE LD A2,MXBUF LOAD SECOND MUX WORD RDS:50 WER A2,/10+1 WRITE RDS:60 CIO A1,1,0 READ SECTOR RB(NA) RDS:60 LOOP UNTIL ACCEPTED RDS:70 SST A1,0 GET STATUS RB(NA) RDS:70 LOOP UNTIL ACCEPTED ANK A1,/1F GET 5 RIGHTMOST BITS RB(NZ) RDS:30 LOOP UNTIL CORRECT READ ADKL A11,1 INCREMENT SECTOR COUNTER RTN A14 EJECT ************************************************ * * * FDINIT - INITIALIZE FLEXIBLE DISC * * ================================= * * * * REFERENCED IN: SYSLOD,GETFIL * * * * ENTRY: A1 - DEVICE ADDRESS * * * * EXIT: * * * * WORK REGISTERS: * * * * SUBROUTINES: * * * ************************************************ FDINIT EQU * LDKL A2,FRDSEC GET SUBROUTINE ADDRESS ST A2,READ STORE ST A2,READS ST A2,READVL ST A2,READCF * * INIT FLEXIBLE DISC COMMANDS * ORS A1,FRD:10 MODIFY READ SECTOR ORDER ANK A1,8 PROGRAMMED CHANNEL RF(NZ) FDI:10 YES! LDKL A1,/0511 NOT PROGRAMMED CHANNEL ST A1,FRD:20 MODIFY INR INSTRUCTION FDI:10 EQU * LDK A1,/14 LOCK ORDER EX FRD:10 EXECUTE ORDER RB(NA) *-4 LOOP UNTIL ACCEPTED SST A1,FDCU SENSE STATUS RB(NA) *-2 ANK A1,1 FLEXIBLE DISC OPERABLE? RB(NZ) FDI:10 NO! RTN A14 EJECT *********************************************************** * * * FRDSEC - READ SECTOR FROM FLEXIBLE DISC * * ======================================= * * * * REFERENCED IN: SYSLOD * * * * ENTRY: A9 - BUFFER ADDRESS * * A11 - SECTOR NUMBER * * * * EXIT: * * * * WORK REGISTERS: A1,A2,A3 * * * * SUBROUTINES: ERROR * * * *********************************************************** FRDSEC EQU * LDR A1,A11 GET SECTOR NUMBER SLL A1,5 ORKL A1,/C000 LDKL A2,MUXCC LOAD 1:ST MUX WORD LD A3,MXBUF LOAD 2:ND MUX WORD WER A2,FDIOP WRITE 1:ST MUX WORD WER A3,FDIOP+1 WRITE 2:ND MUX WORD LDR A2,A3 BUFFER START ADKL A3,BUFLEN BUFFER END FRD:10 CIO A1,1,FDCU START READ RB(NA) FRD:10 LOOP UNTIL ACCEPTED FRD:20 INR A1,0,FDCU GET CHAR - MODIFIED IF MUX RF(NA) FRD:40 LOOP UNTIL ACCEPTED STR A1,A2 STORE CHARACTER ADK A2,2 INCREMENT BUFFER POINTER CWR A2,A3 END OF BUFFER? RB(NE) FRD:20 NO! FRD:30 CIO A1,0,FDCU STOP READING RB FRD:20 FRD:40 SST A1,FDCU SENSE STATUS RB(NA) FRD:20 LOOP UNTIL ACCEPTED ANKL A1,/4E15 FATAL ERROR? RF(NZ) FRD:50 YES! ADKL A11,1 INCREMENT SECTOR ADDRESS RTN A14 FRD:50 LDKL A1,LMP2 CALL ERROR EJECT *************************************************** * * * GETFIL - GET CONFIGURATION FILE * * =============================== * * * * REFERENCED IN: SYSLOD * * * * ENTRY: A9 - BUFFER ADDRESS + 2 * * * * EXIT: A11 - SECTOR ADDRESS TO CONF. FILE * * * * WORK REGISTERS: A1,A4,A5,A6,A7,A8,A10 * * * * SUBROUTINES: READVL,READCF * * * *************************************************** GETFIL EQU * LDKL A11,0 VOLUME LABEL CF A14,READVL GET VOLUME LABEL READVL EQU *-2 LD A10,10,A9 GET VTOC BASE LDR A11,A10 SAVE AD A10,6,A9 LAST VTOC SECTOR LD A8,12,A9 GET VTOC RECORD LENGTH ADKL A11,1 FIRST FILE SECTOR IN VTOC GET:10 EQU * CF A14,READCF READ SECTOR READCF EQU *-2 LDK A7,QBLFAC BLOCKING FACTOR LDR A6,A9 GET START OF BUFFER GET:20 EQU * LDK A5,/20 LOAD SPACE CCR A5,A6 UNUSED FILE? RF(E) GET:50 YES! LDR A4,A6 START OF RECORD LDK A5,'S' STANDARD FILE CHARACTER CC A5,27,A6 STANDARD FILE? RF(NE) GET:50 NO! LDK A5,'$' LEADING CHAR IN CONF. FILE CCR A5,A4 CONFIGURATION FILE? RF(NE) GET:50 NO! GET:25 LDK A3,'C' THIS INSTRUCTION IS MODIFIED CCK A3,'CC' LOOKING FOR CONF. FILE? RF(NE) GET:85 NO! ADK A4,5 SIXTH CHARACTER LDK A5,':' CHARACTER TO PRECEED NUMBER GET:30 CCR A5,A4 CONFIGURATION FILE? RF(E) GET:40 YES! SUK A4,1 TRY NEXT CHARACTER CWR A4,A6 FIRST IN NAME? RF(E) GET:50 YES! RB GET:30 GET:40 EQU * * * CHECK APPLICATION NUMBER * LC A5,1,A4 GET LEFT DIGIT SLL A5,8 SHIFT TO LEFT BYTE LC A5,2,A4 GET RIGHT DIGIT CALL CONVRT CONVERT TO BINARY CW A1,SCTANO SAME AS APPLICATION NUMBER RF(NE) GET:50 * * CONFIGURATION FILE FOUND * LD A1,22,A6 LAST RECORD NUMBER ST A1,SAVE20,A13 SAVE LD A11,18,A6 SECTOR ADDRESS RTN A14 GET:50 EQU * ADR A6,A8 NEXT VTOC RECORD ADK A6,1 BYPASS STATUS CHARACTER SUK A7,1 MOORE RECORDS IN THIS SECTOR? RB(P) GET:20 YES! CWR A11,A10 LAST VTOC SECTOR? RB(NE) GET:10 NO! GET:60 LDK A3,'C' THIS INSTRUCTION IS MODIFIED CCK A3,'CC' LOOKING FOR CONF. FILE? RF(NE) GET:99 NO! * * CONFIGURATION FILE NOT FOUND - READ SOP AND SELECT * LOAD MEDIUM FOR CONFIGURATION FILE * LDKL A2,/01F8 OTR A2,0,SOP SWITCH ON SOP LAMPS GET:70 EQU * CF A14,SOPIN ANKL A1,/00FC ALLOWED SWITCH RB(Z) GET:70 NO! LDKL A2,LMP1 OTR A2,0,SOP SWITCH ON LOAD LAMP SRN A1,A2 LD A1,DEVTAB,A2 GET DEVICE ADDRESS CWK A2,5 DISC? RF(G) GET:80 YES! CF A14,FDINIT INIT FLEXIBLE DISC RB GETFIL GET:80 EQU * CF A14,DUINIT INIT DISC RB GETFIL GET:85 EQU * CCK A3,'SS' LOOKING FOR $SWAPP? RF(NE) GET:99 NO! LDK A5,0 RESET CHARACTER COUNTER GET:90 LCR A1,A4 GET CHAR IN FILENAME CC A1,SWPTAB,A5 CHECK IF PRESCIBED CHAR. RB(NE) GET:50 NO! ADK A4,1 NEXT CHARACTER ADK A5,1 INCREMENT CHARACTER COUNTER CWK A5,8 ALL CHARACTERS CHECKED? RB(NE) GET:90 NO! * * SWAPPABLE WORK BLOCK FILE FOUND - SAVE SECTOR ADDRESS ON DISC * LD A1,18,A6 GET FILE EXTENT BASE ST A1,SCTSWB SAVE IN SYSTAB LD A3,SWPFEL,A6 GET LENGTH IN SECTORS ADR A3,A1 LAST SECTOR IN SWAPP-FILE ST A3,SAVE25,A13 SAVE GET:99 RTN A14 EJECT ***************************************************** * * * LODCOM - LOAD CORE RESIDENT PART OF APPLICATION * * =============================================== * * * * LODSEG - LOAD ONE SEGMENT * * ========================= * * * * ENTRY: A8 - SEGMENT ADDRESS * * A10 - EFFECTIVE LENGTH * * A12 - RELOCATION BASE * * * * EXIT: * * * * WORK REGISTERS: A1,A2,A3,A4,A7 * * * * SUBROUTINES: MOVE,READ * * * ***************************************************** LODCOM EQU * LDR A3,A9 GET SAVE09 OF BUFFER LDR A2,A3 SAVE LD A7,SCTPLD GET PROGRAM LOAD DEVICE ANK A7,/FE SKIP UNIT SELECTOR BIT SUK A7,/F0 CASSTTE? RF(N) LOD:20 YES! LDKL A7,376 NUMBER OF CODE WORDS LOD:10 EQU *-2 RF LOD:30 LOD:20 EQU * LDKL A7,240 NUMBER OF CODE WORDS LOD:30 EQU * LDR A10,A10 APP >32 KB? RF(NN) LOD:40 NO! SUR A10,A7 DEC. LENGTH RF LOD:50 LOD:40 EQU * SUR A10,A7 CHECK IF IN END OF OF SEGMENT RF(NN) LOD:50 NO YET! CWK A7,240 CASSETTE? RF(E) LOD:45 YES! CWK A7,400 200 WORDS/SECTOR? RF(E) LOD:42 YES! ADR A2,A7 START OF RELOCATION TABLE CF A14,REBUF RELOCATE CODE LOD:42 EQU * ADR A7,A10 COMPUTE NUMBER OF CODE WORDS LDKL A10,0 INDICATE END OF SEGMENT RF LOD:52 LOD:45 EQU * ADR A7,A10 JUST MOVE SIGNIFICANT CHARACTERS! LDKL A10,0 INDICATE END OF SEGMENT LOD:50 EQU * CWK A7,400 200 WORDS/SECTOR? RF(E) LOD:52 YES! ADR A2,A7 START OF RELOCATION BITS CWK A7,240 APPLICATION<ONE CASSETTE BLOCK? RF(NL) LOD:51 NO LD A4,SAVE12,A13 FIRST CASSETTE BLOCK RF(NZ) LOD:51 NO ADK A2,8 START OF RELOCATION BITS LOD:51 EQU * CF A14,REBUF RELOCATE LOD:52 EQU * LDR A1,A9 START OF CODE PART LD A4,SAVE12,A13 FIRST SECTOR/BLOCK? RF(NZ) LOD:55 NO! IM SAVE12,A13 INDICATE NOT FIRST SECTOR/BLOCK ADK A1,8 SKIP 4 WORDS IN FIRST SECTOR/BLOCK CWK A10,0 COMMON PART <= ONE SECTOR/BLOCK? RF(E) LOD:55 YES SUK A7,8 DECR. NUMBER OF CHAR. TO MOVE ADKL A10,8 LOD:55 EQU * LDR A3,A7 NUMBER OF CHARACTERS TO MOVE LD A2,SAVE07,A13 GET TO-ADDRESS ADS A3,SAVE07,A13 UPDATE MEMORY ADDRESS LD A4,SCTOPT GET OPTION WORD ANK A4,1 MMU IN SYSTEM? RF(Z) LOD:60 NO! MVSU A3 MOVE TABLE FROM SYSTEM RF LOD:65 LOD:60 EQU * CALL MOVE LOD:65 EQU * LDR A10,A10 END OF SEGMENT? RF(NZ) LOD:70 RTN A14 EXIT LODSEG EQU * LDKL A1,400 NUMBER OF WORDS/SECTOR ST A1,LOD:10 MODIFY INSTRUCTION LOD:70 EQU * CF A14,READ READ EQU *-2 RB LODCOM EJECT ************************************************* * * * REBUF - RELOCATE BUFFER ROUTINE * * =============================== * * * * REFERENCED IN: LODCOM/LODSEG * * * * ENTRY: A3 - SAVE09 OF BUFFER * * A2 - SAVE09 OF RELOCATION TABLE * * * * EXIT: * * * * WORK REGISTERS: A1,A4,A5,A6 * * * * SUBROUTINES: * * * ************************************************* REBUF EQU * LDR A4,A2 GET SAVE09 OPF RELOCATION TABLE SUK A4,2 REB:10 EQU * ADK A4,2 NEXT RELOCATION WORD LDK A6,16 NUMBER OF RELOCATION BITS LDR* A1,A4 GET RELOCATION WORD REB:20 EQU * RF(NN) REB:30 DON'T RELOCATE THIS WORD! LDR* A5,A3 GET CODE WORD ADR A5,A12 RELOCATE STR A5,A3 STORE IT BACK REB:30 EQU * ADK A3,2 NEXT CODE WORD CWR A3,A2 END OF CODE WORD PART? RF(E) EXREL YES! SUK A6,1 MOORE RELOCATION BITS? RB(Z) REB:10 NO! SLL A1,1 NEXT RELOCATION BIT RB REB:20 EXREL EQU * RTN A14 EJECT ***************************************** * GETCON - GET CONTENT IN MEMORY WORD * ***************************************** * * REFERENCED IN: SEGGEN * * ENTRY: A2 - MEMORY ADDRESS * MMUOPT - MMU OPTION SWITCH (X) * * EXIT: A1 - CONTENT OF MEMORY ADDRESS * * WORK REGISTER: * * SUBROUTINES: * GETCON EQU * LD A1,SCTOPT GET OPTION WORD ANK A1,1 MMU OPTION RF(Z) GCON10 NO MMU ELR A1,A2 RF GCON20 GCON10 EQU * LDR* A1,A2 GCON20 EQU * RTN A14 RETURN END SYSLOD