mirror of
https://github.com/PDP-10/its.git
synced 2026-01-29 21:30:57 +00:00
460 lines
11 KiB
Groff
460 lines
11 KiB
Groff
TITLE LOSS DEVICE
|
|
|
|
A=1 ;TEMP ;USUALLY BOJ OPCODE WORD
|
|
B=2 ;TEMP ;FILE NAME 1 DURING OPEN
|
|
C=3 ;TEMP ;FILE NAME 2 DURING OPEN
|
|
D=4 ;TEMP
|
|
E=5 ;ERRORS (ERROR # IN LH, SKIP COUNT IN RIGHT)
|
|
F=6 ;FLAGS
|
|
M=7 ;I/O MODE AS SEEN BY LOSER
|
|
N=10 ;SEMI-TEMPORARY
|
|
Q=11 ;BYTE POINTER OR BLOCK POINTER FOR SENDING TO LOSER
|
|
S=12 ;CHANNEL STATUS SPECIFIED BY LOSER
|
|
W=13 ;# OF WDS OR CHARS BEFORE GIVING EOF/DEVFULL
|
|
U=16 ;FOR INTERRUPT LEVEL ONLY
|
|
P=17 ;PDL
|
|
|
|
BOJC=15 ;BOJ CHANNEL
|
|
|
|
LPDL==10 ;LENGTH OF PDL
|
|
|
|
;;; FLAGS IN LEFT HALF OF F
|
|
|
|
%FOPEN==400000 ;OPEN HAS SUCCEEDED
|
|
%FDIR==200000 ;DIRECTORY MODE
|
|
%FIOC==100000 ;IOC ERROR MODE
|
|
%FINT==40000 ;INTERRUPT ON LOSER'S .IOT
|
|
%FINTR==20000 ;INTERRUPT RANDOMLY
|
|
|
|
LOC 41
|
|
JSR UUOH
|
|
JSR TSINT
|
|
|
|
LOC 100
|
|
UUOH: 0 ;UUO HANDLER
|
|
JRST DIE ;DON'T USE ANY!
|
|
|
|
TSINT: 0 ;INTERRUPT WORD
|
|
0 ;RETURN ADDRESS
|
|
SKIPL U,TSINT
|
|
JRST TSINT1 ;WORD 1 INTERRUPT
|
|
TRNN U,1_BOJC ;WORD 2 - BETTER BE BOJC
|
|
JRST DIE
|
|
SETOM INT ;SIGNAL RECEIPT OF INTERRUPT
|
|
.DISMISS TSINT+1
|
|
|
|
TSINT1: TLNE U,200000 ;BETTER BE REAL TIME INTERRUPT
|
|
TLNN F,%FINTR ; AND RANDOM INT FLAG BETTER BE SET
|
|
JRST DIE
|
|
JUMPL S,TSINT2 ;JUMP UNLESS JOB STATUS SET UP
|
|
.CALL JOBSTS
|
|
JRST DIE
|
|
TSINT2: .CALL JOBINT ;SO GIVE LOSER A RANDOM INTERRUPT
|
|
JRST DIE
|
|
.DISMISS TSINT+1
|
|
|
|
INT: 0 ;NEG => INTERRUPT RECEIVED ON BOJC
|
|
|
|
JOBSTS: SETZ
|
|
SIXBIT \JOBSTS\ ;SET JOB CHANNEL STATUS
|
|
1000,,BOJC ;BOJ CHANNEL #
|
|
400000,,S ;NEW CHANNEL STATUS
|
|
|
|
JOBINT: SETZ
|
|
SIXBIT \JOBINT\ ;GIVE INTERRUPT ON JOB CHANNEL
|
|
401000,,BOJC ;BOJ CHANNEL #
|
|
|
|
JOBCON: SETZ
|
|
SIXBIT \JOBRET\ ;RETURN TO LOSER
|
|
1000,,BOJC ;BOJ CHANNEL #
|
|
400000,,E ;<ERROR #>,,<SKIP AMOUNT>
|
|
|
|
OPNLUZ: .CALL JOBCON ;WANT TO ERROR OUT ON .OPEN
|
|
JFCL ; - ERROR # IN LH OF E
|
|
DIE: .LOGOUT ;COMMIT SUICIDE
|
|
.VALUE [ASCIZ \.JPC/\] ;IF CAN'T, MUST BE DEBUGGING
|
|
|
|
PDL: BLOCK LPDL ;NOT USED MUCH ANYWAY
|
|
|
|
GO: MOVE P,[-LPDL,,PDL-1]
|
|
SETZB F,INT
|
|
SETO S,
|
|
.OPEN BOJC,[17,,'BOJ]
|
|
JRST DIE
|
|
.SUSET [.SMASK,,[200000,,]] ;REAL TIME CLOCK
|
|
.SUSET [.SMSK2,,[1_BOJC]] ;BOJ CHANNEL
|
|
.SUSET [.SIFPIR,,[1_BOJC]] ;FAKE INT TO GET GOING
|
|
LOOP: JUMPL S,LOOP1
|
|
.CALL JOBSTS
|
|
JRST DIE
|
|
LOOP1: SKIPL INT ;WAIT FOR BOJ INTERRUPT
|
|
.HANG
|
|
SETZM INT
|
|
MOVE D,[-12,,JOBBLK]
|
|
.CALL JOBCAL ;GET CRUFT ABOUT BOJ REQUEST
|
|
JRST JBCLUZ
|
|
TLNE A,60000
|
|
JRST CLOSE ;WANT TO CLOSE UP SHOP
|
|
JRST @.+1(A) ;RH OF A HAS I/O OPCODE
|
|
OPEN
|
|
IOT
|
|
STATUS
|
|
RESET
|
|
RCHST
|
|
ACCESS
|
|
FDELE
|
|
RENMWO
|
|
CALL
|
|
|
|
JBCLUZ: TLNN F,%FOPEN ;JOBCAL LOST
|
|
JRST DIE
|
|
JRST LOOP
|
|
|
|
JOBCAL: SETZ
|
|
SIXBIT \JOBCAL\ ;GET INFO ABOUT JOB CALL
|
|
1000,,BOJC ;BOJ CHANNEL #
|
|
2000,,A ;BOJ REQUEST OPCODE
|
|
400000,,D ;BLOCK POINTER TO DATA AREA
|
|
|
|
JOBBLK: BLOCK 12 ;ROOM FOR BOJ REQUEST DATA
|
|
|
|
OPENUP: SETZ
|
|
SIXBIT \OPEN\ ;OPEN FILE
|
|
4000,,MODETB(M) ;MODE
|
|
1000,,BOJC ;CHANNEL #
|
|
,,[SIXBIT \BOJ\] ;DEVICE NAME
|
|
400000,,0 ;CRETINOUS ITS CURRENTLY DEMANDS THIS
|
|
|
|
MODETB: 31 ;BASICALLY,
|
|
30 ; WANT
|
|
33 ; TO OPEN
|
|
32 ; IN
|
|
35 ; MODE
|
|
34 ; INVERSE
|
|
37 ; TO
|
|
36 ; LOSER'S
|
|
|
|
OPEN: TLNE F,%FOPEN ;MUSTN'T ALREADY BE OPEN
|
|
JRST DIE
|
|
LDB M,[410300,,A] ;I/O MODE
|
|
.CALL OPENUP ;RE-OPEN BOJ IN CORRECT MODE
|
|
JRST DIE
|
|
MOVE B,JOBBLK+1 ;FILE NAME 1
|
|
MOVE C,JOBBLK+2 ;FILE NAME 2
|
|
CAMN B,[SIXBIT \.FILE.\]
|
|
CAME C,[SIXBIT \(DIR)\]
|
|
JRST OPEN1
|
|
MOVSI E,12 ;"MODE NOT AVAILABLE"
|
|
TRNE M,5 ;CAN ONLY GIVE ASCII DIRECTORY
|
|
JRST OPNLUZ
|
|
MOVE Q,[-LDIR,,DIR]
|
|
MOVEI W,LCHDIR
|
|
.OPEN BOJC,[33,,'BOJ] ;RE-OPEN BOJ IN ASCII BLOCK OUTPUT
|
|
JRST DIE
|
|
MOVEI M,2 ;ASSUME LOSER IS BLOCK MODE TOO
|
|
TLO F,%FDIR ;WE'RE IN DIRECTORY MODE
|
|
OPNOK: TLO F,%FOPEN
|
|
MOVEI E,1 ;SINGLE SKIP
|
|
MOVEM B,CHSTAT+1 ;SAVE FILE NAMES FOR .RCHST
|
|
MOVEM C,CHSTAT+2
|
|
CONTIN: .CALL JOBCON ;CONTINUE THE LOSER
|
|
JRST DIE
|
|
JRST LOOP ;CONTINUE US
|
|
|
|
OPEN1: CAME B,[SIXBIT \IOC\]
|
|
JRST OPEN1A
|
|
PUSHJ P,GETN ;IOC ERROR MODE
|
|
JUMPLE N,BADNAM ;CHECK SECOND FILE NAME
|
|
CAILE N,LIOCTB/2
|
|
JRST OPEN1B ;CODE TOO HIGH, PUNT THE FILE NAME BUT WORK ANYWAY
|
|
MOVEI D,(N) ;TRANSLATE NAMES FOR .RCHST
|
|
LSH D,1
|
|
MOVE B,IOCTB-2(D)
|
|
MOVE C,IOCTB-1(D)
|
|
JRST OPEN1B
|
|
|
|
OPEN1A: MOVE D,[-LIOCTB,,IOCTB]
|
|
PUSHJ P,LOOKUP
|
|
JRST OPEN2
|
|
OPEN1B: TLO F,%FIOC
|
|
JRST OPNOK
|
|
|
|
OPEN2: HLLZ D,B
|
|
CAME D,[SIXBIT \INT\]
|
|
JRST OPEN4
|
|
PUSHJ P,GETN ;INTERRUPT MODE
|
|
MOVE S,N ;LOSER-SPECIFIED STATUS
|
|
TLO F,%FINT
|
|
HRLZ D,B
|
|
JUMPE D,OPNOK ;INT ON .IOT
|
|
PUSHJ P,GETN
|
|
TLC F,%FINT+%FINTR ;INT AFTER SPECIFIED TIME
|
|
SKIPN D,N
|
|
MOVEI D,1
|
|
IMULI D,30.
|
|
MOVE N,[600000,,D]
|
|
.REALT N,
|
|
INFINI: MOVSI W,200000 ;INFINITY (377777,, LOSES - SEE 2IOT)
|
|
IOTOK: MOVE Q,IOTPTR(M)
|
|
JRST OPNOK
|
|
|
|
IOTPTR: 440700,,TRIX ;ASCII UNIT INPUT (FOR LOSER)
|
|
0 ;ASCII UNIT OUTPUT (UNUSED)
|
|
-LTRIX,,TRIX ;ASCII BLOCK INPUT
|
|
-LFLUSH,,FLUSH ;ASCII BLOCK OUTPUT
|
|
31416,,0 ;IMAGE UNIT INPUT
|
|
0 ;IMAGE UNIT OUTPUT (UNUSED)
|
|
31416,,0 ;IMAGE BLOCK INPUT
|
|
-LFLUSH,,FLUSH ;IMAGE BLOCK OUTPUT
|
|
|
|
OPEN4: CAME B,[SIXBIT \STATUS\]
|
|
JRST OPEN5
|
|
PUSHJ P,GETN ;USER-SPECIFIED STATUS
|
|
MOVEI S,(N)
|
|
JRST INFINI
|
|
|
|
OPEN5: CAME B,[SIXBIT \EOF\]
|
|
JRST ERRS
|
|
PUSHJ P,GETN ;EOF/DEVICE FULL DEVICE
|
|
MOVE W,N
|
|
JRST IOTOK
|
|
|
|
FDELE: MOVE B,JOBBLK+1 ;FILE FILE NAME
|
|
MOVE C,JOBBLK+2 ;SECOND FILE NAME
|
|
ERRS: CAME B,[SIXBIT \ERR\]
|
|
CAMN B,[SIXBIT \ERROR\]
|
|
JRST ERROR
|
|
MOVE D,[-LERRTB,,ERRTB]
|
|
PUSHJ P,LOOKUP
|
|
BADNAM: MOVEI N,11 ;"ILLEGAL FILE NAME"
|
|
FATALN: MOVSI E,(N)
|
|
FATAL: .CALL JOBCON
|
|
JRST DIE
|
|
JRST DIE
|
|
|
|
ERROR: PUSHJ P,GETN
|
|
JUMPLE N,BADNAM
|
|
CAILE N,LERRTB/2
|
|
JRST FATALN ;IF OUT OF RANGE, PUNT ON THE NAME, BUT WORK ANYWAY
|
|
JRST FATALN
|
|
|
|
;;; LOOK UP A PAIR OF FILE NAMES IN B AND C IN A TABLE WHOSE
|
|
;;; AOBJN POINTER IS IN D. SKIPS ON SUCCESS, LEAVING INDEX IN N.
|
|
|
|
LOOKUP: MOVEI N,-2(D)
|
|
LOOK0: CAMN B,(D)
|
|
CAME C,1(D)
|
|
JRST LOOK1
|
|
SUBI N,(D)
|
|
MOVNS N
|
|
LSH N,-1
|
|
POPJ1: AOS (P)
|
|
POPJ P,
|
|
|
|
LOOK1: AOBJP D,DIE
|
|
AOBJN D,LOOK0
|
|
POPJ P,
|
|
|
|
;;; STANDARD TABLE OF .CALL-TYPE ERROR FILE NAMES
|
|
|
|
ERRTB: SIXBIT \NOSUCHDEVICE\ ; 1 NO SUCH DEVICE
|
|
SIXBIT \WRONG DIREC \ ; 2 WRONG DIRECTION
|
|
SIXBIT \2MANY TRANSL\ ; 3 TOO MANY TRANSLATIONS
|
|
SIXBIT \FILNOTFOUND \ ; 4 FILE NOT FOUND
|
|
SIXBIT \DIR FULL \ ; 5 DIRECTORY FULL
|
|
SIXBIT \DEVICEFULL \ ; 6 DEVICE FULL
|
|
SIXBIT \DEVNOTREADY \ ; 7 DEVICE NOT READY
|
|
SIXBIT \DEVNOTAVAIL \ ;10 DEVICE NOT AVAILABLE
|
|
SIXBIT \ILGL FILNAM\ ;11 ILLEGAL FILE NAME
|
|
SIXBIT \MODNOTAVAIL \ ;12 MODE NOT AVAILABLE
|
|
SIXBIT \FILE EXISTS\ ;13 FILE ALREADY EXISTS
|
|
SIXBIT \BAD CHAN# \ ;14 BAD CHANNEL NUMBER
|
|
SIXBIT \2MANY ARGS \ ;15 TOO MANY ARGUMENTS (CALL)
|
|
SIXBIT \PAKNOTMOUNT \ ;16 PACK NOT MOUNTED
|
|
SIXBIT \DIRNOTAVAIL \ ;17 DIRECTORY NOT AVAIL
|
|
SIXBIT \NON-EXUSRNAM\ ;20 NON-EXISTENT USER NAME
|
|
SIXBIT \LOCAL DEVICE\ ;21 LOCAL DEVICE ONLY
|
|
SIXBIT \SELF CONTRA\ ;22 SELF-CONTRADICTORY OPEN
|
|
SIXBIT \FILE LOCKED\ ;23 FILE LOCKED
|
|
SIXBIT \M.F.D.FULL \ ;24 M.F.D. FULL
|
|
SIXBIT \DEVNOTASSIGN\ ;25 DEVICE NOT ASSIGNABLE TO THIS PROCESSOR
|
|
SIXBIT \WRITE LOCKED\ ;26 DEVICE WRITE-LOCKED
|
|
SIXBIT \LINK DEPTH \ ;27 LINK DEPTH EXCEEDED
|
|
SIXBIT \2FEW ARGS \ ;30 TOO FEW ARGUMENTS (CALL)
|
|
SIXBIT \CAN'T MODIFY\ ;31 CAN'T MODIFY JOB
|
|
SIXBIT \CAN'T ACCESS\ ;32 CAN'T GET THAT ACCESS TO PAGE
|
|
SIXBIT \LOSINGARGS \ ;33 MEANINGLESS ARGS
|
|
SIXBIT \WRONG TYPE \ ;34 WRONG TYPE DEVICE
|
|
SIXBIT \NOSUCHJOB \ ;35 NO SUCH JOB
|
|
SIXBIT \VALCLRSTOSET\ ;36 VALID CLEAR OR STORED SET
|
|
SIXBIT \NOCOREAVAIL \ ;37 NO CORE AVAILABLE
|
|
SIXBIT \NOTTOPLEVEL \ ;40 NOT TOP LEVEL
|
|
SIXBIT \OTHER END \ ;41 OTHER END OF PIPELINE GONE OR NOT OPEN
|
|
SIXBIT \JOB GONE \ ;42 JOB GONE OR GOING AWAY
|
|
SIXBIT \ILLEGLCALL \ ;43 ILLEGAL SYSTEM CALL NAME
|
|
SIXBIT \CHNLNTOPEN \ ;44 CHANNEL NOT OPEN
|
|
SIXBIT \IEMPTYOFULL \ ;45 INPUT BUF. EMPTY OR OUT. BUF. FULL
|
|
SIXBIT \UNREC FILE \ ;46 UNRECOGNIZABLE FILE
|
|
SIXBIT \LINKTONONEXF\ ;47 LINK TO NON-EXISTENT FILE
|
|
LERRTB==.-ERRTB
|
|
|
|
IOCTB: SIXBIT \HARDWROP \ ; 1 ILLEGAL HARDWARE OPERATION ATTEMPTED
|
|
SIXBIT \ACCESS>EOF \ ; 2 ATTEMPTED RANDOM ACCESS TO ADDRESS BEYOND END OF FILE
|
|
SIXBIT \DATA ERROR \ ; 3 NON-RECOVERABLE DATA ERROR
|
|
SIXBIT \NON-EXSUBDEV\ ; 4 NON-EXISTENT SUB-DEVICE
|
|
SIXBIT \OVER IOPOP \ ; 5 OVER IOPOP
|
|
SIXBIT \OVER IOPUSH\ ; 6 OVER IOPUSH
|
|
SIXBIT \USRCHNNOTUSR\ ; 7 USR OP CHNL DOES NOT HAVE USR OPEN
|
|
SIXBIT \CHANOTOPEN \ ;10 CHNL NOT OPEN
|
|
SIXBIT \DEV FULL \ ;11 DEVICE FULL
|
|
SIXBIT \ILGL MODE \ ;12 CHNL IN ILLEGAL MODE ON IOT
|
|
SIXBIT \ILGL ^PCODE\ ;13 ILLEGAL CHR AFTER CNTRL P ON TTY DISPLAY
|
|
LIOCTB==.-IOCTB
|
|
|
|
RESET: JRST IGNORE ;GOOD PLACES FOR BREAKPOINTS
|
|
STATUS: JRST IGNORE
|
|
ACCESS: JRST IGNORE
|
|
RENMWO: JRST IGNORE
|
|
CALL: JRST IGNORE
|
|
|
|
IGNORE: MOVEI E,1 ;IGNORE RANDOM COMMAND
|
|
.CALL JOBCON
|
|
JRST DIE
|
|
JRST LOOP
|
|
|
|
CLOSE: JRST DIE ;SO DIE, ALREADY
|
|
|
|
RCHST: TLNN F,%FOPEN
|
|
JRST DIE
|
|
MOVEI E,1
|
|
MOVE D,[-6,,CHSTAT]
|
|
.CALL JOBRET
|
|
JRST DIE
|
|
JRST LOOP
|
|
|
|
JOBRET: SETZ
|
|
SIXBIT \JOBRET\ ;RETURN STUFF TO LOSER
|
|
1000,,BOJC ;BOJ CHANNEL #
|
|
,,E ;RETURN SPEC
|
|
400000,,D ;AOBJN POINTER TO DATA
|
|
|
|
CHSTAT: 'LOS ;CRETINOUS .RCHST!
|
|
0 ;FILE NAME 1 ;FILLED IN
|
|
0 ;FILE NAME 2 ; BY OPEN
|
|
0 ;NULL SNAME
|
|
-1 ;NOT RANDOM ACCESS
|
|
0 ;???
|
|
|
|
TRIX: ASCII \SILLY RABBIT, TRIX ARE FOR KIDS!!î\
|
|
;MULTIPLE OF 5 CHARS
|
|
LTRIX==.-TRIX
|
|
0 ;NEED A ZERO WORD - SEE 0IOT
|
|
|
|
;;; GIVEN FILE NAME IN C, RETURN NUMBER IN N.
|
|
;;; FILE NAME MAY BE 0,,NNNNNN OR MAY BE SIXBIT \NNNNNN\.
|
|
;;; CLOBBERS D.
|
|
|
|
GETN: MOVEI N,(C)
|
|
TLNN C,-1
|
|
POPJ P,
|
|
PUSH P,C ;MUST PRESERVE C
|
|
GETN1: SETZ D,
|
|
ROTC C,6
|
|
SUBI D,20
|
|
JUMPL D,BADNAM
|
|
CAIL D,8.
|
|
JRST BADNAM
|
|
;;TRC D,20
|
|
;;TRNE D,70
|
|
;;JRST BADNAM
|
|
LSH N,3
|
|
ADDI N,(D)
|
|
JUMPN C,GETN1
|
|
POP P,C
|
|
POPJ P,
|
|
|
|
IOT: TLNN F,%FOPEN ;MUST BE OPEN TO IOT!
|
|
JRST DIE
|
|
TLNN F,%FIOC ;SKIP IF WE WANT AN IOC ERROR
|
|
JRST IOT1
|
|
IOTIOC: .CALL SETIOC
|
|
JRST DIE
|
|
JRST LOOP
|
|
|
|
SETIOC: SETZ
|
|
SIXBIT \SETIOC\ ;SET IOC ERROR
|
|
1000,,BOJC ;BOJ CHANNEL #
|
|
400000,,N ;IOC ERROR NUMBER
|
|
|
|
IOT1: TLNN F,%FINT ;SKIP IF WE WANT RANDOM INTERRUPT
|
|
JRST IOT2
|
|
.CALL JOBINT
|
|
JRST DIE
|
|
JRST LOOP
|
|
|
|
IOT2: JUMPG W,@IOTJ(M) ;JUMP ON MODE UNLESS EOF
|
|
MOVEI E,1
|
|
TRNN M,1
|
|
JRST CONTIN ;FOR INPUT, JUST DON'T SEND ANYTHING
|
|
MOVEI N,11 ;"DEVICE FULL" (IOC ERROR)
|
|
JRST IOTIOC
|
|
|
|
IOTJ: 0IOT ;ASCII UNIT INPUT
|
|
1IOT ;ASCII UNIT OUTPUT
|
|
2IOT ;ASCII BLOCK INPUT
|
|
3IOT ;ASCII BLOCK OUTPUT
|
|
4IOT ;IMAGE UNIT INPUT
|
|
5IOT ;IMAGE UNIT OUTPUT
|
|
6IOT ;IMAGE BLOCK INPUT
|
|
7IOT ;IMAGE BLOCK OUTPUT
|
|
|
|
0IOT0: MOVE Q,IOTPTR+0
|
|
0IOT: ILDB A,Q ;GOBBLE CHAR FOR LOSER
|
|
JUMPE A,0IOT0 ;RAN OUT - CIRCLE BACK
|
|
1IOT: .IOT BOJC,A ;SEND LOSER THE CHAR (OR GOBBLE ONE)
|
|
SOJA W,LOOP ;DECR CHAR COUNT
|
|
|
|
2IOT: HLRE A,Q ;GET COUNT OF WORDS LEFT IN IOT PTR
|
|
MOVNS A
|
|
MOVE B,W
|
|
ADDI B,4
|
|
IDIVI B,5
|
|
CAMLE B,A
|
|
JRST 2IOT3
|
|
MOVN A,B
|
|
HRLM A,Q
|
|
MOVE D,MASKS(C)
|
|
ADDI B,-1(Q)
|
|
MOVE C,[014060301406] ;FIVE ^C'S
|
|
ANDM D,C
|
|
ANDCAM D,(B)
|
|
IORM C,(B)
|
|
2IOT3: ADDI W,(Q)
|
|
.IOT BOJC,Q
|
|
SUBI W,(Q)
|
|
SKIPL Q ;MIGHT NOT HAVE RUN OUT
|
|
MOVE Q,IOTPTR+2
|
|
JRST LOOP
|
|
|
|
MASKS: 3760 ;RANDOM MASKS FOR INSTALLING ^C'S
|
|
77760
|
|
177,,77760
|
|
3777,,777760
|
|
0
|
|
|
|
;;; *** TEMP ***
|
|
DIR==TRIX
|
|
LDIR==LTRIX
|
|
LCHDIR==5*LDIR
|
|
LFLUSH==50
|
|
FLUSH: BLOCK LFLUSH
|
|
|
|
;I GUESS TGQ DIDN'T FEEL LIKE BOTHERING TO WRITE THESE
|
|
3IOT:
|
|
4IOT:
|
|
5IOT:
|
|
6IOT:
|
|
7IOT: JRST IOTIOC ;FOR WANT OF ANYTHING BETTER TO DO
|
|
|
|
END GO
|