1
0
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:
Lars Brinkhoff
2018-02-13 03:49:35 +01:00
parent 91e36ee10f
commit b3aa751c3a

View File

@@ -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