1PASS TITLE ASSEMBLER IO ;LAST EDITED 1/22/72 FOR COMPATIBILITY WITH MIDAS 77 P"=1 AA=3 A"=4 B=5 C=6 D=7 F=14 T=10 TT=11 SYM=12 LINK=13 TAPAC"==A DEFINE INFOR1 A,B PRINTX /A =B / TERMIN DEFINE INFORM A INFOR1 A,\A TERMIN BSUP=40000 INFORM BSUP DSPLY==0 NDIR"==3 ;NUMBER OF FILE DIRECTORIES TYPR1==(37000) ;UUO, TYPE OUT ASCIZ CHARACTER STRING IFE BSUP,[ NUWBUF"==4 NURBUF"==3 ] IFN BSUP,[ NUWBUF"==20 NURBUF"==20 ] DECDMP==37400+1+BSUP MACCR==37777+BSUP ;MACDMP AREA COMMAND POINTER FOO==. BLKSPC"==3 DISCHN"==7 DSCHNA"==<200>_-DISCHN RDCHN==4î PCHCHN==3 APRCHN"==6 CLKCHN"==APRCHN ;FOR "NEW" MACDMP'S APRINT"==105 ;FOR H'S TD10 MACDMP, I GUESS TPCHN"==2 TPCHNA"==40 UTCCHN"==PCHCHN LPTCHN==PCHCHN TTYCHN==6 FLGCHN"==PCHCHN FLCHNA"==<200>_-FLGCHN DISIZE"==400 ;SIZE DISPLAY BUFFER LOC 40+APRCHN+APRCHN JSR IAPRBRK LOC 40+RDCHN+RDCHN JSR RBRK LOC 40+PCHCHN+PCHCHN JSR PBRK LOC FOO GO: CONO 633550+APRCHN CONO PI,12233 MOVE P,[(,-LPDL")PDL" CONO UTC,0 CONO DC,0 CONO PTR,20 CONO PTR,0 CONO LPT,1000 CONO TTY,TTYCHN AOSN LOISW PUSHJ P,LOIIN ;ADD CRUD TO INITIAL SYMBOL TABLE SETZM RCHMOD" ;SET CHAR READING MODE TO NORMAL MOVEI A,0 PUSHJ P,RCHSET" ;ALL RCH'S TO COME HERE (STEAD MACRO PROCESSOR) IFN DSPLY,PUSHJ P,DISINI" GOX: SETOM FSHFLG CLEARM STOPF CONO TTY,10+TTYCHN SKIPG TICC JRST .+3 PUSHJ P,TYI" JRST .-3 CLEARM FSHFLG GO2": SKIPL FSHFLG SKIPGE STOPF JRST GOX PUSHJ P,CRR MOVE A,[(700)CBUF-1 MOVEM A,CPTR MOVEI A,141 IDPB A,CPTR GO1: SETOM DOLS PUSHJ P,TYI IDPB A,CPTR CAIN A,177 JRST RUBOUT CAIE A,"$ JRST GO1 AOSG DOLS JRST GO1 1 î MOVEI A,141 IDPB A,CPTR CD: PUSHJ P,CRR MOVE A,[(350700)CBUF MOVEM A,CPTR CLEARM NUM RET: CD1: SETOM ARG CLEARM ARG2 CD3: PUSHJ P,RTYI CAIL A,60 CAIL A,72 JRST CD2 SUBI A,60 MOVEM A,NUM CLEARM ARG JRST CD3 CD2: MOVE B,NUM MOVE C,NUM1 CAIN A,"E JRST ECMD CAIN A,", JRST COMMA CAIN A,"$ JRST GO2 CAIN A,"A JRST AASSEM MOVEI D,0 CAIN A,"I MOVEI D,INIT" CAIN A,"O MOVEI D,PS1" CAIN A,"T MOVEI D,PS2" CAIN A,"S MOVEI D,PLOD" CAIN A,"L MOVEI D,PSYMS" JUMPN D,AASEM1 CAIE A,"D JRET: JRST CD1 PUSHJ P,IOWAT JRST DECDMP RUBOUT: IBP CPTR IBP CPTR IBP CPTR SOS B,CPTR ILDB A,B CAIN A,141 JRST GO2 PUSHJ P,TYO" JRST GO1 COMMA: AOSE ARG SETOM ARG2 MOVE A,NUM MOVEM A,NUM1 CLEARM NUM JRST CD3 ERR: 0 MOVEI A,"? PUSHJ P,TYO JRST GO2 RCHTT: ILDB TT,CPTR CAIE TT,141 POPJ P, JRST GO2 RTYI: ILDB A,CPTR CAIE A,141 CPOPJ: POPJ P, JRST GO2 RPA": INCHR: JRST INCHR1 ;OR ILDB A,UREDP CAIN A,3 JRST INCHR3 CAIE A,141 POPJ P, INCHR3": PUSHJ P,UREDT" (SIXBIT /NED/) POPJ P, INCHR1: PUSHJ P,PIRPA TRZN A,200 POPJ P, JRST TYI ;TABLE FOR RCHSET RCHTBL": MOVEI A,RCHFIL ;0 => INPUT FROM FILE PUSHJ P,RCHMAC" ;1 => INPUT FROM MACRO RCHFIL: PUSHJ P,RPA ;GETCHR, GET CHARACTER CAIG A,14 ;CHECK FOR SPECIAL XCT RPATAB(A) ;SPECIAL, DO THE APPROPRIATE THING JRST RRL1" ;RR1 (SIXBIT /IAE/) (SIXBIT /IAE/) ;RREOF, SHOULDN'T GET TO HERE PUSHJ P,RPA ;RRL1 PUSHJ P,RPA ;SEMIC CAIG A,15 XCT RPATAB(A) JRST SEMIC" RPATAB: REPEAT ^J,JFCL AOS CLNN" ;LINE FEED JFCL ;13 PUSHJ P,RPAFF ;FORM FEED JRST SEMICR" ;(SEMIC ONLY) CR, EXIT FROM LOOP RPAFF: AOS CPGN" ;FORM FEED SETZM CLNN POPJ P, ;THIS CODING IS MODIFIED BUT APPARENTLY (EXCEPT OUTP) NOT USED OUTCHR: OUTU: SKIPA ;OR PUSHJ P,UWR" JRST TPFUL OUTP: PUSHJ P,PIPUN ;OR CPOPJ (THIS INSTR USED AT TFEED) OUTLPT: JRST CPOPJ ;OR PILPT ECMD: PUSH P,JRET ;E COMMAND SKIPGE ARG JRST ECMD1 MOVE A,B PUSHJ P,FILEST" JRST TMD ECMD1: PUSHJ P,RCHTT CAIN TT,"L JRST LISTF CAIN TT,"R JRST .OPNRD CAIN TT,"C JRST UCLSTP" CAIN TT,"F JRST .FILE CAIN TT,"D JRST DELE CAIN TT,"N JRST RENAM CAIN TT,"I JRST WINIT CAIN TT,"K JRST TAPKIL" CAIN TT,"T POPJ P, JSR ERR ;A COMMAND AASSEM: JSP A,INIT" ;INITIALIZE JSP A,PS1 ;PASS ONE HRRZ A,INCHR TRNN FF",NPSS" JRST .+3 CAIN A,UREDP PUSHJ P,MIDRES PUSHJ P,PIBUFC JSP A,PLOD ;PLOADER JSP A,PS2 ;PASS 2 JSP A,PSYMS ;PSYMS MOVEI B,300. PUSHJ P,FEED IFN DSPLY,[HRRZ A,TYPCTL CAIN A,DISAD" PUSHJ P,DISCLG" ] JRST RET AASEM1: JSP A,(D) JRST RET TMD: TYPR1 [ASCIZ /TOO MANY DIRECTORIES /] JRST GO2 TYOB: PUSH P,B CAIN A,^Q JRST TYOB3 ;^Q => READ FROM TAPE CAIN A,^S JRST TYOB5 ;^S => TO READ CHECK PTR THEN TTY (NO RUBOUT) MOVEI B,PIPUN CAIN A,22 HRRM B,OUTP ;^R => TURN ON PTP CHARACTER OUTPUT MOVEI B,CPOPJ CAIN A,24 HRRM B,OUTP ;^T => TURN OFF PTP CHARACTER OUTPUT CAIN A,2 HRRM B,OUTLPT ;^B => TURN OFF LPT CHARACTER OUTPUT (NOTE: NO LPT ROUTINES) MOVE B,[PUSH P,B] CAIN A,22 MOVEM B,OUTPB ;^R AGAIN, TURN ON PTP BINARY OUTPUT MOVSI B,(POPJ P,) CAIN A,24 MOVEM B,OUTPB ;^T AGAIN, TURN OFF PTP BINARY OUTPUT MOVSI B,(SKIPA) CAIN A,26 MOVEM B,OUTU ;^V, TURN OFF DECTAPE CHARACTER OUTPUT CAIN A,26 MOVEM B,OUTUB ;^V AGAIN, TURN OFF BINARY DECTAPE OUTPUT MOVEI B,PILPT CAIN A,5 HRRM B,OUTLPT ;^E, TURN ON LPT CHARACTER OUTPUT (NOTE: NO LPT ROUTINES) MOVE B,[PUSHJ P,UWR"] CAIN A,27 MOVEM B,OUTU ;^W, TURN ON DECTAPE CHARACTER OUTPUT MOVE B,[PUSHJ P,.UWR"] CAIN A,27 MOVEM B,OUTUB ;^W AGAIN, TURN ON DECTAPE BINARY OUTPUT CAIN A,7 JRST 10,GO2 ;^G, QUIT (NOW, DISMISSING INTERRUPT) CAIN A,^A JRST TYPON ;^A, COPY CHARS READ AT RCH ONTO TTY CAIN A,^C JRST TYPOF ;^C, TURN OFF ALL COPY OUT (OF CHARS READ AT RCH) IFN DSPLY,[CAIN A,^D JRST TYOB4 ;^D, COPY CHARS READ AT RCH ONTO THE 340 ] TYOB1: POP P,B POPJ P, ;FEED C(B) FRAMES OF PAPER TAPE TFEED": FEED: MOVEI A,0 PUSHJ P,@OUTP SOJG B,.-2 POPJ P, IOWAT: PUSHJ P,UWAIT" CONSO PTP,7 CONSZ TTY,30 JRST .-2 POPJ P, TYPOF: MOVSI B,(POPJ P,) ;^C, TURN OFF COPY-OUT PUSH P,A PUSHJ P,MDSCLR" ;CLEAR OUT "ALL RCH'S MUST TO TO RCH" MODE JRST TYPOF2 TYOB5: MOVE B,[JRST INCHR1] ;^S, TO READ CHECK PTR THEN TTY TYOB3: MOVE B,[ILDB A,UREDP"] ;^Q, TO READ, READ FROM DECTAPE MOVEM B,INCHR JRST TYOB1 IFN DSPLY,TYOB4: SKIPA B,[JRST DISAD"] ;^D, COPY CHARS READ ONTO THE 340 TYPON: MOVE B,[JRST TYO] ;^A, COPY CHARS READ ONTO TTY PUSH P,A PUSHJ P,MDSSET" ;MAKE ALL RCH'S GO TO RCH TYPOF2: POP P,A ;ENTRY FROM TYPOF MOVEM B,TYPCTL" ;B NOT CLOBBERED BY MDSSET, MDSCLR JRST TYOB1 TPPB": ;PUNCH OUT A WORD PPB: OUTUB: SKIPA ;OR PUSHJ P,.UWR" JRST TPFUL OUTPB: PUSH P,B ;OR POPJ P, PPB2: MOVEI B,6 PPB4: ROT A,6 PUSH P,A ANDI A,77 TRO A,200 PUSHJ P,PIPUN POP P,A SOJG B,PPB4 PPB3: POP P,B POPJ P, RBRK: 0 JSR RDTEM EXCH B,RDTEM PUSH P,A MOVNI A,10 MOVEM A,RDRUN IDPB B,RDIP HRRZ A,RDIP CAIN A,RBEND-1 MOVEI A,RBUF HRRM A,RDIP AOS A,RCC CAILE A,LOSSAG CAIE B,214 CAIL A,RBEND*5-RBUF*5-30 JRST RBRK2 RBRK3: POP P,A MOVE B,RDTEM JRST 12,@RBRK RBRK2: MOVEI A,(JSR) HRLM A,RBRK+1 JRST RBRK3 RDTEM: 0 CONO PTR,RDCHN JRST 12,@RBRK IAPRBRK: 0 PUSH P,A CONSO 1200 JRST PITELE CONO 1440+APRCHN JSR APRBRK" APRBK7: SKIPGE RBRK+1 AOSG RDRUN JRST APRBK3 MOVEI A,(JSR) HRLM A,RBRK+1 SETOM OFTAPE CONO PTR,0 APRBK3: AOS TIME IFN DSPLY,[CONSO DIS,77 JRST TTYRET MOVE A,BLKOP" EXCH A,BLKPS' CAME A,BLKPS JRST TTYRET CONO DIS,100+FLGCHN*10 DATAO DIS,[3000] ] TTYRET: POP P,A JRST 12,@IAPRBRK ILMEM: MOVEI B,(SIXBIT /PCE/) ;PUSHDOWN CAPACITY EXCEEDED CONSO 200000 MOVEI B,(SIXBIT /ILM/) ;ILLEGAL MEMORY REF CONO 433550+APRCHN MOVEI P,PDL" MOVEM B,40 MOVE B,IAPRBRK JRST 10,.+1 JSA B,@41 TIME: 0 TYI": ILDB A,MACCR JUMPN A,HTYI CLEARM MACCR PUSHJ P,SPUNCH SKIPGE STOPF JRST GOX SKIPG TICC JRST .-3 MOVE A,TIOP CAMN A,[(10700)TIBE-1] MOVEI A,TIBO-1 HRRM A,TIOP ILDB A,TIOP SOS TICC POPJ P, TAB": TYO2: MOVEI A,11 TYO": AOSN CRIND CAIN A,12 JRST TYOA PUSH P,A MOVEI A,12 PUSHJ P,TYO POP P,A TYOA: SKIPG TORM JRST .-1 IDPB A,TOIP SOS TORM EXCH A,TOIP CAMN A,[(10700)TOBE-1] HRRI A,TOBO-1 EXCH A,TOIP CAIN A,15 SETOM CRIND STYO: CONSO TTY,30 CONO TTY,10+TTYCHN POPJ P, PITELE: CONSZ TTY,10 JRST TYP1 CONSO TTY,40 JRST ILMEM DATAI TTY,A TRZ A,200 CAIE A,33 CAIN A,176 MOVEI A,175 CAIN A,175 MOVEI A,"$ PUSHJ P,TYOB PUSH P,B MOVE B,ECHOCC ADD B,TICC CAIL B,*5-2 TLO A,400000 POP P,B JUMPL A,DING IDPB A,TIIP ORCMI A,177 AOJE A,PITEL1 CLEARM STOPF PITEL2: MOVE A,TIIP CAMN A,[(10700)TIBE-1] MOVEI A,TIBO-1 HRRM A,TIIP AOSA ECHOCC DING: SETOM DINGF PUSHJ P,STYO JRST TTYRET PITEL1: MOVE A,TIME SKIPN STOPF MOVEM A,TSTPTM AOS A,STOPF CAIE A,3 JRST PITEL2 MOVE A,TIME SUB A,TSTPTM CAIL A,25. JRST PITEL2-1 HRROS STOPF SETOM FSHFLG JRST PITEL2 STOPF: 0 TSTPTM: 0 CRIND: 0 HTYI: CAIN A,175 MOVEI A,"$ JRST TYOB TYP1: MOVEI A,12 AOSN LIF JRST TYP3 MOVEI A,7 AOSN DINGF JRST TYP3 MOVEI A,40 AOSG SPCCC JRST TYP3 MOVE A,TORM CAIL A,TOBS JRST TYP4 MOVE A,TOOP CAMN A,[(10700)TOBE-1] MOVEI A,TOBO-1 HRRM A,TOOP ILDB A,TOOP AOS TORM PUSHJ P,TYOB TYP3: CAIE A,11 JRST TYP31 MOVNI A,3 MOVEM A,SPCCC JRST TTYRET TYP31: SKIPL FSHFLG DATAO TTY,A JRST TTYRET TYP4: SKIPG ECHOCC JRST TYP5 MOVE A,ECHOP CAMN A,[(10700)TIBE-1] MOVEI A,TIBO-1 HRRM A,ECHOP MOVEI A,12 HRRM A,TYP1 ILDB A,ECHOP SOS ECHOCC AOS TICC CAIN A,15 TYP6: SETOM LIF CAIN A,10 JRST TYO1 CAILE A,6 CAIL A,16 JRST TYO1 JRST TYP3 TYP5: CONO TTY,200+TTYCHN JRST TTYRET TYO1: CAIL A,40 JRST TYP3 ADDI A,100 HRRM A,TYP1 MOVEI A,"^ JRST TYP6 FSHFLG: 0 TOIP: (10700)TOBO-1 TOOP: (10700)TOBO-1 TORM: TOBS TIIP: (10700)TIBO-1 TIOP: (10700)TIBO-1 TICC: 0 ECHOP: (10700)TIBO-1 ECHOCC: 0 TIBO: BLOCK 26. TIBE: TOBO: BLOCK 40 TOBE: TOBS==*5 LIF: 0 DINGF: 0 SPCCC: 0 PIRPA3: AOSG OFTAPE JRST PIBUFC MOVEI A,20 SKIPL RBRK+1 PUSHJ P,RDST+1 PIRPA: SKIPG RCC JRST PIRPA3 HRRZ A,RDOP CAIN A,RBEND-1 MOVEI A,RBUF HRRM A,RDOP SOS A,RCC SKIPL OFTAPE CAIL A,LOSSAG*3 JRST PIRPA4 SKIPL RBRK+1 PUSHJ P,RDST PIRPA4: ILDB A,RDOP CAIN A,177 JRST PIRPA JUMPE A,PIRPA POPJ P, PIBUFC: CONO PTR,0 î MOVNI A,10 MOVEM A,RCC MOVE A,RDIP MOVEM A,RDOP MOVEI A,(JSR) HRLM A,RBRK+1 MOVEI A,214 POPJ P, RDST: MOVEI A,10 MOVNM A,RDRUN CONSZ PTR,20 JRST .-1 HRLI A,(DATAI PTR,) HLLM A,RBRK+1 CONO PTR,RDCHN(A) POPJ P, RDOP: (700)RBUF RDIP: (700)RBUF RCC: 0 OFTAPE: 0 RDRUN: 0 PIPUN: SKIPG PUNCC JRST .-1 IDPB A,PUNIP HRRZ A,PUNIP CAIN A,PUNBE-1 MOVEI A,PUNBO HRRM A,PUNIP SOS A,PUNCC CAIL A,*4-4-60 POPJ P, SPUNCH: CONSO PTP,7 CONO PTP,10+PCHCHN POPJ P, PBRK: 0 JSR UTCBRK" PUSH P,A PBRK1: CONSO PTP,10 IFN DSPLY,JRST .RECYC" IFE DSPLY,JRST POPRET MOVEI A,+*4-4 CAMG A,PUNCC JRST PUNSTP ILDB A,PUNOP DATAO PTP,A HRRZ A,PUNOP CAIN A,PUNBE-1 MOVEI A,PUNBO HRRM A,PUNOP AOSA PUNCC PUNSTP: CONO PTP,0 POPRET": POP P,A JRST 12,@PBRK PUNCC: +*4-4 PUNIP: (1000)PUNBO-1 PUNOP: (1000)PUNBO-1 LPTCLS": MOVEI A,^L PILPT": POPJ P, ;OUTPUT CHAR TO LINE PRINTER (IF ROUTINES EXISTED) FRD2: SKIPA A,B FRD: MOVSI A,400000 MOVSI B,400000 MOVE T,[(600)B-1] FRD1: PUSHJ P,RCHTT CAIN TT,"$ POPJ P, TRC TT,40 JUMPE TT,FRD2 CAIN TT,77 MOVEI TT,0 CAME T,[(600)B] IDPB TT,T JRST FRD1 MIDRES: LDB A,[270400,,.RBYTS" PUSHJ P,FILEST JSR ERR MOVE A,CFIL3 MOVE B,CFIL4 JRST .OPNR1 .OPNRD: MOVEI A,^Q PUSHJ P,TYOB PUSHJ P,FRD MOVEM A,CFIL3 MOVEM B,CFIL4 .OPNR1: PUSHJ P,OPNRD" JRST FNF POPJ P, FNF: TYPR1 [ASCIZ /FILE NOT FOUND /] JRST GO2 LISTF: MOVE C,UFPNTR" HRRZ C,177(C) CAIN C,-1 JRST LISTF2 LSH C,6 PUSHJ P,TYPR PUSHJ P,CRR LISTF2: MOVE F,[(600) [SIXBIT /FREE BLOCKS/]-1] PUSHJ P,TYPR+1 PUSHJ P,TYPR+1 PUSHJ P,TYO2 MOVSI T,-30 MOVEI LINK,0 MOVE SYM,UFPNTR SUBI SYM,2 JRST LISTF1 ADDI SYM,2 SKIPN C,(SYM) LISTF3: AOBJN T,.-2 TLNN T,-1 POPJ P, ADD T,UFPNTR MOVE B,55(T) LDB A,[(100)104(T) DPB B,[(10100)A SUB T,UFPNTR ADDI A,40 PUSHJ P,TYO MOVEI A,40 PUSHJ P,TYO PUSHJ P,TYPR-1 MOVE C,1(SYM) PUSHJ P,TYPR-1 HRRZ LINK,T LISTF1: SETZB A,AA MOVE F,UFPNTR+1 ILDB TT,F CAIN TT,(LINK) AOS AA CAIE TT,37 JRST .-4 MOVEM D,TEM JUMPE LINK,LSTF3 PUSHJ P,.LOOK" LSTF3: SKIPA B,AA JRST LSTF4 MOVE D,TEM PUSHJ P,DPT" PUSHJ P,CRR JRST LISTF3 LSTF4: HRRZ LINK,C MOVE D,TEM JRST LISTF1+1 PUSH P,TYPR2 TYPR: MOVE F,[(600)C-1] MOVEI AA,6 ILDB A,F ADDI A,40 PUSHJ P,TYO SOJG AA,.-3 TYPR2: POPJ P,TYO2 DPT": IDIVI B,10. HRLM C,(P) JUMPE B,.+2 PUSHJ P,.-3 HLRZ A,(P) ADDI A,60 JRST TYO RENAM: PUSHJ P,FRD PUSHJ P,.LOOK JRST FNF PUSH P,D PUSHJ P,FRD PUSHJ P,.LOOK JRST REN1 CAME D,(P) JRST FAE ;FILE WITH NEW NAME ALREADY EXISTS REN1: POP P,D MOVEM A,(D) MOVEM B,1(D) POPJ P, WINIT: MOVEI A,^T PUSHJ P,TYOB MOVEI A,^W PUSHJ P,TYOB MOVE A,B PUSHJ P,OPNWR" JSR ERR POPJ P, FAE: TYPR1 [ASCIZ /FILE ALREADY EXISTS /] JRST GO2 TPFUL: TYPR1 [ASCIZ /TAPE FULL /] JRST GO2 CRR: MOVEI A,15 PUSHJ P,TYO MOVEI A,12 JRST TYO DELE: PUSHJ P,FRD ;ED COMMAND, DELETE FILE JRST UDELE" .FILE: MOVNI A,1 ;EF COMMAND SKIPL CONTRL" PUSHJ P,PPB ;PUNCH NEGATIVE EOF FOR RELOCATABLE FILES PUSHJ P,FRD MOVEI C,3 SKIPGE CONTRL" MOVEI C,2 PUSHJ P,.FILEB" JRST TPFUL POPJ P, CFIL3: 0 ;.FNAM1 CFIL4: 0 ;.FNAM2 CPTR: 0 ARG: 0 ARG2: 0 NUM: 0 NUM1: 0 DOLS: 0 TEM: 0 PUNBO: LOC PUNBO+50 PUNBE: 0 RBUF: LOC RBUF+20 RBEND: 0 RDCHAR==*5 LOSSAG==RDCHAR/4 LOIIN: MOVE A,[OISYMS,,EISYMT"] ;ADD TO INITIAL SYMBOL TABLE BLT A,EISYMT+LOISYM-1 MOVEI A,EISYMT+LOISYM HRRM A,EISYMP" ;DOCUMENT DAMAGE DONE POPJ P, LOISW: -1 ;-1 => OISYMS NOT YET IN SYMTAB OISYMS: SQUOZE 4,.FNAM1 ;SYMS (PSEUDOS) HANDLED BY AIO CFIL3,,INTSYM" SQUOZE 4,.FNAM2 CFIL4,,INTSYM SQUOZE 4,.INSRT ;LIKE NULL Z.INSRT ;UH HUH LOISYM==.-OISYMS ;LENGTH OF THIS TABLE Z.INSRT: PUSHJ P,RCH" CAIE A,^M JRST .-2 AOS (P) POPJ P, CONSTANTS CBUF: BLOCK 20 END GO