mirror of
https://github.com/PDP-10/its.git
synced 2026-02-07 08:57:06 +00:00
The original STKTRN 39.
This commit is contained in:
@@ -1,293 +1,391 @@
|
||||
;Reconstructed from SAIL;FAIL BIN disassembly.
|
||||
|
||||
TITLE STINK Translator
|
||||
|
||||
T=1
|
||||
STOBLK=2
|
||||
STNWD=4
|
||||
STOWD=5
|
||||
STBTYP=6
|
||||
STOSBC=7
|
||||
STNSBC=10
|
||||
STNBLK=11
|
||||
STCKS=12
|
||||
STCODE=13
|
||||
STNSBL==14
|
||||
BC=14
|
||||
STP=15
|
||||
P=17
|
||||
|
||||
INTGLB==20
|
||||
STNBT==21
|
||||
STOSBL==22
|
||||
STNBL==40
|
||||
STGSTL==41
|
||||
TITLE STKTRN DEC-STINK FORMAT CONVERTER
|
||||
|
||||
INTERNAL STKTRN
|
||||
EXTERNAL GBOUT1
|
||||
|
||||
STKTRN: MOVEM P,STACS+17 ;141
|
||||
MOVEI P,STACS
|
||||
BLT P,STACS+16
|
||||
MOVE P,STACS+17
|
||||
HRRZ STNBLK,(BC)
|
||||
JUMPE STNBLK,STSKRT
|
||||
CAILE STNBLK,35
|
||||
HALT .
|
||||
MOVNS STNBLK
|
||||
MOVSM STNBLK,STOBLK
|
||||
HRRI STOBLK,1(BC)
|
||||
MOVEI STOSBC,0
|
||||
HLRZ STBTYP,(BC)
|
||||
STBINT: HRRZI STNBLK,STNBUF ;156
|
||||
MOVE STP,[-STGSTL,,STGSTU]
|
||||
; AC DEFINITIONS
|
||||
|
||||
STNBLK_11 ;AOBJN POINTER INTO NEW BUFFER
|
||||
STOBLK_2 ;AOBJN POINTER INTO OLD BUFFER
|
||||
STNWD_4 ;WORD TO BE PLACED INTO STINKING BUFFER
|
||||
STOWD_5 ;WORD FETCHED FROM STANFORD BUFFER
|
||||
STBTYP_6 ;BLOCK TYPE, SEE STBDSP FOR DESCRIPTION
|
||||
STOSBC_7 ;DEC SUB-BLOCK COUNT
|
||||
STNSBC_10 ;STINK SUB-BLOCK COUNT
|
||||
T_1
|
||||
STCKS_12 ;CHECK SUM
|
||||
STCODE_13 ;CODE BITS FOR STOWD
|
||||
BC_14 ;DO NOT CHANGE, USED IN SAIL, FAIL, ETC.
|
||||
STP_15 ;INTERNAL STACK POINTER
|
||||
P_17 ;DO NOT CHANGE, USES IN SAIL, FAIL, ETC.
|
||||
|
||||
; ASSEMBLY PARAMETERS
|
||||
|
||||
STNBL__40 ;STINK BUFFER LENGTH
|
||||
STOSBL__=18 ;DEC SUB-BLOCK LENGTH
|
||||
STNSBL__=12 ;STINK SUB-BLOCK LENGHT
|
||||
STGSTL__41 ;INTERNAL STACK LENGTH
|
||||
; CODE BEGINS HERE
|
||||
|
||||
STKTRN: MOVEM 17,STACS+17
|
||||
MOVEI 17,STACS
|
||||
BLT 17,STACS+16
|
||||
MOVE 17,STACS+17
|
||||
|
||||
; INITIALIZE POINTERS INTO STANFORD BUFFER
|
||||
|
||||
HRRZ STNBLK,(BC) ;WORD COUNT
|
||||
JUMPE STNBLK,STSKRT ;IGNORE BLOCKS OF ZERO LENGTH
|
||||
CAILE STNBLK,STNBL-<1+<<STNBL-1>/STNSBL>>
|
||||
JRST 4,. ;BUFFER NOT BIG ENOUGH
|
||||
MOVNS STNBLK ;-(WORD COUNT)
|
||||
MOVSM STNBLK,STOBLK ;-(WORD COUNT)=>LEFT HALF
|
||||
HRRI STOBLK,1(BC) ;-(WORD COUNT),,POINTER INTO STANFORD BUFFER
|
||||
MOVEI STOSBC,0 ;FAKE STGET INTO BELIEVING THAT CODE BITS NEXT
|
||||
HLRZ STBTYP,(BC) ; BC POINTS TO OLD HEADER, TYPE,,WORD COUNT
|
||||
|
||||
;INITITALIZE POINTERS INTO STINKING BUFFER
|
||||
|
||||
STBINT: HRRZI STNBLK,STNBUF ;POINTER INTO STINK BUFFER
|
||||
MOVE STP,[IOWD STGSTL,STGSTK]
|
||||
|
||||
; ZERO STINK BUFFER
|
||||
|
||||
SETZB STCKS,STNBUF
|
||||
MOVE T,[STNBUF,,STNBUF+1]
|
||||
BLT T,STGPTR-1
|
||||
HRROI STNSBC,-1
|
||||
SETZB STNWD,STGSTU
|
||||
CAILE STBTYP,STNBT
|
||||
HALT .
|
||||
PUSHJ P,STBMPR
|
||||
MOVE T,STBDSP(STBTYP)
|
||||
MOVE T,[XWD STNBUF,STNBUF+1]
|
||||
BLT T,STNBUF+STNBL-1
|
||||
|
||||
; GENERATE NEW BUFFER HEADER
|
||||
|
||||
HRROI STNSBC,-1 ;HEADER FIRST
|
||||
SETZB STNWD,STGSTU ;ZERO HEADER AND GLOBAL COUNT
|
||||
|
||||
; DISPATCH ON BLOCK TYPE
|
||||
|
||||
CAILE STBTYP,STNBT ;CHECK FOR LEGAL BLOCK TYPE
|
||||
JRST 4,. ;ILLEGAL
|
||||
PUSHJ P,STBMPR ;MAP BLOCK TYPES AND OUTPUT HEADER
|
||||
MOVE T,STBDSP(STBTYP) ;DO IT
|
||||
PUSHJ P,(T)
|
||||
|
||||
;HERE AFTER DISPATCH
|
||||
|
||||
HLR BC,STNBLK
|
||||
MOVNS BC
|
||||
HRLS BC
|
||||
HRRI BC,STNBUF
|
||||
MOVEM BC,STACS+14
|
||||
SKIPGE STBDSP(STBTYP)
|
||||
STSKRT: AOS (P) ;200
|
||||
MOVSI P,STACS
|
||||
BLT P,P
|
||||
MOVEM BC,STACS+BC ;FIX POINTER TO STINKING BUFFER SO THAT GBOUT WINS
|
||||
SKIPGE STBDSP(STBTYP) ;SKIP TO OUTPUT CODE
|
||||
STSKRT: AOS (P) ;SKIP RETURN DOES NOT OUTPUT CODE
|
||||
MOVSI 17,STACS ;RESTORE AC'S
|
||||
BLT 17,17
|
||||
POPJ P,
|
||||
; DISPATCH ON STANFORD BLOCK TYPE
|
||||
|
||||
STBDSP: 0,,STKBLK ;204
|
||||
3,,STREL
|
||||
10,,STSYM
|
||||
30,,STHIGH
|
||||
15,,STENT
|
||||
4,,STEND
|
||||
-1,,STNAME
|
||||
1001,,STCOP
|
||||
21,,STCOP
|
||||
22,,STCOP
|
||||
23,,STCOP
|
||||
26,,STLVAR
|
||||
27,,STLVAR
|
||||
24,,STLVAR
|
||||
25,,STLVAR
|
||||
25,,STLVAR
|
||||
20,,STGLBS
|
||||
16,,STENT
|
||||
; 4.9=1 => DO NOT OUTPUT CODE
|
||||
; 4.8 - 4.1 ADDRESS BITS TO BE PLACED IN HEADER
|
||||
; 3.9 - 3.1 STINK BLOCK TYPE
|
||||
|
||||
STBMPR: LDB T,[221100,,STBDSP(STBTYP)] ;226
|
||||
DPB T,[310700,,STNWD]
|
||||
CAIE T,1
|
||||
JRST STPUT
|
||||
LDB T,[331000,,STBDSP(STBTYP)]
|
||||
DPB T,[001000,,STNWD]
|
||||
STPUT: MOVEM STNWD,(STNBLK) ;234
|
||||
ADD STNBLK,[1,,1]
|
||||
JUMPL STNSBC,STPUT0
|
||||
IDPB STCODE,STPPTR
|
||||
STBDSP: STKBLK ;0 SPECIAL HACK TO PASS STINK BLOCKS DIRECTLY
|
||||
XWD 3,STREL ;1 RELOCATABLE
|
||||
XWD 10,STSYM ;2 SYMBOLS
|
||||
XWD 30,STHIGH ;3 HIGH SEGMENT
|
||||
XWD 15,STENT ;4 ENTRY
|
||||
XWD 4,STEND ;5 END
|
||||
XWD -1,STNAME ;6 NAME
|
||||
XWD 1001,STCOP ;7 STARTING ADDRESS
|
||||
XWD 21,STCOP ;10 FIXUPS
|
||||
XWD 22,STCOP ;11 POLISH FIXUP
|
||||
XWD 23,STCOP ;12 LINK
|
||||
XWD 26,STLVAR ;13 LVARD (OBSOLETE SHOULD NOT HAPPEN)
|
||||
XWD 27,STINDR ;14 INDEX (NEW DEC STUFF)
|
||||
XWD 24,STLDRL ;15 LDREL
|
||||
XWD 25,STLDLB ;16 LOAD LIBRARY
|
||||
XWD 25,STLDLB ;17 ANOTHER FLAVOR OF LIBRARY LOAD
|
||||
|
||||
;NON-DEC BLOCK TYPES GO HERE
|
||||
|
||||
INTGLB__.-STBDSP
|
||||
XWD 20,STGLBS ;GLOBAL SYMBOLS
|
||||
XWD 16,STENT ;SDAT
|
||||
|
||||
STNBT__.-STBDSP-1 ;NUMBER OF BLOCK TYPES
|
||||
|
||||
; THIS ROUTINE MAPS STANFORD BLOCK #'S INTO STINK BLOCK #'S
|
||||
|
||||
STBMPR: LDB T,[XWD 221100+STBTYP,STBDSP] ;STINK BLOCK TYPE
|
||||
DPB T,[XWD 310700,STNWD] ;PUT IT INTO HEADER WORD
|
||||
CAIE T,1 ;SKIP ON LOADER COMMAND
|
||||
JRST STPUT ;THE HEADER IS ALL DONE
|
||||
LDB T,[XWD 331000+STBTYP,STBDSP] ;ADDRESS FIELD BITS
|
||||
DPB T,[XWD 001000,STNWD] ;SALT AWAY
|
||||
; THIS ROUTINE STORES A WORD INTO STINKING BUFFER
|
||||
|
||||
STPUT: MOVEM STNWD,(STNBLK) ;SALT AWAY WORD
|
||||
ADD STNBLK,[1,,1] ;UPDATE COUNT
|
||||
JUMPL STNSBC,STPUT0 ;JUMP ON HEADER
|
||||
IDPB STCODE,STPPTR ;SALT AWAY CODE BITS
|
||||
SOJLE STNSBC,STPUT0
|
||||
CPOPJ: POPJ P,
|
||||
STPUTF: HLRZ T,STNBLK ;242
|
||||
|
||||
; HERE FOR END OF BLOCK. CHECK SUM LAST CODE BITS AND OUTPUT CHECKSUM
|
||||
|
||||
STPUTF: HLRZ T,STNBLK ;COUNT IN HEADER=NUMBER WORDS IN BLOCK-2
|
||||
SUBI T,1
|
||||
DPB T,[220700,,STNBUF]
|
||||
DPB T,[220700,,STNBUF] ;PUT COUNT IN HEADER
|
||||
ADDI T,1
|
||||
MOVNS T
|
||||
MOVNS T ;SET UP POINTER FOR CHECK SUM
|
||||
HRLI T,STNBUF
|
||||
MOVSS T
|
||||
PUSHJ P,STCKIT
|
||||
MOVSS T ;-# WORDS TO CHECK SUM,,POINTER
|
||||
PUSHJ P,STCKIT ;CHECK SUM
|
||||
AOBJN T,.-1
|
||||
SETCAB STCKS,(STNBLK)
|
||||
ADD STNBLK,[1,,1]
|
||||
POPJ P,
|
||||
STPUT0: MOVEI STNSBC,BC ;256
|
||||
HRLI T,440300
|
||||
HRRI T,(STNBLK)
|
||||
MOVEM T,STPPTR
|
||||
ADD STNBLK,[1,,1]
|
||||
|
||||
; HERE TO INITIALIZE NEW SUB-BLOCK POINTERS
|
||||
|
||||
STPUT0: MOVEI STNSBC,STNSBL ;SUB-BLOCK LENGTH
|
||||
HRLI T,440300 ;3 BIT BYTES
|
||||
HRRI T,(STNBLK) ;POINTS TO CODE BITS
|
||||
MOVEM T,STPPTR ;BYTE POINTER
|
||||
ADD STNBLK,[1,,1] ;POINTS TO NEXT WORD
|
||||
POPJ P,
|
||||
STCKIT: JCRY0 .+1 ;264
|
||||
ADD STCKS,(1)
|
||||
JCRY0 [AOJA STCKS,.+1
|
||||
IMULI STNWD,50
|
||||
JRST STSQUZ+3]
|
||||
|
||||
; THIS ROUTINE CHECKSUMS
|
||||
|
||||
STCKIT: JFCL 4,.+1 ;CLEAR CARRY 0
|
||||
ADD STCKS,(T)
|
||||
JFCL 4,[AOJA STCKS,.+1]
|
||||
POPJ P,
|
||||
STOUT: PUSH P,STCODE ;270
|
||||
|
||||
;THIS ROUTINE OUTPUTS THE BUFFER
|
||||
|
||||
STOUT: PUSH P,STCODE ;SAVE, BECAUSE GBOUT CLOBBERS
|
||||
MOVE STCODE,STBTYP
|
||||
HLRZ BC,STNBLK
|
||||
HLRZ BC,STNBLK ;WORD COUNT
|
||||
MOVNS BC
|
||||
HRLI BC,STNBUF
|
||||
MOVSS BC
|
||||
PUSHJ P,GBOUT1
|
||||
HRLI BC,STNBUF ;ORIGIN OF BUFFER
|
||||
MOVSS BC ;AOBJN POINTER TO STINK FORMAT BLOCK
|
||||
PUSHJ P,GBOUT1 ;DO THE REAL .IOT'S
|
||||
POP P,STCODE
|
||||
POPJ P,
|
||||
STGET: MOVE 5,(STOBLK) ;301
|
||||
SOJL 7,STGET0
|
||||
ILDB STCODE,STGPTR
|
||||
AOBJN STOBLK,CPOPJ
|
||||
; HERE TO FETCH A WORD FROM THE DEC BUFFER
|
||||
|
||||
STGET: MOVE STOWD,(STOBLK) ;FETCH WITHOUT ANY ADO
|
||||
SOJL STOSBC,STGET0 ;JUMP FOR CODE BITS NEXT
|
||||
ILDB STCODE,STGPTR ;FETCH CODE BITS
|
||||
AOBJN STOBLK,CPOPJ ;JUMP ON END OF BLOCK
|
||||
POPJ P,
|
||||
STGET0: HRLI T,440200 ;306
|
||||
HRRI T,(STOBLK)
|
||||
MOVEM T,STGPTR
|
||||
MOVEI 7,STOSBL
|
||||
AOJA STOBLK,STGET
|
||||
STREL: PUSHJ P,STGET ;313
|
||||
HRRM STOWD,STNBUF
|
||||
MOVEI T,2
|
||||
CAIN STCODE,0
|
||||
DPB T,[310700,,STNBUF]
|
||||
STCOP: PUSHJ P,STGET ;320
|
||||
MOVE STNWD,STOWD
|
||||
PUSHJ P,STPUT
|
||||
JUMPL 2,STCOP
|
||||
PUSHJ P,STPUTF
|
||||
|
||||
; HERE TO HANDLE CODE BITS
|
||||
|
||||
STGET0: HRLI T,440200 ;2 BIT BYTES
|
||||
HRRI T,(STOBLK) ;POINTS AT CODE BITS
|
||||
MOVEM T,STGPTR ;BYTE POINTER
|
||||
MOVEI STOSBC,STOSBL ;SUB-BLOCK LENGTH
|
||||
AOJA STOBLK,STGET ;BUMP POINTER AND FETCH NEXT WORD
|
||||
|
||||
; HANDLE A RELOCATABLE BLOCK
|
||||
|
||||
STREL: PUSHJ P,STGET ;INITIAL LOAD ADDRESS
|
||||
HRRM STOWD,STNBUF ;PUT INTO HEADER
|
||||
MOVEI T,2 ;ASSUME AN ABSOLUTE BLOCK TYPE
|
||||
CAIN STCODE,0 ;SKIP IF RELOCATED
|
||||
DPB T,[310700,,STNBUF] ;MAKE THE INITIAL LOAD ADDRESS ABSOLUTE
|
||||
;FALL THROUGH TO COPY REST OF BLOCK
|
||||
|
||||
; THIS ROUTINE COPIES A BLOCK
|
||||
|
||||
STCOP: PUSHJ P,STGET ;READ
|
||||
MOVE STNWD,STOWD ;PREPARE TO WRITE
|
||||
PUSHJ P,STPUT ;WRITE
|
||||
JUMPL STOBLK,STCOP ;JUMP IF MORE STILL IN STANFORD BUFFER
|
||||
PUSHJ P,STPUTF ;THAT'S ALL, CHECK SUM THE LAST CODE BITS
|
||||
POPJ P,
|
||||
STSYM: MOVE STNBLK,[000001,,STNBUF+1]
|
||||
STSYM1: PUSHJ P,STGET ;327
|
||||
MOVE STNWD,STOWD
|
||||
PUSHJ P,STGET
|
||||
MOVEM STOWD,STSVAL
|
||||
PUSHJ P,STSQUZ
|
||||
PUSHJ P,@STSDSP(1)
|
||||
JUMPL STOBLK,STSYM1
|
||||
PUSHJ P,STPUTF
|
||||
SKIPN STOWD,STGSTU
|
||||
;THIS ROUTINE HANDLES A BLOCK OF SYMBOLS
|
||||
|
||||
STSYM: MOVE STNBLK,[1,,STNBUF+1] ;BLOCK OF LOCALS HAS NO CODE BITS
|
||||
STSYM1: PUSHJ P,STGET ;SYMBOL
|
||||
MOVE STNWD,STOWD ;IGNORE CODE BITS
|
||||
PUSHJ P,STGET ;VALUE
|
||||
MOVEM STOWD,STSVAL ;SAVE IN SAFE PLACE
|
||||
PUSHJ P,STSQUZ ;CONVERT SQOOZE AND LEAVE FLAGS IN T
|
||||
PUSHJ P,@STSDSP(T) ;DISPATCH ON SYMBOL FLAGS
|
||||
JUMPL STOBLK,STSYM1 ;JUMP IF MORE SYMBOLS
|
||||
PUSHJ P,STPUTF ;FINISH OFF BLOCK
|
||||
SKIPN STOWD,STGSTU ;IS THERE GARBAGE IN STACK
|
||||
POPJ P, ;NO RETURN
|
||||
|
||||
;HERE TO PUSH OUT LOCAL SYMBOLS AND HANDLE GLOBALS
|
||||
|
||||
CAME STNBLK,[2,,STNBUF+2] ;NO LOCALS, NO OUTPUT
|
||||
PUSHJ P,STOUT ;OUTPUT THE BUFFER
|
||||
MOVEI STBTYP,INTGLB ;SET DISPATCH FOR GLOBAL SYMBOL BLOCK
|
||||
PUSHJ P,STBINT ;INITIALIZE BUFFER POINTEERS AND DISPATCH
|
||||
POPJ P,
|
||||
CAME STNBLK,[000002,,STNBUF+2]
|
||||
PUSHJ P,STOUT
|
||||
MOVEI STBTYP,INTGLB
|
||||
PUSHJ P,STBINT
|
||||
POPJ P,
|
||||
STSQUZ: LDB T,[400400,,STNWD] ;346
|
||||
TLZ STNWD,740000
|
||||
|
||||
; THIS ROUTINE CONVERTS DEC SQOOZE TO THE STINKING VARIETY
|
||||
|
||||
STSQUZ: LDB T,[XWD 400400,STNWD]
|
||||
TLZ STNWD,740000 ;CONVERT TO STINK STYLE SQUOOZE
|
||||
JUMPE STNWD,STSYM2
|
||||
CAMGE STNWD,[000606,,500000]
|
||||
CAMGE STNWD,[50*50*50*50*50]
|
||||
JRST [IMULI STNWD,50
|
||||
JRST STSQUZ+3]
|
||||
STSYM2: DPB T,[400400,,STNWD]
|
||||
JRST .-1]
|
||||
STSYM2: DPB T,[XWD 400400,STNWD]
|
||||
POPJ P,
|
||||
; SYMBOL FLAGS DISPATCH
|
||||
|
||||
STSDSP: STOP ;355
|
||||
STIGS
|
||||
STLCL
|
||||
STBN
|
||||
STOP
|
||||
STGLHF
|
||||
STOP
|
||||
STOP
|
||||
STOP
|
||||
STGLHF
|
||||
STLCL
|
||||
STOP
|
||||
STGRQ
|
||||
STIGS-1
|
||||
STOP
|
||||
STOP
|
||||
STSDSP: STOP ;00 PROGRAM NAME (ILLEGAL IN THIS CONTEXT)
|
||||
STIGS ;04 GLOBAL (INTERNAL)
|
||||
STLCL ;10 LOCAL
|
||||
STBN ;14 BLOCK NAME
|
||||
STOP ;20 ILLEGAL
|
||||
STGRHF ;24 GLOBAL RIGHT-HALF FIX
|
||||
STOP ;30 ILLEGAL
|
||||
STOP ;34 ILLEGAL
|
||||
STOP ;40 ILLEGAL
|
||||
STGLHF ;44 GLOBAL LEFT-HALF FIX
|
||||
STLCL ;50 LOCAL (HALF-KILLED)
|
||||
STOP ;54 ILLEGAL
|
||||
STGRQ ;60 GLOBAL REQUEST
|
||||
STGBHF ;64 GLOBAL BOTH-HALF FIX
|
||||
STOP ;70 ILLEGAL
|
||||
STOP ;74 ILLEGAL
|
||||
|
||||
STOP: HALT . ;375
|
||||
STBN: TLZ STNWD,100000
|
||||
STLCL: DPB STCODE,[410200,,STNWD] ;377
|
||||
MOVEM STNWD,(STNBLK)
|
||||
STOP: JRST 4,. ;TRAP FOR ILLEGAL BLOCK TYPE. BLOCK NUMBER IN T
|
||||
|
||||
;HERE FOR BLOCK NAMES
|
||||
|
||||
STBN: TLZ STNWD,100000 ;SQUOOZE FLAGS BECOME 04
|
||||
|
||||
;HERE FOR LOCAL SYMBOL
|
||||
|
||||
STLCL: DPB STCODE,[410200,,STNWD] ;RELOCATION BITS
|
||||
MOVEM STNWD,(STNBLK) ;SQUOOZE
|
||||
MOVE STNWD,STSVAL
|
||||
MOVEM STNWD,1(STNBLK)
|
||||
ADD STNBLK,[2,,2]
|
||||
MOVEM STNWD,1(STNBLK) ;VALUE
|
||||
ADD STNBLK,[2,,2] ;WE JUST ADDED TWO WORDS
|
||||
POPJ P,
|
||||
STGLHF: JFCL
|
||||
STIGS: AOS STGSTU ;406
|
||||
PUSH STP,STNWD
|
||||
PUSH STP,STSVAL
|
||||
PUSH STP,STCODE
|
||||
HRLM T,(15)
|
||||
; HERE TO SAVE GLOBAL SYMBOLS OF ALL FLAVORS FOR PROCESSING AT STGLBS
|
||||
|
||||
STGRHF:
|
||||
STGLHF:
|
||||
STGBHF: JFCL
|
||||
STIGS: AOS STGSTU ;COUNT GLOBALS
|
||||
PUSH STP,STNWD ;SQOOZE
|
||||
PUSH STP,STSVAL ;VALUE
|
||||
PUSH STP,STCODE ;CODE BITS
|
||||
HRLM T,(STP) ;FLAG BITS,,CODE BITS
|
||||
POPJ P,
|
||||
STGLBS: MOVEI STCODE,0 ;414
|
||||
MOVE STNWD,1(15)
|
||||
PUSHJ P,stput
|
||||
HRR STCODE,3(15)
|
||||
MOVE STNWD,2(15)
|
||||
|
||||
;HERE TO OUTPUT GLOBAL SYMBOLS, CALL WITH NUMBER OF GLOBALS IN STOWD
|
||||
|
||||
STGLBS: MOVEI STCODE,0 ;OUTPUT SQOOZE
|
||||
MOVE STNWD,1(STP)
|
||||
PUSHJ P,STPUT
|
||||
ADD STP,[3,,3]
|
||||
JUMPGE STP,[HALT .]
|
||||
SOJG STOWD,STGLBS
|
||||
PUSHJ P,STPUTF
|
||||
HRR STCODE,3(STP) ;CODE BITS FOR VALUE
|
||||
MOVE STNWD,2(STP) ;VALUE
|
||||
PUSHJ P,STPUT
|
||||
ADD STP,[XWD 3,3]
|
||||
JUMPGE STP,[JRST 4,.] ;OVERFLOWED TABLE AREA
|
||||
SOJG STOWD,STGLBS ;THERE'S MORE
|
||||
PUSHJ P,STPUTF ;FINISH UP THE BUFFER
|
||||
POPJ P,
|
||||
STGRQ: JUMPGE STOWD,STIGS ;427
|
||||
TLNN STOWD,100000
|
||||
|
||||
;HERE FOR DEFERRED INTERNAL HACKING
|
||||
|
||||
STGRQ: JUMPGE STOWD,STIGS
|
||||
TLNN STOWD,100000 ;THIS IS THE SYMBOL "VALUE"
|
||||
JRST STIGS
|
||||
PUSH P,T
|
||||
EXCH STOWD,STNWD
|
||||
PUSHJ P,STSQUZ
|
||||
EXCH STOWD,STNWD ;THIS IS A DEFERRED INTERNAL
|
||||
PUSHJ P,STSQUZ ;ITS VALUE IS SQUOOZE AND MUST BE CONVERTED
|
||||
MOVEM STNWD,STSVAL
|
||||
MOVE STNWD,STOWD
|
||||
POP P,T
|
||||
JRST STIGS
|
||||
STNAME: PUSHJ P,STGET ;441
|
||||
; HERE TO HANDLE PROGRAM NAME
|
||||
|
||||
STNAME: PUSHJ P,STGET
|
||||
MOVE STNWD,STOWD
|
||||
PUSHJ P,STSQUZ
|
||||
MOVEM STNWD,STPRGN
|
||||
JUMPGE STOBLK,CPOPJ
|
||||
PUSHJ P,STGET
|
||||
TRNE STOWD,-1
|
||||
HALT .
|
||||
POPJ P,
|
||||
STEND: PUSHJ P,STGET ;452
|
||||
HRLI STOWD,STGPTR-1
|
||||
MOVEM STOWD,STNBUF
|
||||
SETZM STNBUF+1
|
||||
SETZM STNBUF+2
|
||||
PUSHJ P,STSQUZ ;MAP SQUOOZE
|
||||
MOVEM STNWD,STPRGN ;SAVE PROGRAM NAME
|
||||
JUMPGE STOBLK,CPOPJ ;END OF BLOCK
|
||||
PUSHJ P,STGET ;GET STUFF FOR COMMON
|
||||
TRNE STOWD,-1 ;RIGHT HALF IS FOR COMMON
|
||||
JRST 4,. ; I DON'T UNDERSTAND COMMON
|
||||
POPJ P, ;LEFT HALF IS ASSEMBLER/COMPILER ID
|
||||
; 12 FOR FAIL
|
||||
|
||||
; HERE TO HANDLE END BLOCK
|
||||
|
||||
STEND: PUSHJ P,STGET ;PROGRAM BREAK
|
||||
HRLI STOWD,602 ;STORE A ZERO IN THE PROGRAM BREAK
|
||||
MOVEM STOWD,STNBUF ;HEADER
|
||||
SETZM STNBUF+1 ;CODES
|
||||
SETZM STNBUF+2 ;THE ZERO
|
||||
MOVE T,[-3,,STNBUF]
|
||||
PUSHJ P,STCKIT
|
||||
PUSHJ P,STCKIT ;CHECKSUM
|
||||
AOBJN T,.-1
|
||||
SETCAM STCKS,STNBUF+3
|
||||
SETZB STNWD,STCKS
|
||||
EXCH STNWD,STPRGN
|
||||
TLO STNWD,40000
|
||||
MOVSI T,1001
|
||||
SETZB STNWD,STCKS ;ZERO PROGRAM NAME
|
||||
EXCH STNWD,STPRGN ;FETCH PROGRAM NAME
|
||||
TLO STNWD,40000 ;MARK TO RESET RELOCATION
|
||||
MOVSI T,1001 ;HEADER, BLOCK TYPE=4, WORD COUNT=1
|
||||
MOVEM T,STNBUF+4
|
||||
MOVEM STNWD,STNBUF+5
|
||||
MOVE T,[-2,,STNBUF+4]
|
||||
MOVE T,[-2,,STNBUF+4] ;CHECK SUM THE BLOCK
|
||||
PUSHJ P,STCKIT
|
||||
AOBJN T,.-1
|
||||
SETCAB STCKS,STNBUF+6
|
||||
SETOM STNBUF+7
|
||||
MOVE STNBLK,[10,,STNBUF+10]
|
||||
SETOM STNBUF+7 ;SET END OF FILE MARK
|
||||
MOVE STNBLK,[10,,STNBUF+10] ;THE BUFFER IS EIGHT WORDS LONG
|
||||
POPJ P,
|
||||
STENT: MOVE STNBLK,[1,,STNBUF+1] ;500
|
||||
STENT1: PUSHJ P,STGET
|
||||
|
||||
; HERE TO HANDLE ENTRY BLOCK
|
||||
|
||||
STENT: MOVE STNBLK,[1,,STNBUF+1] ;HEADER ONLY WORTHWHILE THING IN BUFFER
|
||||
STENT1: PUSHJ P,STGET ;ENTRY NAME
|
||||
MOVE STNWD,STOWD
|
||||
PUSHJ P,STSQUZ
|
||||
TLZ STNWD,740000
|
||||
MOVEM STNWD,(STNBLK)
|
||||
ADD STNBLK,[1,,1]
|
||||
JUMPL STOBLK,STENT1
|
||||
JRST STPUTF
|
||||
STKBLK: MOVEI STNBLK,STNBUF ;511
|
||||
ADD BC,[1,,1]
|
||||
MOVE STOWD,(BC)
|
||||
PUSHJ P,STSQUZ ;CONVERT SQUOOZE
|
||||
TLZ STNWD,740000 ;CLEAR FLAGS
|
||||
MOVEM STNWD,(STNBLK) ;TO THE BUFFER
|
||||
ADD STNBLK,[1,,1] ;UPDATE COUNT
|
||||
JUMPL STOBLK,STENT1 ;GET MORE
|
||||
JRST STPUTF ;CHECK SUM AND FINISH
|
||||
|
||||
; HERE TO PASS STINK BLOCKS DIRECTLY
|
||||
|
||||
STKBLK: MOVEI STNBLK,STNBUF
|
||||
ADD BC,[1,,1] ;GET BC POINTING TO STINK HEADER
|
||||
MOVE STOWD,(BC) ;COPY THE REST INTO THE NEW BUFFER
|
||||
MOVEM STOWD,(STNBLK)
|
||||
ADD STNBLK,[1,,1]
|
||||
AOBJN BC,.-3
|
||||
JRST STPUTF
|
||||
STLVAR: ;520
|
||||
STLDLB: ;520
|
||||
STLDRL: ;520
|
||||
STINDR: ;520
|
||||
STHIGH: ;520
|
||||
JRST STCOP ;520
|
||||
STVERS: SIXBIT /STKTRN/
|
||||
.FNAM2
|
||||
STACS: BLOCK 20 ;523
|
||||
STNBUF: BLOCK 40 ;543
|
||||
STGPTR: 0 ;603
|
||||
STPPTR: 0
|
||||
STSVAL: 0
|
||||
STGSTU: 0
|
||||
STGSTK: BLOCK 42 ;607
|
||||
STPRGN: 0 ;651
|
||||
PATCH: BLOCK 10 ;652
|
||||
JRST STPUTF ;CHECKSUM AND FINISH
|
||||
|
||||
END STKTRN
|
||||
; UNIMPLEMENTED BLOCK TYPES TRAP HERE
|
||||
|
||||
STHIGH:
|
||||
STLVAR:
|
||||
STINDR:
|
||||
STLDRL:
|
||||
STLDLB: JRST STCOP ;PASS ALL OTHER BLOCKS UNCHANGED
|
||||
;IMPURE STORAGE
|
||||
|
||||
STVERS: .FNAM1 ;VERSION IDENT
|
||||
.FNAM2
|
||||
STACS: BLOCK 20 ;AC SAVE AREA
|
||||
STNBUF: BLOCK STNBL ;STINKING BUFFER
|
||||
STGPTR: 0 ;BYTE POINTER INTO STANFORD STYLE CODE BITS
|
||||
STPPTR: 0 ;BYTE POINTER INTO STINK CODE BITS
|
||||
STSVAL: 0 ;CURRENT SYMBOL VALUE
|
||||
STGSTU: 0 ;GLOBALS
|
||||
STGSTK: BLOCK STGSTL+1 ;GLOBAL SAVE AREA
|
||||
STPRGN: 0 ;PROGRAM NAME
|
||||
PATCH: BLOCK 10
|
||||
|
||||
END ;END STKTRN
|
||||
| ||||