|
|
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: 84274 (0x14932)
Notes: pts_type(SC)
Names: »SYSLDM.SC«
└─⟦7e2393f80⟧ Bits:30009710 Philips computer tape "M_KONV"
└─⟦this⟧ »M:KONV/SYSLDM.SC«
IDENT SYSLDM REL 9.2 80-03-19 870105040920 REL 9.2 79-12-20 =2,FAULTY ECHO FUNCTION =1,FAULTY LENGTH OF TEMPORARY BUFFER,USED BY XMOVE REL 9.2 79-12-20 ST ENTRY SYSLDM *************************** * * * ENTRIES AND EXTERNALS * * * *************************** EXTRN FREQUE EXTRN INTLT1 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 SCTNOP EXTRN SCTNOS EXTRN SCTOPT EXTRN SCTPAG EXTRN SCTPLD EXTRN STTPSZ EXTRN SCTPSZ EXTRN SCTSEG EXTRN SCTSFA EXTRN SCTSWB EXTRN SCTTCT EXTRN SYSBAS EXTRN SYSLOD EXTRN TCLASS EXTRN TTMJOB EXTRN DWTECH EXTRN DWTSQ EJECT EXTRN M:REL EXTRN ERROR EXTRN MOVE EXTRN CMPADR EXTRN CONVRT EXTRN NXTBLK EXTRN SYSLDA 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 SAVE13 EXTRN SAVE14 EXTRN SAVE15 EXTRN SAVE16 EXTRN SAVE17 EXTRN SAVE18 EXTRN SAVE19 EXTRN SAVE20 EXTRN SAVE21 EXTRN NUMSEG EXTRN SAVE23 EXTRN SAVE24 EXTRN SAVE25 EXTRN BUFSIZ EXTRN SYSBUF EXTRN PRGLG1 EJECT * * EXTERNAL SUBROUTINES * EXTRN NXTCOM EXTRN GETNUM EJECT *************************************** * CONDITIONAL ASSEMBLY * *************************************** MMUPAG EQU 0 MEMORY MANAGEMENT UNIT SWPBLK EQU 0 SWAPPABLE WORK BLOCKS CREDIT EQU 1 CREDIT APPLICATION EJECT * * CONSTANTS * S:BTAB EQU 40 DISPL. TO S:BTAB ADDRESS UP:REC EQU 6 RECORD LENGTH IN INITIAL S:BTAB UPNAME EQU 4 PROTOTYPE NAME WBLEN EQU -4 LENGTH OF WORKBLOCK ******************************* * SAVE01URATION FILE (SAVE01) * ******************************* * TASK DEFINITION BLOCK: TDBBT EQU 0 1A BLOCK TYPE TDBNT EQU TDBBT+1 2N NUMBER OF TASKS TDBID EQU TDBNT+2 6A TASK ID START 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 FIRST 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 FIRST 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 FIRST UDB-RECORD NAMUWB EQU 3 NAME OF UWB NUMUBL EQU 3 NUMBER OF BLOCKS UDBREC EQU NAMUWB+NUMUBL UDB RECORD-LENGTH EJECT **************** * 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 ***************************************************************** * CALL-FORMAT, PERFORMS: CFR A14,A13 * * DATA [REL-ADDRESS] * * * ***************************************************************** CALL FORM 16=/F697,16 EJECT ***************************************************************** * CONSTANTS USED IN SYSLOD PART M * ***************************************************************** * * ********** * * TTAB * * ********** * TTB:MT EQU -34 TTB:SB EQU -2 TTB:ID EQU 2 TTB:ST EQU 4 TTB:PP EQU 6 TTB:PW EQU 8 TTB:SA EQU 10 TTB:TD EQU 40 EJECT * * ********* * * DWT * * ********* * DWTCHP EQU 0 CHANNEL PARAMETER DWTST EQU 2 STATUS DWTECB EQU 4 ECB ADDRESS DWTOR EQU 6 ORDER DWTADR EQU 8 ADDRESS BLOCK DWTTAB EQU 10 TTAB ADDRESS DWTWAT EQU 12 WAIT/ACTIVATE INDICATOR DWTTQ EQU 14 TERMINAL QUEUE DWTUEC EQU 16 USER ECB ADDRESS DWTMEC EQU 18 MONITOR ECB ADDRESS EJECT * * *********** * * PAGTAB * * *********** * PAGQF EQU 0 PAGQB EQU 2 PAGPA EQU 4 PAGSB EQU 6 EJECT * * ************* * * SEGTAB * * ************* * SEGPB EQU 6 SEGSB EQU 6 EJECT * * ******************* * * MISCELLANOUES * * ******************* * BUFLEN EQU -4 DEVIND EQU -2 DWTLEN EQU 6 TDCDD1 EQU 5 TDCDD2 EQU 6 LCND1 EQU 10 LCND2 EQU 11 SWBLEN EQU 4 DISPL. TO LENGTH OF SWB SWBSEC EQU 6 DISPL. TO LENGTH IN SECTORS EJECT ****************************************************** * * * * * THIS IS THE MONITOR CONFIGURATION PROGRAM ENTRY * * * * IT IS ENTERED FROM SYSLOD WITH THE FOLLOWING * * PARAMETERS: * * * * A1 - POINTER TO CURRENT LOCATION OF SYSLDA * * A2 - POINTER TO PREVIOUS LOCATION OF SYSLDA * * * * * ****************************************************** SYSLDM EQU * ST P,SCTSFA+2 SAVE LOCATION COUNTER LDKL A11,SYSBAS GET SYSBAS START ADDRESS ST A11,SCTSFA UPDATE START OF FREE AREA LDR A8,P INIT STACK POINTER ADK A1,2 RELOCATION ROUTINE ENTRY CFR A8,A1 ST A13,SCTEFA UPDATE END OF FREE AREA LDKL A2,TCLASS GET ADDRESS TO TCLASS CWK A2,SCLASS SAME AS ADDRESS TO SCLASS? RF(E) NO:TCL YES:DUMMY TCLASS! CALL CHPTRS RELOCATE POINTERS IN TCLASS ST A2,SAVE18,A13 SAVE RELOCATED POINTER TO TCLASS NO:TCL LDKL A2,SCLASS GET ADDRESS TO SCLASS CALL CHPTRS RELOCATE POINTERS IN SCLASS ST A2,SAVE11,A13 SAVE RELOCATED POINTER TO SCLASS * * CLEAR ALL WORDS IN SYSTEM AREA * LD A1,SCTEFA LD A2,SCTSFA CLRSYS EQU * SUK A1,2 CMR A1 CWR A1,A2 RB(NE) CLRSYS LDKL A1,CONMON AD A1,M:REL,A13 ABR A1 EJECT *********************************************** * CHPTRS - CHANGE POINTERS IN TCLASS/SCLASS * *********************************************** * * ENTRY: A2 - POINTER TO TCLASS/SCLASS * A11 - SYSLOD START ADDRESS * A12 - RELOCATION CONSTANT * * EXIT: A2 - POINTER TO MOVED TCLASS/SCLASS * * WORK REGISTER:A1-A7 * * SUBROUTINES: * CHPTRS EQU * ADR A2,A12 RELOCATE POINTER LDR A3,A2 GET POINTER TO ORIGIN TCLASS/SCLASS LDR* A4,A3 GET LENGTH OF TCLASS/SCLASS CHPT10 EQU * SUK A4,2 MOORE ENTRIES I TCLASS/SCLASS ? RF(Z) CHPT30 NO! ADK A3,2 NEXT ENTRY LDR* A5,A3 GET POINTER TO CLASS ADR A5,A12 RELOCATE STR A5,A3 STORE LDR* A6,A5 GET LENGTH OF CLASS CHPT20 EQU * SUK A6,4 MOORE DEVICES IN THIS CLASS? RB(NP) CHPT10 NO! ADK A5,4 NEXT DEVICE LDR* A7,A5 GET DWT-ADDRESS LDR A9,A7 GET DWT-ADDRESS CALL CMPADR COMPARE ADDRESSES RB(G) CHPT20 DWT IN DRIVER! ADR A7,A12 RELOCATE STR A7,A5 STORE RELOCATED DW-ADDRESS LD A8,SCTOPT GET OPTION WORD ANKL A8,1 MMU IN SYSTEM? RB(Z) CHPT20 NO! LD A8,DWTMEC,A7 GET MONITOR ECB ADDRESS LDR A9,A8 GET MONITOR ECB ADDRESS ANKL A9,1 ADDRESS ALREADY RELOCATED? RB(NZ) CHPT20 YES! ADR A8,A12 RELOCATE ADKL A8,1 INDICATE DWT-ADDRESS RELOCATED ST A8,DWTMEC,A7 STORE RELOCATED ADDRESS RB CHPT20 CHPT30 EQU * RTN A14 EJECT ************************************************** * B:TCT - BUILD TASK CONTROL TABLE * ************************************************** * * REFERENCED IN: MONCON * * ENTRY: SAVE01 - START OF SAVE01URATION DATA EJECT ************************************************** * B:TCT - BUILD TASK CONTROL TABLE * ************************************************** * * REFERENCED IN: MONCON * * ENTRY: SAVE01 - START OF SAVE01URATION DATA * * EXIT: A6 - START OF TC:TAB * A7 - LENGTH OF TC:TAB * * WORK REGISTERS: A2,A3 * * SUBROUTINES: * * TASK CONTROL TABLE LAYOUT * _________________________ * I LENGTH I * _________________________ * I TTMJOB I * _________________________ * I MONITOR TASKS I * _________________________ * I USER TASKS I * __________________________ * EJECT B:TCT EQU * LD A11,SAVE01,A13 GET START OF SAVE01URATION DATA LD A7,SCTSFA GET START OF FREE AREA LDR A6,A7 SAVE LDKL A2,TTMJOB GET TTMJOB ADDRESS ST A2,2,A7 STORE IN TC:TAB ADK A7,4 CONTINUE WITH MONITOR TASKS LD A2,SCTOPT ANY OPTIONS AVALIABLE? RF(Z) BTCT15 NO! *********************************************************** * RESERV ENTRIES IN TC:TAB IF CERTAIN OPTIONS AVALIABLE * * - TO BE PROVIDED * *********************************************************** BTCT15 EQU * LD A2,SCTDMT DATA MANAGEMENT? RF(Z) BTCT30 NO! LDR A3,A2 SAVE SCTDMT ANK A2,1 DMTASK D0? RF(Z) BTCT20 NO! ADK A7,2 RESERV ENTRY FOR DMTASK D0 BTCT20 EQU * LDR A2,A3 GET SCTDMT ANK A2,2 DM-TASK D1? RF(Z) BTCT25 NO! ADK A7,2 RESERV ENTRY FOR DM-TASK D0 BTCT25 EQU * LDR A2,A3 GET SCTDMT ANK A2,4 DMTASK D2? RF(Z) BTCT30 NO! ADK A7,2 RESERV ENTRY FOR DMTASK D2 BTCT30 EQU * * * COMPUTE NUMBER OF TASKS AND RESERV SPACE IN TC:TAB * * A11 - POINTER TO TASK DEFINITION BLOCK * ST A7,SAVE13,A13 SAVE CURRENT USER TASK ENTRY ST A7,SAVE02,A13 FIRST USER TASK ENTRY LCR A2,A11 GET BLOCK TYPE CCK A2,'TT' TASK DEFINITION BLOCK? RF(E) BTCT35 YES LDKL A1,LMP4 FORMAT ERROR CALL ERROR HALT BTCT35 EQU * * * COMPUTE NUMBER OF TASK IN EACH TASK CLASS * BTCT40 EQU * CALL GETTSK GET NUMBER OF TASKS BTCT50 EQU * ADK A7,2 RESERV ANOTHER ENTRY IN TC:TAB CW A7,SCTEFA CHECK IF MEMORY LEFT RF(NE) BTCT55 YES! LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW BTCT55 EQU * SUK A1,1 MOORE TASKS IN THIS CLASS? RB(P) BTCT50 YES CALL NXTBLK SKIP TO NEXT BLOCK CCK A2,'TT' TASK DEFINITION BLOCK? RB(E) BTCT40 YES * * ENTRIES FOR ALL USER TASKS RESERVED IN TC:TAB * ST A7,SCTSFA UPDATE END OF FREE AREA SUR A7,A6 LENGTH OF TC:TAB STR A7,A6 STORE LENGTH IN TC:TAB ST A6,SCTTCT STORE POINTER TO TC:TAB RTN A14 EJECT ************************************************* * B:DMTT - BUILD DATA MANAGEMENT TASK TABLES * ************************************************* * * ENTRY: SCTSFA - START OF FREE AREA * SCTTCT - ADDRESS TO TC:TAB * SCTDMT - DATA MANAGEMENT INDICATOR * * EXIT: * * WORK REGISTERS: A1,A2,A3,A7,A12 * * SUBROUTINES: DMTGEN * B:DMTT EQU * LD A12,SCTSFA GET START OF FREE AREA LD A7,SCTTCT GET POINTER TO TC:TAB ADK A7,4 FIRST DM-TASK ENTRY LD A2,SCTDMT DATA MANAGEMENT? RF(Z) DMTTEX NO! LDR A3,A2 SAVE DATA MANAGEMENT INDICATOR LD A6,SCTDMI GET INDEX BUFFER RECORD SIZE ANK A2,1 DM-TASK D0? RF(Z) DMTT10 NO! LDKL A1,'#D' DM-TASK ID CALL DMTGEN DMTT10 EQU * LDR A2,A3 GET DATA MANAGEMENT INDICATOR ANK A2,2 DM-TASK D1? RF(Z) DMTT20 NO! LDKL A1,'#E' TASK ID CALL DMTGEN DMTT20 EQU * LDR A2,A3 GET DATA MANAGEMENT INDICATOR ANK A2,4 DM-TASK D2? RF(Z) DMTT30 NO! LDKL A1,'#F' TASK ID CALL DMTGEN DMTT30 EQU * DMTTEX EQU * RTN A14 EJECT ************************************************** * DMTGEN - GENERATE DATA MANAGEMENT TASK TABLE * ************************************************** * * ENTRY: A1 - TASK ID * A6 - INDEX RECORD BUFFER SIZE * A7 - TCTAB ENTRY FOR CURRENT TASK * A12 - START OF FREE AREA * * EXIT: * * WORK REGISTERS: * * SUBROUTINES: * DMTGEN EQU * LD A2,SCTOPT GET OPTION WORD ANK A2,1 MMU OPTION? RF(Z) DMTG20 NO! LDK A4,0 RESET PAGE POINTER DMTG10 EQU * CWK A4,/4000 LAST PAGE? RF(E) DMTG30 YES! STR A4,A12 STORE PAGE POINTER ADKL A4,/400 INCREMENT PAGE POINTER ADKL A12,2 INCREMENT MMU ENTRY POINTER RB DMTG10 DMTG20 EQU * LD A2,SCTOPT GET OPTION WORD ANK A2,2 DISC PAGING? RF(Z) DMTG40 NO! DMTG30 EQU * ADKL A12,2 SEGMENT BLOCK ADDRESS DMTG40 EQU * STR A12,A7 STORE TTAB ENTRY POINTER IN TC:TAB ADK A7,2 NEXT ENTRY IN TC:TAB ST A1,TTB:ID,A12 TASK IDENTIFICATION LDKL A1,/0031 TASK LEVEL ST A1,TTB:ST,A12 STORE SLL A1,10 MOVE LEVEL TO LEFT BYTE ORKL A1,/00C0 PROGRAM STATUS ST A1,TTB:PW,A12 STORE IN TTAB ADKL A12,40 TERMINAL DEVICES LDK A1,6 LENGTH STR A1,A12 STORE ADKL A12,40 TASK STACK+2 LDR A1,A6 GET INDEX RECORD BUFFER SIZE SLL A1,2 MULTIPLY BY 4 ADR A12,A1 RESERV SPACE FOR BUFFERS LD A2,SCTSFA SUK A2,2 DMTG50 ADK A2,2 CW A2,SCTEFA CHECK IF MEMORY OVERFLOW RF(NE) DMTG60 NO! LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW DMTG60 CWR A2,A12 RB(NE) DMTG50 ST A12,SCTSFA UPDATE START OF FREE AREA RTN A14 EJECT ****************************** * B:TT - BUILD TASK TABLES * ****************************** * * REFERENCED IN: MONCON * * ENTRY: SAVE01 - START OF SAVE01URATION DATA * * EXIT: TC:TAB CONTAIN POINTERS TO ALL TASK TABLES * * WORK REGISERS: A1-A12 * * SUBROUTINES: CONVRT,GETTSK,TETTDC,GETCLN,GETSDC * EJECT * TASK TABLE LAYOUT * ________________________ * I MMU I * I TABLE I * I 16 I * I WORDS I * I______________________I * TTB:SB I SEGMENT POINTER I * ------------------------ * TASK ENTRY I QUEUE I * ------------------------ * TTB:ID I TASK IDENTIFICATION I * ------------------------ * TTB:ST I STATUS/LEVEL I * ------------------------ * TTB:PP I PENDING QUEUE I * ------------------------ * TTB:PW I PROGRAM STATUS WORD I * ------------------------ * TTB:SA I DISPATCH ADDRESS I * ------------------------ * I REGISTER I * I SAVE I * I AREA I * I 14 I * I WORDS I * ------------------------ * TTB:TD I TASK I * I SAVE01URATION I * I TABLE I * : : * : : * I______________________I * * * TASK SAVE01URATION TABLE LAYOUT * ______________________________ * I LENGTH I * ------------------------------ * I INDEX/FILCODE I * ------------------------------ * I DWT-ADDRESS I * ------------------------------ * : : * : : * ------------------------------ * I INDEX/FILECODE I * ------------------------------ * I DWT-ADDRESS I * ------------------------------ EJECT B:TT EQU * LD A12,SCTSFA GET START OF FREE AREA LD A11,SAVE01,A13 GET START OF SAVE01URATION DATA LD A2,SCTDML GET NUMBER OF LOCAL DM-FILES SLL A2,2 MULTIPLY BY 4 ST A2,SAVE04,A13 SAVE NUMBER OF BYTES TO RESERVE BTT10 EQU * LCR A2,A11 GET FIRST BLOCK TYPE CCK A2,'TT' TASK DEFINITION BLOCK? RF(E) BTT20 YES LDKL A1,LMP4 FORMAT ERROR CALL ERROR BTT20 EQU * * * GET NUMBER OF TASKS IN THIS CLASS * CALL GETTSK ST A1,SAVE19,A13 SAVE * * GET TASK ID START VALUE * LC A5,TDBID+4,A11 GET FIRST ID CHAR SLL A5,8 MOVE TO LEFT BYTE LC A5,TDBID+5,A11 GET SECOND ID DIGIT ST A5,SAVE16,A13 SAVE TASK ID START VALUE IFT CREDIT=1 * * GET TASK CLASS TO MATCH VALUE * LC A5,TDBMC+4,A11 GET FIRST CHAR IN TCL SLL A5,8 MOVE TO LEFT BYTE LC A5,TDBMC+5,A11 GET SECOND CHAR IN TCL CALL GETTCL GET TCL START VALUE ST A5,SAVE17,A13 SAVE XIF EJECT * * GET TASK LEVEL * LC A5,TDBTL+4,A11 GET FIRST DIGIT IN LEVEL SLL A5,8 MOVE TO LEFT BYTE LC A5,TDBTL+5,A11 GET SECOND DIGIT IN LEVEL CALL CONVRT CONVERT TO BINARY ST A1,SAVE24,A13 SAVE * * COMPUTE SIZE OF SAVE01URATION DEPENDENT PART OF TASK TABLE * LDKL A10,TTB:TD STANDARD LENGTH LD A5,SCTOPT GET OPTION WORD ANK A5,1 MMU PAGING? RF(Z) BTT25 NO SUKL A10,TTB:MT 16+1 WORD EXTRA IF MMU SUKL A12,TTB:MT RESERV SPACE FOR EXTRA WORDS RF BTT30 BTT25 EQU * LD A5,SCTOPT GET OPTION WORD ANK A5,2 DISC PAGING? RF(Z) BTT30 NO SUKL A10,TTB:SB ONE WORD EXTRA IF DISC PAGING SUKL A12,TTB:SB RESERV SPACE FOR EXTRA WORD BTT30 EQU * * * ADD ONE WORD FOR LENGTH OF TASK SAVE01URATION TABLE * ADKL A10,2 * * COMPUTE SIZE OF TERMINAL DEVICE CLASS DEPENDENT PART * OF TASK SAVE01URATION TABLE * LDK A6,0 RESET LENGTH LDR A9,A11 INIT SUB-POINTER IN TASK DEFINITION BLOCK ADKL A9,TDBFST TERMINAL DEVICE CLASS DEFINITION CALL GETTDC GET NUMBER OF TDC:S LDR A7,A1 SAVE BTT35 EQU * RF(Z) BTT40 CALL GETCLN GET CLASS NUMBER (1-99) ADR A1,A1 2*(BINARY CLASS NUMBER) LD A8,SAVE18,A13 GET POINTER TO TCLASS LDR* A2,A8 SUK A2,2 CWR A1,A2 RF(NG) BTT37 LDKL A1,LMP4 CALL ERROR INDICATE FORMAT ERROR BTT37 EQU * ADR A8,A1 GET ENTRY IN TCLASS LDR* A8,A8 GET POINTER TO CLASS LDR* A8,A8 GET LENGTH OF CLASS SUKL A8,2 EXCLUDE LENGTH WORD ADR A10,A8 ADD TO TOTAL TTAB LENGTH ADR A6,A8 ADD TO TASK CONF. TABLE LENGTH ADKL A9,TDC+TLC NEXT CLASS SUK A7,1 DECREMENT NUMBER OF TDC:S RB BTT35 EJECT BTT40 EQU * * * COMPUTE SIZE OF SPECIAL DEVICE CLASS DEPENDENT PART OF * TASK SAVE01URATION TABLE * CALL GETSDC GET NUMBER OF SPECIAL DEVICE CLASSES ADKL A9,2 FIRST SDC RECORD LDR A7,A1 SAVE BTT50 EQU * RF(Z) BTT55 NO MOORE SDC:S CALL GETCLN GET CLASS NUMBER (1-99) ADR A1,A1 2*(BINARY CLASS NUMBER) LD A8,SAVE11,A13 GET POINTER TO SCLASS LDR* A2,A8 SUK A2,2 CWR A1,A2 RF(NG) BTT52 LDKL A1,LMP4 CALL ERROR INDICATE FORMAT ERROR BTT52 EQU * ADR A8,A1 GET ENTRY IN SCLASS LDR* A8,A8 GET POINTER TO CLASS LDR* A8,A8 GET LENGTH OF CLASS SUKL A8,2 EXCLUDE LENGTH WORD ADR A10,A8 ADD TO TOTAL TTAB LENGTH ADR A6,A8 ADD TO TASK CONF. TABLE LENGTH ADKL A9,SDC NEXT CLASS SUK A7,1 DECREMENT NUMBER OF SDC:S RB BTT50 BTT55 EQU * LD A7,SAVE04,A13 GET NUMBER OF BYTES TO RESERV ADR A10,A7 ADD TO TOTAL TTAB LENGTH ADR A6,A7 ADD TO TASK CONF. TABLE LENGTH ADK A6,2 INCLUDE LENGTH WORD LD A7,SAVE13,A13 GET CURRENT ENTRY IN TC:TAB LD A8,SAVE19,A13 GET NUMBER OF TASKS IN THIS CLASS BTT60 EQU * RF(Z) BTT70 * * STORE LENGTH OF TASK SAVE01URATION TABLE IN TTAB * ST A6,TTB:TD,A12 * * STORE TASK LEVEL IN RIGHT BYTE OF STATUS/LEVEL WORD * LD A5,SAVE24,A13 GET TASK LEVEL ST A5,TTB:ST,A12 STORE IN TTAB * * STORE TASK LEVEL IN LEFT BYTE OF PROGRAM STATUS WORD * SLL A5,10 MOVE LEVEL TO LEFT BYTE ORKL A5,/00C0 LD A2,SCTOPT GET OPTION WORD ANK A2,1 MMU OPTION? ORR A5,A2 SET BIT 15 IF MMU ST A5,TTB:PW,A12 STORE IN TTAB * * STORE TASK IDENTIFICATION IN TTAB * LD A5,SAVE16,A13 GET THIS TASK ID ST A5,TTB:ID,A12 STORE IN TTAB ADK A5,1 INCREMENT TASK ID ST A5,SAVE16,A13 SAVE TO NEXT TASK IN SAME CLASS IFT CREDIT=1 * * STORE TASK CLASS TO MATCH IN TTAB * LD A5,SAVE17,A13 GET TCL START VALUE ST A5,TTB:PP,A12 SAVE IN TTAB ADK A5,1 INCREMENT TCL ST A5,SAVE17,A13 SAVE XIF STR A12,A7 SAVE TTAB ADDRESS IN TC:TAB ADK A7,2 NEXT ENTRY IN TC:TAB ST A7,SAVE13,A13 SAVE CURRENT USER TASK ENTRY ADR A12,A10 NEXT TTAB ENTRY IN THIS TASK CLASS SUKL A8,1 DECREMENT NUMBER OF TASKS IN THIS CLASS RB BTT60 EJECT BTT70 EQU * * * RESET POINTER TO START OF FREE AREA * LD A5,SCTOPT GET OPTION WORD ANK A5,1 MMU PAGING? RF(Z) BTT80 NO ADKL A12,TTB:MT SUBTRACT 16+1 WORD RF BTT90 BTT80 EQU * LD A5,SCTOPT GET OPTION WORD ANK A5,2 DISC PAGING? RF(Z) BTT90 NO ADKL A12,TTB:SB SUBTRACT ONE WORD BTT90 EQU * CALL NXTBLK GET NEXT BLOCK CCK A2,'TT' TASK DEFINITION BLOCK? RF(NE) BTT95 LDKL A2,BTT20 SUKL A2,REL ADR A2,A13 ABR A2 BTT95 EQU * LD A2,SCTSFA SUK A2,2 BTT100 ADK A2,2 CW A2,SCTEFA RF(NE) BTT105 LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW BTT105 CWR A2,A12 RB(NE) BTT100 ST A12,SCTSFA SAVE START OF FREE AREA RTN A14 RETURN IFT CREDIT=1 EJECT ************************************ * SEGGEN - BUILD SEGMENT TABLE * ************************************ * * ENTRY: SCTSFA - START OF FREE AREA * SCTEFA - END OF FREE AREA * SCTLAC - START OF APPLICATION * * EXIT: SCTPAG - ADDRESS TO PAGE TABLE * * WORK REGISTERS: A1-A12 * * SUBROUTINES: GETCON * EJECT SEGGEN EQU * LDK A5,0 RESET DISC ADDRESS LD A1,SCTOPT ANK A1,2 DISC PAGING? RF(Z) SEG:05 NO! LD A5,SCTADA APPLICATION DISC SECTOR ADDRESS SEG:05 EQU * LD A2,SCTLAC LOGICAL ADDRESS OF COMMON PART * * CHECK IF CREDIT APPLICATION * ADKL A2,PRGLG1 CALL GETCON CWK A1,'CR' RF(NE) SEGEX NOT CREDIT! * * BUILD SEGMENT TABLE * LD A12,SCTSFA START OF FREE AREA ST A12,SCTSEG START OF SEGMENT TABLE LDKL A1,/8400 STATUS FOR FIRST BLOCK STR A1,A12 STORE IN FIRST BLOCK LD A2,SCTLAC GET LOGICAL ADDRESS TO COMMON PART CALL GETCON GET POINTER TO P:MTAB LDR A2,A1 SAVE POINTER ADKL A2,6 ADDRESS TO P:BAS CALL GETCON GET P:BAS ST A1,2,A12 STORE IN FIRST BLOCK ADKL A12,8 BYPASS FIRST BLOCK LD A2,SCTLAC GET LOGICAL ADDRESS TO COMMON PART ADKL A2,NUMSEG GET NUMBER OF SEGMENTS CALL GETCON LDR A4,A1 SAVE NUMBER OF SEGMENTSS RF(Z) SEG:50 NO SEGMENTS! ADK A2,2 FIRST SEGMENT BLOCK LDK A3,1 INIT SEGMENT NUMBER SEG:10 EQU * LDK A7,0 STATUS CALL GETCON CCK A1,'RR' CORE RESIDENT SEGMENT? RF(E) SEG:30 YES! LD A1,SCTOPT GET OPTION WORD ANK A1,2 DISC PAGING? RF(NZ) SEG:35 YES! SEG:30 EQU * LDKL A7,/8800 INDICATE LOADED IN CORE SEG:35 EQU * ORR A7,A3 INSERT SEGMENT NUMBER IN RIGHT BYTE STR A7,A12 SET STATUS ADKL A12,2 NEXT WORD IN SEGBLK ADK A2,2 SEGMENT ADDRESS LDK A1,0 LD A6,SCTOPT GET OPTION WORD ANK A6,2 DISC PAGING? RF(Z) SEG:40 CALL GETCON ADR A1,A5 PHYSICAL DISC SECTOR ADDRESS SEG:40 EQU * STR A1,A12 SAVE IN SEGBLK ADKL A12,2 NEXT ENTRY IN SEGBLK ADK A2,2 EFFECTIVE LENGTH CALL GETCON STR A1,A12 SAVE ADKL A12,4 NEXT SEGMENT BLOCK ADK A2,2 NEXT BLOCK IN S:GTAB ADK A3,1 INCREMENT SEGMENT NUMBER SUK A4,1 DECREMENT NUMBER OF SEGMENTS RB(P) SEG:10 SEG:50 LD A2,SCTSFA SUK A2,2 SEG:60 ADK A2,2 CW A2,SCTEFA RF(NE) SEG:70 LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW SEG:70 CWR A2,A12 RB(NE) SEG:60 ST A12,SCTSFA SEGEX EQU * RTN A14 RETURN XIF IFT CREDIT+SWPBLK=2 EJECT *************************************************************** * * * * * * * B:SWBT - BUILD SWAPPABLE WORK BLOCK TABLE * * ========================================= * * * * REFERENCED IN: SYSLDM * * * * ENTRY: * * * * EXIT: * * * * WORK REGISTERS: A1-A12 * * * * REGISTER USAGE: A8 - DISC ADDRESS TO FIRST COPY * * A9 - ADDRESS TO S:BTAB PROTOTYPE * * A10 - SWB BLOCK POINTER * * A11 - POINTER IN CONF. FILE * * A12 - ADDRESS TABLE POINTER * * * * SUBROUTINES: ERROR,GETNUM,GETCON * * * * * *************************************************************** EJECT B:SWBT EQU * LD A12,SCTSFA START OF FREE AREA LD A11,SAVE01,A13 START OF CONFIGURATION FILE * * SEARCH FOR SWB TYPE DEFINITION BLOCK IN CONF. FILE * BSWT10 CALL NXTBLK GET NEXT BLOCK CCK A2,'TT' TASK DEFINITION BLOCK? RB(E) BSWT10 YES! CCK A2,'CC' COMMON DEVICE DEFINITION BLOCK? RF(NE) BSWT20 NO! ADKL A11,1 CALL NXTCOM SKIP COMMON BLOCK BSWT20 CCK A2,'UU' UWB TYPE DEFINITION BLOCK? RF(NE) BSWT40 NO! ADKL A11,1 NUMBER OF TYPES LDR A6,A11 CALL GETNUM NUMBER OF UWB RECORDS LDR A1,A5 SAVE RF(Z) SWBERR ILLEGAL NUMBER!!! ADKL A11,UDBFST-1 FIRST UWB RECORD BSWT30 ADKL A11,6 BYPASS UWB RECORD SUK A1,1 DECR. NUMBER OF TYPES RB(P) BSWT30 MOORE LEFT LCR A2,A11 GET NEXT CHAR. IN CONF.FILE BSWT40 CCK A2,'SS' SWB TYPE DEFINITION BLOCK RF(E) BSWT44 YES! LDKL A1,0 NO SWB DEFINITION BLOCK! ST A1,SCTSWB CLEAR SWB POINTER RTN A14 BSWT44 ADKL A11,1 NUMBER OF TYPES ST A11,SAVE23,A13 START OF CONF. DATA LDR A6,A11 CALL GETNUM GET 3 DIGITS LDR A5,A5 ZERO? RF(Z) SWBERR ILLEGAL NUMBER!!! ST A5,SAVE24,A13 SAVE NUMBER OF RECORDS LD A8,SCTSWB GET ADDRESS TO $SWAPP RF(NZ) BSWT48 FILE CREATED SWBERR LDKL A1,LMP6 SWB ERROR! CALL ERROR BSWT48 ST A12,SCTSWB SAVE ADDRESS TO ADDRESS TABLE ST A8,SAVE14,A13 SAVE ADDRESS TO $SWAP ADKL A12,2 FIRST POINTER LDR A10,A12 SAVE * * GET ADDRESS TO S:BTAB PROTOTYPE * LD A2,SCTLAC S:GTAB ADDRESS CALL GETCON GET P:MTAB ADDRESS LDR A2,A1 SAVE ADKL A2,S:BTAB DISPL. TO S:BTAB ADDRESS CALL GETCON GET S:BTAB ADDRESS LDR A2,A1 GET ADDRESS TO PROT. S:BTAB RB(Z) SWBERR NO SWB:S IN APPLICATION! ADK A1,2 ADDRESS TO NAME ST A1,SAVE21,A13 SAVE SUK A2,2 ADDRESS TO LENGTH OF PROT. S:BTAB CALL GETCON GET LENGTH OF PROT. S:BTAB LDR A4,A1 SAVE SUK A1,2 SKIP LENGTH BSWT50 ADKL A10,2 RESERV ENTRY FOR POINTER SUK A1,6 DECREMENT LENGTH OF S:BTAB PROTOTYPE RB(P) BSWT50 NEXT SWB-PROTOTYPE SUK A4,2 SKIP LENGTH WORD LDKL A9,0 RESET BLOCK COUNTER BSWT60 STR A10,A12 SAVE POINTER TO BLOCK ST A4,SAVE19,A13 SAVE LD A11,SAVE23,A13 START OF CONF. DATA LD A7,SAVE24,A13 NUMBER OF SWB RECORDS BSWT65 LD A2,SAVE21,A13 NAME RECORD IN PROT. CALL GETCON GET TWO FIRST CHAR. ADKL A11,NAMUWB NAME IN CONF. FILE LCR A3,A11 GET FIRST CHAR. SLL A3,8 MOVE TO LEFT BYTE LC A3,1,A11 GET SECOND CHAR. CWR A1,A3 TWO FIRST CHAR. EQUAL? RF(NE) BSWT70 NO! ADK A2,2 NEXT CHAR. IN PROT. CALL GETCON GET THIRD CHAR. SRL A1,8 ISOLATE CHAR. LC A3,2,A11 GET THIRD CHAR. FROM CONF. FILE ANK A3,/FF ISOLATE CHAR. CWR A1,A3 THIRD CHAR. EQUAL? RF(E) BSWT75 YES! BSWT70 ADKL A11,NAMUWB SKIP NAME SUK A7,1 DECREMENT NUMBER OF TYPES RB(P) BSWT65 NEXT TYPE * * NO MATCHING NAME IN CONFIGURATION FILE - RESET ALL WORDS IN THIS BLOCK * STR A7,A10 1:ST WORD ST A7,2,A10 2:ND WORD ST A7,4,A10 3:RD WORD ST A7,6,A10 4:TH WORD RF BSWT95 BSWT75 EQU * * * MATCHING NAME FOUND * ADKL A11,NAMUWB NUMBER OF COPIES LDR A6,A11 LDR A3,A2 SAVE POINTER CALL GETNUM GET NUMBER OF COPIES STR A5,A10 STORE IN SWB BLOCK LDR A2,A3 RESTORE POINTER SUK A2,UPNAME PROTOTYPE ADDRESS CALL GETCON GET PROTOTYPE ADDRESS LDR A2,A1 SAVE SUK A2,UPNAME LENGTH OF WORKBLOCK CALL GETCON ST A1,SWBLEN,A10 STORE LENGTH OF SWB ST A8,2,A10 STORE DISC ADDRESS TO 1:ST COPY BSWT85 LD A3,SWBLEN,A10 GET LENGTH OF BLOCK LDK A1,0 RESET SECTOR COUNTER BSWT90 ADKL A8,1 INCREMENT SECTOR NUMBER ADK A1,1 INCREMENT SECTOR COUNTER SUKL A3,400 DECREMENT LENGTH RB(P) BSWT90 MOORE SECTORS? SUK A5,1 MOORE COPIES? RB(P) BSWT85 YES! ST A1,SWBSEC,A10 STORE SECTOR LENGTH CW A8,SAVE25,A13 CHECK IF OVERFLOW RB(G) SWBERR $SWAP-FILE TOO SMALL! BSWT95 ADKL A10,8 START OF NEXT BLOCK ADKL A12,2 NEXT POINTER ADKL A9,1 INCREMENT BLOCK COUNTER LD A2,SAVE21,A13 CURRENT RECORD IN PROT. S:BTAB ADK A2,UP:REC NEXT RECORD IN PROT. S:BTAB ST A2,SAVE21,A13 SAVE LD A4,SAVE19,A13 GET LENGTH OF PROT. S:BTAB SUK A4,UP:REC DECREMENT RB(P) BSWT60 MOORE TYPES CW A8,SAVE14,A13 ANY BLOCKS GENERATED? RF(NE) BSWT99 YES LDKL A1,LMP6 CALL ERROR SWB ERROR! BSWT99 ST* A9,SCTSWB SAVE NUMBER OF SWB TYPES ST A10,SCTSFA UPDATE START OF FREE AREA RTN A14 XIF EJECT ************************************** * MONBLK - GENERATE MONITOR BLOCKS * ************************************** * * NUMBER OF BLOCKS TO BE GENERATED: * 20+N*(NUMBER OF TASKS IN SYSTEM) * WHERE N IS A SYSTEM CONSTANT * DEFINED AT SYSTEM GENERATION * * * REFERENCED IN: SYSLOD * * ENTRY: SCTSFA - START OF FREE AREA * SCTEFA - END OF FREE AREA * * EXIT: BLOCKS - POINTER TO FIRST BLOCK * * WORK REGISTERS: A1,A2,A7,A12 * * SUBROUTINES: BLKGEN * EJECT MONBLK EQU * LDK A1,0 LD A12,SCTSFA START OF FREE AREA ST A12,FREQUE SAVE POINTER TO FIRST BLOCK * * GET NUMBER OF TASKS IN SYSTEM * LD* A7,SCTTCT GET LENGTH OF TC:TAB * * GET NUMBER OF BLOCKS PER TASK TO GENERATE * LD A2,SCTBLK MON:10 EQU * SUK A7,2 MOORE TASKS? RF(Z) MON:20 NO CALL BLKGEN RB MON:10 MON:20 EQU * * * GENERATE 19 MOORE BLOCKS * LDK A2,19 CALL BLKGEN * * GENERATE END BLOCK * STR A1,A12 ST A1,2,A12 ST A1,4,A12 * * CHECK IF BUFFER GREATER THAN 3 WORDS RESERVED FOR SYSLOD PART A * IF NOT - USE LAST MONITOR BLOCK AS BUFFER * LD A1,BUFSIZ,A13 GET BUFFER SIZE CWK A1,6 >6? RF(NL) MON:30 NOT LESS ANYWAY! LDK A1,6 BUFFER SIZE ST A1,BUFSIZ,A13 STORE ST A12,SYSBUF,A13 START OF BUFFER MON:30 EQU * ADKL A12,6 LD A2,SCTSFA SUK A2,2 MON:40 ADK A2,2 CW A2,SCTEFA RF(NE) MON:50 LDKL A1,LMP3 CALL ERROR MON:50 CWR A2,A12 RB(NE) MON:40 ST A12,SCTSFA UPDATE END OF FREE AREA RTN A14 EJECT ************************************* * BLKGEN - GENERATE MONITOR BLOCK * ************************************* * * REFERENCED IN: MONBLK * * ENTRY: A1=0 * A2 - NUMBER OF BLOCKS TO BE GENERATED * A12 - NEXT FREE ENTRY * * EXIT: A1=0 * A12 - NEXT FREE ENTRY * * WORK REGISTES: A3 * * SUBROUTINES: * * MONITOR BLOCK LAYOUT * -------------------- * I DATA *+6 I * -------------------- * I DATA 0 I * -------------------- * I DATA 0 I * -------------------- * EJECT BLKGEN EQU * LDR A3,A2 BLK:10 EQU * RF(Z) BLKEX ADKL A12,6 ST A12,-6,A12 ST A1,-4,A12 ST A1,-2,A12 SUK A3,1 RB BLK:10 BLKEX EQU * RTN A14 EJECT ************************************************************************ * B:DWTS - BUILD DWT:S FOR SPECIAL DEVICES AND CONNECT TO TASK TABLES ************************************************************************ * * REFERENCED IN: MONCON * * ENTRY: SCTSFA - START OF FREE ARE (X) * SAVE01 - START OF SAVE01URATION FILE * SCTEFA - END OF FREE AREA * * EXIT: * * WORK REGISTERS: A1-A12 * * SUBROUTINES: GETTSK,GETTDC,GETSDC,GETCLN,NXTBLK,ERROR * EJECT B:DWTS EQU * * * GET START OF SAVE01URATION FILE * LD A11,SAVE01,A13 START OF SAVE01URATION FILE LD A12,SCTSFA START OF FREE AREA * * CHECK IF FIRST BLOCK IS A TASK DEFINITION BLOCK * LCR A2,A11 GET FIRST CHARACTER CCK A2,'TT' TASK DEFINITION BLOCK? RF(E) DWTS YES LDKL A1,LMP4 FORMAT ERROR CALL ERROR DWTS EQU * * * GET ADDRESS TO TC:TAB * LD A7,SAVE02,A13 FIRST USER TASK ENTRY SUK A7,2 EJECT DWTS10 EQU * * * GET NUMBER OF TASKS IN THIS TASK CLASS * CALL GETTSK DWTS20 EQU * ST A1,SAVE19,A13 SAVE * * GET CORRESPONDING TASK TABLE (TTAB) * DWTS25 EQU * ADK A7,2 NEXT ENTRY IN TC:TAB LDR* A10,A7 GET TTAB ADDRESS ADKL A10,TTB:TD+2 TASK SAVE01URATION TABLE ENTRY * * INIT SUB-POINTER IN TASK DEFINITION BLOCK * LDR A9,A11 START OF TASK DEFINITION BLOCK ADKL A9,TDBFST START OF TDC DEFINITION EJECT * * GET NUMBER OF TERMINAL DEVICES IN THIS CLASS * CALL GETTDC LDR A6,A1 DWTS30 EQU * RF(Z) DWTS40 CALL GETCLN GET TDC ID ADR A1,A1 LD A8,SAVE18,A13 GET POINTER TO TCLASS ADR A8,A1 GET CLASS ENTRY LDR* A8,A8 GET POINTER TO CLASS LDR* A8,A8 GET LENGTH OF CLASS SUKL A8,2 EXCLUDE LENGTH WORD ADR A10,A8 INCREMENT POINTER IN TTAB ADKL A9,TDBREC BYPASS NEXT TDC DEF. RECORD SUK A6,1 DECREMENT NUMBER OF TDC:S RB DWTS30 DWTS40 EQU * * * GET NUMBER OF SPECIAL DEVICE CLASSES * CALL GETSDC ADKL A9,SDCFST-CDBNC LDR A1,A1 DWTS50 EQU * RF(Z) DWTS90 ST A1,SAVE17,A13 SAVE * * GET SPECIAL DEVICE CLASS NUMBER OM * CALL GETCLN ST A1,SAVE03,A13 SAVE CLASS NUMBER * * GET CORRESPONDING SPECIAL DEVICE CLASS IN SCLASS * ADR A1,A1 LD A6,SAVE11,A13 POINTER TO SCLASS ADR A6,A1 SELECT ENTRY LDR* A6,A6 GET POINTER TO CLASS LDR A5,A6 SAVE LDR* A6,A6 GET LENGTH SUK A6,2 EXCLUDE LENGTH WORD DWTS60 EQU * ADK A5,4 GET DEVICE LDR* A1,A5 GET ADDRESS TO TYPE DWT LD A3,DWTLEN,A1 GENERATION OF DWT? RF(Z) DWTS70 NO * * COPY DWT * LDR A2,A12 TO-ADDRESS ADR A12,A3 UPDATE POINTER TO FREE AREA CALL MOVE COPY DWT EJECT * * RELOCATE MONITOR ECB ADDRESS IF MMU IN SYSTEM * LD A3,SCTOPT GET OPTION WORD ANK A3,1 MMU IN SYSTEM? RF(Z) DWTS65 NO! LDR A3,A1 GET PROTOTYPE DWT-ADDRESS SUR A3,A2 COMPUTE RELOCATION CONSTANT LD A4,DWTMEC,A2 GET MONITOR ECB-ADDRESS SUR A4,A3 RELOCATE ANKL A4,/FFFE MAKE EVEN ADDRESS ST A4,DWTMEC,A2 STORE IT BACK DWTS65 EQU * LDR A1,A2 DT-ADDRESS TO BE USED DWTS70 EQU * * * STORE FILE-CODE AND DWT-ADDRESS IN TTAB * ST A1,2,A10 STORE DWT-ADDRESS LD A1,-2,A5 GET INDEX/FILECODE STR A1,A10 SAVE IN TTAB ADKL A10,4 UPDATE TASK SAVE01URATION POINTER DWTS80 EQU * SUK A6,4 DECREMENT NUMBER OF DEVICES RB(P) DWTS60 NEXT DEVICE EJECT * * CHECK IF MOORE SPECIAL DEVICES IN THIS CLASS * ADKL A9,SDC LD A1,SAVE17,A13 SUK A1,1 RB DWTS50 DWTS90 EQU * * * CHECK IF MOORE TASKS WITH THE SAME SAVE01URATION * LD A1,SAVE19,A13 SUK A1,1 RB(P) DWTS20 * * CHECK IF MOORE TASK DEFINITION BLOCKS * CALL NXTBLK CCK A2,'TT' TASK DEFINITION BLOCK? RB(E) DWTS10 YES LD A2,SCTSFA SUK A2,2 DWTS95 ADK A2,2 CW A2,SCTEFA RF(NE) DWTS99 LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW DWTS99 CWR A2,A12 RB(NE) DWTS95 ST A12,SCTSFA RTN A14 RETURN EJECT ************************************************ * B:DWTT - BUILD TERMINAL DEVICE WORK TABLES * ************************************************ ************************************************ * * REFERENCED IN: MONCON * * ENTRY: * * EXIT: * * WORK REGISTERS: A1-A12 * * SUBROUTINES: ERROR,GETTSK,GETTDC,GETCLN,GETLCN,DWTGEN,NXTBLK * EJECT B:DWTT EQU * * * ALLOCATE TEMPORARY WORK AREA IN USED PART OF SYSLDM IF POSSIBLE * LDK A1,0 LDKL A11,BDWT05 GET END OF TEMP. WORK AREA AD A11,M:REL,A13 RELOCATE ADDRESS LDR A7,A11 SAVE SU A7,SCTSFA+2 COMPUTE SIZE OF TEMP WORK AREA CWK A7,1808 IS AREA BIG ENOUGH? RF(L) BDWT02 NO! LD A1,SCTEFA SAVE REAL END OF FREE AREA ST A11,SCTEFA END OF TEMPORARY AREA * * ALLOCATE MEMORY FOR TEMPORARY INTERRUPT TABLE AT END OF FREE AREA * BDWT02 EQU * LD A11,SCTEFA GET END OF FREE AREA LD A9,SCTSFA GET START OF FREE AREA BDWT05 EQU * LDK A7,0 RESET WORD COUNTER BDWT10 EQU * CWR A11,A9 MEMORY OVERFLOW? RF(NE) BDWT15 NO LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR BDWT15 EQU * CWK A7,896 ALL WORDS RESERVED? RF(E) BDWT20 YES SUKL A11,2 RESERV ANOTHER WORD CMR A11 CLEAR MEMORY WORD ADK A7,1 INCREMENT WORD COUNTER RB BDWT10 BDWT20 EQU * * * INIT POINTERS TO THE TEMPORARY INTERRUPT TABLES * ADK A1,0 NEW END OF FREE AREA? RF(NZ) BDWT25 NO! LDR A1,A11 BDWT25 EQU * LD A7,SCTSFA+2 BDWT30 EQU * STR A11,A7 SAVE INTERRUPT TABLE ADDRESS ADK A7,2 NEXT ADDRESS TABLE ENTRY ADKL A11,224 NEXT INTERRUPT TABLE ADDRESS CW A11,SCTEFA ALL POINTERS INTIATED? RB(NE) BDWT30 NO ST A1,SCTEFA UPDATE END OF FREE AREA EJECT * * INIT DWT POINTER * LD A11,SAVE01,A13 LD A12,SCTSFA GET START OF FREE AREA * * INIT TC:TAB ENTRY POINTER TO POINT AT FIRST USER TASK ENTRY * LD A5,SAVE02,A13 GET FIRST USER TASK ENTRY ST A5,SAVE13,A13 STORE IN CURRENT USER TASK ENTRY BDWT40 EQU * * * GET NUMBER OF TASKS IN THIS TASK CLASS * CALL GETTSK GET NUMBER OF TASKS BDWT50 EQU * ST A1,SAVE19,A13 SAVE BINARY VALUE * * GET NUMBER OF TERMINAL DEVICE CLASSES IN THIS TASK CLASS * CALL GETTDC * * CHECK IF TASK WITHOUT DEVICES * LDR A1,A1 ANY TERMINAL DEVICES? RF(Z) BDW100 NO ST A1,SAVE15,A13 SAVE NUMBER OF TERMINAL DEVICESS LD* A10,SAVE13,A13 GET TTAB ADDRESS ADKL A10,TTB:TD DISPLACEMENT TO TASK CONF. TABLE * * GET TERMINAL DEVICE CLASS NUMBER * LDR A9,A11 START OF TASK DEFINITION BLOCK ADKL A9,TDBFST TERMINAL DEVICE CLASS DEFINITION BDWT55 EQU * CALL GETCLN GET CLASS NUMBER ST A1,SAVE14,A13 SAVE BINARY VALUE * * GET LINE CONNECTION NUMBER FOR THIS TERMINAL DEVICE CLASS * IN THIS TASK * CALL GETLCN GET LINE CONNECTION NUMBER LDR A6,A1 SAVE BINARY VALUE ADK A1,1 INCREMENT LINE CONNECTION NUMBER CALL BINASC CONVERT INCREMENTED VALUE TO ASCII SC A5,TDC+4,A9 STORE RIGHT ASCII DIGIT SRL A5,8 MOVE LEFT ASCII DIGIT TI RIGHT BYTE SC A5,TDC+3,A9 STORE LEFT ASCII DIGIT * * FIND CORRESPONDING TERMINAL DEVICE CLASS IN TCLASS * LD A2,SAVE14,A13 GET BINARY VALUE OF CLASS ID ADR A2,A2 2*ID LD A7,SAVE18,A13 POINTER TO TCLASS ADR A7,A2 GET ENTRY * * CHECK IF THIS IS AN ENTRY IN TCLASS -TO BE SUPPLIED * LDR* A7,A7 GET POINTER TO CLASS EJECT * * GENERATE DWT:S FOR THIS CLASS * A6 - LINE CONNECTION NUMBER (BINARY VALUE) * A7 - POINTER TO TERMINAL DEVICE CLASS * * THE ENTRY IN TEMPORARY INTERRUPT TABLE * IS DERIVED FROM LINE CONNECTION NUMBER, * DEVICE ADDRESS AND TYPE OF DEVICE (INPUT OR OUTPUT) * CALL DWTGEN BDWT90 EQU * LD A1,SAVE15,A13 GET NUMBER OF TERMINAL DEVICE CLASSES SUK A1,1 ANY MOORE IN THIS TASK CLASS? RF(Z) BDW100 NO ST A1,SAVE15,A13 SAVE REMAINING NUMBER ADKL A9,TDC+TLC NEXT TDC RECORD RB BDWT55 BDW100 EQU * LD A1,SAVE13,A13 GET CURRENT ENTRY IN TC:TAB ADK A1,2 INCREMENT ENTRY POINTER ST A1,SAVE13,A13 SAVE LD A1,SAVE19,A13 GET NUMBER OF TASKS IN THIS CLASS SUK A1,1 ANY MOORE TASKS LEFT RB(P) BDWT50 * CHECK IF MOORE TASK DEFINITION BLOCKS * CALL NXTBLK SKIP TO NEXT BLOCK CCK A2,'TT' TASK DEFINITION BLOCK? RB(E) BDWT40 YES * * ALL TERMINAL DEVICE WORK TABLES GENERATED * LD A2,SCTSFA SUK A2,2 BDW105 ADK A2,2 CW A2,SCTEFA RF(NE) BDW110 LDKL A1,LMP3 CALL ERROR BDW110 CWR A2,A12 RB(NE) BDW105 ST A12,SCTSFA UPDATE START OF FREE AREA RTN A14 RETURN EJECT **************************************** * B:CDT - BUILD COMMON DEVICE TABLE * **************************************** * * REFERENCED IN: MONCON * * ENTRY: SCTSFA - START OF FREE AREA * SAVE01 - START OF SAVE01URATION DATA * SCTEFA - END OF FREE AREA * * EXIT: CDTAB - POINTER TO COMMON DEVICE TABLE * * WORK REGISTERS: A1-A12 * * SUBROUTINES: NXTBLK,GETCTC,GETLCN,GETSDC,GETCLN,MOVE * EJECT B:CDT EQU * LD A11,SAVE01,A13 START OF SAVE01URATION DATA LD A12,SCTSFA START OF FREE AREA LDK A7,0 RESET LENGTH * * GET COMMON DEVICE DEFINITION BLOCK * CDG:10 EQU * CALL NXTBLK CCK A2,'TT' TASK DEFINITION BLOCK? RB(E) CDG:10 YES CCK A2,'CC' COMMON DEV. DEF. BLOCK? RF(NE) BCDTEX NO EJECT * * RESERVE AREA IN COMMON DEVICE TABLE FOR FILE-CODES * AND DWT-ADDRESSES USED BY COMMON TERMINAL DEVICES * LDR A9,A11 START OF COMMON DEFINITION BLOCK ADKL A9,SDCFST NUMBER OF COMMON TERMINAL CLASSES CALL GETCTC GET NUMBER OF C.T.C. LDR A6,A1 SAVE B:CT10 RF(Z) B:CT30 NO MOORE! CALL GETCLN GET CLASS IDENT NUMBER (1-99) ADR A1,A1 DISPLACEMENT TO CLASS POINTER LD A5,SAVE18,A13 GET POINTER TO TCLASS LDR* A2,A5 GET LENGTH OF TCLASS SUK A2,2 EXCLUDE LENGTH CWR A1,A2 MAKE SURE CLASS EXISTS RF(NG) B:CT20 OK! LDKL A1,LMP4 FORMAT ERROR! CALL ERROR B:CT20 ADR A1,A5 SELECT ENTRY IN TCLASS LDR* A1,A1 GET POINTER TO CLASS LDR* A1,A1 GET LENGTH OF CLASS SUK A1,2 EXCLUDE LENGTH WORD ADR A7,A1 INCREMENT CDTAB LENGTH ADKL A9,TDC+TLC NEXT RECORD IN CONF. FILE SUK A6,1 DECR. NBR OF C.T.C. RB B:CT10 EJECT B:CT30 EQU * * * RESERVE AREA IN COMMON DEVICE TABLE FOR FILE-CODES * AND DWT-ADDRESSES USED BY COMMON SPECIAL DEVICES * CALL GETSDC ADKL A9,SDCFST-CDBNC LDR A6,A1 BCDT10 EQU * RF(Z) BCDTEX CALL GETCLN ADR A1,A1 LD A5,SAVE11,A13 GET POINTER TO SCLASS LDR* A2,A5 SUK A2,2 CWR A1,A2 RF(NG) BCDT15 LDKL A1,LMP4 CALL ERROR BCDT15 EQU * ADR A1,A5 SELECT ENTRY LDR* A1,A1 GET POINTER TO CLASS LDR* A1,A1 GET LENGTH SUK A1,2 ADKL A9,SDC ADR A7,A1 SUK A6,1 RB BCDT10 BCDTEX EQU * EJECT * * RESERV ENTRIES IN COMMON DEVICE TABLE FOR FILE-CODES * AND DWT-ADDRESSES USED FOR PHYSICAL I/O ON DISC * * ALSO RESERVE ENTRIES IN COMMON DEVICE TABLE FOR * FILE-CODES AND DWT-ADDRESSES USED FOR DATA COMMUNICATION * * FILE-CODES AND DWT-ADDRESSES ARE STORED IN THE LAST CLASS IN SCLASS * LD A1,SCTDCT DATA COMMUNICATION? LD A6,SCTDMT DATA MANAGEMENT ORR A6,A1 DM OR DC? LD A1,SCTOPT GET OPTION WORD ANK A1,/A DISC PAGING OR SWB:S? ORR A6,A1 COPY LAST SCLASS IF NOT ZERO RF(Z) CDG:15 NO! LD A6,SAVE11,A13 GET POINTER TO SCLASS LDR* A1,A6 GET LENGTH OF SCLASS SUK A1,2 EXCLUDE LENGTH WORD ADR A6,A1 LAST ENTRY IN SCLASS LDR* A6,A6 GET POINTER TO LAST CLASS LDR* A6,A6 GET LENGTH OF LAST CLASS SUK A6,2 EXCLUDE LENGTH WORD ADR A7,A6 ADD TO LENGTH OF CD:TAB CDG:15 EQU * LD A6,SCTDMC GET NUMBER OF GLOBAL FILES SLL A6,2 MULTIPLY BY 4 ADR A7,A6 ADD TO LENGTH OF CD:TAB ADK A7,2 STR A7,A12 ST A12,SCTCDT ADR A12,A7 EJECT * * INIT POINTER TO START OF FREE AREA AND TO CDTAB * LD A10,SCTCDT FIRST ENTRY IN SCTCDT LCR A2,A11 COMMON DEVICE BLOCK? CCK A2,'CC' RF(E) CDG:18 ADKL A10,2 FIRST FREE ENTRY IN CDTAB LDKL A8,0 RF CDGEX CDG:18 EQU * * * GENERATE DEVICE WORK TABLES FOR COMMON TERMINAL DEVICES * LDR A9,A11 START OF COMMON DEF. BLOCK ADKL A9,SDCFST NUMBER OF COMMON TERMINAL CLASSES CALL GETCTC GET NUMBER OF C.T.C. LDR A1,A1 ANY COMMON TERMINAL CLASSES? B:CT40 RF(Z) B:CT50 NO! ST A1,SAVE15,A13 SAVE CALL GETCLN GET CLASS IDENT NUMBER ST A1,SAVE14,A13 SAVE CALL GETLCN GET LINE CONNECTION NUMBER LDR A6,A1 SAVE LD A2,SAVE14,A13 GET CLASS IDENT NUMBER ADR A2,A2 CONVERT TO DISPLACEMENT LD A7,SAVE18,A13 GET POINTER TO TCLASS ADR A7,A2 SELECT ENTRY IN TCLASS LDR* A7,A7 GET POINTER TO CLASS CALL DWTGEN GENERATE DWT:S FOR THIS CLASS ADKL A9,TDC+TLC NEXT RECORD IN CONF. FILE LD A1,SAVE15,A13 GET NUMBER OF C.T.C. SUK A1,1 DECREMENT COUNTER RB B:CT40 B:CT50 ADKL A10,2 NEXT FREE ENTRY IN CDTAB EJECT * * GET NUMBER OF SPECIAL DEVICE CLASSES * CALL GETSDC ADKL A9,SDCFST-CDBNC LDR A8,A1 CDG:20 EQU * RF(NP) CDGEX * * GET SPECIAL DEVICE CLASS NUMBER * CALL GETCLN * * GET CORRESPONDING DEVICE CLASS IN SCLASS * ADR A1,A1 T LD A6,SAVE11,A13 GET POINTER TO SCLASS CDG:25 EQU * ADR A6,A1 SELECT CLASS LDR* A5,A6 SAVE POINTER TO CLASS LDR* A6,A6 GET POINTER TO CLASS LDR* A6,A6 GET LENGTH OF CLASS SUK A6,2 EXCLUDE LENGTH WORD CDG:30 EQU * ADK A5,4 NEXT DEVICE LDR* A1,A5 GET DWT-ADDRESS LD A3,DWTLEN,A1 GENERATION OF DWT? RF(Z) CDG:40 NO * * COPY DWT * LDR A2,A12 TO-ADDRESS ADR A12,A3 UPDATE POINTER TO FREE AREA CALL MOVE COPY DWT * * RELOCATE MONITOR ECB ADDRESS IF MMU IN SYSTEM * LD A3,SCTOPT GET OPTION WORD ANK A3,1 MMU IN SYSTEM? RF(Z) CDG:35 NO! LDR A3,A1 GET PROTOTYPE DWT-ADDRESS SUR A3,A2 COMPUTE RELOCATION CONSTANT LD A4,DWTMEC,A2 GET MONITOR ECB-ADDRESS ANKL A4,/FFFE MAKE IT EVEN! SUR A4,A3 RELOCATE ST A4,DWTMEC,A2 STORE IT BACK CDG:35 EQU * LDR A1,A2 DWT-ADDRESS TO USE CDG:40 EQU * * * STORE FILE-CODE AND DWT-ADDRESS IN TTAB * ST A1,2,A10 STORE DWT-ADDRESS LD A1,-2,A5 GET FILE CODE STR A1,A10 STORE IN TTAB ADKL A10,4 NEXT ENTRY IN CD:TAB SUK A6,4 DECREMENT DEVICE COUNTER RB(P) CDG:30 NEXT DEVICE EJECT * * CHECK IF MOORE SPECIAL DEVICE CLASSES * ADKL A9,SDC SUKL A8,1 RB CDG:20 CDGEX EQU * RF(N) CDG:EX CD:TAB COMPLETE! LD A1,SCTDMT DATA MANAGEMENT LD A5,SCTDCT DATA COMMUNICATION ORR A1,A5 DM OR DC? LD A5,SCTOPT GET OPTION WORD ANK A5,/A DISC PAGING OR SWB:S? ORR A1,A5 COPY LAST SCLASS IF NOT ZERO RF(Z) CDG:EX NO! LD A5,SAVE11,A13 GET POINTER TO SCLASS LDR* A1,A5 GET LENGTH OF SCLASS SUK A1,2 EXCLUDE LENGTH WORD ADR A5,A1 GET LAST ENTRY LDR* A5,A5 GET POINTER TO LAST CLASS LDR* A6,A5 GET LENGTH OF LAST CLASS SUK A6,2 EXCLUDE LENGTH WORD RB CDG:30 CDG:EX EQU * LD A2,SCTSFA SUK A2,2 CDG:50 ADK A2,2 CW A2,SCTEFA RF(NE) CDG:60 LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW CDG:60 CWR A2,A12 RB(NE) CDG:50 ST A12,SCTSFA UPDATE START OF FREE AREA RTN A14 RETURN EJECT ********************************************************************** * DWTGEN - GENERATE DEVICE WORK TABLES FOR A TERMINAL DEVICE CLASS ********************************************************************** * * ENTRY: A1 - LINE CONNECTION NUMBER (BINARY) * A7 - POINTER TO TERMINAL DEVICE CLASS IN TCLASS * A6 - LINE CONNECTION NUMBER * * EXIT: * * WORK REGISTERS: A1-A8 * * SUBROUTINES: I:CHP,MOVE * EJECT DWTGEN EQU * ST A6,SAVE08,A13 SAVE LINE CONNECTION NUMBER LDR* A8,A7 GET LENGTH OF THIS CLASS SUKL A8,2 EXCLUSIVE LENGTH WORD ADK A7,2 FIRST FILECODE DWT10 EQU * LD A1,2,A7 GET ADDRESS OF PROTOTYPE DWT * * DERIVE CONTENT OF CHANNEL PARAMETER AND ALSO * THE ENTRY TO BE USED IN TEMPORARY INTERRUPT TABLE * FROM LINE CONNECTION NUMBER AND PROTOTYPE DWT * CALL I:CHP * * GET CORRECT INTERRUPT TABLE USING SAVE05 (SELECTS TABLE) * AND SAVE06 (SELECTS ENTRY) * * SAVE05 HOLDS 2*(NUMBER STORED IN BIS 4-6) * SAVE06 HOLDS THE NUMBER STORED IN BITS 12-15 * OF THE GENERATED CHANNEL PARAMETER LD A4,SAVE05,A13 GET SAVED NUMBER IN BITS 4-6 LD A3,SCTSFA+2 FIRST INT TABLE POINTER ADR A4,A3 SELECT INTERRUPT TABLE LDR* A4,A4 GET INTERRUPT TABLE ADDRESS LD A3,SAVE06,A13 LINE PARAMETER DWT15 EQU * RF(Z) DWT17 LINE ENTRY FOUND ADK A4,28 NEXT LINE SUK A3,1 DECREMENT LINE PARAMETER RB DWT15 EJECT DWT17 EQU * ST A4,SAVE07,A13 SAVE INTERRUPT TABLE LINE ENTRY * * GET DEVICE ADDRESS: * USE DEVICE ADDRESSES 1-7 FOR INPUT DEVICE * OR DEVICE WITHOUT DATA REQUEST * USE DEVICE ADDRESSES 8-14 FOR OUTPUT DEVICES * LDR* A6,A1 GET FIRST WORD OF PROTOTYPE DWT LDR A2,A6 SAVE ANKL A6,/7100 GET DEVICE ADDRESS AND DEVICE TYPE BIT SLC A6,7 CHECK IF INPUT DEVICE RF(N) DWT20 YES! * * NOT INPUT DEVICE - CHECK IF DEVICE WITH DATA REQUEST * ANKL A2,/8000 DATA REQUEST BIT SET? RF(Z) DWT20 NO! SRL A6,2 ADK A6,12 RF DWT30 DWT20 EQU * SRL A6,2 SUK A6,2 DWT30 EQU * ANK A6,/1E * * CHECK IF DWT ALREADY GENERATED ON THIS LINE * ADR A6,A4 TABLE ENTRY LDR* A2,A6 DWT ALREADY GENERATED? RF(Z) DWT32 NO! LD A5,DWTECB,A1 CHECK IF ECHO RF(Z) DWT70 NO! ST A2,DWTECH,A5 STORE REAL ECHODEVICE-DWTADDRESS CM DWTECB,A1 RESET POINTER TO INPUT-DWT RF DWT70 EJECT * * CHECK IF DWT IN DRIVER * DWT32 LDKL A2,SYSLOD TNM A1,A2 RF(NN) DWT34 CWR A1,A2 RF DWT36 DWT34 CWR A2,A1 DWT36 RF(L) DWT38 STR A1,A6 LDR A2,A1 DWT IN DRIVER RF DWT70 DWT38 EQU * STR A12,A6 SAVE DWT-ADDRESS * * COPY DEVICE TYPE DWT * LDR A2,A12 TO-ADDRESS LD A3,DWTOR,A1 LENGTH ADR A12,A3 NEXT FREE ENTRY CALL MOVE EJECT * * A1 - ADDRESS TO PROTOTYPE DWT * A2 - ADDRESS TO REAL DWT * STR A5,A2 STORE CHANNEL PARAMETER * * CHECK IF INPUT DEVICE * LDR* A3,A1 GET FIRST WORD OF TYPE DWT ANKL A3,/0100 INPUT DEVICE? RF(Z) DWT50 NO * * INPUT DEVICE: * CHECK IF KEYBOARD * LD A3,DWTADR,A1 LD A3,DEVIND,A3 CWK A3,6 RF(NE) DWT60 NOT KEYBOARD * * INPUT DEVICE = KEYBOARD * IF ECHO: * STORE ADDRESS OF KEYBOARD DWT IN THIRD WORD * OF PROTOTYPE DWT OF OUTPUT ECHO DEVICE * LD A5,DWTECH,A1 ECHO? RF(Z) DWT40 NO AD A5,M:REL,A13 RELOCATE ECHO DEVICE DWT-ADDRESS ST A2,4,A5 SAVE INPUT DWT-ADDRESS EJECT DWT40 EQU * * * RELOCATE POINTERS TO CIRCULAR INPUT BUFFER * LDR A5,A2 GET DWT-ADDRESS ADKL A5,DWTSQ DISPLACEMENT TO START OF BUFFER ST A5,DWTSQ-4,A2 STORE POINTER ST A5,DWTSQ-2,A2 STORE POINTER * * IF DOUBLE KEYBOARD: * ADD 1 TO DWT-ADDRESS AND SAVE IT IN TEMPORARY INTERRUPT TABLE * IN ENTRY CORRESPONDING TO SECOND DEVICE ADDRESS * LDR* A3,A1 GET FIRST WORD OF TYPE DWT ANK A3,/F GET FOUR RIGHTMOST BITS RF(Z) DWT60 NOT DOUBLE KEYBOARD LDR A5,A2 GET REAL DWT-ADDRESS ADK A5,1 ADD ONE SUK A3,1 DISPLACEMENT=0 IF DEVICE ADDRESS=1 ADR A3,A3 BYTE DISPLACEMENT AD A3,SAVE07,A13 ENTRY IN INTERRUPT TABLE STR A5,A3 STORE DEVICE-ADDRESS RF DWT60 EJECT DWT50 EQU * * * OUTPUT DEVICE * IF ECHO OUTPUT DEVICE: * GET CORRESPONDING INPUT DWT-ADDRESS FROM THIRD WORD * IN THE DWT. * SAVE ADDRESS OF THIS DWT IN WORD 18 OF INPUT DWT * AND CLEAR WORD 3 OF THIS DWT. * LD A5,DWTECB,A2 GET THIRD WORD IN REAL DWT RF(Z) DWT60 NOT ECHO OUTPUT DEVICE ST A2,DWTECH,A5 STORE DWT-ADDRESS OF REAL OUTPUT DWT CM DWTECB,A1 CLEAR THIRD WORD OF THIS DWT =2 DWT60 EQU * * * CHECK IF PAGING * LD A5,SCTOPT GET OPTION WORD ANK A5,1 MMU PAGING? RF(Z) DWT70 EJECT LD A5,DWTMEC,A2 GET MONITOR ECB ADDRESS LDR A4,A1 GET PROTOTYPE DWT-ADDRESS SUR A4,A2 COMPUTE RELOCATION CONSTANT SUR A5,A4 RELOCATE MONITOR ECB ADDRESS ANKL A5,/FFFE MAKE EVEN ADDRESS ST A5,DWTMEC,A2 STORE IT BACK * * PAGING: CHECK IF INTERNAL BUFFER SHOULD BE ALLOCATED * LD A5,DWTADR,A2 GET ADDRESS BLOCK LD A4,BUFLEN,A5 GET LENGTH OF INTERNAL BUFFER RF(Z) DWT70 ALLOCATE NO BUFFER! * * ALLOCATE INTERNAL BUFFER AND STORE ADDRESS IN SECOND WORD OF INTERNAL * LD A5,DWTMEC,A2 GET MONITOR ECB-ADDRESS LDR A3,A12 INTERNAL BUFFER ADDRESS ADK A3,1 ANKL A3,/FFFE MAKE SURE OF EVEN ADDRESS ST A3,2,A5 SAVE LDR A3,A4 GET LENGTH ADK A3,3 ADD BO FERMS CONSTANT+1 ANKL A3,/FFFE MAKE LENGTH EVEN EJECT * * CHECK IF INTERNAL BUFFER SIZE IS GREATER THAN * THE SIZE OF BUFFER RESERVED FOR SYSLOD PART A. * IF YES,THAN STORE THE ADDRESS AND SIZE OF THE * INTERNAL BUFFER IN SYSBUF AND BUFSIZ. * CW A3,BUFSIZ,A13 RF(NG) DWT65 ST A3,BUFSIZ,A13 ST A12,SYSBUF,A13 DWT65 EQU * ADR A12,A3 NEXT FREE ENTRY EJECT DWT70 EQU * * * STORE FILE-CODE AND DWT-ADDRESS IN TTAB * ADKL A10,2 NEXT ENTRY IN TTAB LDR* A5,A7 GET INDEX/FILECODE STR A5,A10 STORE IN TASK CONF. TABLE ADKL A10,2 NEXT ENTRY IN TTAB STR A2,A10 STORE DWT-ADDRESS * * CHECK IF MOORE DEVICES IN THIS CLASS * SUKL A8,4 RF(Z) DWTEX ADK A7,4 NEXT DEVICE LDKL A1,DWT10 START OF LOOP AD A1,M:REL,A13 RELOCATE START OF LOOP ABR A1 DWTEX EQU * RTN A14 RETURN EJECT ************************************* * I:CHP - INIT CHANNEL PARAMETER * ************************************* * * REFERENCED IN: DWTGEN * * ENTRY: A1 - POINTER TO PROTOTYPE DWT * A2 - POINTER TO REAL DWT * A6 - LINE CONNECTION NUMBER * A9 - POINTER TO TDC RECORD * * EXIT: A5 - CHANNEL PARAMETER * SAVE05 - SELECTS INTERRUPT TABLE (INTLT1-INTRT4) * SAVE06 - SELECTS LINE ENTRY (1-8) * * WORK REGISTERS: A3,A4,A5 * * SUBROUTINES: * EJECT I:CHP EQU * LD A6,SAVE08,A13 GET LINE CONNECTION NUMBER SUK A6,1 MODIFY LINE CONNECTION NUMBER LDR* A5,A1 GET FIRST WOED OF PROTOTYPE DWT ANKL A5,/F1F0 CLEAR BITS TO MODIFY LDR A3,A6 GET MODIFIED LINE CONNECTION NUMBER LC A4,TDC+5,A9 CHECK TYPE OF LINE CCK A4,'LL' LOCAL LINE? RF(NE) I:CHPR NO: REMOTE I:CHPL EQU * ANK A3,7 GET BITS 13-15 ST A3,SAVE06,A13 SAVE SLL A3,9 MOVE TO BITS 4-6 ORR A5,A3 MERGE WITH OLD CONTENTS LDR A3,A6 GET LINE CONNECTION NUMBER ANK A3,/18 GET BITS 11-12 SRL A3,2 MOVE TO BITS 13-14 ST A3,SAVE05,A13 SAVE SRL A3,1 MOVE TO BITS 14-15 ORR A5,A3 MERGE WITH OLD CONTENTS RF I:CHPE EJECT I:CHPR EQU * * * REMOTE LINE * ANK A3,3 GET BITS 14-15 RF(NZ) I:CH10 ANKL A5,/F1FF CLEAR BITS 4-6 (= STORE ZERO) ST A3,SAVE06,A13 SAVE ENTRY SELECTOR RF I:CH50 I:CH10 EQU * ANK A3,2 GET BIT 14 RF(NZ) I:CH20 ORKL A5,/0800 STORE 4 IN BITS 4-6 LDK A3,4 ENTRY SELECTOR ST A3,SAVE06,A13 SAVE RF I:CH50 I:CH20 EQU * LDR A3,A6 GET LINE CONNECTION ANK A3,1 GET BIT 15 RF(NZ) I:CH30 ORKL A5,/0200 STORE 1 IN BITS 4-6 LDK A3,1 ENTRY SELECTOR ST A3,SAVE06,A13 SAVE RF I:CH50 I:CH30 EQU * ORKL A5,/0A00 STORE 5 IN BITS 4-6 LDK A3,5 ENTRY SELECTOR ST A3,SAVE06,A13 SAVE EJECT I:CH50 EQU * LDR A3,A6 GET LINE CONNECTION LDK A4,4 INIT COUNTER I:CH60 EQU * SUK A3,2 DECREMENT LINE CONNECTION NUMBER RF(N) I:CH70 ADK A4,1 INCREMENT TABLE SELECTOR RB I:CH60 I:CH70 EQU * ORR A5,A4 STORE COMPUTED BITS 12-15 SUK A4,4 ANK A4,6 ADK A4,8 ST A4,SAVE05,A13 SAVE I:CHPE EQU * RTN A14 RETURN EJECT ********************************************** * B:ITAB - BUILD REAL-TIME INTERRUPT TABLE * ********************************************** * * REFERENCED IN: DWTGEN * * ENTRY: SCTSFA - START OF FREE AREA * * EXIT: INTLT1-INTRT4 - REAL TIME INTERRUPT TABLES * * REGISTER USE: A1 - WORK REGISTER * A2 - " * A3 - " * A4 - LENGTH OF LINE SAVE01URATION TABLE * A5 - DEVICE COUNTER * A6 - LINE COUNTER * A7 - DISPLACEMENT IN SAVE21 * A10- ADDRESS TO TEMPORARY INTERRUPT TABLE * A11- POINTER IN LINE CONF. PART OF REAL INT. TABLE * A12- LINE ENTRY IN REAL INTERRUPT TABLE * * SUBROUTINES * EJECT B:ITAB EQU * LD A12,SCTSFA INIT POINTER TO FIRST R. I. T. LDR A11,A12 LDK A7,0 RESET POINTER IN IABAT BIT10 EQU * LDK A1,0 ST A1,SAVE24,A13 ST A12,SAVE21,A13 SAVE ADKL A11,16 INIT POINTER TO LINE CONF. TABLE * * GET ADDRESS TO TEMPORARY INTERRUPT TABLE * LD A10,SCTSFA+2 ADR A10,A7 LDR* A10,A10 LDK A6,0 RESET LINE ENTRY POINTER BIT20 EQU * * * SAVE POINTER TO START OF LINE SAVE01URATION TABLE * IN TEMPORARY AREA AND RESET LENGTH OF LINE SAVE01URATION TABLE * ST A11,SAVE23,A13 SAVE START OF LINE SAVE01URATION TABLE LDK A4,0 RESET LENGTH OF LINE CONF.TABLE * * INIT POINTER IN TEMPORARY INTERRUPT TABLE * TO POINT AT LAST INPUT DEVICE ENTRY * ADKL A10,12 LDK A5,7 ADKL A11,14 EJECT * * CHECK INPUT PART OF TEMPORARY INTERUPT TABLE STARTING * WITH THE LAST DEVICE ENTRY * BIT30 EQU * LDR* A1,A10 OCCUPIED ENTRY? RF(NZ) BIT40 YES BIT35 EQU * SUK A5,1 NO; CHECK IF LAST DEVICE ENTRY RF(Z) BIT50 YES * * NO ENTRIES IN THE INPUT DEVICE PART OF THE TEMPORARY * INTERRUPT TABLE HAS BEEN OCCUPIED SO FAR * SUKL A10,2 NEXT ENTRY IN TEMP. INT. TABLE SUKL A11,2 NEXT ENTRY IN REAL INT. TABLE RB BIT30 * * AN OCCUPIED ENTRY IN THE TEMPORARY INTERRUPT TABLE HAS OCURRED. * COPY THE CONTENTS OF THE INPUT DEVICE PART (INCLUDING ZEROES) * OF THE TEMPORARY INTERRUPT TABLE UP TO AND INCLUDING THIS ENTRY. * BIT40 EQU * STR A1,A11 STORE CONTENT IN R. I. T. ADK A4,2 INCREMENT LENGTH SUK A5,1 LAS DEVICE ENTRY? RF(Z) BIT50 YES SUKL A10,2 NEXT ENTRY IN T.I.T. SUKL A11,2 NEXT ENTRY IN R.I.T. LDR* A1,A10 GET CONTENT OF NEXT ENTRY RB BIT40 EJECT BIT50 EQU * * * ALL ENTRIES OF THE INPUT DEVICE PART IN TEMPORARY INTERRUPT * TABLE HAS BEEN SCANNED. * -INIT POINTER TO FIRST ENTRY IN OUTPUT DEVICE PART * OF THE TEMPORARY INTERRUPT TABLE. * -INIT DEVICE COUNTER. * ADKL A10,14 LDK A5,7 * * SCAN ENTRIES IN OUTPUT DEVICE PART OF THE TEMPORARY INTERRUPT TABLE. * -IF AN OCCUPIED ENTRY OCCUR: * FIND FIRST UNOCCUPIED ENTRY (CONTENT=ZERO) IN THE LINE SAVE01URATION * TABLE OF THE REAL INTERRUPT TABLE AND STORE CONTENT IN THIS ENTRY. * -IF THIS EXTENDS THE LINE SAVE01URATION TABLE: * INCREMENT LENGTH * BIT70 EQU * LDR* A1,A10 OCCUPIED ENTRY? RF(NZ) BIT90 YES SUK A5,1 LAST ENTRY RF(Z) BIT120 YES BIT80 EQU * ADKL A10,2 NEXT ENTRY RB BIT70 BIT90 EQU * * * AN OCCUPIED ENTRY IN OUPUT DEVICE PART OF THE TEMPORARU INTERRUPT TAB * HAS OCURRED. FIND FIRST UNOCCUPIED ENTRY IN LINE SAVE01URATION TABLE * OF REAL INTERRUPT TABLE. * LDR* A2,A11 RF(Z) BIT100 ADKL A11,2 RB BIT90 EJECT BIT100 EQU * * * AN UNOCCUPIED ENTRY HAS BEEN FOUND IN LINE SAVE01URATION TABLE. * -STORE THE CONTENT IN THIS ENTRY. * -UPDATE LENGTH IF TABLE WAS EXTENDED. * STR A1,A11 STORE CONTENT LD A1,SAVE23,A13 GET START OF L.C.T. LDR A3,A11 GET CURRENT ENTRY SUR A3,A1 COMPUTE LENGTH CWR A3,A4 L.C.T. EXTENDED? RF(NG) BIT110 LDR A4,A3 SAVE NEW LENGTH BIT110 EQU * SUK A5,1 LAST ENTRY? RB(P) BIT80 NO BIT120 EQU * * * ALL ENTRIES OF THIS LINE IN TEMPORARY INTERRUPT TABLE HAS BEEN SCANNE * -IF ANY ENTRY WAS OCCUPIED (LENGTH>0): STORE POINTER TO LINE * SAVE01URATION TABLE IN THIS LINE ENTRY AND STORE LENGTH IN FIRST WOR * LDR A4,A4 ANY ENTRY OCCUPIED? RF(Z) BIT130 NO IM SAVE24,A13 INDICATE DEVICE PRESENT! LD A1,SAVE23,A13 GET POINTER TO L.C.T. STR A1,A12 STORE IN LINE ENTRY STR A4,A1 STORE LENGTH IN FIRST WORD OF L.C.T. LDR A11,A1 START OF L.C.T. ADR A11,A4 LAST OCCUPIED ENTRY IN L.C.T. ADKL A11,2 NEXT FREE ENTRY RF BIT140 EJECT BIT130 EQU * * * NO DEVICES ON THIS LINE. * -NO LINE SAVE01URATION TABLE GENERATED * -SKIP LENGTH WORD * -LINE ENTRY CONTAIN ZERO * SUKL A11,2 SKIP LENGTH WORD BIT140 EQU * ADKL A10,2 NEXT ENTRY IN T.I.T. ADK A6,1 INCREMENT LINE COUNTER CWK A6,8 ALL LINES SCANNED? RF(E) BIT150 YES ADKL A12,2 NEXT LINE ENTRY RB BIT20 BIT150 EQU * * * STORE ADDRESS TO THIS INTERRUPT TABLE IN MONTAB * IF ANY DEVICE PRESENT ON ANY LINE * LD A1,SAVE24,A13 ANY DEVICE PRESENT? RF(Z) BIT155 NO! LD A1,SAVE21,A13 GET INTERRUPT TABLE ADDRESS ST A1,INTLT1,A7 SAVE RF BIT158 BIT155 EQU * LD A11,SAVE21,A13 GET START OF FREE AREA BIT158 EQU * * * ALL LINES OF THIS INTERRUPT TABLE HAS BEEN SCANNED. * -CHECK IF ALL INTERRUPT TABLES (INTLT1-INTRT4) HAS BEEN GENERATED * ADK A7,2 NEXT ENTRY IN ITAB CWK A7,16 LAST ENTRY? RF(E) BIT160 YES LDR A12,A11 GET NEXT FREE ENTRY RB BIT10 BIT160 EQU * * * ALL ENTRIES IN THE TEMPORARY INTERRUPT TABLE HAS BEEN SCANNED * AND ALL THE REAL INTERRUPT TABLES HAS BEEN GENERATED. * POINTERS TO THE REAL INTERRUPT TABLES HAS BEEN INSERTED IN MOXTAB. * LD A2,SCTSFA SUK A2,2 BIT165 ADK A2,2 CW A2,SCTEFA CHECK IF MEMORY OVERFLOW RF(NE) BIT170 LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW BIT170 CWR A2,A11 RB(NE) BIT165 ST A13,SCTEFA SKIP TEMP. INT. TABLE ST A11,SCTSFA UPDATE START OF FREE AREA RTN A14 RETURN EJECT