1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-13 15:27:28 +00:00

Updated PAPSAV to use SYSMSG macros for maintaining patch table and

for doing more elegant patching of ITS addresses in the code.
Resolves #1454.
This commit is contained in:
Eric Swenson 2018-12-21 22:56:27 -08:00
parent ba046430dc
commit 00d632a639

View File

@ -5,9 +5,56 @@
; source did. The original PAPSAV shared some code with SYSEN1;SYSMSG > (which
; also inserted SYSENG; CALRET >). Where applicable, the source from SYSMSG was
; used in this reconstruction.
;
; EJS (2018-12-21): This version uses macros from SYSMSG to build table
; of patches (ABSTB1).
.INSRT SYSENG;CALRET >
;;; DEFINE MACROS SO THAT SYSTEM VARIABLES ACCESSED
;;; THROUGH ABS PAGES CAN BE REFERENCED IN A NATURAL WAY
DEFINE CONC A,B
A!B!TERMIN
DEFINE ABSREF SYMS
DEFINE ABSTAB
IRPW SYM,,[SYMS]
IFSE [SYM]----, IMMEDS: ;FROM HERE DOWN ARE NOT ADDRESSES
.ELSE [ SQUOZE 0,SYM
CONC ABSRF",\.IRPCNT,ABS
CONC [EXPUNGE ABSRF"]\.IRPCNT,ABS
]
TERMIN
TERMIN
IRPW SYM,,[SYMS]
IFSN [SYM]----, ABSRF. SYM,\.IRPCNT
TERMIN
TERMIN
DEFINE ABSRF. SYM,CT
ABSRF"!CT!ABS==0
IF1,[DEFINE SYM ?MOD
(MOD)[.,,ABSRF"!CT!ABS]TERMIN
]
IF2,[DEFINE SYM ?MOD
(MOD)<ZZZ==ABSRF"!CT!ABS ? ABSRF"!CT!ABS==[.,,ZZZ] ? ZZZ>TERMIN
]
TERMIN
.BEGIN ABSRF ;PLACE TO KEEP NNNABS SYMBOLS
.END
ABSREF [SYSMBF ;SYSTEM MESSAGE BUFFER
TOIP ;TTY OUTPUT PTR
TOBEP ;.., END OF BUFFER
TOOP ;output buffer output pointer
----
TOBL ;TTY OUTPUT BUFFER LENGTH
SYSCON ;SYSTEM TTY NUMBER
SYSMLNG ;LOG 2 OF NUMBER OF 4-WORD BLOCKS
]
a=4
b=5
c=6
@ -68,8 +115,8 @@ PROGRAM SYSMSG
CALL RITUAL ;ASSURANCE OF PURITY
MOVEI COUNT, 1 ;SET UP COUNT OF MESSAGE SLOTS
LSH COUNT, 0 ;instruction patched through abstb1 (SYSMLN)
movei pt,0 ; instruction patched through abstb1 (SYSMBF)
LSH COUNT, SYSMLNG ;instruction patched through abstb1 (SYSMLN)
movei pt,SYSMBF ; instruction patched through abstb1 (SYSMBF)
jrst papsav
g00002:
@ -107,8 +154,8 @@ g00003:
movei t1,[sep]
pushj p,type
papsav: MOVEI C, 0 ;-> SYSTEM JOB TTY (patched by abstb1 (SYSCON))
MOVE PT, 0(C) ;SCAN THROUGH (patch by abstb1 (TOOP))
papsav: MOVEI C, SYSCON ;-> SYSTEM JOB TTY (patched by abstb1 (SYSCON))
MOVE PT, TOOP(C) ;SCAN THROUGH (patch by abstb1 (TOOP))
SYFNDL: PUSHJ P,SYGET
tyo a
@ -116,10 +163,10 @@ SYFNDL: PUSHJ P,SYGET
tyo [^J] ; emit a linefeed
jrst syfndl
SYGET0: CAMN PT,0(C) ; patched by abstb1 (TOIP)
SYGET0: CAMN PT,TOIP(C) ; patched by abstb1 (TOIP)
.hang
CAMN PT,0(C) ; get chr from tty buf (patched by abstb1 (TOBEP)
SUBI PT,0 ; with wrap-around (patched by abstb1 (TOBL))
CAMN PT,TOBEP(C) ; get chr from tty buf (patched by abstb1 (TOBEP)
SUBI PT,TOBL ; with wrap-around (patched by abstb1 (TOBL))
ILDB A,PT ; GET char
POPJ P,
@ -283,22 +330,8 @@ NOGOOD: CALL TYPE, bletch ; wrong system version, purify
CONSTANTS
VARIABLES
abstb1: <squoze 0,SYSMBF> ; system message buffer
sysmsg+7
<squoze 0,TOIP> ; tty output ptr
sysmsg"syget0
<squoze 0,TOBEP> ; end of buffer
sysmsg"syget0+2
<squoze 0,TOOP> ; output buffer output pointer
sysmsg"papsav+1
immeds: <squoze 0,TOBL> ; tty output buffer length
sysmsg"syget0+3
<squoze 0,SYSCON> ; system tty number
sysmsg"papsav
<squoze 0,SYSMLN> ; log 2 of number of 4-word blocks
sysmsg+6
abstb2:
ABSTB1: ABSTAB
ABSTB2:
PURIFY: PROCEDURE
@ -315,11 +348,12 @@ EVLOOP: MOVE V,ABSTB1(I) ; get symbol
SUBI V,REMAPT ; into high core
EVLP00: ADDI I, 1
MOVE TT,ABSTB1(I) ; follow patch list
PLOOP: skipn l,tt
jrst evlpnx
HRRZ TT,(L) ; loc to patch
HRRM V,(L) ; patch it
JRST PLOOP ; and try again
PLOOP: JUMPE TT,EVLPNX ; jump if end of list
MOVE L,TT
HLRZ TT,(L) ;LOC TO PATCH
HRRM V,(TT) ;PATCH IT
HRRZ TT,(L) ;LINK TO NEXT
JRST PLOOP ;AND TRY AGAIN
EVLPNX: AOBJN I,EVLOOP ; next symbol