mirror of
https://github.com/PDP-10/its.git
synced 2026-01-22 10:32:13 +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!!<21>\
|
||
;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
|