;GT40 CODE FOR LISP SLAVE ;LOTS CAME FROM DRAW;DITS ;December, 1974 Joseph D. Cohen ;DRAW stuff stolen from J. Pitts Jarvis ;GT40 OPCODES DPYJMP==160000 DPYNOP==164000 DPYSTP==173400 ;STOP DISPLAY AND CAUSE INTERRUPT DPYJSR==DPYSTP+1 ;CALL DPY SUBROUTINE DPYRTS==DPYSTP+2 ;RETURN FROM DPY SUBROUTINE SETPNT==114000 RPOINT==130000 SVW==104000 LVW==110000 CHARS==100000 DPYNRM==3724 ;NORMAL SET GRAPHIC MODE BITS ; INTENSITY 7 ; NO LIGHT PEN ; NO BLINK ; NO ITALICS ; SOLID LINE DBLINK==10 ; YES BLINK (IF ENABLED) STSNRM=171640 ;NORMAL A REGISTER SETTINGS ; ENABLE STOP INTERRUPTS ; DISABLE LIGHT PEN INTERRUPTS SYNC==4 ; SYNCS DPU WITH CLOCK ITALICS==20 ; CAUSE ITALICS LITEPN==200 ; ENABLE LIGHT PEN INTERRUPTS TYOBFL==20 ;OUTPUT BUFFER LENGTH ESCHR==20 ;ESCAPE FROM CHARACTER MODE (P) LODER==0 ;ENTER LODER XTRA==6 ;EXTRA BYTES IN BLOCK (MUST BE SAME AS DRAW PROG FORMAT) BLKMRK==1 ;MARKS BEGINNING OF BLOCK DELBLK==2 ;LIST OF PIECES OF GLASS TO BE DELETED GM==770374036017 ;DDT MASK FOR BITS IOTED TO GT40 ;MODE BITS RIGHT JUSTIFIED SCM==0 ;SET CHAR MODE SSVM==1 ;SET SHORT VECTOR SLVM==2 ;LONG VECTOR SPM==3 ;POINT SGXM==4 ;GRAPH X SGYM==5 ;GRAPH Y SRPM==6 ;RELATIVE POINT SPAR==7 ;SPARE GBITPL==2000 ;BITS PER LINE GNLINS==1400 ;LINES ON SCREEN GBYTPL==GBITPL/10 ;BYTES PER LINE GWRDPL==GBYTPL/2 ;WORDS PER LINE GCHRWD==16 ;CHARACTER WIDTH GCHRHT==30 ;CHARACTER HEIGHT GCHRPL==GBITPL/GCHRWD ;CHARACTERS PER LINE GCHRLN==GNLINS/GCHRHT ;CHARACTER LINES ON SCREEN ;PDP10 COMMANDS TO GT40 ;ARGUMENTS TO COMMAND G40LSH==0 ;LOAD ITEM AND SHOW IT ;<1(LOAD LIST); ITEM SIZE, ITEM #, CKS>OR <2(DELETE);SIZE OF COMMAND; ITEM #; CKS> ;THIS COMMAND IS USED BY DRAWING PROGRAM, NOT LIST G40LOD==1 ;LOAD, BUT DON'T SHOW ;ITEM SIZE, ITEM #, ITEM, CKS G40DEL==2 ;DELETE AN ITEM ;ITEM # G40RST==3 ;RESET THE WORLD ;NO ARGS G40SHW==4 ;SHOW AN ITEM ;ITEM # G40ERS==5 ;ERASE AN ITEM ;ITEM # G40CPY==6 ;COPY AN ITEM ;ITEM # TO BE COPIED, ITEM # OF COPY G40MOV==7 ;MOVE AN ITEM ;ITEM #, ABSOLUTE XCOOR, YCOOR G40CHM==8 ;CHANGE MODE OF ITEM ;ITEM #, NEW SET GRAPHICS MODE WORD G40ADD==9. ;ADD TO AN ITEM ;SIZE OF ADDITION, ITEM #, ADDITION, CKS G40SBR==10. ;SUBROUTINIZE AN ITEM ;# OF CALLING ROUTINE, #OF SUBR G40USB==11. ;UNSUBROUTINIZE AN ITEM ;# OF CALLING ROUTINE, # OF SUBR ;INTERRUPT ROUTINE GINT: 0 0 SKIPL GINT .DISMIS GINT+1 ;NOT INFERIOR OR CHANNEL INTERRUPT EXCH A,GINT ;SAVE A TRNN A,1_GICH JRST GINTDS ;NOT GICH (ONLY LEGAL INTERRUPT) MOVEI A,GICH .ITYIC A, JRST GINTDS ;NO CHARACTER AVAILABLE .IOT GICH,A MOVEM A,GERCH ;SAVE FOR DEBUGGING CAIN A,0 JRST GERFUL ;GT40 FREE STOPRAGE FULL CAIN A,34 JRST GERINT ;GT40 INTERNAL ERROR GINTDS: MOVE A,GINT ;RESTORE A .DISMIS GINT+1 GERINT: SKIPA A,[5] ;LISP INTERNAL ERROR GERFUL: MOVEI A,2 ;LISP MEMORY FULL ERROR MOVEM A,ERRLOC JRST GINTDS ;SOME GENERAL ROUTINES ;SAVE SOME ACS GACSAV: EXCH (P) ;THIS AC IS CLOBBERED PUSH P,B PUSH P,C PUSH P,D PUSH P,E PUSH P,G PUSH P,T PUSH P, ;SO WE NEEDN'T WORRY ABOUT FLAGS POPJ P, ;RESTORE THEM GACRES: POP P, POP P,T POP P,G POP P,E POP P,D POP P,C POP P,B EXCH (P) POPJ P, ;CHECK GT40 MODE GCMODE: ASH G,4 ;LEAVE ROOM FOR BRIGHTNESS PUSH P,G LDB G,TBRITE ;INTENSITY TRO G,10 ;ENABLE DPB G,[400,,(P)] MOVEI G,100000 IORM G,GSTORE(A) LDB G,GMODE ;CURRENT MODE BITS CAMN G,(P) JRST GPOPGJ POP P,G DPB G,GMODE ;CHANGE MODE MOVE G,GSTORE(A) TRZ G,177 ;LIGHT PEN, BLINK, LINE TYPE DISABLED PUSHJ P,ADBYTE POPJ P, ;RETURNS ONE LEVEL UP IF GT40 SHOULDN'T BE USED GCHK: SKIPN GTTY POP P, POPJ P, ;COMMANDS ON THIS PAGE DON'T USE VARIABLE BLOCK SIZE OR CHECKSUM ;INITIALIZE GT40 GINIT: .CLOSE GICH, .CLOSE GOCH, SETZM GTCSW ;GT40 CHANNNELS CLOSED SETZ G, MOVEI G+1,1_GICH .SETM2 G, ;ENABLE INTERRUPTS ON GICH ONLY POPJ P, ;HERE TO CLEAR OUT GT40 GTCLR: SKIPN G,GTTY JRST GINIT ;DON'T USE GT40 SKIPE GTCSW JRST GTCLR1 ;CHANNEL ALREADY OPEN, DON'T CLOSE IT HRRM G,GTTY HRRM G,GTYI HRRM G,GTYO .OPEN GICH,GTYI .VALUE .OPEN GOCH,GTYO .VALUE GTCLR1: MOVEI G,35 ;HOME UP PUSHJ P,PUTCH1 MOVEI G,37 ;CLEAR EOF JRST PUTCH1 ;MOVE ARRAY GMOV: PUSHJ P,GCHK MOVEI G,G40MOV PUSHJ P,G2WCMD ;SEND COMMAND AND ARRAY PUSHJ P,GACSAV MOVE G,XINCR ;INCR CURRENT POSITION ADDM G,GXPOS(A) MOVE G,YINCR ADDM G,GYPOS(A) PUSHJ P,GGTHOM ;GET X & Y HOME IN B & C, CLOBBER D GMOV1: TRZ B,40000 ;DON'T ILLUMINATE PUSHJ P,GCLVM ;CLEAR EXTRANEOUS BITS MOVE G,B PUSHJ P,PUTWRD MOVE G,C JRST SNDG ;MORE FIXED LENGTH COMMANDS ;DELETE ARRAY GDEL: PUSHJ P,GCHK MOVEI G,G40DEL JRST G2WCMD ;SHOW ARRAY GSHW: PUSHJ P,GCHK MOVEI G,G40SHW JRST G2WCMD ;DON'T SHOW ARRAY GERS: PUSHJ P,GCHK MOVEI G,G40ERS G2WCMD: PUSHJ P,GACSAV PUSHJ P,GSNDES ;SEND ESCAPE CHAR PUSHJ P,PUTCH1 ;SEND COMMAND IN G MOVE G,A SNDG: PUSHJ P,PUTWRD ;SEND ARRAY GPOACJ: PUSHJ P,GACRES POPJ P, ;BLINK IT GBLK: PUSHJ P,GCHK MOVEI G,3 GBLK1: DPB G,[30200,,GSTORE(A)] ;PUT BLINK BITS IN MODE WORD MOVEI G,G40CHM PUSHJ P,G2WCMD LDB G,[700,,GSTORE(A)] ;IGNORE MODE AND BRIGHTNESS GSNDG: PUSHJ P,GACSAV JRST SNDG ;SEND NEW SET GRAPH MODE WORD ;DON'T BLINK IT GUBL: PUSHJ P,GCHK MOVEI G,2 JRST GBLK1 ;COPY ARRAY GCPY: PUSHJ P,GCHK MOVEI G,G40CPY PUSHJ P,G2WCMD ;SEND COPY AND SOURCE ITEM MOVE G,E ;COPY # JRST GSNDG ;SUBROUTINIZE, SUPERIOR IN A, INFERIOR IN B ;GSBR: PUSHJ P,GCHK ; MOVEI G,G40SBR ;GSBR1: PUSHJ P,G2WCMD ; MOVE G,B ;SUBR ARRAY NUMBER ; JRST GSNDG ;UNSUBROUTINIZE ;GUSB: PUSHJ P,GCHK ; MOVEI G,G40USB ; JRST GSBR1 ;THESE COMMANDS DO USE VARIABLE SIZE AND CHECKSUM ;INITIALIZE ARRAY GINAR: PUSHJ P,GCHK PUSHJ P,GACSAV MOVEI G,G40LOD MOVEM G,GCMND MOVEM B,GXPOS(A) MOVEM C,GYPOS(A) PUSHJ P,INTGT ;INTIALIZE BUFFER POINTERS PUSHJ P,GABSPI ;SET POINT MOVEI G,174000 ANDM G,GSTORE(A) ;DISABLE BLINK ETC FOR REST OF LIST GENDGP: PUSHJ P,ENDGT JRST GPOACJ ;ADD A POINT, DX IN B, DY IN C GADPNT: PUSHJ P,GCHK PUSHJ P,GACSAV PUSHJ P,GADD PUSHJ P,GUDPOS ;UPDATE GXPOS AND GYPOS PUSHJ P,GSGMAG PUSHJ P,GRELP ;ADD THE POINT JRST GENDGP ;ADD A LINE, SAME ARGS AS ADD A POINT GADLIN: PUSHJ P,GCHK PUSHJ P,GACSAV PUSHJ P,GADD TLNN U,PENBIT JRST GADLI2 ;INVISIBLE TLNN U,AWYFLG JRST GADLI1 ;AT PENPOS PUSH P,B PUSH P,C SETZB B,C PUSHJ P,GUDPOS PUSHJ P,INVEC ;GET BACK TO PENPOS POP P,C POP P,B GADLI1: PUSHJ P,GUDPOS PUSHJ P,GSGMAG PUSHJ P,SVW2GT ;ADD THE LINE JRST GENDGP GADLI2: PUSHJ P,GUDPOS PUSHJ P,INVEC ;JUST GO THERE INVISIBLY JRST GENDGP ;SOME HELPFUL SUBROUTINES ;;PUT SIGN OF B IN D LH, SIGN OF C IN D RH ;CHANGE B & C TO MAGNITUDE GSGMAG: SETZ D, TLNE B,400000 HRLI D,-1 TLNE C,400000 HRRI D,-1 MOVMS B MOVMS C POPJ P, ;SET UP TO LATER ADD TO A LIST GADD: PUSHJ P,INTGT ;INITIALIZE BUFFER POINTERS MOVEI G,G40ADD MOVEM G,GCMND POPJ P, ;UPDATE POSITION TO DX IN B DY IN C RELATIVE TO PENPOS (NOT GXPOS) ;RETURNS WITH B & C RELATIVE TO GXPOS AND GYPOS GUDPOS: SUB B,GXPOS(A) ADD B,XDISP(A) ADDM B,GXPOS(A) SUB C,GYPOS(A) ADD C,YDISP(A) ADDM C,GYPOS(A) POPJ P, ;GET HOME IN B & C GGTHOM: MOVE D,ARYORG(A) HLRZ B,1(D) ;X HRRZ C,(D) ;Y ANDI B,DSPMSK ANDI C,DSPMSK POPJ P, ;SEND ESCAPE CHAR GSNDES: PUSH P,G MOVEI G,ESCHR PUSHJ P,PUTCH1 GPOPGJ: POP P,G POPJ P, ;CHARACTERS ;START INSERTING CHARACTERS GSTCH: PUSHJ P,GCHK PUSHJ P,GACSAV PUSHJ P,GADD ;INSERT COMMAND, SET UP POINTERS JRST GPOACJ ;KEEP ON STARTING GSTCH1: PUSHJ P,GACSAV MOVE G,XDISP(A) ;KEEP TRACK OF WHERE WE ARE ADD G,B MOVEM G,GXPOS(A) ;X MOVE G,YDISP(A) ADD G,C MOVEM G,GYPOS(A) ;Y SKIPN B SKIPE C ;DON'T DO ANTHING IF BOTH=0 GSTCH2: PUSHJ P,INVEC ;GO TO START OF CHARS JRST GPOACJ ;ADD THE CHAR IN W GADCH: PUSHJ P,GCHK PUSHJ P,GACSAV CAIL W,40 GADCH1: JRST GINCH ;>=40, JUST INSERT IT CAIN W,15 JRST GCHCR ;CARRIAGE RETURN CAIN W,10 JRST GINBS ;BACK SPACE CAIN W,12 JRST GINLF ;LINE FEED JRST GPOACJ ;CNTRL CHAR <11 OR >16 ;END INSERTING CHARACTERS GENDCH: PUSHJ P,GCHK PUSHJ P,GACSAV JRST GENDGP ;SEND THE WHOLE MESS GINLF: SKIPE B,CRFLAG JRST GPOACJ ;THIS LF IMMEDIATELY FOLLWED CR MOVNI C,GCHRHT JRST GINCH1 GINBS: SKIPA B,[-GCHRWD] GINCH: MOVEI B,GCHRWD SETZ C, GINCH1: ADDM B,GXPOS(A) ;UPDATE X ADDM C,GYPOS(A) ;Y MOVEI G,SCM PUSHJ P,GCMODE PUSHJ P,ADCHR JRST GPOACJ GCHCR: MOVN B,GXPOS(A) LDB C,XMARG ;WHERE WE WANT TO GO ADD B,C MOVEM C,GXPOS(A) MOVNI C,GCHRHT ;DELTA Y, (LINE FEED) ADDM C,GYPOS(A) JRST GSTCH2 ;HERE FOR ABSOLUTE SET POINT (IN LOAD LIST) GABSPI: TRZA B,40000 ;INVISIBLE GABSP: IORI B,40000 ;INTENSIFY PUSHJ P,GCLVM LDB G,TBRITE ;GET BRITENESS ASH G,7 IORI G,116024 ;CHARS, NO LIGHT PEN, BLINK & INTENS ENABLE PUSHJ P,ADBYTE PUSHJ P,ADBYTB ;X PUSHJ P,ADBYTC ;Y POPJ P, ;HERE FOR SET POINT ;RELATIVE POINT ;DX IN B, SIGN IN LH OF D; DY IN C, SIGN IN RH D GRELP: SETZM GDYZFL PUSHJ P,LVWCHK JRST GRELSP ;REL POINT MODE SUFFICES TRZ B,40000 ;DOESN'T WORK, DRAW LONG INVIS VECTOR SOJGE C,.+3 ;DECREMENT DELTA Y MOVEI C,1 ;DELTA Y WAS 0 SETOM GDYZFL PUSHJ P,LVWGT1 ;DRAW LONG INVISIBLE VECTOR SETZ B, ;NOW POINT DX=0, DY=1 MOVEI C,1 MOVSS D ;RESTORE SIGNS SKIPE GDYZFL TRC D,-1 GRELSP: IORI C,40000 ;INTENSIFY MOVEI G,SRPM GRELS1: PUSHJ P,GCMODE MOVE G,C ;DY DPB D,[60100,,G] ;Y SIGN DPB B,[70600,,G] ;X MAGN MOVSS D DPB D,[150100,,G] ;X SIGN TRZ G,700000 PUSHJ P,ADBYTE POPJ P, SVWGT1: MOVEI G,SSVM ;SHORT VECTOR JRST GRELS1 ;DRAW INVSISIBLE VECTOR INVEC: PUSHJ P,GSGMAG TRZ B,40000 ;DON'T ILLUMINATE TRZ C,40000 JRST SVWGT2 ;HERE FOR VECTOR ;SAME ARGS AS RELATIVE POINT SVW2GT: IORI B,40000 ;ILLUMINATE IORI C,40000 SVWGT2: PUSHJ P,LVWCHK JRST SVWGT1 ;SHORT VECTOR LVWGT1: MOVEI G,SLVM PUSHJ P,GCMODE PUSHJ P,GCLVM DPB D,[150100,,C] ;Y MOVSS D DPB D,[150100,,B] ;XSIGN PUSHJ P,ADBYTB ;ADD B PUSHJ P,ADBYTC ;ADD C POPJ P, ;CLEAR ALL BUT LVM INFO GCLVM: TRZ B,736000 TRZ C,776000 POPJ P, ;SKIP IF WE NEED LONG VECTOR OR ABS POINT LVWCHK: CAILE B,77 SKIPA CAILE C,77 AOS (P) ;SKIP, >= 6 BITS OF X AND Y POPJ P, ;INITIALIZE GT40 DISPLAY LIST POINTERS INTGT: SETZM DLBCNT MOVEI G,DLBF MOVEM G,DLFBYTE INTGT1: HRRZI G,DLBF SUBI G,1 HRLI G,042000 MOVEM G,DLPC ;BYTE PNTR FOR 16 BIT WORDS IN GT40 LIST PUSHJ P,SETCBP POPJ P, ;HERE TO SEND DISPLAY LIST TO GT40 OVER TTY, B HAS PIECE OF GLASS ENDGT: SKIPE DCHCNT PUSHJ P,ADNUL ;ODD # OF CHARS, ADD ONE TO FILL WORD PUSHJ P,INTGT1 ;SET UP THAT BYTE POINTER AGAIN PUSHJ P,SETCBP PUSHJ P,SETLOD ;SEND ESCAPE, AND HEADER MOVE D,DLBCNT ASH D,1 ;# PDP11 BYTES PUSHJ P,GSWRD JUMPG D,.-1 MOVN G,E ;CHECKSUM MOVEM G,CKS ;FOR DEBUGGING PUSHJ P,PUTWRD PUSHJ P,FPUT ;PUSH OUT BUFFER AND PAD MOVE G,DLBCNT ;RETURN # PDP10 WORDS IN DISPLAY LIST ASH G,-1 MOVEM G,DLBCNT POPJ P, ;HERE TO ENTER LOADER AND SEND HEADER SETLOD: PUSHJ P,SETBUF ;SET UP BUFFER POINTERS MOVEI G,ESCHR PUSHJ P,PUTCH1 MOVE G,GCMND ;CMD TO GT40 PUSHJ P,PUTCH1 SETZ E, ;INITIALIZE CHECKSUM MOVE G,DLBCNT ASH G,1 ;# PDP11 BYTES ADDI G,XTRA PUSHJ P,PUTWRD MOVE G,A JRST PUTWRD ;OUT GOES PIECE OF GLASS # ;READ 2 EIGHT BIT BYTES SEND 3 ASCII CHARACTERS DOWN THE LINE ; SENDS 6 BITS, 4 BITS, AND 6 BITS, LEAST SIGNIFICANT FIRST GSWRD: PUSHJ P,GETBYT ANDI G,377 LSHC G,-44 SOSLE D PUSHJ P,GETBYT ;DON'T GET BYTE UNLESS THERE IS ON THERE SOS D AOSE G ;SKIPS ON END OF BLOCK SOS G ;GET IT BACK LSH G,10 ADDB G,T PUTWRD: MOVE T,G LSH G,-10 ;CHECK SUM FIRST ANDI G,377 ADD E,G MOVE G,T ANDI G,377 ADD E,G ANDI G,77 ;NOW PUT OUT 3 CHARACTERS PUSHJ P,PUTCHR MOVE G,T LSH G,-6 ANDI G,17 PUSHJ P,PUTCHR MOVE G,T LSH G,-12 ANDI G,77 PUTCHR: PUTCH1: JRST DSPTYO ;IDPB G,TYOBP ;FOLLOWING STUFF IS FOR SUPER-IMAGE OUTPUT, WHICH DOESN'T WORK TO TTYS! ; SOSLE TYOCNT ; POPJ P, ; MOVE G,[-TYOBFL,,TYOBUF] ; PUSHJ P,DSPTYO SETBUF: POPJ P, ; MOVEI G,TYOBFL*5 ; MOVEM G,TYOCNT ; MOVE G,[440700,,TYOBUF] ; MOVEM G,TYOBP ; MOVE G,[TYOBUF,,TYOBUF+1] ; SETZM TYOBUF ; BLT G,TYOBUF+TYOBFL-1 ; POPJ P, FPUT: POPJ P, ;MOVNI G,4 ; ADDM G,TYOCNT ; MOVEI G,TYOBFL*5 ; SUB G,TYOCNT ; IDIVI G,5 ;WORDS ; JUMPE G,CPOPJ ; MOVNS G ; MOVSS G ; HRRI G,TYOBUF DSPTYO: .IOT GOCH,G POPJ P, ;SET UP CHARACTER (8 BIT) BYTE POINTER SETCBP: SETZM DCHCNT ;# OF BYTES EXTRACTED MOVE E,DLPC MOVEI G,10 ;10 BIT BYTES DPB G,[300600,,E] MOVEM E,DCHBP ;HIGH ORDER PDP11 BYTE IBP E MOVEM E,DCHBP+1 ;LOW ORDER POPJ P, ;ADD WORD TO STUFF TO BE SENT TO GT40 ADBYTC: SKIPA G,C ADBYTB: MOVE G,B ADBYTE: SOSGE DLFBYTE ;DISPLAY LIST FREE BYTES .VALUE ;OVERFLOW SKIPE DCHCNT PUSHJ P,ADNUL ;ADD A NULL CHAR IBP DCHBP ;INC CHARACTER BYTE POINTERS IBP DCHBP IBP DCHBP+1 IBP DCHBP+1 AOS DLBCNT ;BYTE COUNT IDPB G,DLPC ;HALF WORD INTO DISPLAY LIST POPJ P, ;ADD A NULL CHAR ADNUL: PUSH P,W SETZ W, PUSHJ P,ADCHR POP P,W POPJ P, ;ADD THE CHAR IN W ADCHR: PUSH P,G SOSGE G,DCHCNT JRST .+3 ;HIGH ORDER IBP DLPC ;LOW ORDER, STARTING A NEW PDP11 WORD AOS DLBCNT MOVMS G,DCHCNT ;USE G AS INDEX TO WHICH BYTE POINTER TO USE IDPB W,DCHBP(G) IBP DCHBP(G) JRST GPOPGJ GETBYT: SOS C,DCHCNT ;DCHCNT IS NOW FLAG FOR WHICH ORDER PDP11 BYTE MOVMS C,DCHCNT ILDB G,DCHBP(C) IBP DCHBP(C) POPJ P, ;VARIABLES CKS: 0 ;CHECKSUM SENT ON LAST BLOCK TYOCNT: 0 ;TYO BUFFER BYTE COUNTER TYOBP: 0 ;BYTE POINTER INTO TYOBUF TYOBUF: BLOCK TYOBFL GDYZFL: 0 DLBFSZ==100 DLBF: BLOCK DLBFSZ DLPC: 0 ;BYTE POINTER TO GT40 LIST BUFFER DLFBYTE:DLBFSZ ;DISPLAY LIST FREE BYTES DLBCNT: 0 ;DISPLAY LIST BYTE COUNT DCHBP: BLOCK 2 ;HIGH & LOW ORDER PDP11 BYTE PNTRS DCHCNT: 0 ;PDP11 BYTE COUNT GCMND: 0 ;COMMAND FOR VARIABLE LENGTH BLOCKS GSTORE: BLOCK MXARS ;SET GRAPHICS MODE WORD FOR EACH ARRAY, INDEX BY A GXPOS: BLOCK MXARS ;GT40'S X POSITION GYPOS: BLOCK MXARS ;AND Y POSITION GMODE: 71000,,GSTORE(A) ;BYTE POINTER FOR MODE BITS GTTY: SIXBIT / T34/ ;GT40 TELETYPE GTYI: 4,,0 ;IMAGE INPUT GTYO: 45,,0 ;SUPERIMAGE OUTPUT GTCSW: 0 ;0 IF GT40 CHANNELS CLOSED GERCH: 0 ;ERROR CHAR FROM GT40 PATCH: BLOCK 200 GTEST: SKIPE FUNCTI POPJ P, MOVEI G,1 MOVEM G,FUNCTI MOVEI G,1000 MOVEM G,XARG MOVEI G,600 MOVEM G,YARG POPJ P,