|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 29312 (0x7280) Types: TextFile Names: »L30MRG«
└─⟦b07da7239⟧ Bits:30005188 8" CR80 Floppy CR80FD_0185 ( CR/D/253 CP L3050 I/F test NIC/558/0-D10200 COPY OF CR/D/315 ) └─⟦ddc1b7150⟧ └─ ⟦this⟧ »L3050.L30MRG«
LIST ;----------------------------------------------------------------------- ; CARD DECK IDENTIFICATION NUMBER: CR/C/0125 ; MODULE IDENTIFICATION: NIC/558 ; VERSION: 02 ; DATED: 771207/FR ; ; COMMUNICATIONS PROCESSOR TEST DRIVE SYSTEM ; ; CPTDS - L3050 I/F TEST PROGRAM ; ; 5.3 SPECIAL DRIVER NARRATIVE. ; ------------------------------ ; THIS MODULE OF THE CP TEST DRIVE SYSTEM (CPTDS) WILL BE USED TO ; LOOP ON SELECTED COM'DS IN ORDER TO VERIFY THE FUNCTION OF THE ; L3050 I/F. THE MODULE WILL REPLACE THE SUPERVISOR OF THE ; CP TEST DRIVE COMPUTER PROGRAM. ALL OTHER APPLICATION MODULES ; WILL NOT BE USED. ; THE IOX SIMULATOR (OR L3050 I/F MODULE TESTER) SHOULD HAVE THE ; DEVICE ADDRESS #06. ; ; THE PROGRAM WILL ASK THE OPERATOR FOR THE INPUT REQUIRED TO ; DETERMINE WHICH COM'D SEQUENCE TO LOOP UPON. ; UPON DETECTION OF A LINE FEED THE PROGRAM WILL START SERVICING ; THE CP WITH DEVICE ADDRESS #40 FOLLOWED BY CP WITH ADDR #80. ; THIS WILL BE REPEATED ENDLESSLY AS LONG AS THE PROGRAM IS ACTIVE. ; THE PROGRAM IS ABLE LOOPING ON ALL VALID COMMANDS. ; ; A.ADDRESSING. ; THE SPECIAL DRIVER SHALL BE ACTIVATED BY THE MONITOR UPON ; INITIALIZATION OF THE SYSTEM. ; ; B.ENTRY CONDITION. ; THE SPECIAL DRIVER SHALL BE ENTERED AS A CONSEQUENCE OF IT ; ACTIVATING ITSEFF DURING THE INITIALIZATION PHASE. ; ; C.EXIT CONDITIONS. ; THE MODULE WILL NEVER GIVE UP CPU TIME OR CONTROL TO ANY OTHER ; PROCESS IN THE SYSTEM IF IT HAS BEEN ACTIVATED. ; ; D.SPECIAL STORAGE. NONE. ; ; E.PROCCESSING. ; E1.INITIALIZATION. ; INITIATE: THE SPECIAL DRIVER IS CREATED, I.E. MADE KNOWN TO ; THE MONITOR (MON) AS IF IT WAS THE SUPERVISOR MODULE. ; LOCAL DATA AREAS ARE CLEARED. ; READOC: UPON WRITING '>' ON THE OC THE PROGRAM EXPECTS DATA ; TO BE ENTERED AS DESCRIBED BELOW. A CARRIAGE ; RETURN SHALL FLAG END OF CONTROL COM'D. ; E2.LOOP MODE. ; CPDRIVER: ; THE SPECIAL DRIVER IS CONTROLLED THROUGH THE CHARACTERS ; KEYED IN BY THE OPERATOR VIA THE OC KEYBOARD. THE BELOW ; DESCRIBE INPUT AND ACTION BY PROGRAM. ; ; 1) OI: OFR INVALID ; A LOOP WILL BE SET UP ON AN INVALID OFR COM'D. ; THE STATUS WILL BE PRINTED AS FOR 5 (SEE BELOW). ; ; 2) DM: DEV MASTER CLEAR. ; DI: DEV INTERRUPT PERMIT. ; A LOOP IS SET UP ON THE RECEIVED DEV COM'D. ; THE DISTANCE BETWEEN THE COM'DS ISSUED TO THE CP ; WILL BE ABOUT 150 USECS. ; ; 3) E : EOB ; LOOP ON EOB (H/W). EN EOB COMMAND WILL BE ISSUED ; TO THE L3050 I/F EACH 150 USEC. ; ; 4) DS: DEVICE STOP ; LOOP ON DEVICE STOP (H/W) - ELSE AS 2 ; ; 5) O0: OFR 0 ; O1: OFR 1 ; O2: OFR 2 ; O3: OFR 3 ; A LOOP IS SET UP ON A SET OF OFR COM'DS ALL OF ; WHICH INVOLVE DATA TO BE TRANSFERRED TO AND FROM ; THE L3050 I/F OF THE CP SYSTEM. TWO OFRS WITH ; NON-IDENTICAL DATA TO BE TRANSFERRED SHALL BE USED ; WHILE THE REVERSE WILL BE IDENTICAL. ; THE OFRS USED ARE ALL BUILT-IN THE PROGRAM. ; EACH LOOP IS INITIATED BY A MASTER RESET COM'D ; TO BE FOLLOWED WITHIN 1 MSEC BY THE OFR COM'D. ; THE BUILT-IN OFR COM'D WILL BE SENT TO THE CP AND ; AFTER 1 MSEC THE DMA REQUESTS BE SERVED BY ENBL CP ; READ IF ANY INTR'PTS PENDING AND IF NOT SERVE THE ; AUTO OUTPUT TO THE MP I/F SIMULATOR. THE DMA WILL ; BE COMPLETED BY THE CP ACKNOWLEDGE INTERRUPT. ; HERE UPON A REVERSE BOOT (OFR COM'D TYPE 8) IS ; STARTED BY SENDING THE COM'D TO THE CP, WAIT 1 MSEC ; AND THEN SERVE THE DMA REQUESTS UNTIL THE RECEIPT ; OF THE CP ACKNOWLEDGE INTR'PT. ; A COMPARISON BETWEEN THE REVEIVED DATA AND THOSE ; ACTUALLY SENT ARE PERFORMED. THE STATUS OF THIS ; COMPARISON WILL BE SAVED FOR EACH RUN. ; AFTER LOOPCNT-1 (DEFAULT 1000) TEST RUNS THE ; RESULT WILL BE PRINTED AND THE INDICATORS RESET. ; THIS WILL BE REPEATED INDEFINITELY. ; ; IT MUST BE NOTED THAT THE PROGRAM DOES NOT USE THE ; INTERRUPT GENERATED BY THE INDICATOR AND REQUEST ; OF THE MP I/F SIMULATOR H/W BUT IN THE EVENT OF ; OF A MISSING REQUEST A LOOP OF 5 MES IS SET UP ; TO TAKE CARE OF THIS. ; ; IF THE NUMBER ENTERED AFTER THE 'OFR' IS NON-ZERO ; AN EOB WILL BE SENT TO THE CP SYSTEM WHEN 7 DATA ; (CP-)WORDS ARE LEFT TO BE TRANSFERRED. 1 WILL ; INTODUCE AN EOB IN THE MP TO CP TRANSFER (AUTO ; OUTPUT) WHILE 2 WILL INTRODUCE AN EOB IN THE CP TO ; MP TRANSFER (AUTO INPUT MODE). ; 3 WILL INTRODUCE EOBS IN BOTH DIRECTIONS. ; THE EOBS ARE SENT SUCH THAT THE LAST 7 CP-WORDS ; WILL NEVER BE TRANSMITTED. ; ; 6) MR: MASTER RESET. ; LOOP ON MASTER RESET (AS FOR 4). ; ; 7) MC: MASTER CLEAR. ; A SINGLE DEV MASTER CLEAR COM'D IS SENT TO BOTH ; CPS. UPON THIS THE PROGRAM WILL ASK FOR FURTHER ; DATA. ; ; ; 5.3.3. SPECIAL DRIVER INTERFACES. ; --------------------------------- ; A.INPUT DATA. ; WHEN THE PROCESS HAS BEEN ACTIVATED CONTROL IS NOT LEFT OVER ; TO ANY OTHER PROCESS. ; ; ; B.OUTPUT ; WHEN LOOPING ON NON-OFR COM'DS NO OUTPUT WILL BE DONE EXCEPT ; THE COM'DS SENT TO THE CP SYSTEM. ; THE OFR LOOP WILL AFTER EACH RUN HAVE ITS STATUS PRINTED ON THE ; LINE PRINTER: ; ; ...1.... BINARY PATTERN DESCRIBING A NUMBER OF CONDITIONS ; WHICH ARE CHECKED DURING EACH TEST LOOP. HIGH MEANS ; THAT THE CORRESPONDING CONDITION HAS BEEN PRESENT. ; THE BIT PATTERN IS TO BE INTERPRETED AS FOLLOWS: ; 0 WORD RECEIVED NOT MATCHING THAT SENT ; 4 REQUEST RECEIVED IN INTERVAL 105 USEC - 5 MEC. ; 5 NO REQUEST RECEIVED AFTER 5 MSECS. ; 6 OVERRUN, I.E. TOO MANY REQ'S RECEIVED. ; ; DDDDD TOTAL NUMBER OF REQUESTS RECOGNIZED BY THE PROCESS ; DURING THE TOTAL LOOP. THIS WILL HAVE TO EQUAL ; 2*(NO OF LOOPS)*(2+(WORDCOUNT/2)+1+1) ; WORDCOUNT BEING THE NO OF DATA WORDS INVOLVED ; IN THE BOOT LOADING USED - OFR 2/8. ; ; 2*HHHH HEX DUMP OF THE INTEGRATED CP ACKNOWLEDGE INTR'PT ; RECEIVED AFTER EACH DMA TRANSFER. THE FIRST WILL ; FOR THE AUTO OUTPUT (MP->CP) WHILE THE SECOND IS ; FOR THE AUTO INPUT (CP->MP) DATA TRANSFER. ; ; 8*DDDD COUNTERS ASSOCIATED WITH THE BIT PATTERN DESCRIBED ; ABOVE.. EACH TIME THE SPECIFIC CONDITION HAS BEEN ; PRESENT THE ASSOCIATED COUNTER WILL BE INCREASED ; BY ONE. ; ; HHHH HEX DUMP OF INTEGRATED STATUS BEFORE ENABLE ; HHHH HEX DUMP OF STATUS FOR MP -> CP AFTER ENABLE ; HHHH HEX DUMP OF STAUTS FOR CP -> MP AFTER ENABLE ; ; ; THE PROGRAM CAN BE PATCHED IN THE PROCEDURE 'XFERERR' TO PRINT ; FAULTY DATA RECEIVED BY THE CP SYSTEM. NOTE THAT IN THIS PRINT ; -OUT DATA MATCHING IN FRONT OF WORD-IN-ERROR WILL ALL HAVE BEEN ; ZEROED. ALSO ONE LINE WILL BE PRINTED FOR EACH ERROR DETECTED. ; ; LARGE PARTS OF THE PROGRAM HAS BEEN DIRECTLY COPIED FROM THE ; CPTDS MODULE 'MP I/F DRIVER'. ; ;----------------------------------------------------------------------- BEGIN MODULE #3007 NOLIST ; ; AU000069 0 0000 LEVEL 1 NAMES: USE BASE ROL:= #004F RI:= #0053 OLTO:= #0056 GNBF:= #0040 RRL:= #004E RTI:= #006F WA:= #006A GNIB:= #0076 TFRW:= #0061 RWI:= #006E WPSLP:= #005C INCH:= #0073 WE:= #0052 RL:= #004D WPSTLP:= #005C SOLT:= #004B SRLT:= #004A GNOB:= #0077 RNBF:= #0041 RSCOC:= #0059 TODQB:= #0074 WL:= #0069 GPB:= #006C RBF:= #0043 LPERR:= #005F GLET:= #0047 DMLP:= #005E WSCOC:= #0058 OTCH:= #0072 TFRC:= #0062 LPER:= #005F LNIQ:= #0046 GBS:= #0042 RIWE:= #0054 SCH:= #006D WBF:= #0044 GBST:= #0065 REL:= #0050 CPP:= #006B OLTF:= #0056 RBF1:= #0067 CRP:= #0055 RLET:= #0048 WSCLP:= #005B RLI:= #0064 LNOQ:= #0045 WDSLP:= #005D TFOP:= #0060 INQ:= #0070 RLWE:= #0051 ERR:= #0063 RCPU:= #0075 WPSOC:= #005A WDSTLP:= #005D INDQB:= #0071 SLET:= #0049 SELT:= #004C MCX:= #0000 RHXP:= #0057 GNBA:= #0066 WBF1:= #0068 USE #0 ; ; AU000165 0 0015 LEVEL 1 NAMES: BIT2= #0004 BIT3= #0008 DRV= #0007 BIT4= #0010 BIT5= #0020 BIT6= #0040 IDLE= #FFFF BIT7= #0080 LGSTUS= #000B GSTNCC= #0000 LGHEX= #0002 BIT12= #1000 LGERR= #0001 BIT13= #2000 LGMSB= #0007 BIT14= #4000 BIT15= #8000 LGMPHX= #0008 ROUT= #0000 LGMAX= #000C LTTYP= #0001 LGITA2= #0005 LTU= #0009 LGITA5= #0006 LTMS1= #0004 SUP= #0003 LTMS2= #0005 LTMS3= #0006 CQE= #0002 LTMS4= #0007 LGCST= #0003 FQE= #0000 CSTMPL= #000C LGASCI= #0004 XT= #001E GSTMPL= #0100 LGCOMD= #000A LQE= #0001 LTLNK= #0000 LOG= #0005 LTSND= #0003 ORD= #0001 LGMAD= #0009 LTRCV= #0002 EXPR= #0002 CR= #0004 LTH= #000A BIT0= #0001 SIM= #0006 BIT1= #0002 USE BASE SYSMPI:= #16E7 DRVTMX:= #0002 A:= #000C OCILPN:= #00F0 ICPLPN:= #0018 SYSERR:= #0A07 IDPLPN:= #006C CRILPN:= #00C0 DRVXMX:= #0003 DRVFQE:= #0000 TSTLPN:= #00FC IOILPN:= #0144 BDWCNT:= #0000 SYSCR:= #1FA7 SYSGO:= #04D7 SYSCPT:= #4800 SYSNUE:= #11A7 SYSLTH:= #2C47 SYSMON:= #04F7 SYSRTC:= #0E47 SYSOLO:= #0EE7 SYSSIM:= #2627 ESGLPN:= #000C LPDLPN:= #00CC LOGLPN:= #0120 SYSMXI:= #1927 ODPLPN:= #009C DRVXBF:= #0001 LPILPN:= #00D8 SYSIOX:= #2A27 SYSDBA:= #11A7 MPILPN:= #0078 BDRSIZ:= #0013 SYSLMT:= #0020 ERRLPN:= #0024 CRLPN:= #0114 MXCLPN:= #0090 LTHLPN:= #0150 MONLPN:= #0000 RTCLPN:= #0048 SIMLPN:= #012C BDRBIN:= #0012 BDWSIZ:= #0015 DRVTCR:= #0004 PWFLPN:= #003C MXILPN:= #0084 SYSSMT:= #0009 SYSTSM:= #3FF7 IOXLPN:= #0138 DRVXCR:= #0005 DBALPN:= #0060 SYSLTU:= #2F47 BDRDAT:= #0001 LTLLPN:= #0030 SYSOCD:= #4657 SYSSUP:= #1DE7 SYSEND:= #57FF DRVBDB:= #0001 SYSMUX:= #3AE7 SYSCMI:= #1DE7 SYSCRD:= #4317 SYSICP:= #09C7 SYSPEG:= #F000 BDWFQE:= #0011 SYSIDP:= #22E7 BDWDAT:= #0001 DRVSIZ:= #0006 TSMLPN:= #00A8 SYSPMB:= #57FF LTULPN:= #015C SYSESG:= #0E07 SYSLPD:= #4517 BDRCNT:= #0011 BDRMAX:= #0000 OCDLPN:= #00E4 SYSLOG:= #2267 SUPLPN:= #0108 SYSODP:= #33E7 SYSOPE:= #3C67 CMILPN:= #0054 CRDLPN:= #00B4 USE #0 LIST REQST= #0, INDIC= #1 ; MP I/F STATUS BITS ; DEVCTL=BIT7+BIT4 EOBCTL=BIT7+BIT1 OFRCTL=BIT7+BIT3 STPCTL=BIT7+BIT0 ; ; COMDXFER= BIT3 ENBLXFER= BIT4 BYTEXFER= BIT5 CLRSETUP= COMDXFER+ENBLXFER DEVSETUP= COMDXFER+BYTEXFER+2 ENBSETUP= ENBLXFER+BYTEXFER+0 EOBSETUP= COMDXFER+BYTEXFER+1 OFRSETUP= COMDXFER+BYTEXFER+5 STPSETUP=EOBSETUP XFERSETUP=BYTEXFER+3 ; ;PRCGEN1 ;----------------------------------------------------------------------- ; GENERATE PROCESS DESCRIPTOR FOR FIRST PROCESS. ;----------------------------------------------------------------------- NOLIST ; DATED 771128/FR LOC=-SYSSMHLGT NAME: XNAME1 ; SUBMODULE NAME XNAME2 PRCCNT: XPRTOT ; NUMBER OF PROCESSES SBMLGT: XTOTAL ; SUBMODULE LENGTH RELPRG: XSTOTAL ; RELATIVE PROGRAM ADDRESS PRCBL: XWDS0 ; PROCESS BLOCK LENGTH: THE NUMBER OF WORDS FROM AND ; INCLUDING PRCBL TO AND INCLUDING THE LAST ITEM IN ; THE PROCESS LOAD MODULE DATA TRXLGT: XTXLGT0 ; NUMBER OF WORDS TO BE TRANSFERRED TO THE PROCESS ; EXECUTION AREA FROM THE PROCESS LOAD MODULE AREA. PRCLGT: XLGT0 ; PROCESS LENGTH: THE NUMBER OF WORDS FROM AND ; INCLUDING SR0 TO AND INCLUDING THE LAST ITEM IN ; THE INITIATED PROCESS AT EXECUTION TIME. PRCID: XID0 ; LOGICAL PROCESS IDENTIFICATION NUMBER, 1 WORD SR0: 0 ; SAVE AREA FOR REGISTER 0, 1 WORD SR1: 0 ; SAVE AREA FOR REGISTER 1, 1 WORD SR2: 0 ; SAVE AREA FOR REGISTER 2, 1 WORD SR3: 0 ; SAVE AREA FOR REGISTER 3, 1 WORD SR4: 0 ; SAVE AREA FOR REGISTER 4, 1 WORD SR5: 0 ; SAVE AREA FOR REGISTER 5, 1 WORD SR6: 0 ; SAVE AREA FOR REGISTER 6, 1 WORD SR7: 0 ; SAVE AREA FOR REGISTER 7, 1 WORD BAS: 0 ; SAVE AREA FOR DATA BASE REGISTER, 1 WORD MBAS: 0 ; SAVE AREA FOR MODIFY REGISTER, 1 WORD PRG: 0 ; SAVE AREA FOR PROGRAM BASE REGISTER, 1 WORD PRPC: XPRPC0 ; SAVE AREA FOR PROGRAM COUNTER REGISTER, 1 WORD TIM: XTIM0 ; SAVE AREA FOR TIME PSW: XMASK0 ; SAVE AREA FOR PROCESS STATUS WORD, 1 WORD PRCLNK: 0 ; PROCESS LINK, CONTAINS BAS OF THE NEXT LOWER LEVEL ; PROCESS LINTACT:XERROR0 ; ADDRESS OF ROUTINE FOR PROCESSING LOCAL INTERRUPTS LINTRET:0 ; RETURN LINK FOR LOCAL INTERRUPT AND SOME MONITOR ; FUNCTIONS LINTCAUS: ; CAUSE CODE LOCAL INTERRUPT: 0 ; 0 FOR A TIMER INTERRUPT ; 1 FOR AN ILLEGAL INSTRUCTION ; OR TRAP ; 2 FOR A HARDWARE TIME OUT ; 3 FOR A MEMORY PARITY ERROR DEV: 0 ; ADDRESS AND PRIORITY (8 BIT) OF INTERRUPTING ; IO-DEVICE. WILL CONTAIN -1 IF THE PROCESS WAS ; LOADED BECAUSE OF A CPU INTERRUPT OR BECAUSE ; ANOTHER PROCESS EXECUTED A LDP INSTRUCTION. TIMRSET:XTIM0 ; TIME REGISTER RESET VALUE TSWITCH:0 ; TEST SWITCH GSTPTR: 0 ; POINTER TO GST XPRCNT= 1, XTOT=0 LIST ; L3050CTL: <: :> ; RECEIVED CONTROL CHARACTERS 0 ; FIRST RECEIVED CHAR (RIGHTMOST) 0 ; SECND RECEIVED CHAR (RIGHTMOST) ; COMD: 0 ; BOOT: BOOT2 BOOT2: 0, 0, 0, 0 ; FIRST FOUR WORDS (LETTER DUMMY) 1, 21, 2, PRIBUF ; OFR COM'D BOOT CP FROM MP BOOT2S: 0, 0, 0, 0, 1, 21, 2, SECBUF BOOT8: 0, 0, 0, 0, 1, 21, 1*#100+8, INBUF ; ; IOXSIMADDR: #06 ; DEVICE ADDRESS OF THE IOX SIMULATOR MODULE DEVICEADDR: #80 ; VALID CP ADDRESSES #40 & #80 ; USEC: 75 ; COUNTER FOR 150 USEC DELAY MSEC1: 500 ; COUNTER FOR 1 MSEC DELAY MSEC2: 1000 ; 2 MSEC DELAY MSEC5: 2500 ; 5 MSEC DELAY MSEC20: 10000, 60000 ; 20 AND 120 MSECS DELAY ;----------------------------------------------------------------------- ; 1000 ; NO OF LOOP BETWEEN PRINT-OUTS LOOPCNT:0 ; REQSTS: 0 ; NO OF REQ'STS RECEIVED CPINTRPT:0 ; INTEGRATED STATUS FROM CP, MP TO CP TRANSFER 0 ; - CP TO MP (DUMP) ; ERROR: #0000 ; NON ZERO MEANS ERROR DETECTED COUNT: 0 ; BIT 0 NO OF WORDS RECEIVED MISMATCHING SENT 0 ; BIT 1 COUNT 0 ; BIT 2 COUNT 0 ; BIT 3 COUNT 0 ; BIT 4 NO OF MISSING REQUESTS 0 ; BIT 5 MISSING REQUEST AFTER 2 MSECS 0 ; BIT 6 TOO MANY REQUESTS RECEIVED,I.E. EOB 0 ; BIT 7 ; STBYTE: 0 ; IOX SIMULATOR STATUS BEFORE ENABLE ; ; IOX STATUS AFTER ENABLE 0 ; IF MP -> CP 0 ; IF CP -> MP ; 0, REPEAT 53 ; FORCE PROGR AM TO START AT #3100 0, REPEAT 10 ; STACK: 0 ; HEADER: BYTES <:<13> ID STATUS REQ'S INTR'T - OVER MS'N:> <:G LONG - - - MATCH ENBL MP-CP CP-MP<13>:> BYTES=2*(LOC-1-HEADER) ; PRIBUF: #1000, #F00, #0FF, 16 ; START ADDR, SECTION, BASE, COUNT #0101, #1010, #2222, #3333, #4444, #5555, #6666, #7777 #8888, #9999, #AAAA, #BBBB, #CCCC, #DDDD, #EEEE, #FFFF #FFF8, 0 ; CORRESPONDING CHECKSUM ; SECBUF: #0FF8, #0F0, #F00, 16 ; START ADDR, SECTION, BASE, COUNT #FEEF, #EDDE, #DCCD, #CBBC, #BAAB, #A99A, #9889, #8778 #7667, #6556, #5445, #4334, #3223, #2112, #1001, #0FF7 #FFFF, 0 ; CORRESPONDING CHECKSUM ; ; ;PRCGEN2 NOLIST XWDS0=LOC+SR0-PRCBL, XTOT=XTOT+LOC+SR0-NAME, XTXLGT0=XWDS0-3 LIST LOGMSG: LOC=LOC+1 ; ALLOCATE FOR NO OF CHARS TO BE PRINTED LOC=LOC+100 ; ALLOCATE FOR PRINT BUFFER HEXDUMP:LOC=LOC+1 ; 6 BYTES IN EACH HEX WORD ; LOC=LOC+6 ; ALLOCATE FOR HEX DUMP INBUF: LOC=LOC+128 ; ;PRCGEN3 NOLIST XLGT0=LOC LIST USE PROG LOC=0 ;----------------------------------------------------------------------- INITIALIZE: MOV PRCID R3 ; OWN PROCESS LOGICAL NO MOV BAS R4 ; MON CRP MON ERR MOVC ORD R0 ; ACTIVATE OWN PROCESS MON INQ, MON ERR ; MON WPSTLP 10,<:DRV SPECIAL 771207<13>:> MON RTI ; MOVC <:<13>:> R0 MON WSCOC ; MOVC LOGMSG R4 ; POINT START OUTPUT AREAS MOVC <: :> R0 ; MOVC INBUF-LOGMSG R2 ; FOR I:=1 UNTIL AREA CLEARED INIT5: MOV R0 X4 ; BLANK OFF OUTPUT AREA ADDC 1 R4 ; POINT NEXT SOB R2 INIT5 ; END FOR UNTIL; MOVC LOGMSG R4 ; POINT START OUTPUT BUFFER MOVC 4+3*6+2+8*6+3*6+1 X4 ; PREPARE BYTE COUNT ;----------------------------------------------------------------------- ; ; THE BELOW CODE WILL READ DATA FROM THE OC AND CODE THE RECEIVED ; DATA AS FOLLOWS: THE FIRST CHAR WILL BE MERGED WITH THE FIRST ; CHARACTER AFTER A SPACE. THIS WILL MAKE UP THE KEY TO BE USED ; WHEN DETERMINING THE LOOP TO BE SET UP: ; O0, O1, O2, O3, OI, DM, DI, E , DS, MR, MC. ; THE CONTROL WORD IS SAVED IN L3050CTL ; ;----------------------------------------------------------------------- CPCLEAR: MOVC <:>:> R0 MON WSCOC MOVC <: :> R0 MOVC 128 R5 ; FOR I:=1 UNTIL 128 CPCL5: ; DO MOV R0 INBUF-1.X5 ; RESET INCOMING DATA AREA SOB R5 CPCL5 ; END FOR UNTIL INBUF CLEARED; ; MOVC INBUF R4 ; DO UNTIL CHAR <CR> MET READOC: MON RSCOC ; GET SINGLE CHAR FROM OC MON WSCOC ; MON WSCLP ; REPEAT ON LP; MOV R0 X4 ; SAVE ENTERED CHAR INEP R0 <:<13>:> ; IF <CR> THEN ADDC 1 R4 ; POINT NEXT OUTPUT ADDR JMP READOC ; END DO UNTIL <CR>; ; MOVC <: :> X4 ; ELIMINATE THE <CR>; MOVC INBUF R4 ; DO UNTIL FIRST SPACE MET REA10: INEP X4 <: :> ; ADDC 1 R4 ; POINT NEXT RECEIVED CHAR JMP REA10 ; END DO UNTIL SPACE; ; MOV 1. X4 R0 ; GET FIRST CHAR AFTER SPECE; MOV R0 L3050CTL+2 ; SAVE SECOND READ CHAR SLL R0 8 ; SET UP AS MOST SIGNIFICANT MOV INBUF R1 ; GET FIRST RECEIVED CHAR MOV R1 L3050CTL+1 IOR R1 R0 ; MERGE MOV R0 L3050CTL ; AND SAVE AS LOOP CONTROL; ; MOVC 128 R5 ; FOR I:=1 UNTIL 128 REA80: ; DO CLR INBUF-1.X5 ; RESET INCOMING DATA AREA SOB R5 REA80 ; END FOR UNTIL INBUF CLEARED; ; ; ; PRINT HEADER FOR TEST OUTPUT ; CPDRIVER: MOVC HEADER R6 ; POINT TO HEADER IEQ X6 0 ; IF NOT FIRST TIME JMP CPD80 ; THEN SKIP HEADER; MOV L3050CTL+1 R0 ; INE R0 <:O:> ; IF NON-OFR JMP CPD80 MOVC <:<13>:> R0 MON WSCOC ; LINE FEED ON CR & LP; MON WSCLP MON WDSTLP ; GO PRINT HEADER ON LP MOVC <:-:> R0 MOV HEADER R2 ; FOR I:=1 UNTIL HEADER LENGTH CPD50: MON WSCLP ; DO SOB R2 CPD50 ; PRINT BARS UNDERNEATH; MOVC HEADER R6 CLR 0. X6 ; FLAG END CPD80: MOV DEVICEADDR R5 ; GET CURRENT CP DEVICE ADDR IEQ R5 #80 ; IF OLD DEVICE ADDR IN COM'D #80 MOVC #00 R5 ; THEN RESET; ADDC #40 R5 ; DETERMINE NEXT CP DEVICE ADDR; MOV R5 DEVICEADDR ; ; MOV L3050CTL R7 ; POINT CONTROL LETTER IEQ R7 <:O0:>, JMP OFRLOOP; OFR NORMAL IEQ R7 <:O1:>, JMP OFRLOOP; OFR, EOB MP TO CP IEQ R7 <:O2:>, JMP OFRLOOP; OFR, EOB CP TO MP IEQ R7 <:O3:>, JMP OFRLOOP; OFR, OEB BOTH DIRECTIONS IEQ R7 <:OI:>, JMP OFRLOOP; OFR INVALID IEQ R7 <:DI:>, JMP DEVCMD ; DEV INTERRUPT PERMIT IEQ R7 <:DM:>, JMP DEVCMD ; DEV MASTER CLEAR IEQ R7 <:DS:>, JMP STPCMD ; DEVICE STOP IEQ R7 <:E :>, JMP EOBCMD ; EOB IEQ R7 <:MR:>, JMP CLRCMD ; MASTER RESET INE R7 <:MC:>,JMP CPCLEAR ; ILLIGAL ID ; ; MASTER CLEAR BOTH CPS AND RETURN FOR MORE DATA; MOVC #40<8 R1 ; CP DEVICE ADDRESSS MOVC #C0<8+DEVCTL R2 ; FOLLOWED BY COM'D AND DATA BYTE; MOVC DEVSETUP R3 ; SET UP MP I/F CONTROL BYTE JMP S5 FILLIF MOVC #80<8 R1 ; CP DEVICE ADDRESSS MOVC #C0<8+DEVCTL R2 ; FOLLOWED BY COM'D AND DATA BYTE; MOVC DEVSETUP R3 ; SET UP MP I/F CONTROL BYTE JMP S5 FILLIF JMP CPCLEAR ; ;----------------------------------------------------------------------- ; ; LOOP ON SINGLE COM'D ; ;----------------------------------------------------------------------- ; CLRCMD: ; COM'D&ENBL LINE HIGH AT SAME TIME MOVC CLRSETUP R3 ; SET UP FOR MASTER RESET OF CP JMP SIN90 ; DEVCMD: ;ADDR, COM'D, DATA (1) MOV DEVICEADDR R1 ; DEVICE ADDR SLL R1 8 ; FIRST TO BE SENT; MOVC #C0<8+DEVCTL R2 ; FORCE MASTER CLEAR MOV L3050CTL R7 ; GET CONTROL IEQ R7 <:DI:> ; IF INTERRUPT PERMIT MOVC #A0<8+DEVCTL R2 ; THEN CHANGE DAT1 FIELD MOVC DEVSETUP R3 ; SETUP MP SIM GO COM'D JMP SIN90 ; EOBCMD: ;ADDR, COM'D MOV DEVICEADDR R2 ADDC EOBCTL<8 R2 ; CONTROL BYTE SECOND MOVC EOBSETUP R3 ; SETUP MP SIM GO COM'D JMP SIN90 ; STPCMD: ;ADDR,COM'D MOV DEVICEADDR R2 ADDC STPCTL<8 R2 ; DEVICE STOP COM'D SETUP MOVC STPSETUP R3 ; SETUP MP SIM GO COM'D ; SIN90: JMP S5 FILLIF MOV USEC R5 ; FOR I:=0 UNTIL 150 USEC SIND5: SOB R5 SIND5 ; DO WAIT; JMP CPDRIVER ;----------------------------------------------------------------------- ; ; SECTION FOR LOOPING ON BUILT-IN OFR COM'DS. ; ;----------------------------------------------------------------------- OFRLOOP: MOVC STBYTE+8-LOOPCNT R5 ; FOR I:=1 UNTIL AREA SIZE OFR01: ; DO CLR LOOPCNT-1.X5 ; CLEAR OFF WORD SOB R5 OFR01 ; END CLEARING AREA; ; MOVC STACK R7 MOV BOOT R5 ; FIRST XFER MODE BEING MP TO CP ; OFR10: MOV R5 COMD ; SAVE POINTER TO XFER 'LETTER' ; ; SEND MASTER RESET (MASTER CLEAR IF PATCHED) TO THE CP MOVC CLRSETUP R3 ; RISE COM'D AND ENBL LINE AT JMP OFR15 ;*** SKIP THE DEV MASTER CLEAR *** MOV DEVICEADDR R1 ; ADDR, COM'D, DATA BYTE SLL R1 8 ; DEVICE ADDRESS FIRST MOVC #C0<8+DEVCTL R2 ; FORCE A DEV MASTER CLEAR MOVC DEVSETUP R3 ; SETUP FOR A DEV COM8D TO GO JMP S5 FILLIF ; GO SEND COM'D MOV MSEC20 R5 ; FOR I:=1 UNTIL 20 MSEC JMP MPD20 ; DO OFR15: JMP S5 FILLIF ; SIMULTANEOUSLY MOV MSEC1 R5 ; FOR I:=0 UNTIL 1 MSEC MPD20: SOB R5 MPD20 ; DO WAIT; ; ; SEND THE OFR TO THE CP ; MOV DEVICEADDR R2 MOVC OFRCTL<8 R0 ; OFR COM'D BYTE SECOND TO BE SENT IOR R2 R0 ; MERGED WITH DEVICE ADDRESS MOV COMD R5 ; THEN GET BUILT-IN OFR'S; MOVL LTMS2. X5 R12 ; SWP R1 ; R1:= DAT FIELDS MOV L3050CTL+2 R5 ; GET TYPE CONTROL IEQ R5 <:I:> ; IF INVALID OFR MOVC #25 R2 ; THEN FORCE SO; MOVC OFRSETUP R3 JMP S5 FILLIF MOV MSEC1 R5 ; FOR I:=0 UNTIL 1 MSEC MPD30: SOB R5 MPD30 ; DO WAIT; ; MOV COMD R5 ; POINT TO SIM'S LETTER MOV LTMS4. X5 R6 ; POINT ASSICIATED BUFFER MOV LTMS2. X5 R4 ; SET UP LOOP COUNT ;------------------------------------------------------ ; ; WAIT FOR REQUEST, SEND ENABLE, SEND/RECEIVE DATA ; ;------------------------------------------------------ OFR40: ; FOR I:=1 UNTIL INTR'PT RECEIVED MOVC 0 R5 MOV IOXSIMADDR R2 SIO R0 R2 SBZ R0 REQST ; IF REQUEST FROM CP MISSING JMP OFR50 ; THEN MOV ERROR. X5 R1 ; GET FLAGS SETS R1 4 MOV R1 ERROR. X5 ; SAVE STATUS; INC COUNT+4.X5 ; UPDATE NO OF MISSING MOV MSEC5 R0 ; DO UNTIL 5 MSECS ELAPSED MPD45: SOB R0 MPD45 ; WAIT; SIO R0 R2 ; GET INDICATORS SBZ R0 REQST ; IF REQUEST STILL MISSING JMP OFR50 ; THEN SETS R1 5 ; FLAG MISSING REQST MOV R1 ERROR. X5 ; SAVE STATUS INC COUNT+5. X5 ; UPDATE NO OF NOGO'S; JMP OFR90 ; NO MORE WORK THIS LOOP; OFR50: ; END LOOK FOR REQ'ST INC REQSTS.X5 ; INDICATE NEW REQUEST SEEN BY MP MOV STBYTE R1 ; GET OLD I/F STATUS IOR R0 R1 ; INTEGRATE WITH NEW ONE MOV R1 STBYTE ; AND SAVE ; ; MODC BIT12+BIT13 SIO R0 R2 ; CLEAR STATUS AND COUNT MOV DEVICEADDR R2 SLL R2 8 MOVC ENBSETUP R3 JMP S5 FILLIF ; MOV IOXSIMADDR R2 ; SIO R0 R2 ; GET STATUS OF IOX SIM I/F SBZ R0 INDIC ; IF NO INDICATOR JMP OFR80 ; THEN MOV COMD R5 ; POINT SIM'S LETTER MOV LTMS3. X5 R5 SBZ R5 8 ; IF MP TO CP MODE JMP CPELSE ; THEN CPTHEN: MOV STBYTE+1 R1 ; GET OLD I/F STATUS IOR R0 R1 ; INTEGRATE WITH NEW ONE MOV R1 STBYTE+1 ; AND SAVE ; MOVL 0. X6 R12 MOVC XFERSETUP R3 JMP S5 FILLIF JMP CPDONE CPELSE: ; ELSE SERVE CP TO MP MODE MOV STBYTE+2 R1 ; GET OLD I/F STATUS IOR R0 R1 ; INTEGRATE WITH NEW ONE MOV R1 STBYTE+2 ; AND SAVE ; MODC #300 RIO R0 R2 MODC #200 RIO R1 R2 SRL R1 8 SRLL R0 8 ; MODC #100 RIO R1 R2 MODC #000 RIO R2 R2 SRL R2 8 SRLL R1 8 MOVL R01 0. X6 ; CPDONE: INE R4 11 ; IF TIME TO CHECK IF EOB TO GO JMP OFR70 ; THEN MOV L3050CTL+2 R0 ; GET OFR CONTROL TYPE XTR R0 2 ; ISOLATE EOB CONTROL BITS; MOV COMD R2 ; GET TYPE OF OFR LOOP; SEQP R2 BOOT8 ; IF DURING MP TO CP DMA IBN R0 0 ; AND EOB TO BE INTRODUCED SETS R0 2 ; SNEP R2 BOOT8 ; OR DURING CP TO MP DMA IBN R0 1 ; AND EOB TO BE INTROD SETS R0 2 ; IBZ R0 2 ; JMP OFR70 ; THEN MOV DEVICEADDR R2 ; SET UP DEVICE ADDRESS, ADDC EOBCTL<8 R2 ; CONTROL BITS FOR CP MOVC EOBSETUP R3 ; SETUP TO BE EOB JMP S5 FILLIF ; GO SEND TO CP OFR70: ; END TIME TO SEND EOB; ; ADDC 2 R6 ; POINT NEXT LOCATION IN BUFF ADDC -2 R4 ; UPDATE NO OF WORDS LEFT IN XFER SLT R4 -1 ; IF NO MORE DATA LEFT THEN EOB JMP OFR40 MOVC 0 R5 ; MOV ERROR. X5 R0 SETS R0 6 ; FLAG EOB ERROR INC COUNT+6.X5 ; MOV R0 ERROR. X5 JMP OFR40 ; END DO WHILE REQUESTS FROM CP; ;------------------------------------------------------ ; ; READ THE INTR'PT BYTE FROM THE CP ; ;------------------------------------------------------ OFR80: ; INTR'PT RECEIVED FROM CP MODC #300 SIO R0 R2 ; MOVC CPINTRPT R1 ; POINT MP TO CP STATUS WORD MOV COMD R5 ; GET CURRENT TYPE OF TRANSFER IEQ R5 BOOT8 ; IF AUTO INPUT (CP TO MP DUMP) ADDC 1 R1 ; THEN POINT THAT STATUS WORD; IOR R0 X1 ; INTEGRATE STATUS INTO OLD ONE; ; OFR90: MODC BIT12+BIT13 SIO R0 R2 ; RESET COUNTER ANS STATUS MOV COMD R5 INEP R5 BOOT8 ; IF LAST WAS MP TO CP BOOT LOAD MOVC BOOT8 R5 ; THEN REVERSE JMP OFR99 ; ELSE CHECK IF XFER OK MOV BOOT R4 ; POINT MP->CP BOOT LETTER MOV LTMS4. X4 R4 ; START OF OUTBOUND BUFFER; MOVC BOOT8 R6 ; POINT CP->MP BOOT LETTER MOV LTMS2. X6 R3 ; NO OF DATA RECEIVED MOV LTMS4. X6 R6 ; START INBOUND BUFFER; MOVC 0 R5 ; COMPENSATE OWN BASE MOV ERROR. X5 R1 OFR95: ; DO UNTIL ALL XFER'D COMPARED MOV 0. X4 R0 ; GET OUTBOUND XOR X6 R0 ; COMPARE TO RECEIVED ONE INEP R0 0 ; IF NOT MATCHING JMP S5 XFERERR ; THEN GO FLAG SO; MOVC 0 R5 MOV R5 X6 ; RESET RECEIVE FIELD INCD R4 R6 SOB R3 OFR95 ; END DO UNTIL; MOV R1 ERROR ; INC LOOPCNT.X5 ; MOV BOOT R0 ; GET CURRENT TYPE OF BOOT COM'D MOVC BOOT2 R5 ; POINT PRIMARY BOOT LETTER IEQ R0 R5 ; IF CURRENT IDENTICAL TO PRIMARY MOVC BOOT2S R5 ; THEN FORCE SECONDARY NEXT; MOV R5 BOOT ; SAVE POINTER MP TO CP LETTER; ; ; CHECK IF TIME TO PRINT STATUS ; MOV LOOPCNT R0 ; GET LOOPCOUNT MOV LOOPCNT-1 R1 ; FLAG WHEN TIME TO RRINT IEQ R0 R1 ; IF NO OF LOOP MATCHES JMP LOGDATA ; THEN GO LOG STATUS; OFR99: ; END SETTING MODE UP; JMP OFR10 ; GO PERFORM NEXT TEST LOOP; ;----------------------------------------------------------------------- ; ; PROCEDURE PREPARE THE MP IOX SIMULATOR BUFFERS AND SEND DATA TO L3050 ; ; PLEASE REFER NIC/557 - IOX SIM DRIVER ; FILLIF: STC 3 MOV IOXSIMADDR R1 ; GET PROPER DEVICE ADDRESS ADDC #500 R1 ; MOVC 4 R2 FILLLOOP: CIO X7 R1 ADDC 1 R7 ADDC #100 R1 SOB R2 FILLLOOP JMP X5 ; ;----------------------------------------------------------------------- ; ; PROCEDURE FOR LOGGING AND RESETTING THE STATUS INDICATORS ; ; RETURN: ; CPDRIVER ; LOGDATA: MOVC <:<10>:> R0 MON WSCLP ; FORCE NEW LINE MOVC 4 R0 ; SET UP HEX BUFFER CHAR COUNT MOV R0 HEXDUMP MOV DEVICEADDR R0 ; GET CURRENT CP DEVICE MOVC HEXDUMP+1 R5 ; POINT FIRST CHAR JMP S6 HEX00 MOVC HEXDUMP R6 ; GO TO PRINT MON WDSTLP ; ON LP; ; MOVC <: :> R0 ; BLANK OFF MON WSCLP MON WSCLP MOV ERROR R1 ; GET ERROR FLAGS MOVC 8 R2 ; FOR I:=1 UNTIL 8 LOG10: ; DO MOVC <:1:> R0 ; DEFAULT HIGH IBZ R1 7 ; IF LOW MOVC <:.:> R0 ; THEN ADJUST ACCORDINGLY; MON WSCLP ; PRINT STATUS ON LP SLL R1 1 ; REMOVE PRINTED BIT; SOB R2 LOG10 ; END FOR UNTIL 16 ; MOVC LOGMSG+3 R5 ; POINT DEDICATED OUTPUT AREA MOV REQSTS R0 ; GET NO OF REQ'STS RECEIVED JMP S6 LOGDEC6 ; AND GO PRINT; MOV CPINTRPT R0 JMP S6 HEX ; GO CONVERT TO HEX MOV CPINTRPT+1 R0 JMP S6 HEX ; MOVC <: :> X5 ; SEPARATE BY BLANK ADDC 1 R5 ; MOV COUNT+7 R0 JMP S6 LOGDEC6 ; MOV COUNT+6 R0 JMP S6 LOGDEC6 ; MOV COUNT+5 R0 JMP S6 LOGDEC6 ; MOV COUNT+4 R0 JMP S6 LOGDEC6 ; MOV COUNT+3 R0 JMP S6 LOGDEC6 ; MOV COUNT+2 R0 JMP S6 LOGDEC6 ; MOV COUNT+1 R0 JMP S6 LOGDEC6 ; MOV COUNT R0 ; JMP S6 LOGDEC6 ; MOV STBYTE R0 ; GET INTEGRATED BEFORE ENBL JMP S6 HEX ; STATUS CONVERTED TO ASCII MOV STBYTE+1 R0 ; GET MP -> CP AFTER ENABLE JMP S6 HEX ; STATUS CONVERTED TO ASCII MOV STBYTE+2 R0 ; GET CP -> MP AFTER ENABLE JMP S6 HEX ; STATUS CONVERTED TO ASCII ; MOVC LOGMSG R6 MON WDSTLP ; PRINT CONVERTED NUMBERS ON LP; JMP CPDRIVER ; GO NEW TEST RUN; ;----------------------------------------------------------------------- ; ; PROCEDURE FOR CONVERTING A 16-BIT BINARY TO DECIMAL ASCII; LOGDEC6: MOVC <: :> X5 ; ALL NUMBERS BELOW 64 KW MOVC 5 R2 ; FIRST BYTE RIGHTMOST MOVC 10000 R3 ; SET UP DIVIDEND MOVC 0 R4 LOGD10: MOVC 0 R1 DIV R3 R0 ADDC <:0:> R0 IBZP R2 #0 ; IF EVEN MOV R0 X5 JMP LOGD50 SWP R0 IOR R0 X5 ADDC 1 R5 LOGD50: MOV R1 R0 MOVC 10 R1 DIV R1 R3 SOB R2 LOGD10 JMP X6 ; RETURN TO CALLER; ; ;----------------------------------------------------------------------- ; PROCEDURE CONVERT FROM BINARY TO HEX ASCII; ; ; REGISTERS CALL EXIT ; R0 BINARY KEPT ; R1,R7 - DESTROYED (WORK) ; R5 POINT OUTPUT SAME+3 (AFTER HEX) ; R6 LINK KEPT ; RETURN ; LINK ;----------------------------------------------------------------------- HEX: MOVC <: :> X5 ; FIRST TO BE 2 BLANKS ADDC 1 R5 ; ADDRESS FIRST HEX OUT-CHAR HEX00: MOVC 4 R7 ; FOR I:=1 UNTIL 4 HEX10: ; DO SLC R0 4 ; POSITION NXT ITEM MOV R0 R1 ; XTR R1 4 ; ISOLATE ITEM IGE R1 10 ; IF 'A-F' ADDC <:A:>-<:0:>-10 R1 ; THEN COMPENSATE; ADDC <:0:> R1 ; FORCE ITEM TO ASCII IBZP R7 #0 ; IF EVEN MOV R1 X5 ; THEN FIRST CHAR RIGHTMOST JMP HEX90 ; ELSE SWP R1 ; POSITION NEW AS LEFTMOST IOR R1 X5 ; CONCATENATE CHARS; ADDC 1 R5 ; HEX90: SOB R7 HEX10 ; END FOR UNTIL; JMP X6 ; RETURN TO CALLER ; ;----------------------------------------------------------------------- ; PROCEDURE DATA SENT AND DATA RECEIVED NOT MATCHING ; ; THIS PROCEDURE CAN BE PATCHED TO WRITE THE BUFFER EACH TIME ; AN ERROR IN A TRANSFER HAS BEEN DETECTED; ; XFERERR: SETS R1 0 ; THEN FLAG MISMATCH MOV COUNT+0 R0 ; GET NO OF ERRORS DETECTED ADDC 1 R0 ; UPDATE MOV R0 COUNT+0 JMP X5 ;*** NOP TO ENABLE PRINT-OUT *** STC 6 ; SAVE REGS MOV R7 STACK ; REG 7 AS WELL MOVC <:<10>:> R0 ; FOR NEW LINE MON WSCLP MOVC <: :> R0 ; BLANK OFF MON WSCLP MON WSCLP MON WSCLP MON WSCLP MON WSCLP MON WSCLP MOVC 4 R0 ; NO OF BYTES INVONVED MOV R0 HEXDUMP ; PREPARE BUFFER MOVC INBUF R4 ; POINT FIRST OF RECEIVED DATA MOVC BOOT8 R5 ; POINT RECEIVE LETTER MOV LTMS2. X5 R2 ; FOR I:=1 UNTIL NO OF DMA WORDS XFE10: ; DO MOVC HEXDUMP+1 R5 ; POINT DEDICATED BUFER MOV X4 R0 ; GET NEXT ITEM JMP S6 HEX00 ; GO CONVERT BINARY TO ASCII MOVC HEXDUMP R6 MON WDSTLP ADDC 1 R4 ; POINT NEXT BUFFER LOCATION SOB R2 XFE10 ; END FOR UNTIL DONE MOV STACK R7 ; RE-ESTABLISH STACL POINTER UNS 6 ; JMP X5 ; RETURN CALLER; ;--------------------------------------- LOCALINT: MON ERR USE BASE XNAME1=<:TS:>, XNAME2=<:T:> XPRPC0= INITIALIZE XMASK0= #E000 XERROR0=LOCALINT ; ;PRCGEN4 NOLIST XNAME1=0, XNAME2=0 XID0=0, XID1=0, XID2=0 XPRPC0=0, XPRPC1=0, XPRPC2=0 XTIM0=0, XTIM1=0 XTIM2=0 XMASK0=#8000, XMASK1=#8000, XMASK2=#8000 XERROR0=0, XERROR1=0, XERROR2=0 XPRTOT= XPRCNT, XSTOTAL=XTOT XTOTAL=XSTOTAL+LOC LIST ;FF\f END ;PRCGEN4 NOLIST XNAME1=0, XNAME2=0