From b3aa751c3a494c05e3206158d618a7c1c9bb9282 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Tue, 13 Feb 2018 03:49:35 +0100 Subject: [PATCH] The original STKTRN 39. --- src/sail/stktrn.39 | 560 ++++++++++++++++++++++++++------------------- 1 file changed, 329 insertions(+), 231 deletions(-) diff --git a/src/sail/stktrn.39 b/src/sail/stktrn.39 index ee3aafdf..cbaf9b34 100644 --- a/src/sail/stktrn.39 +++ b/src/sail/stktrn.39 @@ -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+</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 + \ No newline at end of file