It's now clearer to me how IRCONT is meant to be used: the BKBUF buffer
is BSIZE+5 words long, so it's OK to go a word or too over BSIZE. So
you're meant to set IRCONT before you start adding words, and clear it
*before* you add the last one.
So no need for my extra function; just use IRCONT as intended.
The code in CNSTA wrote its last word with IRCONT still set. I think
this is harmless because it was always the first word in a block anyway,
but fixed anyway.
;I.E. TELL LOADER THAT SQUOZE IN SYM, FORMERLY CONSIDERED LOCAL, IS REALLY GLOBAL
PLOGLO: SKIPGE CONTRL
RET
;I.E. TELL LOADER THAT SQUOZE IN SYM, FORMERLY CONSIDERED LOCAL, IS REALLY GLOBAL
PLOGLO: SKIPGE CONTRL
RET
+ TRO I,IRCONT ;Don't end block between the two words
PUSHJ P,PBITS7
MOVEI A,CLGLO
PUSHJ P,PBITS
TLO SYM,400000 ;SAY THIS IS NEW STYLE RQ,
PUSHJ P,OUTSM0 ;PUNCH "OLD NAME" = SYMTAB IDX,
TLC SYM,440000 ;SAY MAKE GLOBAL, OUTPUT ACTUAL NAME OF SYM.
PUSHJ P,PBITS7
MOVEI A,CLGLO
PUSHJ P,PBITS
TLO SYM,400000 ;SAY THIS IS NEW STYLE RQ,
PUSHJ P,OUTSM0 ;PUNCH "OLD NAME" = SYMTAB IDX,
TLC SYM,440000 ;SAY MAKE GLOBAL, OUTPUT ACTUAL NAME OF SYM.
PUSHJ P,OUTSM
JRST POPAJ
\f
PUSHJ P,OUTSM
JRST POPAJ
\f
TLO A,100000 ;RELOCATE
PUSHJ P,$OUTPT
HRRZ A,1(T)
TLO A,100000 ;RELOCATE
PUSHJ P,$OUTPT
HRRZ A,1(T)
- PUSHJ P,$OUTPT ;OUTPUT VALUE, FIRST LOCATION IN AREA
+ PUSHJ P,$OUTPT ;OUTPUT VALUE, FIRST LOCATION IN AREA
CNSTDA: MOVSI A,CTDEF
IORM A,2(T) ;CALL IT DEFINED
CNSTD: TRNE FF,FRPSS2
CNSTDA: MOVSI A,CTDEF
IORM A,2(T) ;CALL IT DEFINED
CNSTD: TRNE FF,FRPSS2
TROA FF,FRBIT7
TRZ FF,FRBIT7
IDPB A,BITP
TROA FF,FRBIT7
TRZ FF,FRBIT7
IDPB A,BITP
- POPJ P,
-
- ;Call when you're about to output two words into a block.
-MKROOM: PUSH P,A
- MOVE A,OPT1
- CAIL A,BSIZE+BKBUF-1 ;Space for more than one word?
- PUSHJ P,EBLK ;No - start a new block
- POP P,A
POPJ P,
;FOLLOWING ROUTINES SAVE AC'S EXCEPT FOR A
POPJ P,
;FOLLOWING ROUTINES SAVE AC'S EXCEPT FOR A
SKIPL CONTRL ;IF RELOCATABLE ANDLOCAL SYMBOL,
CAIL A,DEFGVR_-33.
RET
SKIPL CONTRL ;IF RELOCATABLE ANDLOCAL SYMBOL,
CAIL A,DEFGVR_-33.
RET
+ TRO I,IRCONT ;Don't end block between the two words
PUSHJ P,PBITS7 ;TELL STINK TO EXPUNGE SYM.
MOVEI A,CLGLO
PUSHJ P,PBITS
TLO SYM,400000 ;SAY IS NEW TYPE RQ,
PUSHJ P,OUTSM0
MOVSI A,400000 ;NEW NAME NULL => DELETE.
PUSHJ P,PBITS7 ;TELL STINK TO EXPUNGE SYM.
MOVEI A,CLGLO
PUSHJ P,PBITS
TLO SYM,400000 ;SAY IS NEW TYPE RQ,
PUSHJ P,OUTSM0
MOVSI A,400000 ;NEW NAME NULL => DELETE.
JRST $OUTPT
\f
;EQUAL SYM1,SYM2 ;DEFINE SYM1 SAME AS SYM2.
JRST $OUTPT
\f
;EQUAL SYM1,SYM2 ;DEFINE SYM1 SAME AS SYM2.