|
|
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: 96914 (0x17a92)
Notes: pts_type(SC)
Names: »SYSLDM.SC«
└─⟦4358b8014⟧ Bits:30009669 Philips computer tape "600124"
└─⟦this⟧ »MON10/SYSLDM.SC«
└─⟦79fbed147⟧ Bits:30009697 Philips computer tape "600414"
└─⟦this⟧ »M:DECE/SYSLDM.SC«
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
└─⟦this⟧ »MON10/SYSLDM.SC«
IDENT SYSLDM REL 10.0 80-03-31 870105041000 REL 10.0 80-03-17 ST =5,FAULTY DISPL. TO MMU BIT MAP REL 10.0 80-03-14 ST =4,MEM. OVERFL. NOT DET. WHEN GEN. TTAB:S PRR 10.0 80-01-18 =3,SEGTAB NOT GEN. IF MMU PAGING ONLY PRR 10.0 79-12-21 =2,SEGBLK/PAGBLK NOT GEN. FOR CORE RES. SEGM. PRR 10.0 79-12-07 =1,UNEVEN LENGTH POSS. OF INTERNAL BUFFER ENTRY SYSLDM *************************** * * * ENTRIES AND EXTERNALS * * * *************************** EXTRN FREQUE EXTRN INTLT1 EXTRN INTAS EXTRN INTSL EXTRN REL EXTRN SCLASS EXTRN SCTADA EXTRN SCTANO EXTRN SCTBLK EXTRN SCTBUG EXTRN SCTCDT EXTRN SCTDCT EXTRN SCTDMI EXTRN SCTDMT EXTRN SCTEFA EXTRN SCTFWL EXTRN SCTFWT EXTRN SCTIOE EXTRN SCTLAC EXTRN SCTLAP EXTRN SCTNFT EXTRN SCTNOF EXTRN SCTNOP EXTRN SCTOPT EXTRN SCTPAG EXTRN SCTIPL EXTRN STTPSZ EXTRN SCTPSZ EXTRN SCTSFA EXTRN SCTSTL 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 MULT EXTRN CMPADR EXTRN CONVRT EXTRN NXTBLK EXTRN SYSLDX 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 SAVE26 EXTRN SAVE27 EXTRN SAVE28 EXTRN SAVE29,SAVE30 EXTRN BUFSIZ EXTRN SYSBUF EXTRN PRGLG1 EXTRN APPTYP EXTRN I:RSTE DISPL. IN P:MTAB TO INTERPRETER RESTART ENTRY * * TTAB DISPLACEMENTS * EXTRN TTB:CB CURRENT SEGMENT BASE POINTER EJECT * * EXTERNAL SUBROUTINES * EXTRN NXTCOM EXTRN GETNUM EJECT *************************************** * CONDITIONAL ASSEMBLY * *************************************** MMUPAG EQU 1 MEMORY MANAGEMENT UNIT SWPBLK EQU 0 SWAPPABLE WORK BLOCKS DSKPAG EQU 1 DSKPAG 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:AT EQU -46 DISPLACEMENT TO MMU BIT MAP =5 TTB:MT EQU -38 TTB:SP EQU -4 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 ASZLEN EQU 32 LENGTH OF ASCU4Z INTERRUPT TABLE SCZLEN EQU 16 LENGTH OF SALCUZ INTERRUPT TABLE ASZBUF EQU 96 LENGTH OF TEMP TABLE FOR ASCU4Z SCZBUF EQU 48 LENGTH OF TEMP TABLE FOR SALCUZ MINBUF EQU 1984 LENGTH OF TEMP. INT. TABLE AREA EJECT ****************************************************** * * * * * THIS IS THE MONITOR CONFIGURATION PROGRAM ENTRY * * * * IT IS ENTERED FROM SYSLOD WITH THE FOLLOWING * * PARAMETERS: * * * * A1 - POINTER TO CURRENT LOCATION OF SYSLDX * * A2 - POINTER TO PREVIOUS LOCATION OF SYSLDX * * * * * ****************************************************** 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 * * 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 * ST P,SAVE03,A13 TEMPORARY STORAGE FOR ASCU4Z I.T. 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 * *********************************************************** EJECT BTCT15 EQU * LD A2,SCTDMT DATA MANAGEMENT? BTCT20 ANK A2,/F MOORE DM-TASKS? RF(Z) BTCT30 NO! SRC A2,1 CHECK NEXT RF(NN) BTCT25 NOT INCLUDED ADK A7,2 RESERV ENTRY FOR DM-TASK D0 BTCT25 RB BTCT20 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:FWT - BUILD FILE WORK TABLE * * ============================= * * * *************************************************** * * * REFERENCED IN: CONMON * * * * ENTRY: SCTNFT - NUMBER OF FM-FILES PER TASK * * SCTNOF - NUMBER OF GENERAL FM-FILES * * SCTFWL - FILE WORK TABLE LENGTH IN * * BYTES * * * * EXIT: SCTFWT - ADDRESS TO FIRST FWT * * SCTNOF - TOTAL NUMBER OF FM-FILES * * * * WORK REGISTERS: A2,A3 * * * * SUBROUTINES: ERROR,MULT * * * * FUNCTIONAL DESCRIPTION: * * THIS SUBROUTINE RESERVES MEMORY AREA FOR * * FILE WORK TABLES. * * SIZE OF THE AREA RESERVED IS GIVEN BY THE * * FORMULA: A=L*(G+N*T) * * WHERE A=AREA SIZE IN BYTES * * L= FWT LENGTH IN BYTES * * G=NUMBER OF GENERAL FM-FILES * * T=NUMBER OF FM-FILES PER TASK * * N=NUMBER OF USER TASKS * * * *************************************************** EJECT B:FWT EQU * LD* A2,SCTTCT GET LENGTH OF TCTAB AD A2,SCTTCT COMPUTE END OF TCTAB SU A2,SAVE02,A13 LENGTH OF USER PART SRL A2,1 NUMBER OF USER TASKS LD A3,SCTNFT GET NUMBER OF FM-FILES PER TASK CALL MULT MULTIPLY AD A3,SCTNOF ADD NUMBER OF GENERAL FM-FILES ST A3,SCTNOF STORE TOTAL NUMBER OF FM-FILES LD A2,SCTFWL GET FILE WORK TABLE LENGTH CALL MULT MULTIPLY SRL A3,1 NUMBER OF WORDS TO BE RESERVED ADK A3,0 ANY FWT:S AT ALL? RF(Z) FWT70 NO! ST A3,SAVE05,A13 SAVE FWT AREA SIZE IN WORDS LD A2,SCTSFA GET START OF FREE AREA ST A2,SCTFWT STORE ADDRESS TO FIRST FWT FWT50 CW A2,SCTEFA MEMORY OVERFLOW? RF(NE) FWT60 NOT YET! LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR FWT60 ADK A2,2 RESERVE ANOTHER WORD SUK A3,1 DECREMENT WORD COUNTER RB(NZ) FWT50 CHECK IF MEMORY OVERFLOW ST A2,SCTSFA UPDATE START OF FREE AREA FWT70 RTN A14 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 IFF MMUPAG+DSKPAG=0 =3 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 * * * CHECK APPLICATION TYPE * LD A1,APPTYP,A13 GET LANGUAGE TYPE CWK A1,'CR' RF(E) SEG:05 CREDIT APPLICATION CWK A1,'CO' RF(E) SEG:05 COBOL APPLICATION RF SEGEX * * BUILD SEGMENT TABLE * SEG:05 LD A12,SCTSFA START OF FREE AREA LD A1,SCTIPL GET PROGRAM LOAD DEVICE STR A1,A12 STORE IN SEGTAB ADKL A12,2 START OF SEGMENT BLOCKS LD A1,SAVE29,A13 GET NUMBER OF SEGMENTS STR A1,A12 SAVE ADKL A12,2 ST A12,SAVE30,A13 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 LD A4,SAVE29,A13 GET NUMBER OF SEGMENTS RF(Z) SEG:50 NO SEGMENTS! ADK A2,2 FIRST SEGMENT BLOCK SEG:10 EQU * LDK A7,0 STATUS CALL GETCON * LDR A3,A1 SAVE DISC ADDRESS =REL 11 * ANK A3,/FF CLEAR LEFT BYTE =REL 11 SRL A1,8 PROGRAM TYPE TO RIGHT BYTE =2 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! XRR A3,A3 LDKL A7,/8800 ADK A2,2 RF SEG:40 SEG:30 EQU * LDKL A7,/8800 INDICATE LOADED IN CORE SEG:35 EQU * ADK A2,2 SEGMENT ADDRESS CALL GETCON * AD A1,SCTADA+2 RF(O) SEG:36 RF SEG:38 SEG:36 ADK A3,1 ANKL A1,/7FFF SEG:38 AD A3,SCTADA CWK A3,255 RF(NG) SEG:40 LDKL A1,LMP10 CALL ERROR SEG:40 EQU * * ORR A7,A3 =REL 11 STR A7,A12 ST A1,2,A12 ADK A2,2 EFFECTIVE LENGTH CALL GETCON ST A1,4,A12 SAVE EFFECTIVE LENGTH ADKL A12,8 NEXT SEGMENT BLOCK ADK A2,2 NEXT BLOCK IN S:GTAB 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 SWPBLK=1 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 CM SAVE14,A13 RESET SWP-BLOCK COUNTER ADKL A12,2 FIRST POINTER LDR A10,A12 SAVE BSWT50 ADKL A10,2 BYPASS POINTER SUK A5,1 DECREMENT NUMBER OF TYPES RB(P) BSWT50 * * 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 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 SLL A5,8 NUMBER OF COPIES IN LEFT BYTE OR A5,SAVE26,A13 DISC ADDRESS BITS 0-7 IN RIGHT BYTE STR A5,A10 STORE IN SWB BLOCK SRL A5,8 NUMBER OF COPIES TO RIGHT BYTE LD A8,SAVE25,A13 GET DISC ADDRESS BITS 8-22 ST A8,2,A10 SAVE 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 BSWT85 LD A3,SWBLEN,A10 GET LENGTH OF BLOCK LDK A1,0 RESET SECTOR COUNTER BSWT86 IM SAVE25,A13 INCREMENT SECTOR ADDRESS RF(O) BSWT88 RF BSWT90 BSWT88 IM SAVE26,A13 CM SAVE25,A13 BSWT90 EQU * ADK A1,1 INCREMENT SECTOR COUNTER SUKL A3,256 DECREMENT LENGTH RB(P) BSWT86 MOORE SECTORS? SUK A5,1 MOORE COPIES? RB(P) BSWT85 YES! ST A1,SWBSEC,A10 STORE SECTOR LENGTH IM SAVE14,A13 INCREMENT SWP-BLOCK COUNTER LD A8,SAVE26,A13 CW A8,SAVE28,A13 RB(G) SWBERR $SWAP-FILE TOO SMALL! RF(L) BSWT95 LD A8,SAVE25,A13 CW A8,SAVE27,A13 RF(G) BSWT98 SWAPP-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 LD A8,SAVE14,A13 ANY BLOCKS GENERATED? RF(NE) BSWT99 YES BSWT98 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 ************************************************* * 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,A3,A5,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 A3,SCTDMT DATA MANAGEMENT? LD A6,SCTDMI GET INDEX BUFFER RECORD SIZE LDKL A5,'#D' DM-TASK ID DMTT20 EQU * ANK A3,/F MOORE DM-TASKS? RF(Z) DMTTEX NO! SRC A3,1 RF(NN) DMTT30 CALL DMTGEN DMTT30 EQU * ADK A5,1 RB DMTT20 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: A2,A4 * * 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 * LD A1,SAVE30,A13 GET ADDRESS TO SEG.TABLE STR A1,A12 STORE TTB:SP ADKL A12,6 DMTG40 EQU * STR A12,A7 STORE TTAB ENTRY POINTER IN TC:TAB ADK A7,2 NEXT ENTRY IN TC:TAB ST A5,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 * * 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 EJECT * 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 * ST P,SAVE04,A13 SAVE LOCATION COUNTER LD A12,SCTSFA GET START OF FREE AREA LD A11,SAVE01,A13 GET START OF SAVE01URATION DATA ST A12,SAVE10,A13 SAVE START OF FREE AREA 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 * * CHECK IF CREDIT APPLICATION * LD A5,APPTYP,A13 CREDIT? CWK A5,'CR' RF(NE) BTT21 EJECT * * 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 BTT21 EQU * 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 EJECT * * COMPUTE SIZE OF SAVE01URATION DEPENDENT PART OF TASK TABLE * LDKL A10,TTB:TD STANDARD LENGTH LD A5,SCTOPT GET OPTION WORD ANK A5,/11 CHECK IF EMM AND MMU PAGING INCLUDED XRK A5,/11 BOTH INCLUDED? RF(NZ) BTT22 NO! SUKL A10,TTB:AT INCLUDE BIT MAP IN LENGTH SUKL A12,TTB:AT RESERV SPACE FOR BIT MAP RF BTT30 BTT22 LD A5,SCTOPT SRC A5,1 MMU PAGING? RF(NN) BTT25 NO SUKL A10,TTB:MT 16+2 WORD EXTRA IF MMU SUKL A12,TTB:MT RESERV SPACE FOR EXTRA WORDS RF BTT30 BTT25 EQU * SRC A5,1 DISC PAGING? RF(NN) BTT30 NO! SUKL A10,TTB:CB ONE WORD EXTRA IF DISC PAGING SUKL A12,TTB:CB RESERV SPACE FOR EXTRA WORD BTT30 EQU * * * ADD ONE WORD FOR LENGTH OF TASK SAVE01URATION TABLE * ADKL A10,2 EJECT * * 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 * 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 * EJECT =4 * =4 * MEMORY OVERFLOW CHECK =4 * =4 LDR A1,A11 SAVE REGISTER A11 =4 LDR A5,A9 SAVE REGISTER A9 =4 LDR A11,A12 GET TTAB ADDRESS =4 ADR A11,A10 COMPUTE END OF TTAB =4 LD A9,SCTEFA GET END OF FREE AREA =4 CALL CMPADR END OF TTAB<END OF FREE AREA? =4 RF(L) BTT62 YES! =4 LDKL A1,LMP3 =4 CALL ERROR INDICATE MEMORY OVERFLOW =4 BTT62 LDR A11,A1 RESTORE A11 =4 LDR A9,A5 RESTORE A9 =4 EJECT =4 * 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 IFF MMUPAG+DSKPAG=0 =3 * * STORE SEGMENT TABLE ADDRESS IN TTAB * LD A5,SAVE30,A13 GET SEGMENT TABLE ADDRESS ST A5,TTB:SP,A12 STORE IN TTAB XIF LD A5,APPTYP,A13 GET APPLICATION TYPE CWK A5,'CR' CREDIT? RF(NE) BTT65 NO * * 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 BTT65 EQU * 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 LDR A5,A10 GET TTAB LENGTH ADS A5,SAVE10,A13 UPDATE START OF FREE AREA 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 A12,SAVE10,A13 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 * =4 =4 =4 =4 =4 =4 =4 =4 =4 ST A12,SCTSFA SAVE START OF FREE AREA RTN A14 RETURN 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 * * 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 * * * CLEAR WORK AREA TO BE USED FOR ECHO DEVICE * AND TEMPORARY INTERRUPT TABLES * LDR A1,P GET LOCATION COUNTER ST P,SAVE10,A13 SAVE LOCATION COUNTER BDWT00 CMR A1 CLEAR MEMORY WORD CW A1,SCTSFA+2 ALL WORDS CLEARED? RF(E) BDWT05 YES! SUK A1,2 DECREMENT POINTER RB BDWT00 BDWT05 EQU * LD A11,SAVE05,A13 GET FWT AREA SIZE IN WORDS CWK A11,896 LARGE ENOUGTH FOR TEMP. INT. TABLES? RF(L) BDWT08 NO! LD A1,SCTEFA SAVE END OF FREE AREA LD A11,SCTFWT START OF FWT AREA LDR A9,A11 ADKL A9,896+896 END OF T.I.T. ST A9,SCTEFA RF BDWT25 BDWT08 EQU * * * ALLOCATE TEMPORARY WORK AREA IN USED PART OF SYSLDM IF POSSIBLE * LD A11,SAVE10,A13 GET END OF TEMP. INT. TABLE SU A11,SCTSFA+2 COMPUTE SIZE OF AVALIABLE AREA CWK A11,MINBUF IS IT BIG ENOUGH? RF(L) BDWT09 TOO SMALL! LD A1,SCTEFA SAVE REAL END OF FREE AREA LD A11,SAVE10,A13 GET END OF TEMP. WORK AREA ST A11,SCTEFA SAVE SUKL A11,896+896 START OF TEMP. WORK AREA LDR A7,A11 SAVE SUK A7,SCZBUF START OF TEMP BUFFER FOR SALCUZ ST A7,SAVE04,A13 SAVE SUK A7,ASZBUF START OF TEMP BUFFER FOR ASCU4Z ST A7,SAVE03,A13 SAVE RF BDWT25 BDWT09 EQU * * * ALLOCATE MEMORY FOR TEMPORARY INTERRUPT TABLE AT END OF FREE AREA * LD A11,SCTEFA GET END OF FREE AREA LD A9,SCTSFA GET START OF FREE AREA 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 ADK A7,1 INCREMENT WORD COUNTER RB BDWT10 BDWT20 EQU * * * INIT POINTERS TO THE TEMPORARY INTERRUPT TABLES * LDR A1,A11 BDWT25 LD A7,SAVE10,A13 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 * CALL ECHO 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,/E 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 * 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 CALL ECHO 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 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,/E 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 DWT05 EQU * LD A1,2,A7 GET ADDRESS OF PROTOTYPE DWT LD A6,SAVE08,A13 GET LINE CONNECTION NUMBER * * CHECK CONNECTION TYPE * LC A4,TDC+5,A9 GET LINE CONNECTION TYPE CCK A4,'SS' SALCUZ CONNECTION? RF(NE) DWT10 NO! CALL B:ITSZ BUILD INTERRUPT TABLE FOR SALCUZ RF DWT31 DWT10 CCK A4,'AA' ASCU4Z CONNECTION? RF(NE) DWT11 NO! CALL B:ITAZ BUILD INTERRUPT TABLE FOR AUSCU4Z RF DWT31 DWT11 EQU * * * 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 AD A4,SAVE10,A13 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 DWT31 LDR* A2,A6 DWT ALREADY GENERATED? RF(Z) DWT32 NO! CALL DWT50 LDKL A1,DWT70 AD A1,M:REL,A13 ABR A1 * * 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) DWT45 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 RUNTIME-DWT * AND ECHO DEVICE PROTOTYPE-DWT IN ECHO DEVICE TABLE * * LD A5,DWTECH,A1 ECHO? RF(Z) DWT40 NO AD A5,M:REL,A13 LD* A3,SCTSFA+2 GET LENGTH OF ECHO DEVICE TABLE RF(NZ) DWT392 NOT FIRST ECHO DEVICE ADK A3,2 INCLUDE LENGTH OF ECHO DEVICE TABLE DWT392 LDR A4,A3 SAVE LENGTH AD A4,SCTSFA+2 NEXT FREE ENTRY STR A2,A4 SAVE RUNTIME DWT-ADDRESS FOR INPUT DEVICE ST A5,2,A4 SAVE PROTOTYPE DWT ADDRESS FOR OUTPUT DEVICE ADK A3,4 UPDATE LENGTH ST* A3,SCTSFA+2 SAVE NEW LENGTH 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 DWT45 CALL DWT50 RF DWT60 DWT50 EQU * * * OUTPUT DEVICE* * IF ADDRESS OF PROTOTYPE DWT IS ODD, * THE DEVICE IS TO BE USED FOR ECHOING ON. * THE ADDRESSES OF THE PROTOTYPE- AND RUNTIME-DWT * IS THEN STORED IN THE ECHO DEVICE TABLE. * LD A5,DWTTAB,A1 GET DEVICE TYPE CHARACTERS RF(NN) DWT59 NO ECHOING ON THIS DEVICE LD* A3,SCTSFA+2 GET LENGTH OF ECHO DEVICE TABLE RF(NZ) DWT55 ALREADY INITIALIZED! ADK A3,2 INCLUDE LENGTH DWT55 LDR A4,A3 SAVE LENGTH AD A4,SCTSFA+2 NEXT FREE ENTRY STR A1,A4 STORE ADDRESS OF PROTOTYPE DWT ST A2,2,A4 STORE ADDRESS OF RUNTIME DWT ADK A3,4 UPDATE LENGTH ST* A3,SCTSFA+2 STORE NEW LENGTH DWT59 RTN A14 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 =1 ANKL A3,/FFFE MAKE SURE OF EVEN LENGTH =1 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 =1 =1 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,DWT05 AD A1,M:REL,A13 ABR A1 DWTEX EQU * RTN A14 EJECT * * SCAN ECHO DEVICE TABLE - FOR EVERY COINCIDENCE * BETWEEN THE FIRST POINTER IN ONE POINTER-SET * AND SECOND POINTER IN THE OTHER POINTER-SET: * STORE SECOND POINTER OF FIRST POINTER-SET * IN RUNTIME-DWT POINTED AT BY FIRST POINTER * OF SECOND POINTER-SET AND CLEAR POINTERS OF * SECOND POINTER-SET. * WHEN ALL POINTER-SET HAS BEEN SCANNED,THE LENGTH * OF ECHO DEVICE TABLE IS CLEARED. * ECHO LD* A3,SCTSFA+2 GET LENGTH OF ECHO DEVICE TABLE RF(Z) DWT160 NO ECHO DEVICES! AD A3,SCTSFA+2 COMPUTE END OF ECHO DEVICE TABLE LD A1,SCTSFA+2 GET START OF ECHO DEVICE TABLE ADK A1,2 BYPASS LENGTH DWT90 LD A2,SCTSFA+2 GET START OF ECHO DEVICE TABLE ADK A2,2 BYPASS LENGTH DWT100 LD A4,2,A1 GET SECOND POINTER IN FIRST SET DWT110 CWR* A4,A2 COMPARE WITH FIRST POINTER IN SECOND SET RF(E) DWT130 COINCIDENCE! ADK A2,4 NEXT POINTER-SET CWR A2,A3 END OF ECHO DEVICE TABLE RB(NE) DWT110 NO:CHECK NEXT SET RF DWT140 DWT130 LD A4,2,A2 ADDRESS TO OUTPUT DEVICE RUNTIME-DWT LDR* A2,A1 ADDRESS TO INPUT DEVICE RUNTIME-DWT ST A4,DWTECH,A2 STORE DEVICE-ADDRESS TO ECHO-DEVICE CMR A1 CLEAR FIRST POINTER CM 2,A1 CLEAR SECOND POINTER DWT140 ADK A1,4 NEXT POINTER-SET CWR A1,A3 END OF ECHO DEVICE TABLE RB(NE) DWT90 NO! DWT150 CM* SCTSFA+2 CLEAR LENGTH DWT160 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 CWK A6,0032 CONNECTION NUMBER <= 32? RF(G) NUMERR NO! CWK A6,0001 CONNECTION NUMBER >=01? RF(L) NUMERR NO! 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 NUMERR EQU * LDKL A1,LMP4 INDICATE FORMAT ERROR CALL ERROR EJECT ****************************************************** * * * B:ITAS - BUILD INTERRUPT TABLES FO ASCU4Z/SALCUZ * * ================================================ * * * ****************************************************** * * * REFERENCED IN: DWTGEN * * * * ENTRY: A1 - POINTER TO PROTOTYPE-DWT * * A6 - LINE CONNECTION NUMBER * * A9 - POINTER TO TDC RECORD * * * * EXIT: A5 - CHANNEL PARAMETER * * A6 - LINE ENTRY * * * * WORK REGISTERS: A2,A3,A4,A5,A6 * * * * SUBROUTINES: * * * ****************************************************** EJECT B:ITAZ EQU * CWK A6,0016 CONNECTION NUMBER <= 16? RB(G) NUMERR NO! CWK A6,0001 CONNECTION NUMBER >= 01? RB(L) NUMERR NO! LDKL A4,INTAS GET ENTRY IN MONTAB LD A2,INTAS TABLE ALREADY INITIALIZED? RF(NZ) BITZ10 YES ADK A2,ASZLEN FIXED NUMBER OF ENTRIES ST A2,INTAS SAVE BITZ10 LD A5,SAVE03,A13 FIRST LINE ENTRY RF BITZ30 B:ITSZ EQU * CWK A6,0004 CONNECTION NUMBER <= 4? RB(G) NUMERR NO! CWK A6,0001 CONNECTION NUMBER >= 01? RB(L) NUMERR NO! LDKL A4,INTSL GET ENTRY IN MONTAB LD A2,INTSL TABLE ALREADY INITIALIZED? RF(NZ) BITZ20 YES! ADK A2,SCZLEN FIXED NUMBER OF ENTRIES ST A2,INTSL SAVE BITZ20 LD A5,SAVE04,A13 FIRST LINE ENTRY? BITZ30 ADR A2,A5 END OF TABLE SUK A6,1 SLL A6,1 CONVERT TO DISPLACEMENT ADR A6,A5 SELECT ENTRY LDR* A3,A6 ANY DEVICES ON THIS LINE? RF(NZ) BITZ40 YES! LDR A3,A2 GET END OF TABLE SUR A3,A6 COMPUTE RELATIVE DISPLACEMENT STR A3,A6 STORE IN LINE ENTRY LDK A3,6 TABLE INCREMENT ADR* A3,A4 UPDATE LENGTH STR A3,A4 STORE NEW LENGTH LDR* A3,A6 GET DISPLACEMENT BITZ40 ADR A6,A3 GET START OF LINE CONF. TABLE LDR* A3,A1 GET CHANNEL PARAMETER SLC A3,5 DEVICE ADDRESS TO BIT 12-14 ANK A3,6 ONLY DEVICE ADDRESS 1,2 OR 3 ALLOWED SUK A3,2 MAKE DISPLACEMENT ADR A6,A3 SELECT ENTRY IN LINE CONF. TABLE LD A4,SAVE08,A13 GET LINE CONNECTION NUMBER SUK A4,1 LINE NUMBER 0-15 LDR A3,A4 SAVE LINE NUMBER SRL A3,3 SELECT ASCU4Z CARD LC A2,TDC+5,A9 GET CONNECTION TYPE CCK A2,'AA' ASCU4Z CONNECTION? RF(E) BITZ50 YES LDK A3,3 SALCUZ CONNECTION BITZ50 ADK A3,/C CHANNEL INDEX ANK A3,/F ISOLATE CHANNEL INDEX ANK A4,7 ISOLATE LINE NUMBER SRC A4,7 MOVE TO BITS 4-6 ORR A4,A3 MERGE LINE NO AND CH. PARAM. LDR* A5,A1 GET PROTOTYPE CHANNEL PARAMETER ANKL A5,/F1F0 GET DATA REQ.,DEV. ADDR. AND INP. DEV. BITS ORR A5,A4 COMPLETE CHANNEL PARAMETER RTN A14 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,SAVE10,A13 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. * * * MOVE INTERRUPT TABLE FOR SALCUZ AND ASCU4Z * TO CONCATENATE INTERRUPT TABLES FOR CHLT/CHRT DEVICES * LD A3,INTAS ANY ASCU4Z CONNECTION? RF(Z) BIT180 NO! LDR A2,A11 GET TO-ADDRESS ADR A11,A3 END OF TO-AREA LD A1,SAVE03,A13 GET FROM-ADDRESS CALL MOVE ST A2,INTAS STORE ADDRESS TO INTERRUPT TABLE ADK A2,ASZLEN LAST LINE ENTRY+2 BIT170 SUK A2,2 DECREMENT ENTRY POINTER LDR* A1,A2 ANY CONNECTION ON THIS LINE? RF(Z) BIT175 NO! ADRS A2,A2 RELOCATE POINTER BIT175 CW A2,INTAS ALL POINTERS RELOCATED? RB(NE) BIT170 NO! BIT180 LD A3,INTSL ANY SALCUZ CONNECTION? RF(Z) BIT200 NO! LDR A2,A11 GET TO-ADDRESS ADR A11,A3 END OF INTERRUPT TABLE LD A1,SAVE04,A13 GET FROM-ADDRESS CALL MOVE MOVE INTERRUPT TABLE ST A2,INTSL STORE ADDRESS TO INTERRUPT TABLE ADK A2,SCZLEN LAST LINE ENTRY+2 BIT190 SUK A2,2 DECREMENT ENTRY POINTER LDR* A1,A2 ANY CONNECTION ON THIS LINE? RF(Z) BIT195 NO! ADRS A2,A2 RELOCATE POINTER BIT195 CW A2,INTSL ALL POINTERS RELOCATED? RB(NE) BIT190 NO! BIT200 EQU * LD A2,SCTSFA SUK A2,2 BIT210 ADK A2,2 CW A2,SCTEFA CHECK IF MEMORY OVERFLOW RF(NE) BIT220 LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW BIT220 CWR A2,A11 RB(NE) BIT210 ST A13,SCTEFA SKIP TEMP. INTERRUPT TABLE ST A11,SCTSFA UPDATE START OF FREE AREA RTN A14 RETURN EJECT