|
|
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: 176148 (0x2b014)
Notes: pts_type(SC)
Names: »SYSLDM.SC«
└─⟦7b35573c9⟧ Bits:30009690 Philips computer tape "600402"
└─⟦this⟧ »M:AF/SYSLDM.SC«
IDENT SYSLDM REL 11.0 81-08-19 870105041100 =10,CORRECTION =9 NOT CORRECT REL 11.0 81-07-28 =9,FOR MONITOR EXTENTS APLREL AND APLLAC =9,POINTS AT 1 WORD TO HIGH ADDRESS =8,BUILD REAL-TIME INTERRUPT TABLES FOR RWSI REL 11.0 81-03-09 =7,BUILD COMPUTER NETWORK ARCHITECTURE BEFORE BUILDING INTERRUPT TABLE REL 11.0 81-02-16 =6,INIT UNUSED MMU ENTRIES,AND INIT ACBSTA AND ACBREL FOR MONITOR EXTENTS REL 11.0 81-01-26 =5,CHANGES IN CONDITIONAL ASSEMBLY WHEN BUILDING COMMON DEVICE TABLES PRR 11.0 80-12-11 =4,CLEAR WORK AREA FOR ECHO DEVICE TABLE EVEN IF NO TERMINAL DEVICES PRR 11.0 80-12-03 =3,APPLICATION CONTROL BLOCK IS EXTENDED WITH 1 WORD PRR 11.0 80-12-01 =2,IF NO S-BLOCK IN CONF.DATA,PROCESS EVEN NEXT CREDIT APPL. CONVERT A BINARY VALUE >99 TO ASCII THE FIRST POINTER IN WORK STATION TABLE FOR PLC IS FOR WS NUMBER ZERO CHECK IF MEMORY OVERFLOW WHEN BUILDING USER TASK TABLES PRR 11.0 80-11-20 =1,IF NO D-BLOCK IN CONF. DATA, SKIP DCT-CREATION PRR 11.0 80-11-19 ENTRY SYSLDM * * EXTERNALS DEFINED IN SYSTEM CONTROL TABLE * EXTRN SCTANO APPLICATION NUMBER EXTRN SCTBLK NUMBER OF BLOCKS PER TASK EXTRN SCTBUG DEBUGGER ADDRESS EXTRN SCTCDT COMMON DEVICE TABLE ADDRESS EXTRN SCTDCT DATA COMMUNICATION EXTRN SCTDMI DM: INDEX BUFFER RECORD SIZE EXTRN SCTDMT DATA MANAGEMENT TASKS EXTRN SCTEFA END OF FREE AREA EXTRN SCTFWL FM: FILE WORK TABLE LENGTH EXTRN SCTFWT FM: FILE WORK TABLE ADDRESS EXTRN SCTMOX MONITOR EXTENT START ADDRESS TABLE EXTRN SCTMXS MONITOR EXTENT&SEGMENT TABLE EXTRN SCTNFT DM/FM: NUMBER OF FILES/TASK EXTRN SCTNOF DM/FM: NUMBER OF FILES EXTRN SCTNOP NUMBER OF PAGES EXTRN SCTNOS NUMBER OF SEGMENTS/TASK (BASIC ONLY) EXTRN SCTOPT SYSTEM OPTIONS EXTRN SCTPAG PAGE TABLE ADDRESS EXTRN SCTIPL PROGRAM LOADING DEVICE EXTRN SCTPSZ PAGE SIZE EXTRN SCTSFA START OF FREE AREA EXTRN SCTTCT TASK CONTROL TABLE EJECT * * EXTERNALS DEFINED IN MONTAB * EXTRN FREQUE FREE PAGES QUEUE ANCHOR EXTRN INTLT1 LOCAL CONNECTION EXTRN INTRT1 REMOTE CONNECTION EXTRN INTVU1 VIDEO CONNECTION EXTRN INTPL1 LWSI CONNECTION EXTRN INTPR1 RWSI CONNECTION =8 EXTRN INTAS1 ASYNCHRONOUS CONNECTION EXTRN INTSL1 SYNCHRONOUS CONNECTION * * MISCELLANOEUS EXTERNALS * EXTRN REL RELOCATION BASE IN SYSINI EXTRN SCLASS SPECIAL DEVICE CLASS TABLE EXTRN TCLASS TERMINAL DEVICE CLASS TABLE EXTRN SYSLOD START OF SYSLOD EXTRN STKCOM COMMON STACK AREA BASE EXTRN STKEND LOCAL STACK AREA BASE * * EXTERNAL SUBROUTINES * EXTRN ERROR ERROR HANDLING EXTRN MOVE MOVE AREAS IN MEMORY EXTRN MULT MULTIPLY EXTRN PSW STORE PROGRAM STATUS WORD EXTRN CMPADR COMPARE ADDRESSES EXTRN CONVRT CONVERT FROM ASCII TO BINARY EXTRN NXTBLK GET NEXT TASK DEF. BLOCK EXTRN NXTCOM GET NEXT COMMON DEFINITION BLOCK EXTRN GETNUM GET NUMBER EXTRN INBIMA INIT MMU ALLOCATION BIT MAP EXTRN PUSH SAVE REGISTER A1-A14 ON STACK EXTRN POB RESTORE REGISTER A1-A14 FROM STACK EXTRN GETAPP GET NEXT APPLICATION OF SPECIFIED TYPE EJECT * * TTAB DISPLACEMENTS * EXTRN TTB:AM MMU ALLOCATION BIT MAP EXTRN TTB:MT MMU TABLE EXTRN TTB:AP APPLICATION CONTROL BLOCK EXTRN TTB:CB CURRENT SEGMENT BASE POINTER EXTRN TTB:SP SEGMENT TABLE POINTER EXTRN TTB:SB SEGMENT BLOCK POINTER EXTRN TTB:ID TASK ID EXTRN TTB:ST STATUS EXTRN TTB:PP PENDING POINTER EXTRN TTB:PW PROGRAM STATUS WORD EXTRN TTB:SA DISPATCH ADDRESS EXTRN TTB:TD DEVICE TABLE LENGTH * * DWT PARAMETERS * EXTRN DWTCHP CHANNEL PARAMETER-1 EXTRN DWTST STATUS EXTRN DWTECB ECB ADDRESS EXTRN DWTOR ORDER EXTRN DWTADR ADDRESS BLOCK EXTRN DWTTAB TTAB ADDRESS EXTRN DWTWAT WAIT/ACTIVATE INDICATOR EXTRN DWTTQ TERMINAL QUEUE EXTRN DWTUEC USER ECB ADDRESS EXTRN DWTMEC MONITOR ECB ADDRESS EXTRN DWTCP2 CHANNEL PARAMETER-2 EXTRN DWTDEV DEVICE STATUS EXTRN DWTECH ECHO DEVICE EXTRN DWTSQ START OF QUEUE EJECT *************************************** * CONDITIONAL ASSEMBLY * *************************************** MMUPAG EQU 1 1 - MEMORY MANAGEMENT UNIT DSKPAG EQU 0 1 - DISC PAGING SWPBLK EQU 0 1 - SWAPPABLE WORK BLOCK HANDLING EDM EQU 0 1 - EXTENDED DATA MANAGEMENT X:A EQU 1 X:B EQU 1 X:C EQU 1 X:D EQU 1 X:E EQU 1 X:F EQU 1 X:G EQU 1 X:H EQU 1 X:I EQU 1 X:J EQU 1 X:K EQU 0 X:L EQU 1 X:M EQU 0 * SUML EQU 01 SUMR EQU 01 SALCUZ EQU 00 ASCU4Z EQU 00 FT80 EQU 00 PLCL EQU 00 PLCR EQU 00 VIDEO EQU 00 TEDVCL EQU 01 SPDVCL EQU 01 NOEXMB EQU X:K FM EQU 00 DC EQU 00 EJECT * * COMMON DISPLACEMENTS AND CONSTANTS * ACBLEN EQU 26 APPL.CONTROL BLOCK LENGTH =3 APLTAB EQU 12 ADDRESS TO APPL. CONTROL TABLE APPLNO EQU 18 APPLICATION NUMBER BUFSIZ EQU 14 TEMPORARY BUFFER SIZE CONLEN EQU 0 LENGTH OF CONFIGURATION DATA CONSTA EQU 2 START OF CONFIGURATION DATA DATEND EQU 34 END OF DDIV PROTOTYPE FSTADR EQU 20 1ST FREE ADDRESS WHEN ALLOCATING BUFFER FSTPAG EQU 22 1ST FREE PAGE (PHYSICAL) FYSPAG EQU 24 LAST PHYSICAL PAGE NUMBER LSTADR EQU 26 LAST ADDRESS WHEN BUILDING DATA PART MAPLEN EQU 30 LENGTH OF AREA TO MAP MMFROM EQU 36 2ND MMU TABLE WORK AREA MMTO EQU 38 1:ST MMU TABLE WORK AREA M:REL EQU 16 RELOCATION CONSTANT SYSBUF EQU 28 START OF TEMPORARY BUFFER SWBFSA EQU 4 SWB-FILE START ADDRESS (2 WORDS) SWBFSE EQU 8 SWB-FILE END ADDRESS (2 WORDS) TTAB EQU 32 WORK AREA FOR MMU TABLE COM01 EQU 40 COMMON SAVE AREA 1 COM02 EQU 42 COMMON SAVE AREA 2 COM03 EQU 44 COMMON SAVE AREA 3 TOTSGM EQU 46 TOTAL NUMBER OF SEGMENTS SWBFLG EQU 48 SWAPPPABLE WORK BLOCK FLAG COM04 EQU 50 COMMON SAVE AREA 4 DCBLK EQU 54 START OF DC CONF. DATA EJECT * * DISPLACEMENT IN LOCAL STACK AREA * TCLA EQU 0 ADDRESS TO TCLASS SCLA EQU 2 ADDRESS TO SCLASS CUTENT EQU 4 FIRST USER TASK ENTRY FWTSIZ EQU 6 FWT AREA SIZE IN WORDS APCTAB EQU 8 CURRENT APPL CONTROL BLOCK SFASAV EQU 10 SAVE START OF FREE AREA NBRTSK EQU 12 NUMBER OF TASKS IN CLASS TASKID EQU 14 TASK IDENTIFICATION FWTFLG EQU 16 FWT FLAG TCLSAV EQU 18 TASK CLASS TSKLEV EQU 20 TASK LEVEL INTTAB EQU 22 TEMP INTTERRUPT TABLE FWTSTA EQU 24 START OF FWT AREA LIMIT EQU 26 CURRENT END OF SYSTEM AREA NBRCOM EQU 28 NUMBER OF COMMON TDC:S CLASID EQU 30 CLASS ID CONTYP EQU 32 CONNECTION TYPE LCNBR EQU 34 LINE CONNECTION NUMBER CLANBR EQU 36 CLASS NUMBER MAXSGM EQU 38 MAXIMUM SEGMENT SIZE * WRK1 EQU 42 WORK AREA 1 WRK2 EQU 44 WORK AREA 2 WRK3 EQU 46 WORK AREA 3 WRK4 EQU 48 WORK AREA 4 BRDTAB EQU 50 BOARD CONF TABLE LCDSTA EQU 52 CONFIGURATION DATA POINTER NBRSDC EQU 54 NUMBER OF SPECIAL DEVICE CLASSES NBRTDC EQU 56 NUMBER OF TERMINAL DEVICE CLASSES APLNO EQU 58 NUMBR OF APPLICATIONS ECHTAB EQU 60 ECHO TABLE ADDRESS SGMCNT EQU 62 SEGMENT COUNTER NUMDTE EQU 64 NUMBER OF DTE:S DEFINED DTENAM EQU 66 SDTE IDENTIFICATION DTETYP EQU 68 TYPE OF CONNECTION NASTRT EQU 70 START OF NETW. ADDR. IN CONF. DATA NALNG EQU 72 LENGTH OF NETWORK ADDRESS DTENSA EQU 74 NO OF SUBADDRESSES DEFINED DTECOP EQU 76 NO OF COPIES OF CURRENT DTE BLOCK NSAADR EQU 78 START OF SUBADDRESSES(DC) APCSTA EQU APCTAB CURRENT APPLICATION CONTROL BLOCK SCBTAB EQU APCTAB CURRENT SEGMENT CONTROL BLOCK EXCTAB EQU SCBTAB CURRENT EXTENT CONTROL BLOCK NBRSWB EQU FWTSIZ NUMBER OF SWB RECORDS SWBBLK EQU FWTFLG START OF SWB CONF. DATA SWBNAM EQU FWTSTA ADDRESS TO SWB NAME SWBTBL EQU NBRTSK LENGTH OF S:BTAB TCTEND EQU NBRTSK LAST TCTAB ENTRY SWBCNT EQU TASKID NUMBER OF SWB:S EJECT * * DISPLACEMENT IN APPLICATION CONTROL TABLE * APLREL EQU 18 APPLICATION RELOCATION BASE =6 APLIOE EQU 0 APPLICATION RESTART ADDRESS APLLAC EQU 14 APPLICATION LOAD ADDRESS APLLAP EQU 12 LOGICAL PAGE ADDRESS APLLDA EQU 0 APPL. LOAD ADDRESS (PHYSICAL) APLMMC EQU 10 APPL MMU START ENTRY APLMMP EQU 8 SEGMENT START MMU ENTRY APLSEG EQU 4 PHYSICAL START OF 1ST SEGMENT APLNPE EQU 6 NUMBER OF PAGE ENTRIES IN MMU APLSWB EQU 2 SWB TABLE ADDRESS APLSTA EQU 16 APPL PROGRAM START ADDRESS APLTYP EQU 8 APPLICATION TYPE APLADA EQU 22 APPLICATION DISC ADDRESS (2 WORDS) =3 APLPSZ EQU 20 APPLICATION SEGMENT SIZE =3 EJECT * * CONSTANTS * S:BTAB EQU 40 DISPL. TO S:BTAB ADDRESS SWBLEN EQU 4 LENGTH OF SWB SWBSEC EQU 6 DISPL. TO SECTOR LENGTH UP:REC EQU 6 RECORD LENGTH IN INITIAL S:BTAB UPNAME EQU 4 PROTOTYPE NAME WBLEN EQU -4 LENGTH OF WORKBLOCK ******************************* * DISPLACEMENT IN CONFIGURATION DATA ******************************* * 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 7 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 * * DATA COMMUNICATION DEFINITION BLOCK * IDLIM EQU 4 ID DELIMITER OFFSET TYPOFS EQU 7 START OF TYPE RECORD NANSA EQU 2 NA-NSA RECORD QUALIFIER POS. NAOFS EQU 3 START OF NA NUMBER NSAOFS EQU 4 START OF NSA RECORD DTEFIX EQU 8 FIX PART OF DTE BLOCK EJECT **************** * SOP-HANDLING * **************** SOP EQU /2E DEVICE ADDRESS LMP1 EQU /400 SYSLOD RUNS LAMP 1 CODE LMP2 EQU /200 NOT USED LMP3 EQU /100 MEMORY OVERFLOW LMP4 EQU /80 ERROR IN CONFIGURATION DATA LMP5 EQU /40 NOT USED LMP6 EQU /20 NOT USED LMP7 EQU /10 NOT USED LMP8 EQU 8 NOT USED LMP9 EQU 4 NOT USED LMP10 EQU 2 NOT USED LMP11 EQU 1 NOT USED ***************************************************************** * CALL-FORMAT, PERFORMS: CFR A14,A13 * * DATA [REL-ADDRESS] * * * ***************************************************************** CALL FORM 16=/F697,16 EJECT * * MXSTAB DISPLACEMENTS * MXSBL EQU 6 SEGMENT BLOCK LENGTH MXNOX EQU 6 NUMBER OF EXTENTS MX:NOS EQU 8 NUMBER OF SEGMENT TABLES MX:EBL EQU 6 MONITOR EXTENT BLOCK LENGTH MX:LEV EQU /0031 MONITOR TASK LEVEL MX:LEN EQU 4 MONITOR EXTENT LENGTH MX:DA1 EQU 2 MONITOR DISC ADDRESS BITS 0-15 MX:DA2 EQU MX:DA1+2 MONITOR DISC ADDRESS BITS 16-31 MX:NOX EQU MX:DA2+2 NUMBER OF MONITOR EXTENTS MX:SBL EQU 6 MONITOR EXTENT BLOCK LENGTH MX:STA EQU 2 MONITOR EXTENT START ADDRESS EJECT * * *********** * * PAGTAB * * *********** * PAGQF EQU 0 QUEUE POINTER FORWARD PAGQB EQU 2 QUEUE POINTER BACKWARD PAGPA EQU 4 PAGE ADDRESS PAGSB EQU 6 SEGMENT BLOCK ADDRESS EJECT * * ************* * * SEGTAB * * ************* * SEGPB EQU 6 SEGMENT POINTER SEGSB EQU 6 PAGE BLOCK ADDRESS EJECT * * ******************* * * MISCELLANOUES * * ******************* * BUFLEN EQU -4 DEVIND EQU -2 DWTLEN EQU 6 TDCDD1 EQU 5 TDCDD2 EQU 6 TDCLCN EQU 10 DISP. TO LINE CON. NBR SLL0 EQU /3940 SLL A1,0 CONSTANT NBRDPS EQU 12 NUMBER OF DATA PAGES/TASK (BASIC ONLY) 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 * LDR A8,P INIT STACK POINTER LDKL A1,REL+2 RELOCATION ROUTINE ENTRY AD A1,STKCOM+M:REL RELOCATE ADDRESS CFR A8,A1 LDKL A11,SYSLOD START OF SYSLOD 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,STKEND+TCLA SAVE RELOCATED POINTER TO TCLASS NO:TCL LDKL A2,SCLASS GET ADDRESS TO SCLASS CALL CHPTRS RELOCATE POINTERS IN SCLASS ST A2,STKEND+SCLA SAVE RELOCATED TO SCLASS RF CLEAR 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 CLEAR EQU * * * CLEAR ALL WORDS IN SYSTEM AREA * LD A2,SCTSFA LDR A1,P GET PROGRAM COUNTER CLRSYS EQU * SUK A1,2 CMR A1 CWR A1,A2 RB(NE) CLRSYS LDKL A1,CONMON AD A1,STKCOM+M:REL ABR A1 EJECT ************************************************** * B:TCT - BUILD TASK CONTROL TABLE * ************************************************** * * REFERENCED IN: MONCON * * * ENTRY: * * EXIT: * * WORK REGISTERS: A1-A7,A11,A12 * * SUBROUTINES: * * TASK CONTROL TABLE LAYOUT * _________________________ * I LENGTH I * _________________________ * I MONITOR TASKS I * _________________________ * I USER TASKS I * __________________________ * EJECT B:TCT EQU * LD A12,SCTSFA GET START OF FREE AREA ST A12,SCTTCT STORE ADDRESS TO TCTAB ADKL A12,2 FIRST TTAB ADDRESS ENTRY IFF EDM=0 * * RESERVE ENTRIES IN TCTAB FOR MONITOR EXTENT * AND MONITOR SEGMENT TASKS * LD A2,SCTMXS GET ADDRESS TO MXSTAB RF(Z) BTCT20 NOT PRESENT! CALL MX:TDB GET FIRST MONITOR EXTENT TDB BTCT02 SUK A7,1 DECREMENT NUMBER OF EXTENTS RF(N) BTCT05 NO MORE! LDR* A4,A1 GET NUMBER OF TASK ID:S BTCT04 ADK A1,2 NEXT TASK ID SUK A4,1 DECREMENT NUMBER OF TASK ID:S RB(N) BTCT02 NO MORE! LDR* A2,A1 GET TASK ID CALL RESTCT RESERVE ENTRY IN TCTAB RB BTCT04 BTCT05 CALL MX:STD GET FIRST MONITOR SEGMENT TDB BTCT06 SUK A6,1 DECREMENT NUMBER OF MONITOR SEGMENT TABLES RF(N) BTCT20 NO MORE! LDR* A4,A1 GET NUMBER OF TASK ID:S BTCT08 ADK A1,2 NEXT TASK ID SUK A4,1 DECREMENT NUMBER OF TASK ID:S RB(N) BTCT06 NO MORE LDR* A2,A1 GET TASK ID CALL RESTCT RESERVE ENTRY TCTAB RB BTCT08 XIF EJECT * * RESERVE ENTRIES IN TCTAB FOR USER TASKS * BTCT20 EQU * ST A12,STKEND+CUTENT SAVE CURRENT USER TASK ENTRY LD A7,SYSLOD GET NUMBER OF APPLICATIONS LDKL A4,SYSLOD+2 FIRST APPLICATION CONTROL BLOCK BTCT30 SUK A7,1 MORE APPLICATIONS? RF(N) BTCT70 NO! LD A11,APLMMC,A4 GET START OF CONFIGURATION DATA AD A11,STKCOM+CONSTA RELOCATE POINTER ST A12,APLMMC,A4 STORE 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 EJECT BTCT35 EQU * * * COMPUTE NUMBER OF TASK IN EACH TASK CLASS * BTCT40 EQU * CALL GETTSK GET NUMBER OF TASKS BTCT50 EQU * ADKL A12,2 RESERV ANOTHER ENTRY IN TC:TAB 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 BTCT60 EQU * ADK A4,ACBLEN NEXT APPL. CONTROL BLOCK RB BTCT30 * * ENTRIES FOR ALL USER TASKS RESERVED IN TC:TAB * BTCT70 ST A12,SCTSFA UPDATE END OF FREE AREA SU A12,SCTTCT COMPUTE LENGTH ST* A12,SCTTCT STORE RTN A14 IFF EDM=0 EJECT ***************************************************** * * * RESTCT - RESERVE ENTRY IN TCTAB * * =============================== * * * * REFERENCED IN: B:TCT * * * * ENTRY: A2 - CURRENT TASK ID * * A12 - NEXT FREE ENTRY IN TCTAB * * * * EXIT: A12 - NEXT FREE ENTRY IN TCTAB * * * * WORK REGISTERS: A3 * * * * SUBROUTINES: * * * ***************************************************** RESTCT EQU * LDR A3,A12 GET END OF TCTAB REST10 SUK A3,2 NEXT ENTRY CW A3,SCTTCT ALL ENTRIES CHECKED? RF(NE) REST30 NOT YET STR A2,A12 STORE TASK ID IN TCTAB ADKL A12,2 NEXT FREEE ENTRY IN TCTAB REST20 RTN A14 RETURN REST30 CWR* A2,A3 CHECK IF SAME TASK ID RB(NE) REST10 NOT THE SAME RB REST20 COINCIDENCE: RETURN XIF IFF FM=0 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,STKEND+CUTENT 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,STKEND+FWTSIZ SAVE FWT AREA SIZE IN WORDS LD A2,SCTSFA GET START OF FREE AREA ST A2,SCTFWT STORE ADDRESS TO FIRST FWT ST A2,STKEND+FWTSTA SAVE START OF FWT AREA ST P,STKEND+LIMIT UPDATE END OF SYSTEM AREA FWT50 CW A2,STKEND+LIMIT MEMORY OVERFLOW? RF(NE) FWT60 NOT YET! LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR FWT60 CMR A2 CLEAR FWT AREA 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 SUK A2,2 ST A2,STKEND+INTTAB SAVE ADDRESS TO T.I.T. FWT70 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 ST P,STKEND+LIMIT UPDATE END OF SYSTEM AREA MON:10 EQU * SUK A7,2 MOORE TASKS? RF(Z) MON:20 NO CALL BLKGEN RB MON:10 MON:20 EQU * * * GENERATE EXTRA MONITOR BLOCKS * LDK A2,19 ADK A2,NOEXMB AD A2,SCTNOF AD A2,SCTNOF CALL BLKGEN * * GENERATE END BLOCK * STR A1,A12 ST A1,2,A12 ST A1,4,A12 * * CHECK IF BUFFER GREATER THAN 2 WORDS RESERVED FOR SYSLOD PART A * IF NOT - USE LAST MONITOR BLOCK AS BUFFER * LD A1,STKCOM+BUFSIZ GET BUFFER SIZE CWK A1,4 >4? RF(NL) MON:30 NOT LESS ANYWAY! LDK A1,4 BUFFER SIZE ST A1,STKCOM+BUFSIZ UPDATE MAX BUFFER SIZE ADKL A12,2 ST A12,STKCOM+SYSBUF UPDATE BUFFER ADDRESS MON:30 EQU * ADKL A12,6 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,A4 * * 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 LDK A4,3 NUMBER OF WORDS/BLOCK BLK:20 CW A12,STKEND+LIMIT MEMORY OVERFLOW? RF(NE) BLK:30 NOT YET! LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR BLK:30 ADKL A12,2 RESERVE ANOTHER WORD SUK A4,1 MORE WORDS WANTED? RB(NZ) BLK:20 YES ST A12,-6,A12 ST A1,-4,A12 ST A1,-2,A12 SUK A3,1 RB BLK:10 BLKEX EQU * RTN A14 IFF EDM=0 EJECT ******************************************************************* * * * B:MXTT - BUILD TTABS FOR MONITOR EXTENT TASKS * * ============================================= * * * * REFERENCED IN: SYSLDM * * * * ENTRY: * * * * EXIT: * * * * WORK REGISTERS: A4 * * * * SUBROUTINES: MX:TDB,MXTTAB * * * ******************************************************************* B:MXTT EQU * LD A2,SCTMXS GET ADDRESS TO MXSTAB RF(Z) BMX99 NOT PRESENT LDK A4,2 DISPLACEMENT TO FIRST EXTENT TASK ST* A4,SCTTCT IN TCTAB CALL MX:TDB FIND FIRST MONITOR EXTENT TDB LD A4,SCTMOX GET ADDRESS TO START-ADDRESS TABLE RF(NZ) BMX05 ALREADY DEFINED LD A4,SCTSFA START OF FREE AREA ST A4,SCTMOX ADDRESS TO START-ADDRESS TABLE LDK A4,2 INITIAL LENGTH OF START-ADDRESS TABLE ST* A4,SCTMOX STORE IN FIRST WORD SUK A4,2 RESET TASK ID COUNTER LDR A2,A1 GET POINTER TO TDB LDR A3,A7 GET NUMBER OF EXTENTS SUK A2,2 BMX01 SUK A3,1 MORE EXTENTS? RF(N) BMX03 NO ADK A2,2 ADDRESS NUMBER OF TASK ID:S LDR* A6,A2 GET NUMBER OF TASK ID:S ADR* A4,A2 ADD NUMBER OF TASK ID:S BMX02 SUK A6,1 MORE TASK ID:S? RB(N) BMX01 NO ADK A2,2 ADDRESS NEXT TASK ID RB BMX02 BMX03 SLL A4,2 INCLUDE LENGTH ADK A4,2 INCLUDE LENGTH OF START-ADDRESS TABLE AD A4,SCTSFA END OF START-ADDRESS TABLE ST A4,SCTSFA UPDATE START OF FREE AREA LDR A11,A4 GET TABLE END LDR A9,P GET CURRENT LOCATION CALL CMPADR COMPARE ADDRESSES RF(NG) BMXS05 OK LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR BMXS05 ST P,STKEND+LIMIT UPDATE END OF SYSTEM AREA BMX05 SUK A1,2 BMX10 SUK A7,1 DECREMENT NUMBER OF EXTENTS RF(N) BMX99 NO MORE LD A12,SCTSFA GET START OF FREE AREA ST A12,STKEND+EXCTAB SAVE ADDRESS TO CONTR. BLOCK ADKL A12,ACBLEN RESERVE AREA FOR CONTROL BLOCK ST A12,SCTSFA UPDATE START OF FREE AREA ADK A1,2 NUMBER OF TASK ID:S LDR* A4,A1 GET NUMBER OF TASK ID:S BMX20 SUK A4,1 DECREMENT NUMBER OF TASK ID:S RB(N) BMX10 NO MORE ADK A1,2 NEXT TASK ID CALL MXTTAB RB BMX20 BMX99 RTN A14 RETURN EJECT ******************************************************************** * * * MXTTAB - GENERATE TTAB FOR MONITOR EXTENT TASK * * ============================================== * * * * ENTRY: A1 -POINTER TO TASK ID IN MXSTAB * * A5 - POINTER TO MONITOR EXTENT BLOCK * * A12 - POINTER TO START OF FREE AREA * * * * EXIT: A1 - POINTER TO TASK ID IN MXSTAB * * A5 - POINTER TO MONITOR EXTENT BLOCK * * * * WORK REGISTER: A2 * * * * SUBROUTINES: IMXTT,STRMOX,INBIMA * * * ******************************************************************** EJECT MXTTAB EQU * MSR 4,A15 SAVE REGISTER A1-A4 ON STACK CALL BMXSTT BUILD MONITOR EXTENT TTAB CALL IMXTT INIT MMU TABLE LDR* A2,A1 GET TASK ID CALL STRMOX STORE IN MOXTAB LD A2,MX:STA,A5 GET START ADDRESS LD A3,STKEND+EXCTAB GET CURRENT EXTENT BLOCK =6 ST A2,APLSTA,A3 STORE START ADDRESS =6 CALL STRMOX STORE IN MOXTAB LDR* A2,A5 GET EXTENT ADDRESS ANKL A2,/3FF GET DISPLACEMENT SLL A2,2 MAKE IT 12 BITS ST A2,TTB:CB,A12 STORE CURRENT SEGMENT BASE ADDRESS ADK A2,12 5 WORDS FOR DEBUGGER =9 ST A2,TTB:SA+26,A12 STORE IN A13 SAVE-AREA LD A3,STKEND+EXCTAB GET CURRENT EXTENT CONTROL BLOCK SUK A2,2 =10 ST A2,APLLAC,A3 STORE LOGICAL ADDR. TO COMMON PART ST A2,APLREL,A3 STORE RELOCATION BASE =6 LDKL A2,TTB:MT DISPL. TO COMMON PART ST A2,APLMMC,A3 STORE IN EXTENT CONTROL BLOCK ST A3,TTB:AP,A12 STORE EXTENT CONTROL BLOCK ADDRESS LD A2,SCTOPT GET OPTION WORD ANK A2,/20 EMM? RF(Z) MXTT20 NO LD A2,MX:LEN,A5 GET EXTENT LENGTH ST A2,MAPLEN,A13 SAVE ST A12,TTAB,A13 SAVE TTAB ADDRESS CALL INBIMA INIT BIP MAP MXTT20 MLR 4,A15 RESTORE REGISTERS RTN A14 RETURN EJECT ********************************************* * * * STRMOX - STORE START ADDRRESS IN MOXTAB * * ======================================= * * * * REFERENCED IN: MXTTAB * * * * ENTRY: A2 - VALUE TO STORE * * * * EXIT: * * * * WORK REGISTERS: * * * * SUBROUTINES: * * * ********************************************* STRMOX EQU * LD* A3,SCTMOX GET CURRENT LENGTH AD A3,SCTMOX ADDRESS TO NEXT FREE ENTRY STR A2,A3 STORE START ADDRESS IM* SCTMOX INCREMENT LENGTH IM* SCTMOX TWICE RTN A14 RETURN EJECT **************************************************** * * * IMXTT - INIT MMU TABLE FOR MONITOR EXTENT TASK * * ============================================== * * * * REFERENCED IN: MXTTAB * * * * ENTRY: A1 - POINTER TO PHYSICAL ADDRESS * * A12 - TTAB ENTRY POINTER * * * * EXIT: * * * * WORK REGISTERS: A2,A3,A4,A9,A11 * * * * SUBROUTINES: CMPADR * * * **************************************************** EJECT IMXTT EQU * LDR A2,A12 GET TTAB ENTRY ADKL A2,TTB:MT GET START OF MMU TABLE LDR* A3,A5 GET PHYSICAL ADDRESS TO EXTENT LDR A4,A3 SAVE ANKL A3,/FC00 PHYSICAL PAGE ADDRESS ANKL A4,/3FF DISPLACEMENT SLL A4,2 MAKE IT 12 BITS LDKL A9,/1000 PHYSICAL PAGE SIZE SUR A9,A4 SAVE LD A11,MX:LEN,A5 GET EXTENT LENGTH CALL CMPADR ENOUGTH SPACE IN CURRENT PAGE? RF(G) IMX10 NO! XRR A11,A11 INDICATE SINGLE ENTRY RF IMX20 IMX10 SUR A11,A9 SUBTRACT REMAINING AREA IN CURRENT PAGE IMX20 STR A3,A2 STORE PAGE ADDRESS ADKL A3,/400 INCREMENT PAGE ADDRESS ADK A2,2 INCREMENT ENTRY POINTER ADKL A11,0 ONE ENTRY ENOUGTH? RF(Z) IMX99 YES! RF(NN) IMX30 <32KB SUKL A11,/1000 DECREMENT LENGTH RB IMX20 IMX30 STR A3,A2 STORE PAGE ADDRESS ADKL A3,/400 INCREMENT PAGE ADDRESS ADK A2,2 INCREMENT ENTRY POINTER SUKL A11,/1000 DECREMENT LENGTH RB(P) IMX30 IMX99 EQU * =6 LDR A4,A12 GET TTAB ENTRY =6 ADKL A4,TTB:MT+32 GET END OF MMU-TABLE =6 LDKL A3,/FC00 =6 IMX100 EQU * =6 CWR A4,A2 ENTRIES LEFT IN MMU-TABLE? =6 RF(E) IMX110 NO! =6 STR A3,A2 STORE PAGE ERROR IN MMU-ENTRY =6 ADK A2,2 NEXT MMU-ENTRY =6 RB IMX100 =6 IMX110 EQU * =6 RTN A14 =6 EJECT ******************************************************** * * * B:MSEG - BUILD MONITOR TASK SEGMENT TABLES & TTABS * * ================================================== * * * * REFERENCED IN: SYSLDM * * * * ENTRY: * * * * EXIT: * * * * WORK REGISTERS: A1-A12 * * * * SUBROUTINES: MX:MST,MX:STD,BMSTAB,CHKTAD,BMXSTT * * * ******************************************************** EJECT B:MSEG EQU * CALL MX:MST FIND FIRST MONITOR SEGMENT TABLE ST P,STKEND+LIMIT UPDATE END OF SYSTEM AREA LDR A4,A5 SAVE POINTER TO NUMBER OF SEGTABS LDR A8,A1 SAVE POINTER TO FIRST MONITOR SEGMENT TABLE CALL MX:STD FIND FIRST MONITOR SEGMENT TABLE TASK DEFINITION BLOCK BMSG10 SUK A6,1 DECREMENT NUMBER OF MONITOR SEGMENT TABLES RF(N) BMSG99 NO MORE! CM STKEND+SCBTAB CLEAR ADDRESS TO SEGMENT CONTROL BLOCK CM STKEND+MAXSGM CLEAR MAXIMUM SEGMENT SIZE ADK A4,2 INCREMENT POINTER TO NUMBER OF SEGMENTS CALL BMSTAB BUILD MONITOR SEGMENT TABLE LDR* A7,A1 GET NUMBER OF TASKS IN SEGTAB BMSG20 ADK A1,2 NEXT TASK ID SUK A7,1 DECREMENT NUMBER OF TASK ID:S RB(N) BMSG10 NO MORE! CALL CHKTAD CHECK IF TASK ALREADY DEFINED RF(NZ) BMSG30 TASK ALREADY DEFINED! CALL BMXSTT BUILD TTAB FOR MONITOR SEGMENT TASK LD A10,STKEND+SCBTAB GET SEGMENT CONTROL BLOCK RF(NZ) BMSG25 SEGMENT CONTROL BLOCK GENERATED LD A12,SCTSFA GET START OF FREE AREA LDR A10,A12 SAVE ADKL A12,ACBLEN RESERVE FOR SEGMENT CONTROL BLOCK ST A12,SCTSFA UPDATE START OF FREE AREA BMSG25 ST A10,TTB:AP,A12 STORE ADDRESS TO SEGMENT CONTROL BLOCK BMSG30 ST A5,TTB:SP,A12 STORE SEGMENT TABLE POINTER LD A10,TTB:AP,A12 GET ADDRESS TO SEGMENT CONTROL BLOCK LD A3,STKEND+MAXSGM GET MAXIMUM SEGMENT SIZE ADKL A3,/FFFF NUMBER OF 4K-MULTIPLES ANKL A3,/F000 ISOLATE NUMBER OF 4K-MULTIPLES LDKL A2,/F000 END OF LOGICAL MEMORY SUR A2,A3 COMPUTE LOGICAL PAGE ADDRESS LD A3,STKEND+MAXSGM GET MAXIMUM SEGMENT SIZE ANKL A3,/FFF EVEN 4K-MULTIPLE? RF(NZ) BMSG40 NO! ADKL A2,/1000 SAVE ONE MMU ENTRY BMSG40 ST A2,APLLAP,A10 STORE IN SEGMENT CONTROL TABLE SRL A2,12 MMU TABLE ENTRY LDK A3,16 NUMBER OF MMU ENTRIES SUR A3,A2 COMPUTE NUMBER OF PAGE ENTRIES ST A3,APLNPE,A10 STORE IN SEGMENT CONTROL TABLE SLL A3,1 MULTIPLY BY TWO NGR A3,A3 MAKE NEGATIVE DISPLACEMENT ADKL A3,TTB:CB DISPL TO END OF MMU TABLE ST A3,APLMMP,A10 STORE IN SEGMENT CONTROL TABLE LD A3,STKEND+MAXSGM GET MAXIMUM SEGMENT SIZE ADKL A3,/3FF COMPUTE NUMBER OF 1K-MULTIPLES ANKL A3,/FC00 ISOLATE NUMBER OF 1K-MULTIPLES LDR A11,A3 GET CURRENT SEGMENT SIZE LD A9,SCTPSZ GET MAX SEGMENT SIZE CALL CMPADR CURRENT SEGMENT GREATER? RB(L) BMSG20 NO ST A3,SCTPSZ UPDATE MAX SEGMENT SIZE RB BMSG20 BMSG99 RTN A14 RETURN EJECT ********************************************************** * * * BMSTAB - BUILD MONITOR SEGMENT TABLE * * ==================================== * * * * REFERENCED IN: B:MSEG * * * * ENTRY: A4 - POINTER TO NUMBER OF SEGMENTS * * A8 - POINTER TO SEGMENT CLUSTER IN MXSTAB * * * * EXIT: A5 - SEGMENT TABLE ADDRESS * * * * WORK REGISTERS: A2,A3,A9,A11 * * * * SUBROUTINES: CMPADR,ERROR * * * ********************************************************** EJECT BMSTAB EQU * STR A1,A15 SAVE REGISTER A1 ON STACK LD A5,SCTSFA GET START OF FREE AREA LD A2,SCTIPL GET PROGRAM LOAD DEVICE STR A2,A5 STORE IN SEGMENT TABLE ADK A5,2 NEXT ENTRY IN SEGMENT TABLE LDR* A9,A4 GET NUMBER OF SEGMENTS LDR A1,A9 SAVE STR A9,A5 STORE IN SEGMENT TABLE ADS A9,STKCOM+TOTSGM INCREMENT TOTAL NUMBER OF SEGMENTS ADK A5,2 SEGMENT TABLE ENTRY LDR A3,A5 SAVE * * BUILD SEGMENT BLOCK 0 * LDKL A2,/8400 STATUS FOR SEGMENT 0 STR A2,A3 STORE IN SEGMENT BLOCK 0 BMST20 ST A1,STKEND+SGMCNT SAVE NUMBER OF SEGMENTS ADK A3,8 NEXT SEGMENT BLOCK LD A9,STKEND+LIMIT GET END OF SYSTEM AREA LDR A11,A3 GET END OF SEGMENT BLOCKS CALL CMPADR COMPARE ADDRESSES RF(NG) BMST25 OK LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR BMST25 LDR* A2,A8 GET SEGMENT TYPE SRL A2,8 ISOLATE CCK A2,'RR' CORE RESIDENT SEGMENT? RF(E) BMST40 YES! LD A2,SCTOPT GET OPTION WORD ANK A2,2 DISC PAGING? RF(Z) BMST40 NO! * * DISC PAGING & DISC RESIDENT SEGMENT * LD A1,SCTMXS GET ADDRESS TO MXSTAB LD A2,MX:DA2,A1 GET DISC ADDRESS BITS 16-31 LD A1,MX:DA1,A1 GET DISC ADDRESS BITS 0-15 LD A10,2,A8 GET RELOCATION BASE ADR A2,A10 RELOCATE DISC ADDRESS RF(P) BMST30 NO CARRY! ANKL A2,/7FFF CLEAR BIT 0 ADK A1,1 ADD CARRY RF(P) BMST30 NOT OVERFLOW LDKL A1,LMP10 DISC ADDRESS OVERFLOW CALL ERROR BMST30 ORKL A1,/4000 INDICATE ASSEMBLER SEGMENT STR A1,A3 STORE SEGMENT DISC ADDRESS BITS 0-15 ST A2,2,A3 STORE SEGMENT DISC ADDRESS BITS 16-31 RF BMST50 * * DISC RESIDENT SEGMENT OR NO DISC PAGING * BMST40 LDKL A2,/8800 STATUS FOR DISC RESIDENT SEGMENT STR A2,A3 STORE IN SEGMENT BLOCK BMST50 LD A9,4,A8 GET SEGMENT LENGTH LD A11,STKEND+MAXSGM GET MAXIMUM SEGMENT LENGTH CALL CMPADR RF(NL) BMST55 CURRENT SEGMENT NOT GREATER ST A9,STKEND+MAXSGM UPDATE MAXIMUM SEGMENT LENGTH BMST55 ST A9,4,A3 STORE SEGMENT LENGTH IN SEGMENT BLOCK ADKL A8,6 INCREMENT POINTER IN MXSTAB LD A1,STKEND+SGMCNT GET NUMBER OF SEGMENTS SUK A1,1 RB(NZ) BMST20 MORE SEGMENTS ADK A3,8 END OF SEGMENT TABLE BMST60 ST A3,SCTSFA UPDATE START OF FREE AREA LDR* A1,A15 RESTORE REGISTER A1 RTN A14 EJECT ************************************************************ * * * CHKTAD - CHECK IF TASK ALREADY DEFINED * * ====================================== * * * * REFERENCED IN: B:MSEG * * * * ENTRY: A1 - POINTER TO TASK ID * * FOR MONITOR SEGMENT TASK * * * * EXIT: A12 - TTAB ADDRESS IF TASK ALREADY DEFINED * * A12 = 0 IF TASK NOT DEFINED * * * * WORK REGISTERS: A2,A3 * * * * SUBROUTINES: PSW * * * ************************************************************ EJECT CHKTAD EQU * LD* A2,SCTTCT GET LENGTH OF TCTAB AD A2,SCTTCT END OF TCTAB CHKT20 SUK A2,2 DECREMENT POINTER IN TCTAB CW A2,SCTTCT START OF TCTAB? RF(E) CHKT30 YES: ALL TASKS CHECKED! LDR* A3,A2 GET POINTER TO TTAB LD A3,TTB:ID,A3 GET TASK ID CWR* A3,A1 EQUAL TO CURRENT TASKS? RB(NE) CHKT20 NO LDR* A12,A2 GET TTAB POINTER RF CHKT50 CHKT30 LDKL A12,0 INDICATE TASK NOT FOUND CHKT50 CFI A14,PSW,A13 STORE PSW ON STACK RTN A14 EJECT ******************************************************************* * * * BMXSTT - BUILD MONITOR EXTENT & SEGMENT TTABS * * ============================================= * * * * REFERENCED IN: MXTTAB,B:MSEG * * * * ENTRY: * * * * EXIT: A12 - TTAB ADDRESS * * * * WORK REGISTERS: A2,A9,A10,A11 * * * * SUBROUTINES: CMPADR,ERROR * * * ******************************************************************* BMXSTT EQU * LD A12,SCTSFA GET START OF FREE AREA LDKL A10,TTB:TD+2 STANDARD TTAB LENGTH LD A2,SCTOPT GET OPTION WORD ANK A2,/21 EMM? XRK A2,/21 RF(NZ) BMXS20 SUKL A12,TTB:AM INCLUDE MMU ALLOCATION BIT MAP SUKL A10,TTB:AM INCLUDE LENGTH RF BMXS40 BMXS20 LD A2,SCTOPT GET OPTION WORD ANK A2,1 MMU OPTION? RF(Z) BMXS30 NO! SUKL A12,TTB:MT INCLUDE MMU TABLE IN TTAB SUKL A10,TTB:MT INCLUDE LENGTH RF BMXS40 BMXS30 LD A2,SCTOPT GET OPTION WORD ANK A2,2 DISC PAGING? RF(Z) BMXS40 SUKL A12,TTB:CB INCLUDE 3 WORDS FOR DISC PAGING SUKL A10,TTB:CB INCLUDE IN LENGTH BMXS40 AD A10,SCTSFA COMPUTE START OF FREE AREA LDR A9,A10 SAVE LD A11,STKEND+LIMIT GET END OF SYSTEM AREA CALL CMPADR MEMORY OVERFLOW? RF(NL) BMXS50 NO! LDKL A1,LMP3 CALL ERROR INDICATE MEMORY OVERFLOW BMXS50 ST A10,SCTSFA UPDATE START OF FREE AREA LD* A2,SCTTCT GET CURRENT LENGTH AD A2,SCTTCT COMPUTE NEXT FREE ENTRY STR A12,A2 STORE TTAB ADDRESS IM* SCTTCT INCREMENT CURRENT LENGTH IM* SCTTCT TWICE LDR* A2,A1 GET TASK ID ST A2,TTB:ID,A12 STORE IN TTAB LDKL A2,MX:LEV GET MONITOR TASK LEVEL ST A2,TTB:ST,A12 STORE IN TTAB SLL A2,10 ORKL A2,/00C1 PROGRAM STATUS ST A2,TTB:PW,A12 STORE PROGRAM STATUS WORD LD A2,STKEND+EXCTAB GET EXTENT CONTROL BLOCK ADDRESS ST A2,TTB:AP,A12 STORE IN TTAB LDK A2,2 ST A2,TTB:TD,A12 STORE DEVICE TABLE LENGTH RTN A14 RETURN EJECT ************************************************************** * MX:MEB - FIND FIRST MONITOR EXTENT BLOCK * * ======================================== * * * * REFERENCED IN: MX:MST * * * * ENTRY: SCTMXS - ADDRESS TO MONITOR EXTENT TABLE * * * * EXIT: A1 - POINTER TO FIRST MONITOR EXTENT BLOCK * * A5 - POINTER TO NUMBER OF SEGTABS * * A6 - NUMBER OF MONITOR SEGMENT TABLES * * A7 - NUMBER OF MONITOR EXTENTS * * * * WORK REGISTERS: A2 * * * * SUBROUTINES: * * * ************************************************************** EJECT MX:MEB EQU * LD A7,SCTMXS GET ADDRESS TO MXSTAB LDR A6,A7 SAVE RF(Z) MEB99 NOT PRESENT LD A2,MX:NOS,A7 GET NUMBER OF SEGTABS LDR A6,A2 SAVE LDR A1,A7 SAVE ADDRESS TO MXSTAB LD A7,MX:NOX,A7 GET NUMBER OF EXTENTS ADK A1,MX:NOS ADDRESS NUMBER OF SEGTABS LDR A5,A1 SAVE MEB10 ADK A1,2 ADDRESS NUMBER OF SEGMENTS SUK A2,1 MORE SEGTABS? RB(NN) MEB10 YES MEB99 RTN A14 RETURN EJECT ************************************************************** * * * MX:MST - GET FIRST MONITOR SEGMENT TABLE * * ======================================== * * * * REFERENCED IN: B:MSEG * * * * ENTRY: SCTMXS - ADDRESS TO MXSTAB * * * * EXIT: A1 - POINTER TO FIRST MONITOR SEGMENT TABLE * * A5 - POINTER TO NUMBER OF SEGTABS * * A6 - NUMBER OF MONITOR SEGMENT TABLES * * A7 - NUMBER OF MONITOR EXTENTS * * * * WORK REGISTERS: A2 * * * * SUBROUTINES: MX:MEB * * * ************************************************************** EJECT MX:MST EQU * CALL MX:MEB GET POINTER TO FIRST MONITOR EXTENT BLOCK LDR A2,A7 GET NUMBER OF MONITOR EXTENT BLOCKS MST10 SUK A2,1 DECREMENT NUMBER OF MONITOR EXTENT BLOCKS RF(N) MST99 NO MORE MONITOR EXTENTS ADK A1,MX:EBL ADDRESS NEXT MONITOR EXTENT BLOCK RB MST10 MST99 RTN A14 RETURN EJECT ************************************************************* * * * MX:TDB - GET FIRST MONITOR EXTENT TASK DEFINITION BLOCK * * ======================================================= * * * * REFERENCED IN: MX:STD * * * * ENTRY: SCTMXS - ADDRESS TO MXSTAB * * * * EXIT: A1 - POINTER TO FIRST MONITOR EXTENT TASK * * DEFINITION BLOCK * * A5 - POINTER TO FIRST MONITOR EXTENT BLOCK * * A6 - NUMBER OF MONITOR SEGMENT TABLES * * A7 - NUMBER OF MONITOR EXTENTS * * * * WORK REGISTERS: A2,A3 * * * * SUBROUTINES: MX:MST * * * ************************************************************* EJECT MX:TDB EQU * CALL MX:MST GET FIRST MONITOR SEGMENT TABLE LDR A2,A6 GET NUMBER OF SEGMENT TABLES TDB10 ADK A5,2 ADDRESS NUMBER OF SEGMENTS SUK A2,1 DECREMENT NUMBER OF SEGTABS RF(N) TDB99 NO MORE SEGTABS LDR* A3,A5 GET NUMBER OF SEGMENTS TDB20 SUK A3,1 DECREMENT NUMBER OF SEGMENTS RB(N) TDB10 NO MORE SEGMENTS ADK A1,MX:SBL INCREMENT SEGMENT BLOCK POINTER RB TDB20 TDB99 RTN A14 RETURN EJECT ************************************************************** * * * MS:STD - GET FIRST MONITOR SEGMENT TASK DEFINITION BLOCK * * ======================================================== * * * * REFERENCED IN: B:MXST * * * * ENTRY: * * * * EXIT: A1 - POINTER TO FIRST MONITOR SEGMENT TASK * * DEFINITION BLOCK * * A5 - POINTER TO FIRST MONITOR EXTENT BLOCK * * A6 - NUMBER OF MONITOR SEGMENT TABLES * * A7 - NUMBER OF MONITOR EXTENTS * * * * WORK REGISTERS: A2,A3 * * * * SUBROUTINES: MX:TDB * * * ************************************************************** EJECT MX:STD EQU * CALL MX:TDB GET FIRST MONITOR TASK DEF. BLOCK LDR A2,A7 GET NUMBER OF MONITOR EXTENTS STD10 SUK A2,1 DECREMENT NUMBER OF MONITOR EXTENTS RF(N) STD99 NO MORE EXTENTS LDR* A3,A1 GET NUMBER OF TASKS IN EXTENT STD20 ADK A1,2 ADDRESS TASK ID SUK A3,1 DECREMENT NUMBER OF TASKS RB(NN) STD20 MORE TASKS RB STD10 NEXT EXTENT STD99 RTN A14 RETURN XIF EJECT ****************************** * B:TT - BUILD TASK TABLES * ****************************** * * REFERENCED IN: SYSLDM * * ENTRY: * * EXIT: TC:TAB CONTAIN POINTERS TO ALL TASK TABLES * * WORK REGISERS: A1-A12 * * SUBROUTINES: CONVRT,GETTSK,TETTDC,GETCLN,GETSDC * * TASK TABLE LAYOUT * * ------------------------ * TTB:AM I MMU ALLOCATION I * I BIT MAP (4 WORDS) I * I______________________I * TTB:MT I MMU I * I TABLE I * I 16 I * I WORDS I * I______________________I * TTB:CB I CSB POINTER I * I______________________I * TTB:SP I SEGTAB POINTER I * I______________________I * TTB:SB I SEGM. BLOCK POINTER I * I----------------------I * TTB:AP I ACB 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 * CALL FSTAPL GET FIRST APPLICATION LD A12,SCTSFA GET START OF FREE AREA ST A12,STKEND+SFASAV SAVE ST P,STKEND+LIMIT UPDATE END OF SYSTEM AREA ST P,STKEND+WRK1 SAVE PROGRAM COUNTER ST A11,STKEND+LCDSTA SAVE CONFIGURATION DATA POINTER ST P,STKEND+WRK2 SAVE PROGRAM COUNTER * * GET NUMBER OF TASKS IN THIS CLASS * CALL GETTSK ST A1,STKEND+NBRTSK SAVE NUMBER OF TASKS * * 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,STKEND+TASKID SAVE TASK ID START VALUE * * CHECK IF CREDIT APPLICATION * LD A5,STKEND+APCSTA GET APPLICATION CONTROL BLOCK LD A5,APLTYP,A5 GET APPLICATION TYPE CWK A5,'CR' CREDIT APPLICATION? 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,STKEND+TCLSAV 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,STKEND+TSKLEV SAVE EJECT * * COMPUTE SIZE OF CONFIGURATION DEPENDENT PART OF TASK TABLE * LDKL A10,TTB:TD+4 STANDARD LENGTH LD A5,SCTOPT GET OPTION WORD ANK A5,/21 CHECK IF EMM AND MMU PAGING INCLUDED XRK A5,/21 BOTH INCLUDED? RF(NZ) BTT22 NO! SUKL A10,TTB:AM+2 INCLUDE BIT MAP IN LENGTH SUKL A12,TTB:AM RESERV SPACE FOR BIT MAP RF BTT30 BTT22 LD A5,SCTOPT SRC A5,1 MMU PAGING? RF(NN) BTT25 NO SUKL A10,TTB:MT+2 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+2 FOUR WORD EXTRA IF DISC PAGING SUKL A12,TTB:CB RESERV SPACE FOR EXTRA WORD BTT30 EQU * EJECT * * COMPUTE SIZE OF TERMINAL DEVICE CLASS DEPENDENT PART * OF TASK CONFIGURATION 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,STKEND+TCLA 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 CONFIGURATION 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,STKEND+SCLA 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 * IFF EDM=0 ADKL A10,14 7 EXTRA WORDS FOR EDM XIF ADK A6,2 INCLUDE LENGTH WORD LD A7,STKEND+CUTENT GET CURRENT ENTRY IN TC:TAB LD A8,STKEND+NBRTSK GET NUMBER OF TASKS IN THIS CLASS BTT60 EQU * RF(Z) BTT70 ST A9,STKEND+WRK3 SAVE A9 ST A11,STKEND+WRK4 SAVE A11 LDR A9,A10 GET TTAB LENGTH AD A9,STKEND+SFASAV COMPUTE END OF FREE AREA =2 ST A9,STKEND+SFASAV =2 LD A11,STKEND+LIMIT GET END OF SYSTEM AREA CALL CMPADR CHECK IF MEMORY OVERFLOW RF(NL) BTT61 NOT YET LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR BTT61 LD A9,STKEND+WRK3 RESTORE A9 LD A11,STKEND+WRK4 RESTORE A11 * * 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,STKEND+TSKLEV 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 IFF MMUPAG=0 CALL MMUINI INITIALIZE MMU TABLE XIF * * STORE TASK IDENTIFICATION IN TTAB * BTT62 LD A5,STKEND+TASKID GET TASK ID ST A5,TTB:ID,A12 STORE IN TTAB ADK A5,1 INCREMENT TASK ID ST A5,STKEND+TASKID SAVE TO NEXT TASK IN SAME CLASS LD A5,STKEND+APCSTA GET APPL. CONTROL BLOCK ST A5,TTB:AP,A12 STORE ADDRESS IN TTAB LD A5,APLTYP,A5 GET APPL. TYPE CWK A5,'CR' CREDIT? RF(NE) BTT65 NO * * STORE TASK CLASS TO MATCH IN TTAB * LD A5,STKEND+TCLSAV GET TCL START VALUE ST A5,TTB:PP,A12 SAVE IN TTAB ADK A5,1 INCREMENT TCL ST A5,STKEND+TCLSAV SAVE BTT65 EQU * STR A12,A7 SAVE TTAB ADDRESS IN TC:TAB ADK A7,2 NEXT ENTRY IN TC:TAB ST A7,STKEND+CUTENT 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 A12,STKEND+SFASAV BTT90 EQU * CALL NXTBLK GET NEXT BLOCK CCK A2,'TT' TASK DEFINITION BLOCK? RF(NE) BTT95 LD P,STKEND+WRK2 BTT95 EQU * CALL NXTAPL NEXT APPLICATION RF(Z) BTT98 LD P,STKEND+WRK1 BTT98 ST A12,SCTSFA SAVE START OF FREE AREA SU A7,SCTTCT COMPUTE LENGTH ST* A7,SCTTCT STORE RTN A14 RETURN IFF SWPBLK=0 EJECT B:SWBT EQU * CALL PUSH SAVE REGISTER A1-A14 LD A1,SCTOPT GET OPTION WORD ANK A1,8 SWB OPTION INCLUDED RF(Z) BSWT42 NO CM STKCOM+APPLNO RESET APPLICATION COUNTER ST P,STKEND+LIMIT SAVE LOCATION COUNTER BSWT05 LDKL A1,'CR' APPLICATION TYPE=CREDIT CALL GETAPP GET NEXT CREDIT APPLICATION RF(Z) BSWT42 NO MORE APPLICATIONS LDR A10,A1 GET ACB ADDRESS ST A10,STKEND+APCSTA SAVE LD A12,SCTSFA START OF FREE AREA * * 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,APLSWB,A10 CLEAR SWB POINTER LD P,STKEND+LIMIT PROCESS NEXT CREDIT APPLICATION =2 BSWT42 CALL POB RESTORE REGISTERS RTN A14 BSWT44 ADKL A11,1 NUMBER OF TYPES ST A11,STKEND+SWBBLK START OF CONF. DATA LDR A6,A11 CALL GETNUM GET 3 DIGITS LDR A5,A5 ZERO? RF(Z) SWBERR ILLEGAL NUMBER!!! ST A5,STKEND+NBRSWB SAVE NUMBER OF RECORDS ST A5,STKEND+WRK1 SAVE LD A8,STKCOM+SWBFLG GET ADDRESS TO $SWAPP RF(NZ) BSWT48 FILE CREATED SWBERR LDKL A1,LMP6 SWB ERROR! CALL ERROR BSWT48 ST A12,APLSWB,A10 SAVE ADDRESS TO ADDRESS TABLE CM STKCOM+SWBCNT 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,STKEND+APCSTA GET ADDRESS TO ACB LD* A1,APLMMC,A2 GET TTAB ADDRESS TL TTB:MT,A1 LOAD MMU REGISTERS LD A2,APLLAC,A2 GET P:MTAB 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,STKEND+SWBNAM SAVE SUK A2,2 ADDRESS TO LENGTH OF PROT. S:BTAB CALL GETCON GET LENGTH OF PROT. S:BTAB LDR A4,A1 SAVE * * CHECK IF ENOUGTH MEMORY IN FIRST PARTITION * XRR A2,A2 RESET COUNTER BSWT52 SUK A1,6 DECREMENT LENGTH RF(N) BSWT55 NO MORE SWB-BLOCKS ADK A2,1 INCR. BLOCK COUNTER RB BSWT52 BSWT55 SLL A2,3 MULTIPLY BY 8 LDR A9,A10 GET START OF BLOCKS ADR A9,A2 ADD LENGTH LD A11,STKEND+LIMIT GET CURRENT LIMIT CALL CMPADR MEMORY OVERFLOW? RF(NL) BSWT57 NO! LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR BSWT57 SUK A4,2 SKIP LENGTH WORD LDKL A9,0 RESET BLOCK COUNTER BSWT60 STR A10,A12 SAVE POINTER TO BLOCK ST A4,STKEND+SWBTBL SAVE LD A11,STKEND+SWBBLK START OF CONF. DATA LD A7,STKEND+NBRSWB NUMBER OF SWB RECORDS BSWT65 LD A2,STKEND+SWBNAM 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 * LD A3,STKEND+WRK1 GET NUMBER OF SWB TYPES SUK A3,1 DECREMENT ST A3,STKEND+WRK1 SAVE 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,STKCOM+SWBFSA+2 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,STKCOM+SWBFSA 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 STKCOM+SWBFSA INCREMENT SECTOR ADDRESS RF(O) BSWT88 RF BSWT90 BSWT88 IM STKCOM+SWBFSA+2 CM STKCOM+SWBFSA 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 STKCOM+SWBCNT INCREMENT SWP-BLOCK COUNTER LD A8,STKCOM+SWBFSA+2 CW A8,STKCOM+SWBFSE+2 RF(G) BSWT98 $SWAP-FILE TOO SMALL! RF(L) BSWT95 LD A8,STKCOM+SWBFSA CW A8,STKCOM+SWBFSE 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,STKEND+SWBNAM CURRENT RECORD IN PROT. S:BTAB ADK A2,UP:REC NEXT RECORD IN PROT. S:BTAB ST A2,STKEND+SWBNAM SAVE LD A4,STKEND+SWBTBL GET LENGTH OF PROT. S:BTAB SUK A4,UP:REC DECREMENT RB(P) BSWT60 MOORE TYPES LD A8,STKCOM+SWBCNT ANY BLOCKS GENERATED? RF(Z) BSWT98 NO! LD A8,STKEND+WRK1 ALL SWB TYPES MATCHED? RF(NP) BSWT99 YES! BSWT98 LDKL A1,LMP6 CALL ERROR SWB ERROR! BSWT99 ST A10,SCTSFA UPDATE START OF FREE AREA LD A10,STKEND+APCSTA GET CURRENT ACB ADDRESS ST* A9,APLSWB,A10 NUMBER OF SWB TYPES LD P,STKEND+LIMIT PROCESS NEXT CREDIT APPLICATION XIF IFF MMUPAG+DSKPAG=0 EJECT *************************************************** * * * B:STAB - BUILD SEGMENT TABLES * * ============================= * * * * REFERENCED IN: SYSLDM * * * * ENTRY: * * * * EXIT: * * * * WORK REGISTERS: A1-A14 (THEIR ORIGINAL * * CONTENTS ARE SAVED ON STACK * * AND RESTORED BEFORE EXIT) * * * * FUNCTIONAL DESCRIPTION: * * FOR BASIC ONE SEGMENT TABLE AREA/TASK IS * * RESERVED. THE FIFTH WORD IN EACH SEGMENT TABLE * * CONTAINS A POINTER TO THE FIFTH WORD IN NEXT * * EXCEPT THE LAST CONTAINS A PONTER TO THE FIFTH * * WORD IN THE NEXT SEGMENT TABLE. ALL OTHER LO- * * CATIONS CONTAIN ZERO. * * FOR COBOL AND CREDIT APPLICATIONS ONE SEGMENT * * TABLE PER APPLICATION IS GENERATED. STATUS, * * DISK ADDRESS AND LENGTH FOR EACH SEGMENT IS * * WRITTEN IN CORRESPONDING SEGBLK. THE SEGMENT * * TABLE ADDRESS IS STORED IN THE TTAB FOR EACH * * TASK IN THE APPLICATION. * * * *************************************************** EJECT B:STAB EQU * CALL PUSH SAVE A1-A14 ON STACK CALL FSTAPL GET FIRST APPLICATION LDR A9,P GET LIMIT FOR WRITE BST010 LD A10,STKEND+APCSTA SAVE POINTER TO CURRENT ACB CALL NXTAPL GET NEXT APPL. CONTROL BLOCK RF(NZ) BST020 NOT LAST YET LD* A2,SCTTCT GET LENGTH OF TCTAB AD A2,SCTTCT END OF TCTAB RF BST040 BST020 LD A2,APLMMC,A2 GET END OF TCTAB ENTRIES BST040 ST A2,STKEND+TCTEND SAVE LDR A8,P BST045 ADKL A8,BST400-BST045 RELOCATE BRANCH ADDRESS LD A5,APLMMP,A10 GET CURRENT APPLICATION TYPE CWK A5,'AS' ASSEMBLER APPLICATION? ABR(E) A8 YES; DON'T GENERATE SEGMENT TABLE! LD A8,APLMMC,A10 GET FIRST TCTAB ENTRY CWK A5,'BA' BASIC? RF(NE) BST050 NO SUR A2,A8 2*NUMBER OF TASKS SRL A2,1 NUMBER OF TASKS ST A2,STKEND+WRK1 SAVE ST A2,APLNPE,A10 SAVE LD A3,SCTNOS GET NUMBER OF SEGMENTS/TASK SLL A3,3 MULTIPLY BY 8 ADK A3,12 INCLUDE 6 FIRST WORDS LDR A4,A3 SAVE LENGTH CALL MULT COMPUTE LENGTH OF SEGMENT TABLE AREA RF BST090 EJECT BST050 LD A2,SCTOPT GET OPTION WORD ANK A2,1 MMU? RF(Z) BST070 NO LDR* A7,A8 GET TTAB ADDRESS TL TTB:MT,A7 LOAD MMU TABLE BST070 LD A2,APLLAC,A10 ADDRESS S:GTAB ADK A2,10 ADDRESS NUMBER OF SEGMENTS CALL GETCON GET NUMBER OF SEGMENTS LDR A6,A1 SAVE LDR A3,A1 SAVE SLL A3,3 MULTIPLY BY 8 ADK A3,12 INCLUDE 6 FIRST WORDS BST090 LD A12,SCTSFA GET START OF FREE AREA LDR A2,A11 SAVE CONF. DATA POINTER LDR A11,A12 SAVE ADR A11,A3 END OF SEGMENT TABLE AREA CALL CMPADR MEMORY OVERFLOW? RF(NG) BST100 NO LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR BST100 ST A11,SCTSFA INDICATE START OF FREE AREA LDR A11,A2 RESTORE CONF. DATA POINTER CWK A5,'BA' BASIC? RF(NE) BST200 NO LD A2,STKEND+WRK1 GET NUMBER OF TASKS LD A3,SCTNOS GET NUMBER OF SEGMENTS/TASK ADK A3,NBRDPS ADD NUMBER OF DATA PAGES/TASK CALL MULT MULTIPLY LDR A2,A3 GET MAX NUMBER OF SEGMENTS ADS A2,STKCOM+TOTSGM UPDATE TOTAL NUMBER OF SEGMENTS ST A12,APLSEG,A10 STORE ADDRESS TO SEGMENT TABLE POOL EJECT * * CLEAR SEGMENT TABLE AREA * LD A2,SCTSFA GET END OF SEGMENT TABLE AREA BST110 SUK A2,2 DECREMENT POINTER CMR A2 CLEAR CWR A2,A12 START OF SEGMENT TABLE AREA? RB(NE) BST110 NOT YET BST120 ADR A2,A4 ADD SEGMENT TABLE LENGTH CW A2,SCTSFA END OF SEGMENT TABLE AREA? RF(E) BST400 YES ADK A2,8 ADDRESS FIFTH WORD IN SEGMENT TABLE ST A2,8,A12 STORE IN PRECEDING SEGMENT TABLE ADR A12,A4 START OF NEXT SEGMENT TABLE LDR A2,A12 SAVE RB BST120 BST200 ST A6,2,A12 STORE NUMBER OF SEGMENTS LDR A3,A6 GET NUMBER OF SEGMENTS ADS A3,STKCOM+TOTSGM UPDATE TOTAL NUMBER OF SEGMENTS LD A3,SCTIPL GET FILE-CODE FOR LOAD DEVICE STR A3,A12 STORE ADKL A12,4 ADDRESS SEGMENT BLOCK 0 LDR A4,A12 SAVE BST210 LDKL A2,/8400 STATUS FOR SEGMENT 0 STR A2,A12 STORE IN SEGBLK 0 LD A2,APLLAC,A10 GET START OF S:GTAB CALL GETCON GET ADDRESS TO P:MTAB LDR A2,A1 SAVE ADK A2,6 ADDRESS TO P:BAS CALL GETCON GET P:BAS ST A1,2,A12 STORE IN SEGBLK 0 LD A2,APLLAC,A10 GET START OF S:GTAB ADK A2,10 ADDRESS NUMBER OF SEGMENTS BST220 ADKL A12,8 NEXT SEGMENT BLOCK SUK A6,1 ANY MORE SEGMENTS? RF(N) BST300 NO LDK A7,0 INIT STATUS BYTE ADK A2,2 ADDRESS FIRST ENTRY IN SEGMENT BLOCK CALL GETCON GET SEGMENT TYPE/DISC ADDRESS LDR A3,A1 SAVE ANK A3,/FF ISOLATE DISC ADDRESS SRL A1,8 ISOLATE SEGMENT TYPE CCK A1,'RR' CORE RESIDENT SEGMENT? RF(E) BST230 YES LD A1,SCTOPT GET OPTION WORD ANK A1,2 DISC PAGING? RF(NZ) BST240 YES XRR A3,A3 CLEAR DISC ADDRESS LDKL A7,/8800 INDICATE CORE RESIDENT AND LOADED ADK A2,2 ADDRESS SEGMENT DISC ADDRESS BIT 8-23 RF BST270 BST230 LDKL A7,/8800 INDICATE CORE RESIDENT AND LOADED BST240 ADK A2,2 DISC ADDRESS BIT 8-23 CALL GETCON GET SEGMENT DISC ADDRESS AD A1,APLADA+2,A10 RELOCATE PART 2 OF D. A. RF(O) BST250 CARRY RF BST260 BST250 ADK A3,1 INCR. PART 1 OF D. A. ANKL A1,/7FFF RESET OVERFLOW BIT (BIT 0) BST260 AD A3,APLADA,A10 RELOCATE PART 1 OF D. A. CWK A3,255 OVERFLOW IN PART 1 OF D. A. ? RF(NG) BST270 NO! LDKL A1,LMP10 INDICATE DEVICE ERROR CALL ERROR BST270 ORR A7,A3 MERGE STATUS AND DISC ADDRESS STR A7,A12 STORE ST A1,2,A12 STORE DISC ADDRESS BIT 8-23 ADK A2,2 ADDRESS SEGMENT LENGTH CALL GETCON GET SEGMENT LENGTH ST A1,4,A12 STORE IN SEGTAB CM 6,A12 CLEAR PAGEBLOCK POINTER RB BST220 BST300 CW A8,STKEND+TCTEND LAST TCTAB ENTRY? RF(E) BST400 YES LDR* A2,A8 GET TTAB ADDRESS ST A4,TTB:SP,A2 STORE SEGMENT TABLE POINTER ADKL A8,2 INCREMENT POINTER IN TCTAB RB BST300 BST400 LD A1,STKEND+APLNO GET NUMBER OF APPLICATIONS RF(Z) BST410 NO MORE APPLICATIONS ABR A9 NEXT APPLICATION BST410 EQU * CALL POB RESTORE REGISTERS RTN A14 RETURN XIF IFF SPDVCL+TEDVCL=0 EJECT ************************************************************************ * B:DWTS - BUILD DWT:S FOR SPECIAL DEVICES AND CONNECT TO TASK TABLES ************************************************************************ * * REFERENCED IN: MONCON * * ENTRY: SCTSFA - START OF FREE ARE (X) * CONSTA - START OF CONFIGURATION DATA * SCTEFA - END OF FREE AREA * * EXIT: * * WORK REGISTERS: A1-A12 * * SUBROUTINES: GETTSK,GETTDC,GETSDC,GETCLN,NXTBLK,ERROR * EJECT B:DWTS EQU * * * GET START OF CONFIGURATION FILE * LD A12,SCTSFA START OF FREE AREA * * CHECK IF FIRST BLOCK IS A TASK DEFINITION BLOCK * CALL FSTAPL GET FIRST APPLICATION ST P,STKEND+LIMIT UPDATE END OF SYSTEM AREA ST P,STKEND+ECHTAB START OF ECHO TABLE * * GET ADDRESS TO TC:TAB * DWTS05 LD A7,APLMMC,A2 GET FIRST TCTAB ENTRY SUK A7,2 EJECT DWTS10 EQU * * * GET NUMBER OF TASKS IN THIS TASK CLASS * CALL GETTSK DWTS20 EQU * ST A1,STKEND+NBRTSK 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 DEVICE 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,STKEND+TCLA 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,STKEND+NBRSDC SAVE * * GET SPECIAL DEVICE CLASS NUMBER * CALL GETCLN * * GET CORRESPONDING SPECIAL DEVICE CLASS IN SCLASS * ADR A1,A1 LD A6,STKEND+SCLA 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 CHKMOV 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 CONFIGURATION 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,STKEND+NBRSDC SUK A1,1 RB DWTS50 DWTS90 EQU * * * CHECK IF MOORE TASKS WITH THE SAME CONFIGURATION * LD A1,STKEND+NBRTSK SUK A1,1 RB(P) DWTS20 * * CHECK IF MOORE TASK DEFINITION BLOCKS * CALL NXTBLK CCK A2,'TT' TASK DEFINITION BLOCK? RB(E) DWTS10 YES CALL NXTAPL GET NEXT APPLICATION RB(P) DWTS05 PROCESS NEXT APPLICATION ST A12,SCTSFA * * CLEAR WORK AREA TO BE USED FOR ECHO DEVICE * AND TEMPORARY INTERRUPT TABLES * LDR A1,P GET LOCATION COUNTER =4 DWTS95 SUK A1,2 DECREMENT MEMORY ADDRESS =4 CMR A1 CLEAR MEMORY AREA =4 CW A1,SCTSFA ALL WORDS CLEARED? =4 RB(NE) DWTS95 NO! =4 RTN A14 RETURN XIF IFF TEDVCL=0 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 * CM STKEND+FWTFLG CLEAR FWT FLAG LD A1,SCTFWT START OF FWT AREA RF(NZ) BDWT15 FWT AREA RESERVED LD A1,STKEND+LIMIT ST A1,STKEND+INTTAB START OF T.I.T. IF NO FWT AREA IM STKEND+FWTFLG INCREMENT BDWT15 EQU * EJECT * * INIT CONFIGURATION DATA POINTER * CALL FSTAPL GET FIRST APPLICATION LD A12,SCTSFA GET START OF FREE AREA * * INIT TC:TAB ENTRY POINTER TO POINT AT FIRST USER TASK ENTRY * LD A5,APLMMC,A2 GET FIRST USER TASK ENTRY ST A5,STKEND+CUTENT 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,STKEND+NBRTSK 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,STKEND+NBRTDC SAVE NUMBER OF TERMINAL DEVICESS LD* A10,STKEND+CUTENT 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,STKEND+CLANBR SAVE BINARY VALUE * * FIND CORRESPONDING TERMINAL DEVICE CLASS IN TCLASS * LD A2,STKEND+CLANBR GET BINARY VALUE OF CLASS ID ADR A2,A2 2*ID LD A7,STKEND+TCLA POINTER TO TCLASS ADR A7,A2 GET ENTRY LDR* A7,A7 GET POINTER TO CLASS * * GET LINE CONNECTION NUMBER FOR THIS TERMINAL DEVICE CLASS * IN THIS TASK * CALL GETLCN GET LINE CONNECTION NUMBER LDR A6,A1 SAVE BINARY VALUE LC A4,TDC+6,A9 GET LINE CONNECTION TYPE CCK A4,'AA' ASCU4Z CONNECTION? RF(NE) BDWT58 NO! LDR* A8,A7 YES! GET LENGTH OF THIS CLASS SUKL A8,2 EXCLUSIVE LENGTH WORD CWK A8,4 ONE DEVICE? RF(NE) BDWT57 NO! LD A8,4,A7 GET ADDRESS TO PROT.DWT LD A4,DWTTAB,A8 GET DEVICE CWK A4,/C459 /C459 ? RF(E) BDWT58 YES! BDWT57 EQU * ADK A1,1 INCREMENT LINE CONNECTION NUMBER BDWT58 EQU * ADK A1,1 INCREMENT LINE CONNECTION NUMBER CALL BINASC CONVERT INCREMENTED VALUE TO ASCII SC A1,TDC+5,A9 STORE ASCII DIGIT =2 SRL A1,8 MOVE LEFT ASCII DIGIT =2 SC A1,TDC+4,A9 STORE ASCII DIGIT =2 SC A5,TDC+3,A9 STORE ASCII DIGIT DIGIT =2 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,STKEND+NBRTDC GET NUMBER OF TERMINAL DEVICE CLASSES SUK A1,1 ANY MOORE IN THIS TASK CLASS? RF(Z) BDW100 NO ST A1,STKEND+NBRTDC SAVE REMAINING NUMBER ADKL A9,TDC+TLC NEXT TDC RECORD RB BDWT55 BDW100 EQU * CALL ECHO INIT ECHO POINTERS LD A1,STKEND+CUTENT GET CURRENT ENTRY IN TC:TAB ADK A1,2 INCREMENT ENTRY POINTER ST A1,STKEND+CUTENT SAVE LD A1,STKEND+NBRTSK GET NUMBER OF TASKS IN THIS CLASS SUK A1,1 ANY MOORE TASKS LEFT RB(P) BDWT50 YES * CHECK IF MOORE TASK DEFINITION BLOCKS * CALL NXTBLK SKIP TO NEXT BLOCK CCK A2,'TT' TASK DEFINITION BLOCK? RB(E) BDWT40 YES EJECT CALL NXTAPL GET NEXT APPLICATION RB(P) BDWT40 ST A12,SCTSFA UPDATE START OF FREE AREA RTN A14 RETURN XIF EJECT **************************************** * B:CDT - BUILD COMMON DEVICE TABLE * **************************************** * * REFERENCED IN: SYSLDM * * ENTRY: SCTSFA - START OF FREE AREA * CONSTA - START OF CONFIGURATION 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 A12,SCTSFA START OF FREE AREA LDK A7,0 RESET LENGTH CALL FSTAPL GET FIRST APPLICATION * * 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,STKEND+TCLA 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,STKEND+SCLA 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 * CALL NXTAPL GET NEXT APPLICATION RB(P) CDG:10 MORE APPLICATIONS? CALL FSTAPL GET FIRST APPLICATION B:CT35 CALL NXTBLK GET NEXT BLOCK CCK A2,'TT' TASK DEFINITION BLOCK? RB(E) B:CT35 YES 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:12 NO! LD A6,STKEND+SCLA 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:12 EQU * ADK A7,2 STR A7,A12 ST A12,SCTCDT ADR A12,A7 ST A11,STKEND+WRK1 SAVE A11 LDR A11,A12 GET END OF CDTAB LD A9,STKEND+LIMIT GET END OF SYSTEM AREA CALL CMPADR CHECK IF MEMORY OVERFLOW RF(NG) CDG:13 OK LDKL A1,LMP3 INDICATE MEMORY OVERFLOW CALL ERROR CDG:13 LD A11,STKEND+WRK1 RESTORE A11 EJECT * * INIT POINTER TO START OF FREE AREA AND TO CDTAB * LD A10,SCTCDT FIRST ENTRY IN SCTCDT CDG:15 LCR A2,A11 GET FIRST CHARACTER CDG:16 CCK A2,'TT' TASK DEFINITION BLOCK/ RF(NE) CDG:17 NO! CALL NXTBLK GET NEXT BLCK RB CDG:16 CDG:17 CCK A2,'CC' COMMON DEF. BLOCK? RF(E) CDG:19 YES! SUR A8,A8 INDICATE NO COMMON WORK BLOCKS CDG:18 RF(N) CDG:EX CDTAB COMPLETE! CALL NXTAPL GET NEXT APPLICATION RB(P) CDG:15 MORE APPLICATIONS RF CDGEX NO MORE APPLICATIONS CDG:19 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,STKEND+NBRCOM SAVE CALL GETCLN GET CLASS IDENT NUMBER ST A1,STKEND+CLASID SAVE CALL GETLCN GET LINE CONNECTION NUMBER LDR A6,A1 SAVE LD A2,STKEND+CLASID GET CLASS IDENT NUMBER ADR A2,A2 CONVERT TO DISPLACEMENT LD A7,STKEND+TCLA 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,STKEND+NBRCOM GET NUMBER OF C.T.C. SUK A1,1 DECREMENT COUNTER RB B:CT40 B:CT50 CALL ECHO EJECT * * GET NUMBER OF SPECIAL DEVICE CLASSES * CALL GETSDC ADKL A9,SDCFST-CDBNC LDR A8,A1 CDG:20 EQU * RB(NP) CDG:18 * * GET SPECIAL DEVICE CLASS NUMBER * CALL GETCLN * * GET CORRESPONDING DEVICE CLASS IN SCLASS * ADR A1,A1 T LD A6,STKEND+SCLA 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 CHKMOV 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,4,A10 STORE DWT-ADDRESS LD A1,-2,A5 GET FILE CODE ST A1,2,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 * 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,STKEND+SCLA 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 * ST A12,SCTSFA UPDATE START OF FREE AREA RTN A14 RETURN =6 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,STKEND+LCNBR 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,STKEND+LCNBR GET LINE CONNECTION NUMBER * * CHECK CONNECTION TYPE * LC A4,TDC+6,A9 GET LINE CONNECTION TYPE CCK A4,'SS' SALCUZ CONNECTION? RF(NE) DWT10 NO! CALL I:CHSZ INIT CHANNEL PARAMETERS SALCUZ RF DWT31 DWT10 CCK A4,'AA' ASCU4Z CONNECTION? RF(NE) DWT07 NO! CALL I:CHAZ INIT CHANEL PARAMETERS ASCU4Z RF DWT31 DWT07 CCK A4,'VV' VCCU1/4 CONNECTION? RF(NE) DWT11 CALL I:CHVC INIT CHANNEL PARAMETERS VCCU1/4 RF DWT31 DWT11 CCK A4,'PP' PLC CONNECTION? RF(NE) DWT12 NO! CALL I:CHPC INIT CHANNEL PARAMETERS LWSI RF DWT31 DWT12 CCK A4,'LL' LT CONNECTION? RF(NE) DWT08 NO! CALL I:CHLT INIT CHANNEL PARAMETERS LT RF DWT31 DWT08 CCK A4,'RR' RT CONNECTION? RF(NE) DWT09 NO! =8 CALL I:CHRT INIT CHANNEL PARAMETERS RT =8 RF DWT31 =8 DWT09 CCK A4,'QQ' RWSI CONNECTION? =8 RF(E) DWT06 YES! =8 LDKL A1,LMP4 INDICATE FORMAT ERROR CALL ERROR DWT06 CALL I:CHRI INIT CHANNEL PARAMETERS RWSI =8 DWT31 EQU * ST A3,STKEND+CONTYP SAVE ST A5,STKEND+WRK3 SAVE ST A6,STKEND+WRK4 SAVE * * CHECK IF DWT ALREADY GENERATED ON THIS LINE * LD A4,STKEND+INTTAB GET START OF T.I.T. LDR* A5,A4 GET NUMBER OF BLOCKS SUK A4,2 LDR A5,A5 DWT13 EQU * RF(Z) DWT32 LD A3,STKEND+CONTYP GET LINE AND CONNECTION TYPE CW A3,-4,A4 EQUAL? RF(Z) DWT15 YES! DWT14 EQU * LDR* A4,A4 GET NEXT BLOCK =7 SUK A5,1 DECREMENT NUMBER OF BLOCKS RB DWT13 DWT15 EQU * LD A2,-2,A4 GET RUN-TIME DWT-ADDRESS LD A6,DWTCP2,A2 GET CHANNEL PARAMETER-2 ANK A6,/003F GET DEVICE ADDRESS LD A3,STKEND+WRK3 GET CHANNEL PARAMETER-2 ANK A3,/003F GET DEVICE ADDRESS SUR A3,A6 EQUAL? RB(NE) DWT14 NO! LD A6,DWTST,A2 GET DEVICE STATUS ANK A6,/00C0 GET BITS 8 AND 9 LD A3,DWTST,A1 GET DEVICE STATUS ANK A3,/00C0 GET BITS 8 AND 9 SUR A3,A6 EQUAL? RB(NE) DWT14 LD A6,DWTTAB,A2 GET DEVICE TYPE ANKL A6,/8000 ISOLATE ECHO BIT LD A3,DWTTAB,A1 GET DEVICE TYPE ANKL A3,/8000 ISOLATE ECHO BIT SUR A3,A6 EQUAL? RB(NE) DWT14 NO! CALL DWT50 LDKL A1,DWT70 AD A1,STKCOM+M:REL ABR A1 DWT32 EQU * LDR A5,A12 GET RUN TIME DWT-ADDRESS CALL B:TTAB BUILD ONE BLOCK IN T.I.T. * * COPY DEVICE TYPE DWT * LDR A2,A12 TO-ADDRESS LD A3,DWTOR,A1 LENGTH ADR A12,A3 NEXT FREE ENTRY CALL CHKMOV EJECT * * A1 - ADDRESS TO PROTOTYPE DWT * A2 - ADDRESS TO REAL DWT * LD A6,STKEND+WRK4 LD A5,STKEND+WRK3 STR A6,A2 STORE CHANNEL PARAMETERS -1 ST A5,DWTCP2,A2 STORE CHANNEL PARAMETERS -2 * * CHECK IF INPUT DEVICE * LD A3,2,A1 GET DWT STATUS ANK A3,/0040 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,STKCOM+M:REL LD* A3,STKEND+ECHTAB 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,STKEND+ECHTAB 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,STKEND+ECHTAB 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 * LD A3,DWTDEV,A1 GET DEVICE STATUS OF TYPE DWT ANK A3,/FF GET EIGTH RIGHTMOST BITS RF(Z) DWT60 NOT DOUBLE KEYBOARD LDR A5,A2 GET REAL DWT-ADDRESS ADK A5,1 ADD ONE CALL B:TTAB BUILD ONE BLOCK IN T.I.T. SUK A5,1 LDR A2,A5 GET REAL DWT-ADDRESS RF DWT60 EJECT DWT45 CALL DWT50 RF DWT60 DWT50 EQU * * * OUTPUT DEVICE* * IF BIT 0 IN SIXTH WORD IN DWT IS SET * 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,STKEND+ECHTAB GET LENGTH OF ECHO DEVICE TABLE RF(NZ) DWT55 ALREADY INITIALIZED! ADK A3,2 INCLUDE LENGTH DWT55 LDR A4,A3 SAVE LENGTH AD A4,STKEND+ECHTAB 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,STKEND+ECHTAB 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 ANKL A3,/FFFE MAKE SURE OF EVEN LENGTH 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,STKCOM+BUFSIZ RF(NG) DWT65 ST A3,STKCOM+BUFSIZ ST A12,STKCOM+SYSBUF 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,DWT05 AD A1,STKCOM+M:REL 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,STKEND+ECHTAB GET LENGTH OF ECHO DEVICE TABLE RF(Z) DWT160 NO ECHO DEVICES! AD A3,STKEND+ECHTAB COMPUTE END OF ECHO DEVICE TABLE LD A1,STKEND+ECHTAB GET START OF ECHO DEVICE TABLE ADK A1,2 BYPASS LENGTH DWT90 LD A2,STKEND+ECHTAB 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* STKEND+ECHTAB CLEAR LENGTH DWT160 RTN A14 RETURN =6 IFF TEDVCL=0 EJECT ********************************************** * B:ITAB - BUILD REAL-TIME INTERRUPT TABLE * ********************************************** * * REFERENCED IN: DWTGEN * * ENTRY: SCTSFA - START OF FREE AREA * * EXIT: REAL TIME INTERRUPT TABLES FOR * LT,RT,PLC,VCCU1/4,SALCUZ AND ASCU4Z * * SUBROUTINES * EJECT B:ITAB EQU * BUILD REAL-TIME INTERRUPT TABLES LD A1,STKEND+FWTFLG T.I.T. IN FREE AREA? =7 RF(P) B:ITLT YES? =7 ST P,STKEND+LIMIT UPDATE END OF SYSTEM AREA =7 LDR A1,P =7 BIT05 EQU * =7 SUK A1,2 DECREMENT MEMORY ADDRESS =7 CMR A1 CLEAR MEMORY AREA =7 CW A1,SCTSFA ALL WORDS CLEARED? =7 RB(NE) BIT05 NO! =7 * * BUILD REAL-TIME INTERRUPT TABLES FOR LT * XIF B:ITLT EQU * IFF SUML=0 LDKL A8,0 CONNECTION TYPE = LT LDKL A9,7 1:ST BOARD LDK A1,16 MAX.LENGTH OF BOARD CONF. TABLE ST A1,STKEND+WRK4 SAVE CM STKEND+WRK1 CLEAR CM STKEND+WRK2 CLEAR CM STKEND+WRK3 CLEAR BIT10 EQU * CALL B:BTAB CALL B:LTAB LD A1,STKEND+WRK2 GET INDEX IN MONTAB LD A2,STKEND+WRK3 ANY LINES? RF(Z) BIT15 NO! CM STKEND+WRK3 CLEAR LD A2,STKEND+BRDTAB GET ADDRESS TO BOARD CONF. TABLE ST A2,INTLT1,A1 SAVE BIT15 EQU * ADK A1,2 ST A1,STKEND+WRK2 STORE NEW INDEX ADKL A9,1 ST A9,STKEND+WRK1 STORE ADKL A9,7 NEXT BOARD CWK A9,31 LAST BOARD? RF(G) B:ITRT YES! RB BIT10 XIF EJECT * * BUILD REAL-TIME INTERRUPT TABLES FOR RT * B:ITRT EQU * IFF SUMR=0 LDKL A8,1 CONNECTION TYPE = RT LDKL A9,3 1:ST BOARD LDK A1,8 MAX.LENGTH OF BOARD CONF. TABLE ST A1,STKEND+WRK4 SAVE CM STKEND+WRK1 CLEAR CM STKEND+WRK2 CLEAR CM STKEND+WRK3 CLEAR BRT10 EQU * CALL B:BTAB CALL B:LTAB LD A1,STKEND+WRK2 GET INDEX IN MONTAB LD A2,STKEND+WRK3 ANY LINES? RF(Z) BRT15 NO! CM STKEND+WRK3 CLEAR LD A2,STKEND+BRDTAB GET ADDRESS TO BOARD CONF. TABLE ST A2,INTRT1,A1 SAVE BRT15 EQU * ADK A1,2 ST A1,STKEND+WRK2 STORE NEW INDEX ADKL A9,1 ST A9,STKEND+WRK1 STORE ADKL A9,3 NEXT BOARD CWK A9,15 LAST BOARD? RF(G) B:ITPC YES! RB BRT10 XIF EJECT * * BUILD REAL-TIME INTERRUPT TABLES FOR PLC-LOCAL * B:ITPC EQU * IFF PLCL=0 LDKL A8,5 CONNECTION TYPE = PLC LDKL A9,32 1:ST BOARD LDK A1,66 MAX LENGHT OF BOARD CONF.TABLE =2 ST A1,STKEND+WRK4 LDK A1,1 =2 ST A1,STKEND+WRK1 =2 CM STKEND+WRK2 CLEAR CM STKEND+WRK3 CLEAR BPC10 EQU * CALL B:BTAB CALL B:LTAB LD A1,STKEND+WRK2 GET INDEX IN MONTAB LD A2,STKEND+WRK3 ANY LINES? RF(Z) BPC15 NO! CM STKEND+WRK3 LD A2,STKEND+BRDTAB GET ADDRESS TO BOARD CONFIGURATION TABLE ST A2,INTPL1,A1 SAVE BPC15 EQU * ADK A1,2 ST A1,STKEND+WRK2 STORE NEW INDEX ADKL A9,1 ST A9,STKEND+WRK1 ADKL A9,31 NEXT BOARD CWK A9,128 LAST BOARD? RF(G) B:ITPR YES! =8 RB BPC10 XIF EJECT * * BUILD REAL-TIME INTERRUPT TABLES FOR PLC-REMOTE =8 * B:ITPR EQU * IFF PLCR=0 LDKL A8,6 CONNECTION TYPE=PLC-REMOTE LDKL A9,32 1:ST BOARD LDK A1,66 MAX LENGHT OF BOARD CONF.TABLE =2 ST A1,STKEND+WRK4 LDK A1,1 =2 ST A1,STKEND+WRK1 =2 CM STKEND+WRK2 CLEAR CM STKEND+WRK3 CLEAR BPR10 EQU * CALL B:BTAB CALL B:LTAB LD A1,STKEND+WRK2 GET INDEX IN MONTAB LD A2,STKEND+WRK3 ANY LINES? RF(Z) BPR15 NO! CM STKEND+WRK3 LD A2,STKEND+BRDTAB GET ADDRESS TO BOARD CONFIGURATION TABLE ST A2,INTPR1,A1 SAVE BPR15 EQU * ADK A1,2 ST A1,STKEND+WRK2 STORE NEW INDEX ADKL A9,1 ST A9,STKEND+WRK1 ADKL A9,31 NEXT BOARD CWK A9,128 LAST BOARD? RF(G) B:ITVU YES! RB BPR10 XIF EJECT * * BUILD REAL-TIME INTERRUPT TABLES FOR VCCU1/4 * B:ITVU EQU * IFF VIDEO=0 LDKL A8,7 CONNECTION TYPE = VCCU1/4 LDKL A9,3 1:ST BOARD LDK A1,8 MAX.LENGTH OF BOARD CONF. TABLE ST A1,STKEND+WRK4 SAVE CM STKEND+WRK1 CLEAR CM STKEND+WRK2 CLEAR CM STKEND+WRK3 CLEAR BVU10 EQU * CALL B:BTAB CALL B:LTAB LD A1,STKEND+WRK2 GET INDEX IN MONTAB LD A2,STKEND+WRK3 ANY LINES? RF(Z) BVU15 NO! CM STKEND+WRK3 CLEAR LD A2,STKEND+BRDTAB GET ADDRESS TO BOARD CONF. TABLE ST A2,INTVU1,A1 SAVE BVU15 EQU * ADK A1,2 ST A1,STKEND+WRK2 STORE NEW INDEX ADKL A9,1 ST A9,STKEND+WRK1 STORE ADKL A9,3 NEXT BOARD CWK A9,31 LAST BOARD? RF(G) B:ITSZ YES! RB BVU10 XIF EJECT * * BUILD REAL-TIME INTERRUPT TABLES FOR SALCUZ * B:ITSZ EQU * IFF SALCUZ=0 LDKL A8,2 CONNECTION TYPE = SALCUZ LDKL A9,0 1:ST BOARD LDK A1,2 MAX. LENGTH OF BOARD CONF.TABLE ST A1,STKEND+WRK4 CM STKEND+WRK1 CLEAR CM STKEND+WRK2 CLEAR CM STKEND+WRK3 CLEAR BSZ10 EQU * CALL B:BTAB CALL B:LTAB LD A1,STKEND+WRK2 GET INDEX IN MONTAB LD A2,STKEND+WRK3 ANY LINES? RF(Z) BSZ15 CM STKEND+WRK3 LD A2,STKEND+BRDTAB GET ADDRESS TO BOARD CONF. TABLE ST A2,INTSL1,A1 SAVE BSZ15 EQU * ADK A1,2 ST A1,STKEND+WRK2 STORE NEW INDEX ADKL A9,1 ST A9,STKEND+WRK1 CWK A9,7 LAST BOARD? RF(G) B:ITAZ YES! RB BSZ10 XIF EJECT * * BUILD REAL-TIME INTERRUPT TABLES FOR ASCU4Z * B:ITAZ EQU * IFF ASCU4Z=0 LDKL A8,3 CONNECTION TYPE = ASCU4Z LDKL A9,3 1:ST BOARD LDK A1,8 MAX. LENGTH OF BOARD CONF.TABLE ST A1,STKEND+WRK4 CM STKEND+WRK1 CLEAR CM STKEND+WRK2 CLEAR CM STKEND+WRK3 CLEAR BAZ10 EQU * CALL B:BTAB CALL B:LTAB LD A1,STKEND+WRK2 GET INDEX IN MONTAB LD A2,STKEND+WRK3 ANY LINES RF(Z) BAZ15 CM STKEND+WRK3 LD A2,STKEND+BRDTAB GET ADDRESS TO BOARD CONFIGURATION TABLE ST A2,INTAS1,A1 SAVE BAZ15 EQU * ADK A1,2 ST A1,STKEND+WRK2 STORE NEW INDEX ADKL A9,1 ST A9,STKEND+WRK1 ADKL A9,3 NEXT BOARD CWK A9,31 LAST BOARD? RF(G) BAZ20 YES! RB BAZ10 BAZ20 EQU * XIF RTN A14 EJECT ********************************************* * I:CHSZ - INIT CHANNEL PARAMETERS SALCUZ * ********************************************* * * REFERENCED IN: DWTGEN * * ENTRY: A1 - POINTER TO PROTOTYPE DWT * A2 - POINTER TO REAL DWT * A6 - LINE CONNECTION NUMBER * * EXIT: A6 - CHANNEL PARAMETER - 1 * A5 - CHANNEL PARAMETER - 2 * A3 - BITS 12-15 CONNECTION TYPE * BITS 4 -11 LINE NUMBER * WORK REGISTERS: * * SUBROUTINES: * I:CHSZ EQU * IFF SALCUZ=0 CWK A6,8 CONNECTION NUMBER <=8? RF(G) NUMERR NO! CWK A6,1 CONNECTION NUMBER >=1? RF(L) NUMERR NO! SUK A6,1 MODIFY LINE CONNECTION NUMBER LD A5,DWTCP2,A1 GET DWTCP2 OF PROTOTYPE DWT ANK A5,/3F CLEAR BITS TO MODIFY LDR A3,A6 GET MODIFY LINE CONNECTION NUMBER SLL A3,4 MOVE TO BITS 4 - 11 ADK A3,2 ADD CONNECTION TYPE SALCUZ ADKL A6,/0200 ADD CONNECTION TYPE SALCUZ RTN A14 RETURN XIF IFT SALCUZ=0 LDKL A1,LMP4 CALL ERROR XIF EJECT ***************************************************** * I:CHAZ - INIT CHANNEL PARAMETERS ASCU4Z * ***************************************************** * * REFERENCED IN: DWTGEN * * ENTRY: A1 - POINTER TO PROTOTYPE DWT * A2 - POINTER TO REAL DWT * A4 - LINE CONNECTION TYPE * A6 - LINE CONNECTION NUMBER * * EXIT: A6 - CHANNEL PARAMETER - 1 * A5 - CHANNEL PARAMETER - 2 * A3 - BITS 12-15 CONNECTION TYPE * BITS 4-11 LINE NUMBER * * WORK REGISTERS: * * SUBROUTINES: * I:CHAZ EQU * IFF ASCU4Z=0 CWK A6,32 CONNECTION NUMBER <=32? RF(G) NUMERR NO! CWK A6,1 CONNECTION NUMBER >=1? RF(L) NUMERR NO! SUK A6,1 MODIFY LINE CONNECTION NUMBER LD A5,DWTCP2,A1 GET DWTCP2 OF PROTOTYPE DWT ANK A5,/3F CLEAR BITS TO MODIFY LDR A3,A6 GET MODIFY LINE CONNECTION NUMBER ANK A3,3 GET BITS 14-15 SLL A3,8 MOVE TO BITS TO BITS 6-7 ORR A5,A3 MERGE WITH OLD CONTENTS LDR A3,A6 GET MODIFIED LINE CONNECTION NUMBER SLL A3,4 ANK A6,/1C GET BITS 11-13 BOARD NUMBER SRL A6,2 MOVE TO BITS 12-15 ADK A3,3 ADD CONNECTION TYPE ASCU4Z ADKL A6,/0300 ADD CONNECTION TYPE ASCU4Z RTN A14 XIF IFT ASCU4Z=0 LDKL A1,LMP4 CALL ERROR XIF EJECT ***************************************************** * I:CHAZ - INIT CHANNEL PARAMETERS VCCU1/4 * ***************************************************** * * REFERENCED IN: DWTGEN * * ENTRY: A1 - POINTER TO PROTOTYPE DWT * A2 - POINTER TO REAL DWT * A4 - LINE CONNECTION TYPE * A6 - LINE CONNECTION NUMBER * * EXIT: A6 - CHANNEL PARAMETER - 1 * A5 - CHANNEL PARAMETER - 2 * A3 - BITS 12-15 CONNECTION TYPE * BITS 4-11 LINE NUMBER * * WORK REGISTERS: * * SUBROUTINES: * I:CHVC EQU * IFF VIDEO=0 CWK A6,32 CONNECTION NUMBER <=32? RF(G) NUMERR NO! CWK A6,1 CONNECTION NUMBER >=1? RF(L) NUMERR NO! SUK A6,1 MODIFY LINE CONNECTION NUMBER LD A5,DWTCP2,A1 GET DWTCP2 OF PROTOTYPE DWT ANK A5,/3F CLEAR BITS TO MODIFY LDR A3,A6 GET MODIFY LINE CONNECTION NUMBER ANK A3,3 GET BITS 14-15 SLL A3,8 MOVE TO BITS TO BITS 6-7 ORR A5,A3 MERGE WITH OLD CONTENTS LDR A3,A6 GET MODIFIED LINE CONNECTION NUMBER SLL A3,4 ANK A6,/1C GET BITS 11-13 BOARD NUMBER SRL A6,2 MOVE TO BITS 12-15 ADK A3,7 ADD CONNECTION TYPE VCCU1/4 ADKL A6,/0700 ADD CONNECTION TYPE VCCU1/4 RTN A14 XIF IFT VIDEO=0 LDKL A1,LMP4 CALL ERROR XIF EJECT ****************************************** * I:CHPC - INIT CHANNEL PARAMETERS LWSI * ****************************************** * * REFERENCED IN: DWTGEN * * ENTRY: A1 - POINTER TO PROTOTYPE DWT * A2 - POINTER TO REAL DWT * A6 - LINE CONNECTION NUMBER * * EXIT: A6 - CHANNEL PARAMETER - 1 * A5 - CHANNEL PARAMETER - 2 * A3 - BITS 12-15 CONNECTION TYPE * BITS 4 -11 LINE NUMBER * * WORK REGISTERS: * SUBROUTINES: * I:CHPC EQU * IFF PLCL=0 CWK A6,128 CONNECTION NUMBER <=128? RF(G) NUMERR NO! CWK A6,1 CONNECTION NUMBER >=1? RF(L) NUMERR NO! SUK A6,1 LD A5,DWTCP2,A1 GET DWTCP2 OF PROTOTYPE DWT ANK A5,/3F CLEAR BITS TO MODIFY LDR A3,A6 GET LINE CONNECTION NUMBER ANK A3,/1F GET BITS 11 - 15 ADK A3,1 SLL A3,8 MOVE TO BITS 2 - 7 ORR A5,A3 MERGE WITH OLD CONTENTS LDR A3,A6 GET LINE CONNECTION NUMBER ADK A3,1 SLL A3,4 MOVE TO BITS 4 - 11 ADK A3,5 ADD CONNECTION TYPE PLC ANK A6,/60 GET BITS 9 - 10 BOARD NUMBER SRL A6,5 MOVE TO BITS 12 - 15 ADKL A6,/0500 ADD CONNECTION TYPE PLC RTN A14 XIF IFT PLCL=0 LDKL A1,LMP4 CALL ERROR XIF EJECT ****************************************** * I:CHPC - INIT CHANNEL PARAMETERS RWSI * =8 ****************************************** * * REFERENCED IN: DWTGEN * * ENTRY: A1 - POINTER TO PROTOTYPE DWT * A2 - POINTER TO REAL DWT * A6 - LINE CONNECTION NUMBER * * EXIT: A6 - CHANNEL PARAMETER - 1 * A5 - CHANNEL PARAMETER - 2 * A3 - BITS 12-15 CONNECTION TYPE * BITS 4 -11 LINE NUMBER * * WORK REGISTERS: * SUBROUTINES: * I:CHRI EQU * IFF PLCR=0 CWK A6,128 CONNECTION NUMBER <=128? RF(G) NUMERR NO! CWK A6,1 CONNECTION NUMBER >=1? RF(L) NUMERR NO! SUK A6,1 LD A5,DWTCP2,A1 GET DWTCP2 OF PROTOTYPE DWT ANK A5,/3F CLEAR BITS TO MODIFY LDR A3,A6 GET LINE CONNECTION NUMBER ANK A3,/1F GET BITS 11 - 15 ADK A3,1 SLL A3,8 MOVE TO BITS 2 - 7 ORR A5,A3 MERGE WITH OLD CONTENTS LDR A3,A6 GET LINE CONNECTION NUMBER ADK A3,1 SLL A3,4 MOVE TO BITS 4 - 11 ADK A3,6 ADD CONNECTION TYPE PLC-REMOTE ANK A6,/60 GET BITS 9 - 10 BOARD NUMBER SRL A6,5 MOVE TO BITS 12 - 15 ADKL A6,/0600 ADD CONNECTION TYPE PLC-REMOTE RTN A14 XIF NUMERR EQU * LDKL A1,LMP4 INDICATE FORMAT ERROR CALL ERROR EJECT ************************************* * I:CHLT - INIT CHANNEL PARAMETERS LT * ************************************* * * REFERENCED IN: DWTGEN * * ENTRY: A1 - POINTER TO PROTOTYPE DWT * A2 - POINTER TO REAL DWT * A6 - LINE CONNECTION NUMBER * * EXIT: A6 - CHANNEL PARAMETERS -1 * A5 - CHANNEL PARAMETERS -2 * A3 - BITS 12-15 CONNECTION TYPE * BITS 4-11 LINE NUMBER * * WORK REGISTERS: * * SUBROUTINES: * EJECT I:CHLT EQU * IFF SUML=0 CWK A6,0032 CONNECTION NUMBER <= 32? RB(G) NUMERR NO =8! CWK A6,0001 CONNECTION NUMBER >=01? RB(L) NUMERR NO =8! SUK A6,1 MODIFY LINE CONNECTION NUMBER LD A5,DWTCP2,A1 GET DWTCP2 OF PROTOTYPE DWT ANKL A5,/003F CLEAR BITS TO MODIFY LDR A3,A6 GET MODIFIED LINE CONNECTION NUMBER ANK A3,7 GET BITS 13-15 SLL A3,8 MOVE TO BITS 5-7 ORR A5,A3 MERGE WITH OLD CONTENTS LDR A3,A6 GET MODIFIED LINE CONNECTION NUMBER SLL A3,4 ANK A6,/18 GET BITS 11-12 SRL A6,3 MOVE TO BITS 14-15 RTN A14 XIF IFT SUML=0 LDKL A1,LMP4 CALL ERROR XIF EJECT ***************************************** * I:CHRT - INIT CHANNEL PARAMETERS RT * ***************************************** * * REFERENCED IN: DWTGEN * * ENTRY: A1 - POINTER TO PROTOTYPE DWT * A2 - POINTER TO REAL DWT * A6 - LINE CONNECTION NUMBER * * EXIT: A6 - CHANNEL PARAMETERS - 1 * A5 - CHANNEL PARAMETERS - 2 * A3 - BITS 12-15 CONNECTION TYPE * BITS 4-11 LINE NUMBER * * WORK REGISTERS: * * SUBROUTINES: * EJECT I:CHRT EQU * IFF SUMR=0 CWK A6,0016 CONNECTION NUMBER <= 16? RB(G) NUMERR NO =8! CWK A6,0001 CONNECTION NUMBER >=1? RB(L) NUMERR NO =8! SUK A6,1 MODIFY LINE CONNECTION NUMBER LD A5,DWTCP2,A1 GET DWTCP2 OF PROTOTYPE DWT ANKL A5,/003F CLEAR BITS TO MODIFY LDR A3,A6 GET MODIFIED LINE CONNECTION NUMBER ANK A3,3 GET BITS 14-15 SLL A3,8 MOVE TO BITS 6-7 ORR A5,A3 MERGE WITH OLD CONTENTS LDR A3,A6 GET MODIFIED LINE CONNECTION NUMBER SLL A3,4 ADK A3,1 ADD CONNECTION TYPE RT ANK A6,/C GET BITS 12-13 SRL A6,2 MOVE TO BITS 14-15 ADKL A6,/0100 ADD CONNECTION TYPE RT RTN A14 XIF IFT SUMR=0 =8 LDKL A1,LMP4 CALL ERROR XIF =8 IFT DC=1 EJECT ******************************************************* * * * B:CNA BUILD COMPUTER NETWORK ARCHITECTURE * * ========================================== * * * * SCANS POSSIBLE D-BLOCK IN CONFIGURATION DATA * * AND BUILDS DATA COMMUNICATION TABLE IN MEMORY. * * TABLE START IS DEFINED BY THE POINTER SCTDCT * * IN SYSTAB. * * ON ENTRY: SCTDCT = RELATIVE POSITION OF THE * * D-BLOCK IN CONF. DATA (SET BY SYSLOD) * * * * REFERENCED IN: CONMON * * SUBROUTINES CALLED: GETDTE, P:DTE * * WORK REGISTERS: A1-A12 * * * ******************************************************* B:CNA EQU * LD A11,DCBLK+STKCOM RF(Z) B:CN20 NO DATA COMMUNICATION =1 * AD A11,CONSTA+STKCOM GET D BLOCK ADDRESS IN CONF. DATA LD A12,SCTSFA GET START OF FREE AREA ST A12,SCTDCT UPDATE SYSTAB POINTER ST P,STKEND+LIMIT UPDATE END OF SYSTEM AREA CALL GETDTE GET NO OF DTE:S DEFINED ADKL A11,2 ADVANCE TO START OF SDTE RECORD B:CN00 EQU * SUK A1,1 RF(N) B:CN10 NO DTE BLOCKS LEFT IN CONF. DATA * ST A1,NUMDTE+STKEND SAVE NO OF DTE:S LEFT ADKL A11,5 ADVANCE TO 1ST CHAR. IN NAME CALL P:DTE PROCESS THIS DTE BLOCK LD A1,NUMDTE+STKEND GET REMAINING DTE BLOCKS LDR* A12,A12 GET ADDRESS TO NEXT DTE RB B:CN00 * B:CN10 EQU * CM 0,A12 AND RESET IT ADKL A12,2 ST A12,SCTSFA UPDATE START OF FREE AREA B:CN20 EQU * =1 RTN A14 EJECT ******************************************************* * * * P:DTE PROCESS DTE BLOCK IN CONFIGURATION DATA * * ============================================== * * * * SCANS DTE BLOCK IN CONF. DATA AND BUILDS CORRE- * * SPONDING DTE-BLOCK IN SCTDCT. IF MULTIPLE COPIES * * ARE DEFINED CURRENT DTE IS DUPLICATED THE NO OF * * TIMES SPECIFIED. * * * * ON ENTRY: A11 ADDRESS TO 1ST CHARACTER IN * * SDTE NAME IN CONF. DATA * * A12 POINTER TO START OF CURRENT * * DTE BLOCK IN SCTDCT TABLE * * * * ON EXIT: A11 ADDRESS TO LAST CHARACTER IN * * PROCESSED DTE-BLOCK IN CONF. DATA * * A12 POINTER TO LAST DEFINED DTE-BLOCK * * DEFINED IN SCTDCT TABLE * * * * REFERENCED IN: B:CNA * * SUBROUTINES REFERENCED: GETCOP,GETNSA,P:NA,HEXCPY * * AND MOVE * * * ******************************************************* P:DTE EQU * LDKL A1,/3000 INITIALIZE NAME FILLER LC A1,1,A11 GET 1ST CHAR. IN SDTE NAME LC A2,IDLIM,A11 GET NA-NSA QUALIFIER (=T) ADKL A11,1 CCK A2,'TT' START OF TYPE RECORD? RF(E) PDTE00 YES! * SLL A1,8 NO LEFT ADJUST CHAR. AND LC A1,1,A11 GET NEXT CHARACTER ADKL A11,1 PDTE00 EQU * ST A1,DTENAM+STKEND SAVE NAME IN STACK CALL GETCOP GET NO OF COPIES ST A1,DTECOP+STKEND AND SAVE ADKL A11,TYPOFS ADVANCE TO TYPE IDENTIFIER LC A1,1,A11 SLL A1,8 FORM TYPE IDENTIFIER LC A1,2,A11 ST A1,DTETYP+STKEND SAVE IN STACK ADKL A11,2 LDK A2,0 RESET NETWORK ADDR. LENGTH CALL ENDBLK END OF D-BLOCK? LDR A8,A8 RF(Z) PDTE05 YES! * LC A7,NANSA,A11 GET NA-NSA-SDTE QUALIFIER CCK A7,'AA' RF(NE) PDTE05 NSA OR SDTE RECORD * ADKL A11,NAOFS ADVANCE TO 1ST DIGIT IN NA ST A11,NASTRT+STKEND SAVE ADDRESS CALL P:NA PROCESS NETWORK ADDRESS LC A7,2,A11 PDTE05 EQU * ST A2,NALNG+STKEND SAVE LENGTH OF NA LDK A1,0 CALL ENDBLK END OF D-BLOCK? LDR A8,A8 RF(Z) PDTE07 YES! * CCK A7,'SS' RF(NE) PDTE07 NO NSA RECORD * ADKL A11,NSAOFS ADVANCE TO NO OF SUBADDR. CALL GETNSA ADKL A11,2 SKIP NSA NR IN CONF. DATA PDTE07 EQU * ST A1,DTENSA+STKEND SAVE NO OF SUBADDR. DEF. CWK A1,/FF LOOK IF LEGAL NUMBER RF(NG) PDTE10 YES! * NSAERR EQU * LDKL A1,LMP4 NO, ERROR IN CONF. FILE CALL ERROR PDTE10 EQU * LDR A1,A1 RF(Z) PDTE15 NO SUBADDRESSES * ST A11,NSAADR+STKEND SAVE ADDR. OF 1ST SUBADDR. SLL A1,1 ADR A11,A1 CALCULATE STAT OF NEXT RECORD PDTE15 EQU * CALL DTESIZ CALCULATE SIZE OF THIS DTE BLOCK CALL UPDDTE UPDATE DTE BLOCK IN DCT LD A7,DTECOP+STKEND GET NO OF COPIES PDTE20 EQU * SUK A7,1 RF(Z) PDTE40 NO COPIES LEFT TO PROCESS LDK A5,1 INITIALIZE INCREMENT CONSTANT LD A4,DTENAM+STKEND GET PREVIOUS NAME LDR A3,A4 ANK A3,/FF ISOLATE RIGHT BYTE OF NAME CWK A3,/5F UPPER BOUNDARY? RF(L) PDTE25 NO! * LC A4,/30 RESET RIGHT BYTE TO ASCII '0' SLL A5,8 LEFT BYTE INCREMENTATION PDTE25 EQU * ADR A4,A5 INCREMENT SYMBOLIC NAME ST A4,DTENAM+STKEND * CALL ENDBLK END OF D-BLOCK? LDR A8,A8 RF(Z) PDTE35 YES! * LC A1,2,A11 GET 2ND CHAR. IN NEXT RECORD CCK A1,'DD' IF A SDTE-RECORD USE OLD ADDR. RF(E) PDTE35 * CCK A1,'SS' IF NSA RECORD RF(E) PDTE30 USE OLD NETWORK ADDRESS * ADKL A11,NAOFS ADVANCE TO 1ST DIGIT IN NA ST A11,NASTRT+STKEND CALL P:NA PROCESS NETWORK ADDRESS ST A2,NALNG+STKEND SAVE LENGTH OF NA * CALL ENDBLK END OF D-BLOCK? LDR A8,A8 RF(Z) PDTE35 YES! * LC A1,2,A11 CCK A1,'SS' RF(NE) PDTE35 NO NSA RECORD PRESENT * PDTE30 EQU * ADKL A11,NSAOFS ADVANCE TO NO OF SUBADDR. CALL GETNSA ST A1,DTENSA+STKEND SAVE NO OF SUBADDR. ADKL A11,2 LDR A1,A1 RF(Z) PDTE35 NO SUBADDRESSE * CWK A1,/FF RB(G) NSAERR TOO MANY SUBADDR. DEFINED * ST A11,NSAADR+STKEND SAVE START OF 1ST SUBADDR. SLL A1,1 ADR A11,A1 CALCULATE START OF NEXT RECORD PDTE35 EQU * LDR* A12,A12 GET START OF NEXT DTE BLOCK CALL DTESIZ CALCULATE LENGTH OF THIS DTE BLOCK CALL UPDDTE RB PDTE20 * PDTE40 EQU * RTN A14 EJECT ******************************************************** * * * DTESIZ CALCULATES THE LENGTH OF A DTE BLOCK * * ============================================ * * * * ON ENTRY: A12 START OF CURRENT DTE BLOCK * * * * WORK REGISTER: A1,A9 * * * ******************************************************** DTESIZ EQU * ST A11,WRK1+STKEND LD A1,NALNG+STKEND GET LENGTH OF NETWORK ADDRESS ADK A1,1 SRL A1,1 2 DIGITS IN EACH BYTE AD A1,DTENSA+STKEND ADD NO OF SUBADDR. ADK A1,DTEFIX+1 AND LENGTH OF FIX PART+1 ANKL A1,/FFFE MAKE EVEN ADR A1,A12 START OF NEXT DTE BLOCK STR A1,A12 UPDATE DTE BLOCK LINK LDR A9,A1 ST A11,WRK1+STKEND SAVE A11 LD A11,LIMIT+STKEND GET END OF SYSTEM AREA CALL CMPADR MEMORY OVERFLOW? RF(NL) DTSIZ0 NO! * LDKL A1,LMP3 YES! CALL ERROR * DTSIZ0 EQU * LD A11,WRK1+STKEND RESTORE POSITION IN CONF. DATA RTN A14 EJECT ******************************************************** * * * UPDDTE UPDATES CURRENT DTE BLOCK WITH ITS: * * ====== * * NAME * * TYPE * * NETWORK ADDRES * * SUBADDRESSES * * * ******************************************************** UPDDTE EQU * LDR A6,A12 GET START OF CURRENT DTE BLOCK ENTRY ADK A6,2 SKIP LINK ENTRY LD A1,DTENAM+STKEND GET NAME FROM STACK STR A1,A6 SAVE IN DCT ADK A6,2 NEXT ENTRY LD A1,DTETYP+STKEND GET TYPE FROM STACK STR A1,A6 AND SAVE IN DCT ADK A6,2 LDK A5,4 GET NO OF SHIFTS ORKL A5,SLL0 AND CONFIG. SLL A1,8 INSTR. LD A2,NALNG+STKEND GET LENGTH OF NETWORK ADDR. LDR A3,A2 SAVE NO OF CHARACTERS SLL A2,8 LEFT ADJUST RF(Z) UPDTE0 NO NETWORK ADDRESS DEFINED * LD A4,NASTRT+STKEND GET START OF NETWORK ADDR. CALL HEXCPY COPY AND PACK NA TO DCT ANKL A5,/1F ISOLATE SHIFT COUNT CWK A5,4 LESS THAN ONE BYTE LEFT? RF(NG) UPDTE2 YES! UPDTE0 EQU * LDK A5,0 SET NO OF SHIFTS RF UPDTE4 * UPDTE2 EQU * STR A2,A6 STORE WORD IN DCT LDK A2,0 CLEAR TABLE WORD ADK A6,2 ADVANCE TO NEXT ENTRY LDK A5,8 GET NO OF SHIFTS UPDTE4 EQU * ORKL A5,SLL0 CONFIGURE SSL A1,N INSTR. LD A1,DTENSA+STKEND GET NO OF SUBADDR. DEFINED RF(Z) UPDTE8 NO SUBADDR. DEFINED * LD A4,NSAADR+STKEND GET ADDRESS TO 1ST SUBADDR. LDR A3,A1 SLL A3,1 2 DIGITS FOR EACH SUDADDRESS EXR A5 SHIFT ORR A2,A1 AND CONFIGURE DCT WORD CWK A5,SLL0 FULL WORD? RF(NE) UPDTE6 NO! * STR A2,A6 YES! SAVE IN DCT LDK A2,0 CLEAR TABLE WORD ADK A6,2 ADVANCE DCT POINTER LDK A5,16 NO OF SHIFTS ORKL A5,SLL0 CONFIGURE SLL A1,12 INSTR. UPDTE6 EQU * SUK A5,4 NEXT NIBBLE CALL HEXCPY COPY AND PACK INTO DCT UPDTE8 EQU * STR A2,A6 RTN A14 EJECT ******************************************************** * * * HEXCPY COPIES AND PACKS 4 HEXADECIMAL DIGITS * * IN ONE WORD. * * * * ON ENTRY: A2 WORD TO PACK * * A3 NO OF CHARACTERS TO PROCESS * * A4 ADDRESS TO FIRST ASCII DIGIT * * A5 PACKING INSTR. (SLL A1,N TIMES) * * A6 POINTER WHERE TO STORE PACKED WORD * * * * ON EXIT: A2 LAST PACKED, BUT NOT STORED WORD * * A4 ADDRESS TO CHAR. FOLLOWING LAST * * PROCESSED DIGIT * * A5 PACKING INSTR. (SLL A1,N TIMES) * * A6 POINTER WHERE TO STORE NEXT WORD * * * ******************************************************** HEXCPY EQU * LDK A1,0 LC A1,1,A4 GET CHARACTER CALL HEXCNV CONVERT TO HEX EXR A5 SHIFT ORR A2,A1 CONFIGURE DCT WORD SUK A3,1 DECREMENT NO OF CHARACTERS RF(Z) HXCPY8 WHOLE NA PROCESSED * CWK A5,SLL0 FULL WORD? RF(NE) HXCPY6 NO! * STR A2,A6 YES! SAVE IN DCT LDK A2,0 CLEAR TABLE WORD ADK A6,2 ADVANCE TO NEXT ENTRY LDK A5,16 NO OF SHIFTS ORKL A5,SLL0 CONFIGURE SSL A1,16 INSTR. HXCPY6 EQU * SUK A5,4 NEXT NIBBLE ADK A4,1 NEXT CHARACTER IN CONF. DATA RB HEXCPY * HXCPY8 EQU * RTN A14 EJECT ******************************************************** * * * HEXCNV CONVERTS A HEXADECIMAL DIGIT IN ASCII CODE * * TO CORRESPONDING HEXADECIMAL VALUE * * (4 BITS BINARY CODE) * * * * ON ENTRY: A1 CHARACTER TO CONVERT * * * * ON EXIT: A1 CONVERTED CARACTER * * * ******************************************************** HEXCNV EQU * ANK A1,/FF ISOLATE CHARACTER CWK A1,/29 RF(L) TYPERR ERRANEOUS TYPE * CWK A1,/40 DIGIT BETWEEN 0-9? RF(L) HXCN00 YES! RF(E) TYPERR NO NEXADECIMAL DIGIT * CWK A1,/46 DIGIT BETWEEN A-F? RF(G) TYPERR NO * ADK A1,9 YES! HXCN00 EQU * ANK A1,/F ISOLATE HEX NUMBER RTN A14 * TYPERR EQU * LDKL A1,LMP4 CONF. DATA ERROR CALL ERROR EJECT ******************************************************** * * * P:NA PROCESS NETWORK ADDRESS * * * * SCANS THE NETWORK ADDRESS RECORD (NA=..) IN CONF. * * DATA AND REPACKS THE RECORD, OVERWRITING POSSIBLE * * CONTINUATION DEFINITIONS (C=..), SO THAT THE * * WHOLE NETWORK ADDRESS WILL BE IN CONTIGOUSE LOCA- * * TIONS. * * * * ON ENTRY: A11 ADDRESS TO 1ST CHARACTER IN NETWORK * * ADDRESS. * * * * ON EXIT: A2 LENGTH OF NETWORK ADDRESS * * A11 START OF NSA RECORD IN CONF. DATA * * * ******************************************************** P:NA EQU * LDK A4,1 RESET PACKING CONSTANT LDK A2,0 RESET ADDRESS LENGTH P:NA00 EQU * LDK A1,0 LC A1,1,A11 GET CHARACTER LDR A1,A1 SET CONDITION REGISTER RF(Z) P:NA06 END OF CONF. DATA * CCK A1,/FF END OF D-BLOCK? RF(E) P:NA05 YES! * CCK A1,'==' CONTINUATION RECORD? RF(E) P:NA04 YES! * CCK A1,'NN' NO! START OF NA OR NSA RECORD RF(E) P:NA06 YES! RETURN * CCK A1,'SS' START OF SDTE RECORD? RF(E) P:NA06 YES! * ADK A2,1 INCREMENT NA ADDRESS LENGTH CWK A2,/FF TOO MANY DIGITS? RF(NG) P:NA02 NO! * LDKL A1,LMP4 YES! ERROR IN CONF. DATA CALL ERROR P:NA02 EQU * LDR A3,A4 ADR A3,A11 REPACKING ADDRESS SCR A1,A3 PUT CHARACTER BACK IN FILE ADKL A11,1 GET NEXT CHARACTER RB P:NA00 * P:NA04 EQU * SUK A2,1 DON'T COUNT CONT. RECORD IDENTIFIER SUK A4,2 SET REPACKING CONSTANT ADKL A11,1 ADVANCE TO NEXT CHARACTER RB P:NA00 * P:NA05 EQU * SUK A2,1 DECREMENT NA LENGTH SUKL A11,1 AND POSITION IN CONF. DATA * P:NA06 EQU * RTN A14 EJECT ******************************************************** * * * ENDBLK LOOKS FOR END OF DATA COMMUNICATION BLOCK * * ================================================= * * * * END OF BLOCK IS DEFINED BY A RECORD BEGINNING * * WITH 'A' AS IN APPLICATION DEFINITION BLOCK OR * * BY A CHARACTER = 0 (BINARY) MEANING END OF * * CONFIGURATION DATA. * * * * ON ENTRY: A11 CURRENT POSITION IN CONF. DATA * * * * ON EXIT: A8 = 0 IF END OF BLOCK * * A8 NOT ZERO OTHERVISE * * * ******************************************************** ENDBLK EQU * LC A8,1,A11 GET NEXT CHARACTER CCK A8,/00 END OF CONF. DATA? RF(E) ENDBL0 YES! * CCK A8,'AA' START OF APPL. DEF. BLOCK? RF(NE) ENDBL2 NO! NOT END OF D-BLOCK * ENDBL0 EQU * SUR A8,A8 SET END OF D-BLOCK COND. ENDBL2 EQU * RTN A14 XIF EJECT