plato:source:plaopl:ecsmgr
Table of Contents
ECSMGR
Table Of Contents
- [00005] ECSMGR ECS LESSON BUFFER MANAGEMENT
- [00025] ENTRY
- [00074] SEARCH FOR ADEQUATE FREE SPACE
- [00192] DELETE UNUSED LESSONS
- [00390] COLLECT FREE SPACE
- [00712] EMSET - SET UP INTERLOCKS / VARIABLES
- [00726] EMCLR - CLEAR INTERLOCKS / SAVE VARIABLES
- [00741] -GETECS- OBTAIN ECS FROM LESSON BUFFER
- [00765] -GETECS1- OBTAIN ECS FROM LESSON BUFFER
Source Code
- ECSMGR.txt
- ECSMGR
- * /--- FILE TYPE = E
- * /--- BLOCK ECSMGR 00 000 78/05/03 01.44
- IDENT ECSMGR
- TITLE ECSMGR ECS LESSON BUFFER MANAGEMENT
- *
- *
- CST
- *
- EXT LSNADDR
- *
- *
- * PARAMETERS FROM -IPTEXT- VIA -INSTALP-
- *
- * EMPRM1 MAX SHORT REQUEST SIZE
- * EMPRM2 MIN ECS FREE FOR LONG REQUEST
- * EMPRM3 *EMAVL* SCAN THRESHOLD
- * EMPRM4 NORMAL AMOUNT FREE ECS DESIRED
- LTABPZ EQU WORKLTH+INFOLTH PAGE SIZE FOR LESTAB READ
- *
- *
- * /--- BLOCK ENTRY 00 000 80/04/22 01.38
- TITLE ENTRY
- *
- *
- *
- * -EMANAG- LESSON BUFFER MANAGER
- *
- * THIS ROUTINE MAINTAINS FREE SPACE WITHIN THE
- * LESSON BUFFER BY DELETING UNUSED LESSONS AND BY
- * RE-LOCATING LESSONS TO COMBINE FREE SPACES
- *
- *
- ENTRY EMANAG
- EMANAG EQ * ENTRY/EXIT
- SA1 XSLCLOK
- SA2 EMMODE
- BX6 X1 SAVE TIME OF ENTRY
- BX7 X2
- SA7 EMEMOD SAVE ENTRY MODE
- SA6 EMENTIM
- * DETERMINE THE AMOUNT OF EM TO SEARCH FOR. IF A
- * REQUEST IS HANGING, THEN SEARCH FOR EITHER THE
- * MAXIMUM STORAGE BUFFER OR 1/8 OF THE LESSON BUFFER
- * (WHICHEVER IS LARGER). IF THERE IS NO REQUEST
- * HANGING, THEN JUST USE THE CONFIG PARAMETER TO
- * DETERMINE HOW MUCH TO SEARCH FOR.
- SX6 =XEMPRM4 AMOUNT OF FREE ECS REQUIRED
- SA1 EMREQ
- ZR X1,EMR1 CHECK IF A REQUEST IS HANGING
- SA2 ILESBF4
- AX2 1 COMPUTE BUFF LENGTH/8
- BX6 X2
- SX2 100000 MINIMUM REQUEST = MAX STORAGE SIZE
- IX7 X6-X2
- PL X7,EMR1
- BX6 X2
- *
- EMR1 SA6 ECREQ
- SA1 EMMODE
- SB1 X1 JUMP BY CURRENT MANAGEMENT MODE
- JP B1+*+1
- *
- + EQ EM1000 SEARCH FOR ADEQUATE FREE SPACE
- + EQ EM2000 DELETE UNUSED LESSONS
- + EQ EM3000 RE-LOCATE TO COLLECT SPACE
- *
- *
- * /--- BLOCK SCAN 00 000 78/05/14 17.54
- TITLE SEARCH FOR ADEQUATE FREE SPACE
- *
- *
- * CHECK IF ENOUGH FREE SPACE LEFT FROM LAST TIME
- *
- EM1000 CALL EMSET SET UP INTERLOCKS / VARIABLES
- SA3 NLESSIN (X3) = ENTRIES IN *LESTAB*
- SX1 LESSNS-5 CHECK IF *LESTAB* TABLE FILLING
- IX1 X3-X1
- PL X1,EM1910
- *
- SA4 ECREQ X4 = AMOUNT FREE SPACE REQUIRED
- SX5 =XEMPRM1 (X5) = SHORT REQUEST SIZE
- SA1 APRETAB X1 = ADDR OF PRE-LESTAB TABLE
- SA2 EMINDX INDEX TO POSSIBLE FREE SPACE
- IX0 X1+X2
- RX2 X0 (-RXX- 1 WD READ, MAY CHG *A2*)
- MX0 -24
- AX2 24
- BX2 -X0*X2
- IX2 X2-X4
- SA0 INFO REQUIRED - *RX2* MAY ZAPPED IT
- NG X2,EM1140 JUMP IF NOT ENOUGH FREE SPACE
- SA2 EMREQ
- NZ X2,EM1300 CHECK IF REQUEST HANGING
- SA1 EMAVL
- SX2 =XEMPRM3 CHECK REASONABLE AMOUNT FREE
- IX2 X1-X2
- NG X2,EM1300
- EQ EMEXIT
- *
- * SEARCH *LESTAB* FOR AN ADEQUATE FREE SPACE
- *
- EM1140 SB3 LTABPZ SIZE OF READ *LESTAB* READ
- SB4 -B3 (B4) = INDEX INTO LESTAB
- BX0 X1
- EM1150 SB2 B0 INDEX INTO THIS PAGE
- SB4 B4+B3
- RE LTABPZ
- RJ =XECSPRTY
- MX3 -24 MASK FOR FREE SPACE
- SA1 INFO-1 INITIALIZE FOR SEARCH
- * /--- BLOCK SCAN 00 000 78/05/14 17.56
- *
- EM1200 SA1 A1+1 LOAD NEXT *LESTAB* ENTRY
- SB2 B2+1 CHECK IF WITHIN PAGE
- LE B2,B3,EM1210 IF WITHIN PAGE
- SX1 B3 READ NEXT PAGE
- IX0 X0+X1
- EQ EM1150
- EM1210 ZR X1,EM1910 IF END OF TABLE
- AX1 24
- BX1 -X3*X1
- IX2 X1-X4 CHECK FOR A BIG HOLE
- IX1 X1-X5 CHECK FOR SHORT REQUEST HOLE
- PL X2,EM1220 IF A BIG HOLE
- NG X1,EM1200 IF NOT A SMALL HOLE
- SX6 B2+B4 SAVE INDEX INTO *LESTAB*
- SX6 X6-1
- SA6 EMPTRS
- EQ EM1200 CONTINUE SEARCH
- EM1220 SX6 B2+B4 COMPUTE INDEX INTO *LESTAB*
- SX6 X6-1
- SA6 EMINDX
- SA6 EMPTRL SET FREE POINTER FOR LONG REQ
- *
- SA1 EMREQ CHECK IF REQUEST WAS HANGING
- ZR X1,EMEXIT
- *
- EM1300 MX6 0
- SA6 EMREQ CLEAR REQUEST HANGING FLAG
- SA1 APRETAB
- BX0 X1 ECS ADDRESS OF TABLE
- SA0 INFO
- SB3 LTABPZ PAGE SIZE OF *LESTAB*
- BX6 X6-X6 X6 = TOTAL FREE SPACE
- MX7 0 X7 = CURRENT ECS ADDRESS
- *
- EM1306 RE LTABPZ READ *LESTAB* TABLE TO CM
- RJ =XECSPRTY
- SB2 B0 B2 = INDEX WITHIN PAGE
- *
- * SCAN TO FIND TOTAL ECS FREE
- *
- MX3 -24 MASK FOR FREE SPACE
- SA1 INFO-1 INITIALIZE FOR SEARCH
- *
- EM1310 SA1 A1+1 LOAD NEXT *LESTAB* ENTRY
- SB2 B2+1 INCREMENT INDEX INTO THIS PAGE
- LE B2,B3,EM1314 IF WITHIN PAGE
- SX1 B3
- IX0 X0+X1
- EQ EM1306 READ NEXT PAGE
- *
- EM1314 ZR X1,EM1320 IF END OF TABLE
- BX2 -X3*X1 GET ECS ADDRESS
- IX2 X2-X7
- NG X2,"CRASH" CHECK IF ADDRESSES IN ORDER
- BX7 -X3*X1
- AX1 24 POSITION FREE SPACE
- BX2 -X3*X1
- IX6 X2+X6 INCREMENT FREE SPACE TOTAL
- EQ EM1310
- *
- EM1320 SA6 EMAVL SET FREE SPACE TOTAL
- EQ EMEXIT EXIT
- *
- EM1910 SX6 1
- SA6 EMINDX INITIALIZE INDEX
- SA6 EMMODE RE-SET MANAGEMENT MODE
- CALL EMCLR CLEAR INTERLOCKS
- EQ EM2100
- *
- *
- *
- * /--- BLOCK DELETE 00 000 80/04/22 01.38
- TITLE DELETE UNUSED LESSONS
- *
- *
- * DELETE UNUSED LESSONS TO PROVIDE MORE SPACE
- *
- EM2000 SA1 EMINDX
- SX6 X1-5 BACK-UP INDEX AFTER INTERRUPT
- + PL X6,*+1 IN CASE LESSONS WERE DELETED
- SX6 1
- + SA6 A1
- *
- EM2100 INTLOK X,I.SIGN,W
- CALL EMSET SET INTERLOCKS
- EM2110 SA1 XSLCLOK COMPUTE ELASPED TIME
- SA2 EMENTIM
- IX1 X1-X2
- SA2 EMTIME CHECK IF TAKING TOO MUCH TIME
- IX1 X1-X2
- PL X1,EM2600 IF OUT OF TIME
- SA1 APRETAB ADDRESS OF PRE-LESTAB TABLE
- BX6 X1
- *
- SA1 EMINDX LOAD INDEX IN *LESTAB*
- SA2 NLESSIN
- IX0 X1-X2 CHECK IF INDEX TOO BIG
- + NG X0,*+1
- SX1 X2-1 RE-SET INDEX
- + PL X1,*+1 CHECK IF INDEX TOO SMALL
- SX1 1
- + NZ X1,*+1 CHECK IF INDEX TOO SMALL
- SX1 1
- + SX1 X1-1
- IX6 X6+X1
- MX4 -2*18 MASK FOR USER COUNTS
- MX5 -24 MASK FOR ECS ADDRESS
- *
- * /--- BLOCK DELETE 00 000 81/07/21 03.37
- *
- * SEARCH FOR UNUSED LESSONS TO DELETE
- *
- EM2200 SX0 1
- IX6 X0+X6 READ NEXT LESTAB ENTRY
- RX1 X6 (-RXX- 1 WD READ, MAY CHG *A1*)
- ZR X1,EM2500
- BX0 -X5*X1 MASK OFF ECS ADDRESS OF LESSON
- SA0 LHBUFF RESET BECAUSE OF -RXX-
- + RE 2 READ LESSON HEADER
- RJ =XECSPRTY
- SA1 LHBUFF+1
- BX7 -X4*X1 MASK OFF STUDENT COUNTS
- NZ X7,EM2200 EXIT IF LESSON IN USE
- MX2 12
- BX7 X2*X1 MASK I/O AND DELETE BITS
- NZ X7,EM2200 EXIT IF CANNOT BE DELETED
- SA1 LHBUFF
- ZR X1,"CRASH" BAD LESSON NUMBER
- BX7 X2*X1 MASK OFF LESSON TYPE CODE
- LX7 12
- MX2 -12
- LX1 24 POSITION LESSON NUMBER
- BX1 -X2*X1
- ZR X7,EM2210 JUMP IF TUTOR LESSON
- SX2 X7-2
- ZR X2,EM2215 JUMP IF COMMON
- SX2 X7-4
- ZR X2,EM2220 JUMP IF CHARSET
- SX2 X7-8
- ZR X2,EM2220 JUMP IF LINESET
- EQ EM2300
- *
- * SPECIAL CHECKS FOR TUTOR LESSON
- *
- EM2210 RE LESHEAD READ ENTIRE LESSON HEADER
- RJ =XECSPRTY
- CALL SYSLES,LHBUFF+LACCNAM
- SX3 X3-1 CHECK FOR SPECIAL SYSTEM LESSON
- ZR X3,EM2200 DO NOT DELETE SPECIAL LESSON
- EQ EM2300
- *
- * ALLOW DELAY BEFORE DELETING COMMON
- *
- EM2215 RE COMHEAD READ ENTIRE COMMON HEADER
- RJ ECSPRTY
- SA2 A0+LCOMTIM
- SA3 SYSCLOK CHECK IF TIME TO DELETE COMMON
- IX2 X3-X2
- PL X2,EM2300 DELETE COMMON IF TIME ELAPSED
- EQ EM2200
- *
- * ALLOW DELAY BEFORE DELETING CHARSETS AND LINESETS
- *
- EM2220 RE CHRHEAD READ ENTIRE CHARSET HEADER
- RJ =XECSPRTY
- SA2 A0+LCHRTIM
- SA3 SYSCLOK CHECK IF TIME TO DELETE CHARSET
- IX2 X3-X2
- PL X2,EM2300 DELETE CHARSET IF TIME ELAPSED
- EQ EM2200
- *
- * /--- BLOCK DELETE 00 000 78/05/14 17.58
- *
- * DELETE UNUSED LESSON
- *
- EM2300 SA3 APRETAB SAVE INDEX IN *LESTAB*
- IX6 X6-X3
- SA6 EMINDX
- SA3 EMSTAT+8 COUNT NUMBER OF DELETES
- SX6 1
- IX6 X3+X6
- SA6 A3
- SA3 A0 COUNT WORDS RECLAIMED
- SX6 X3
- AX3 18
- SX3 X3
- IX6 X6+X3
- SA3 EMSTAT+9
- IX6 X6+X3
- SA6 A3
- * DELETE THE LESSON WITHOUT CLEARING I.ADDL
- CALL DELLES DELETE LESSON (X1 = LESSON NO)
- EQ EM2110
- EM2500 CALL EMCLR
- INTCLR X,I.SIGN
- CALL EMSET
- *
- * SEARCH FOR MAXIMUM FREE SPACE
- *
- SA1 APRETAB
- SA0 INFO
- SB3 LTABPZ PAGE SIZE FOR EACH LESTAB READ
- SB4 -B3 (B4) = PAGE INDEX INTO LESTAB
- BX3 X3-X3
- BX6 X6-X6
- SX5 =XEMPRM1 (X5) = SHORT REQUEST SIZE
- BX0 X1
- EM2506 SB2 0 READ NEXT PAGE
- MX4 -24
- SB4 B4+B3
- RE LTABPZ
- RJ =XECSPRTY
- SA1 A0-1
- *
- EM2510 SA1 A1+1 LOAD NEXT *LESTAB* ENTRY
- SB2 B2+1
- LE B2,B3,EM2514 IF WITHIN PAGE
- SX1 B3
- IX0 X0+X1
- EQ EM2506
- EM2514 ZR X1,EM2520 IF END OF TABLE
- AX1 24 POSITION FREE SPACE
- BX2 -X4*X1
- IX6 X6+X2 ADD TO TOTAL FREE SPACE
- IX1 X3-X2
- PL X1,EM2516 IF NOT MAXIMUM SO FAR
- BX3 X2 RE-SET MAXIMUM FOUND
- SB1 B4+B2 SAVE INDEX OF MAXIMUM
- EQ EM2510
- EM2516 IX1 X2-X5
- NG X1,EM2510 IF NOT A SMALL HOLE
- SX7 B4+B2 SAVE INDEX OF SMALL HOLE
- SX7 X7-1
- SA7 EMPTRS
- EQ EM2510 CONTINUE SEARCH
- *
- EM2520 SA6 EMFREE SAVE TOTAL AMOUNT OF ECS FREE
- SA6 EMAVL
- SA4 ECREQ GET SIZE OF FREE SPACE REQUIRED
- IX2 X3-X4
- NG X2,EM2900 JUMP IF MAXIMUM NOT BIG ENOUGH
- SB1 B1-1
- SX6 B1 INDEX INTO LESTAB
- SA6 EMINDX
- SA6 EMPTRL SET LONG FREE POINTER
- MX6 0 RE-SET ECS MANAGEMENT MODE
- SA6 EMMODE
- SA6 EMREQ CLEAR REQUEST HANGING FLAG
- EQ EMEXIT EXIT
- * /--- BLOCK DELETE 00 000 78/05/14 17.58
- EM2600 INTCLR X,I.SIGN
- EQ EMEXIT
- *
- EM2900 MX7 0 RE-SET INDEX IN *LESTAB*
- SA7 EMINDX
- SA1 GECSLIM MINIMUM ECS FREE REQUIRED
- IX2 X6-X1
- NG X2,EMEXIT EXIT IF NOT ENOUGH ECS
- SX6 2
- SA6 EMMODE RE-SET ECS MANAGEMENT MODE
- SA6 EMKICK FORCE ECS MANAGER TO BE CALLED
- EQ EMEXIT
- *
- * /--- BLOCK COLLECT 00 000 78/11/12 18.42
- TITLE COLLECT FREE SPACE
- *
- *
- * SEARCH TO FIND STARTING INDEX FOR MOVE LOOP
- *
- EM3000 CALL EMSET
- SA1 EMINDX BACK-UP IN CASE OF INTERRUPT
- SX6 X1-10 IN CASE LESSONS WERE DELETED
- + PL X6,*+1
- SX6 0
- + SA6 A1
- SA1 EMAVL CHECK AMOUNT APROX TOTAL FREE
- SX2 EMPRM2
- LX2 1
- IX2 X1-X2
- NG X2,EM3910 TRY TO DELETE LESSONS
- *
- EM3100 SA1 EMINDX INITIALIZE INDEX FOR SEARCH
- SA2 NLESSIN
- IX0 X1-X2 CHECK IF INDEX TOO BIG
- + NG X0,*+1
- SX1 X2-1 RE-SET INDEX
- + PL X1,*+1
- SX1 0 RE-SET INDEX
- + SA5 APRETAB
- SX4 2000
- MX2 -24
- IX0 X5+X1
- SA0 INFO
- SB3 LTABPZ
- SB4 X1 INITIALIZE INDEX IN TABLE
- SB4 B4-B3
- EM3110 RE LTABPZ READ A PAGE OF LESTAB
- RJ ECSPRTY
- SA1 INFO-1
- SB2 B0
- SB4 B4+B3
- EM3120 SA1 A1+1 LOAD NEXT LESTAB ENTRY
- SB2 B2+1
- LE B2,B3,EM3130 IF WITHIN A PAGE
- SX1 B3
- IX0 X0+X1
- EQ EM3110 READ NEXT PAGE
- *
- EM3130 ZR X1,EM3910 IF END OF TABLE
- AX1 24
- IX1 X1-X4
- NG X1,EM3120 IF NOT ENOUGH FREE SPACE
- SX6 B4+B2
- SX6 X6-1 SET INDEX TO START COMPRESSION
- SA6 EMINDX
- *
- * /--- BLOCK COLLECT 00 000 80/04/22 01.38
- *
- * BEGIN COLLECTION OF FREE SPACE
- *
- EM3300 SA1 EMINDX LOAD INDEX FOR START OF SEARCH
- SA2 APRETAB
- IX0 X1+X2 INDEX TO NEXT LESSON
- RX1 X0 (-RXX- 1 WD READ, MAY CHG *A1*)
- BX6 X1
- SA6 OLESTAB INITIALIZE
- MX7 -24
- ZR X1,EM3910 EXIT IF END OF TABLE
- SA6 XLESTAB PRE-SET CURRENT ENTRY WORD
- BX0 -X7*X1 ECS ADDRESS OF LESSON
- RX2 X0 (-RXX- 1 WD READ, MAY CHG *A2*)
- BX6 X2
- SA6 XLHEAD SAVE LENGTH
- SX3 X2
- AX2 18
- IX6 X0+X3
- SX2 X2
- IX6 X6+X2
- SA6 RLOCADD INITIALIZE RELOCATION ADDRESS
- LX1 -24 POSITION FREE SPACE LENGTH
- BX0 -X7*X1
- SA1 ECREQ AMOUNT OF ECS REQUESTED
- IX1 X0-X1
- PL X1,EM3900 EXIT IF FOUND ENOUGH ECS
- *
- * LOOP TO CONTINUE COLLECTION OF FREE SPACE
- *
- EM3400 SA1 XSLCLOK COMPUTE ELAPSED TIME
- SA2 EMENTIM
- IX1 X1-X2
- SA2 EMTIME CHECK IF TAKING TOO MUCH TIME
- IX1 X1-X2
- PL X1,EMEXIT
- SA1 EMINDX
- SX6 X1+1 ADVANCE INDEX
- SA6 A1
- SA2 APRETAB
- IX0 X6+X2 INDEX TO NEXT LESSON
- RX1 X0 (-RXX- 1 WD READ, MAY CHG *A1*)
- BX6 X1
- SA6 XLESTAB SAVE *LESTAB* ENTRY
- ZR X1,EM3910 EXIT IF END OF TABLE
- MX7 -24
- BX0 -X7*X1 ECS ADDRESS OF LESSON
- LX1 -24
- BX1 -X7*X1 MASK OFF FREE SPACE LENGTH
- SA2 ECREQ AMOUNT OF ECS REQUESTED
- IX2 X1-X2
- PL X2,EM3900 EXIT IF FOUND ENOUGH ECS
- *
- * /--- BLOCK COLLECT 00 000 78/05/03 00.05
- *
- * CHECK IF LESSON CAN BE RELOCATED
- *
- SA0 XLHEAD
- + RE 2 READ FIRST 2 WORDS OF HEADER
- RJ =XECSPRTY
- SA1 XLHEAD+1 SECOND WORD OF LESSON HEADER
- SA2 NORELOC BITS TO SUPPRESS RELOCATION
- BX2 X2*X1
- NZ X2,EM3300 EXIT IF CANT RELOCATE LESSON
- * CHECK IF LESSON ALREADY IN DESIRED SPOT
- SA1 RLOCADD ADDRESS TO MOVE TO
- SA3 XLESTAB
- BX2 -X7*X3 ADDRESS TO MOVE FROM
- SA4 XLHEAD
- SX3 X4
- AX4 18
- SX4 X4
- IX3 X3+X4 LENGTH TO MOVE
- IX6 X1-X2
- ZR X6,EM3450 JUMP IF *FROM* = *TO* = NO MOVE
- BX6 X3 SAVE LESSON LENGTH
- SA6 TEMP
- TSLNK IFNE 0,0
- * DECKERS ALGORITHM, READ UP LESNAM ENTRY
- MX0 -12
- SA1 XLHEAD 1ST WORD OF LESSON HEADER
- LX1 12
- BX2 -X0*X1 (X0) = LESSON TYPE
- SX2 X2-1 CHECK FOR STORAGE LESSON
- NZ X2,EM3430 IF NOT STORAGE OK TO MOVE
- LX1 12
- BX1 -X0*X1 (X1) = LESSON NUMBER
- CALL LSNADDR GET *LESNAM* ECS ADDR
- SX1 2
- IX0 X0+X1 READ PLATO*S NEED WORD
- RX1 X0 READ OLD WORD
- MX2 1
- BX6 X1+X2 SET FLAG
- WX6 X0 RETURN WORD FOR PPU TO READ
- * IF (NOS NEED FLAG=0) CONTINUE, YOU HAVE THE BUFFER
- MX1 59 -1
- IX0 X0+X1
- RX2 X0 FETCH NOS NEED
- PL X2,EM3430 NOS NEED =0, YOU HAVE BUFFER
- * OTHERWISE CLEAR YOUR FLAG AND EXIT.
- SX2 1 SET BACK TO PLATO NEED
- IX0 X0+X2
- RX1 X0 READ UP OLD WORD
- MX6 1
- BX6 -X6*X1 CLEAR PLATO NEED BIT
- WX6 X0
- SX2 2
- IX0 X0-X2 (X0) = ADDR. OF NOS/PLATO TURN
- RX1 X0 (X1) = NEG. IF PLATO TURN
- PL X1,EM3300 IF ALREADY NOS TURN
- MX6 1
- BX6 -X6*X1 SET TURN = NOS
- WX6 X0 UPDATE NOS/PLATO TURN FLAG
- EQ EM3300 EXIT IF CAN NOT MOVE LESSON
- TSLNK ENDIF
- *
- * RELOCATE LESSON TO COLLECT FREE SPACE AND ADJUST
- * *LESNAM* AND *LESTAB* TABLES ACCORDINGLY
- *
- * /--- BLOCK COLLECT 00 000 79/06/27 17.28
- TSLNK IFNE 0,0
- EM3430 SA1 RLOCADD ADDRESS TO MOVE TO
- SA3 TEMP RETRIEVE LENGTH TO MOVE
- SA2 XLESTAB
- BX2 -X7*X2 ADDRESS TO MOVE FROM
- TSLNK ENDIF
- SA5 EMSTAT+10 COUNT MOVES
- SX7 1
- IX7 X5+X7
- SA7 A5
- SA5 A5+1 COUNT WORDS MOVED
- IX7 X5+X3
- SA7 A5
- MX7 -1 MARK NO ECS ERROR RECOVERY
- CALL MVECS
- *
- *
- * ADJUST *LESNAM* AND *LESTAB* TABLES
- *
- MX7 -24
- SA1 OLESTAB PREVIOUS *LESTAB* ENTRY
- LX1 -24 POSITION FREE SPACE
- BX6 X7*X1
- LX6 24
- SA6 A1 CLEAR OUT FREE SPACE
- SA2 EMSTAT+12 COUNT WORDS RECLAIMED
- BX6 -X7*X1
- IX6 X2+X6
- SA6 A2
- SA2 EMINDX
- SX0 X2-1 INDEX TO PREVIOUS LESSON
- SA3 A1 GET *OLESTAB*
- SA2 APRETAB
- IX0 X0+X2 PREVIOUS *LESTAB* ENTRY
- WX3 X0 (-WXX- 1 WD WRITE, MAY CHG *A6*)
- BX6 -X7*X1 MASK OFF FREE SPACE LENGTH
- SA1 XLESTAB LESSONS *LESTAB* ENTRY
- BX1 X7*X1 CLEAR OUT ECS ADDRESS
- SA3 TEMP
- LX1 -24
- IX1 X1+X6 ADD TO FREE SPACE
- BX5 -X7*X1 TOTAL NOW FREE
- LX1 24 BACK TO ORIGINAL POSITION
- SA2 RLOCADD
- IX6 X2+X3 UPDATE RELOCATION ADDRESS
- SA6 A2
- BX6 X1+X2 ATTACH NEW ADDRESS
- SA6 XLESTAB
- SA6 OLESTAB UPDATE OLD COPY ALSO
- SA1 EMINDX INDEX TO THIS LESSON
- SA3 APRETAB
- IX0 X1+X3 ADDRESS OF *LESTAB* ENTRY
- WX6 X0 (-WXX- 1 WD WRITE, MAY CHG *A6*)
- * /--- BLOCK COLLECT 00 000 80/11/10 00.29
- *
- MX0 -12
- SA1 XLHEAD 1ST WORD OF LESSON HEADER
- LX1 12+12
- BX1 -X0*X1 INDEX IN *LESNAM*
- BX6 X2 *LSNADDR* WIPES *X2* OUT
- CALL LSNADDR
- BX2 X6 RESTORE *X2*
- SA0 ITEMP
- RE 4 READ LESNAM ENTRY
- RJ ECSPRTY
- SA1 A0+3 (X1) = ECS ADDRESS
- BX6 X7*X1
- BX6 X6+X2 ATTACH NEW ECS ADDRESS
- SA6 A1
- TSLNK IFNE 0,0
- SA1 A0+3 GET 4TH WORD OF LESNAM ENTRY
- LX1 12
- MX2 -12
- BX1 -X2*X1 (X1) = LESSON TYPE
- SX1 X1-1 CHECK FOR STORAGE LESSON
- NZ X1,EM3440 IF NOT STORAGE TYPE
- SA1 A0+2 GET PLATO NEED WORD (TSLINK)
- MX2 1
- BX6 -X2*X1
- SA6 A1 CLEAR PLATO NEED FLAG
- SA1 A0 (X1) = NEG. IF PLATO TURN
- BX6 -X2*X1 SET TURN = NOS (POSITIVE)
- SA6 A1 UPDATE NOS/PLATO TURN FLAG
- TSLNK ENDIF
- EM3440 WE 4 RE-WRITE LESNAM ENTRY
- RJ =XECSPRTY
- SA1 ECREQ AMOUNT OF ECS REQUESTED
- IX1 X5-X1
- PL X1,EM3900 JUMP IF FOUND ENOUGH ECS
- EQ EM3400
- *
- EM3450 IX6 X2+X3 UPDATE RELOCATION ADDRESS
- SA6 RLOCADD
- SA1 XLESTAB
- BX6 X1 UPDATE *OLESTAB*
- SA6 OLESTAB
- EQ EM3400 CONTINUE LOOP
- *
- *
- EM3900 MX6 0 RE-SET MANAGEMENT MODE
- SA6 EMMODE
- SA6 EMREQ CLEAR REQUEST HANGING FLAG
- EQ EMEXIT EXIT
- *
- EM3910 SX6 1 RE-SET MANAGEMENT MODE
- SA6 EMMODE
- MX6 0 RE-SET INDEX IN *LESTAB*
- SA6 EMINDX
- CALL EMCLR
- EQ EM2100 PROCEED TO DELETION LOOP
- *
- *
- ECREQ BSS 1
- OLESTAB BSS 1
- XLESTAB BSS 1
- RLOCADD BSS 1
- XLHEAD BSS 2
- TEMP BSS 1
- NORELOC VFD 12/LRBITS,48/0
- EMEMOD DATA 0 ENTRY MODE FOR STATISTICS
- *
- *
- EMEXIT SA1 XSLCLOK COMPUTE TIME SPENT
- SA2 EMENTIM
- SA3 EMEMOD
- SA4 EMSTAT+X3 UPDATE ENTRY COUNT
- SA5 EMSTAT+4+X3 UPDATE CPU TIME IN THIS MODE
- IX1 X1-X2
- IX6 X5+X1
- SX7 1
- IX7 X4+X7
- SA6 A5
- SA7 A4
- CALL EMCLR CLEAR INTERLOCK / SAVE VARIABLE
- EQ EMANAG -- RETURN
- *
- * /--- BLOCK EMSET 00 000 79/06/27 17.12
- EMSET SPACE 5,11
- ** EMSET - SET UP INTERLOCKS / VARIABLES
- EMSET PS
- INTLOK X,I.ADDL,W
- GETX NLESSIN
- GETX LCIRC1
- GETX EMAVL
- GETX EMSTAT,,EMSTATL
- GETX EMPTRS
- GETX EMPTRL
- GETX EMFREE
- EQ EMSET EXIT
- EMCLR SPACE 5,11
- ** EMCLR - CLEAR INTERLOCKS / SAVE VARIABLES
- EMCLR PS
- REPLAX NLESSIN
- REPLAX LCIRC1
- REPLAX EMAVL
- REPLAX EMSTAT,,EMSTATL
- REPLAX EMPTRS
- REPLAX EMPTRL
- REPLAX EMFREE
- INTCLR X,I.ADDL
- EQ EMCLR EXIT
- *
- * /--- BLOCK GETECS 00 000 79/06/27 17.31
- TITLE -GETECS- OBTAIN ECS FROM LESSON BUFFER
- *
- *
- * -GETECS-
- * FINDS FREE SPACE FOR ECS STORAGE REQUESTS
- *
- * ON ENTRY - *LESINF* = AMOUNT OF ECS REQUESTED
- *
- * ON RETURN - X7 = 0 IF FOUND ENOUGH ECS
- * X7 = -1 IF NOT ENOUGH ECS
- *
- * RETURNS *LESLOC* WITH THE ADDRESS OF THE STORAGE
- * AND *LINDEX* WITH THE INDEX IN *LESTAB*
- *
- *
- ENTRY GETECS
- GETECS EQ *
- INTLOK X,I.ADDL,W GETLES/ADDLES/DELETE INTERLOCK
- CALL GETECS1
- PL X7,GETECS EXIT IF FOUND THE SPACE
- INTCLR X,I.ADDL
- EQ GETECS
- *
- * /--- BLOCK GETECS 00 000 79/06/27 21.49
- TITLE -GETECS1- OBTAIN ECS FROM LESSON BUFFER
- *
- *
- *
- * -GETECS1-
- * ATTEMPTS TO LOCATE SPECIFIED AMOUNT OF FREE ECS
- *
- * ON ENTRY - *LESINF* = AMOUNT OF ECS REQUESTED
- *
- * ON RETURN - X7 = *EMGETF* = 0 IF ECS FOUND
- * -1 IF ECS COULD NOT BE FOUND
- *
- * *LINDEX* = INDEX IN *LESTAB* OF FREE SPACE
- * *LESLOC* = ECS ADDRESS OF FREE SPACE
- *
- *
- ENTRY GETECS1
- GETECS1 EQ * ENTRY/EXIT
- GETX NLESSIN GET ECS-RESIDENT VARIABLES
- GETX LCIRC1
- GETX EMFREE
- GETX EMAVL
- GETX EMPTRS
- GETX EMPTRL
- GETX EMSTAT,,EMSTATL
- SA1 XSLCLOK
- BX6 X1
- SA6 GETECA SAVE ENTRY TIME
- SA1 NLESSIN NUMBER OF ENTRIES IN *LESTAB*
- SB1 X1+2
- SX2 LESSNS-3 CHECK FOR *LESTAB* OVERFLOW
- IX1 X1-X2
- NG X1,GET010 IF *LESTAB* NOT FULL
- CALL S=MSG,LTFULL
- EQ NOECS
- LTFULL DIS ,*LESSON TABLE FULL.*
- GET010 SA1 LESINF AMOUNT(S) OF EM REQUESTED
- SX4 X1
- AX1 18
- IX4 X4+X1 X4 = TOTAL ECS REQUESTED
- SX7 500 COUNT GROUP OF REQUESTS BY SIZE
- PX5 X4
- NX5 X5
- PX7 X7
- NX7 X7
- FX7 X5/X7
- UX7 X7,B2
- LX7 X7,B2
- SX5 X7+14-EMSTATL
- + NG X5,*+1 CHECK WITHIN STATS BUFFER LTH
- SX7 EMSTATL-1-14 RE-SET TO MAXIMUM
- + SA5 EMSTAT+14+X7
- SX7 1
- IX7 X7+X5
- SA7 A5
- SX1 =XEMPRM1
- IX1 X4-X1
- SA5 EMPTRS GET POINTER FOR SHORT REQUESTS
- NG X1,GET020 CHECK FOR SHORT REQUEST
- SA1 EMAVL
- SX2 =XEMPRM2 CHECK MINIMUM AMOUNT FREE
- SA5 EMPTRL GET POINTER FOR LONG REQUESTS
- IX1 X1-X2
- NG X1,NOECS RESERVE MIN AMT FOR SHORT REQS
- *
- * /--- BLOCK GETECS 00 000 78/05/14 18.51
- *
- * CHECK IF ADEQUATE FREE SPACE AT *EMPTR*
- *
- GET020 MX3 -24 X3 = MASK
- SX6 X5-5 (X6) = LESTAB POINTER
- NG X6,GET070
- SA2 APRETAB ADDRESS OF LESTAB TABLE
- IX0 X2+X6
- SA0 INFO
- + RE 10 READ AREA SURROUNDING *EMPTR*
- RJ =XECSPRTY
- MX7 0
- SA7 INFO+10 PLANT ZERO FOR END-TEST
- SA1 INFO-1 A1 = READ REGISTER
- *
- GET040 SA1 A1+1 LOAD NEXT *LESTAB* ENTRY
- ZR X1,GET070 JUMP IF END OF TABLE
- SX6 X6+1 ADVANCE INDEX
- AX1 24
- BX1 -X3*X1 MASK OFF FREE SPACE
- IX2 X1-X4
- NG X2,GET040 CHECK IF SUFFICIENT FREE SPACE
- EQ GET120 (A0,A1,X3,X6 SET)
- *
- * SEARCH *LESTAB* FOR SPECIFIED AMOUNT OF FREE SPACE
- *
- GET070 SA1 APRETAB ADDRESS OF PRE-LESTAB TABLE
- BX0 X1
- SA0 INFO
- SB3 LTABPZ LENGTH OF EACH READ
- SB4 -B3
- SA1 EMSTAT+13 COUNT COMPLETE LESTAB SCANS
- SX7 1
- IX7 X1+X7
- SA7 A1
- GET075 SB2 B0
- SB4 B4+B3
- RE LTABPZ
- RJ =XECSPRTY
- SA1 A0-1 INITIALIZE LOOP
- *
- * /--- BLOCK GETECS 00 000 80/11/03 10.20
- *
- GET100 SA1 A1+1 LOAD NEXT *LESTAB* ENTRY
- SB2 B2+1
- LE B2,B3,GET110 IF WITHIN PAGE
- SX1 B3
- IX0 X0+X1
- EQ GET075 READ NEXT PAGE
- *
- GET110 ZR X1,NOECS IF END OF TABLE
- AX1 24 POSITION FREE SPACE
- BX2 -X3*X1
- IX2 X2-X4 CHECK IF ENOUGH ROOM
- NG X2,GET100
- SX6 B4+B2 INDEX INTO LESTAB
- *
- GET120 SA6 A5 UPDATE FREE POINTER
- SX6 X6-2
- SA6 LINDEX RETURN INDEX TO FREE SPACE
- SA1 A1 RE-LOAD *LESTAB* ENTRY
- BX6 -X3*X1 ECS ADDRESS OF LESSON HEADER
- RX1 X6 (-RXX- 1 WD READ, MAY CHG *A1*)
- SX2 X1
- AX1 18
- SX1 X1
- IX6 X2+X6
- IX6 X1+X6 (X6) = ADDRESS OF FREE SPACE
- SA6 LESLOC RETURN ADDRESS OF FREE SPACE
- REPLAX EMPTRS
- REPLAX EMPTRL
- MX7 0 X7 = 0 = ECS FOUND
- SA7 EMGETF
- EQ GET900
- *
- *
- NOECS MX7 -1 X7 = -1 = ECS NOT FOUND
- SA7 EMREQ MARK REQUEST UNSATISFIED
- SA7 EMGETF
- SA7 EMPTRS CLEAR ECS FREE POINTERS
- SA7 EMPTRL
- REPLAX EMPTRS
- REPLAX EMPTRL
- SA1 ECSFLOW
- SX6 X1+1 INCREMENT ERROR COUNTER
- SA6 A1
- EQ GET900
- *
- GETECA DATA 0 TEMPORARY
- GET900 BSS 0
- SA1 XSLCLOK
- SA2 GETECA COMPUTE TIME SPENT
- SX6 1
- SA3 EMSTAT+3
- SA4 EMSTAT+4+3
- IX6 X3+X6
- SA6 A3
- IX6 X1-X2
- IX6 X4+X6
- SA6 A4
- REPLAX EMSTAT,,EMSTATL
- EQ GETECS1 -- RETURN
- *
- * /--- BLOCK END 00 000 79/06/27 17.26
- *
- END
plato/source/plaopl/ecsmgr.txt ยท Last modified: 2023/08/05 18:54 by Site Administrator