Text preview for : Mesa-Nova2.asm_Sep78.pdf part of xerox Mesa-Nova2.asm Sep78 xerox mesa 4.0_1978 listing Mesa_4_Microcode Mesa-Nova2.asm_Sep78.pdf
Back to : Mesa-Nova2.asm_Sep78.pdf | Home
Mesa-Nova2.asm 2-Sep-78 17:21:54 Page 1
FILE MESA-NOVA2.ASM
R. JOHNSSON
LAST MODIFIED May 17, 1978 7:57 AM
.TITL MesaNova2
. TXTM B
.ENT PScode
.ENT MesaNova2
.ENT MesaNovaS;ze2
.ENT STOPImplementer
.ENT CleanUpQueueImplementer
.ENT RequeueSubImplementer
.ENT WakeHeadUser
.ENT OSFPtr
.ENT OutLdPtr
.ENT InLdPtr
.ENT Fin;shPtr
.ENT FinProcPtr
.SREL
PScode: PCORR
MesaNova2: START
MesaNovaSize2: END-START
STOPImplementer: STOP-START+X
CleanUpQueueImplementer: CleanUpQueue-START+X
RequeueSubImplementer: RequeueSub-START+X
WakeHeadUser: Wake Head
OSFPtr: RTRN
OutLdPtr: OUTLDP
InLdPtr: INLDP
FinishPtr: FINISH-START+X
FinProcptr: FINPROC
.NREL
.GET "Mesa-NovaDefs.asm"
x .. 174400 where this code will be loaded
START:
PCORR: PSQ-START+X-l+2; Absolute address of PSO-lt2
; PSQ thru PS16 must be consecutive locations
PSO: JSR PSWITCH
PSi: JSR PSWITCH
PS2: JSR PSWITCH
PS3: JSR PSWITCH
PS4: JSR PSWITCH
PS5: JSR PSWITCH
PS6: JSR PSWITCH
PS7: JSR PSWITCH
PSi0: JSR PSWITCH
PSii: JSR PSWITCH
PS12: JSR PSWITCH
PS13: JSR PSWITCH
PS14: JSR PSWITCH
PS15: JSR PSWITCH
PS16: JSR PSWITCH
pINTPC: INTPC
PSWITCH:
LDA 0 PCORR
SUB 0 3 AC3 now has interrupt channel number
LDA 0 CVA,3 ACO now has CVptr to NOTIFY
LDA 1 @pINTPC Find out where we interrupted from
MOVUI 1 1 SZC
BRI Something wrong, probably SWAT abort
NakedNot ify: ;(cvptr)
mov Q 2 snr test for no cv
bri
lda 1 0,2 cvptrt
movzlll 1 1 szr test for empty, ignore possible ww
jmp DoNotify
subzr o0
Mesa-Nova2.asm 2-Sep-78 17:21:54 Page 2
sta o 0,2 cvptrt ~ [ww,empty]
bri
DoNotify:
jsr CleanUpQueue
jsr @WakeHead
bri
WakeHead: 0
STOP: LDA 2 currentState ; COPY STATE POINTER TO AC2
JSR NOVACODE ; ADDRESS OF DISPATCH TABLE TO AC3
JMP @RTRN
JMP @RTRN
JMP DOOUTLD
JMP DOINLD
JMP DISASTER
JMP NOVAJSR
NOVACODE: LOA 0 0,2 ; PICK UP CODE
ADD 0 3 ADD TO TABLE BASE
JMP 0,3
FINPROC: o POINTS TO PD FOR FINISH PROCEDURE
FINISH: DIR
LOA 1 @FINPROC
MOV# 1 1 SNR
JMP 1,3
INC 3 3
STA 3 RTRN NEW RETURN ADDRESS
LOA 2 currentState
STA 1 11,2 x
SUB 1 1
STA 1 12,2 Y
STA 0 0,2 THE FINISH CODE
SUBZL 0 0
STA 0 10,2 , STKP ~ 1
STA 1 @pACTIVE DISABLE ALL INTERRUPTS
ISZ SOC disable reschedule
JMP @Emulate
pACTIVE: ACTIVE
DOOUTLD: SUBZL o0
STA o 10,2 STKP ~ 1
LOA o 1,2 ; FP
LOA 1 2.2 ; @MESSAGE
JSR @OUTLDP
OUTLDP: 0
STA o 0,2 ; RETURN VALUE
JMP @Emulate
DOINLD: SUB 0 0
STA 0 10.2 STKP ~ 0
LOA 0 1,2
LOA 1 2,2
JMP @INLDP NEVER RETURNS
DISASTER: LOA 2 @PuntData POINTER TO PUNT DATA
MOV# 0 0 SNR
JMP SwatPunt NOT SET UP YET
INC 2 2
INC 2 2
LOA 0 -1.2 MESACOREFP
MOV# 0 0 SNR
JMP SwatPunt NOT SET UP YET
SUB 1 1
JSR @OUTLOP
INLOP: 0
LOA 0 -2.2 MESADEBUGGERFP
MOV 2 1
JMP @INLDP
PuntData: 456
RTRN: 0
Mesa-Nova2.asm 2-Sep-78 17:21:54 Page 3
SWATTrap: 567
SwatPunt:
JSR Swatl
.TXT "Puntl"
Swat1: MOV 3 1
LOA 3 @SWATTrap
JMP 16,3 ; does a Call Swat
CALL LEAVES FCN-CODE, ADDRESS, ARG ON TOP OF STACK
tos ARG
tos-1 ADDRESS
tos-2 FCN-CODE
CALLS NOVA CODE WITH ARG IN ACO, 'RETURNS ACO TO TOS
INTERRUPTS MUST REMAIN OFFl
NOVAJSR: DSZ 10,2 ; STKP ~ STKP - 1
DSZ 10.2 ; STKP ~ STKP - 1
; THESE SHOULD NEVER SKIP
LOA 3 10.2 AC3 ~ STKP
ADD 2 3 ; AC3 ~ POINTER TO NEW TOS+l
LOA 0 1.3 ; ACO ~ ARG
JSR @0.3
LOA 2 currentState
LOA 3 10.2 ; AC3 ~ STKP
ADD 2 3
STA 0 -1.3
JMP @Emulate
CleanUpQueue: ;(q) returns (q)
sta 3 QSreturn
mov o2
lda 3 0.2 ; P ~ q't
movzl# 3 3 snr test p = NIL; ignore ww
jmp @QSreturn
lda 1 cleanUpLink.3
snz 1 1 test p.cleanUpLink m NIL
jmp @QSreturn
findhead:
sne 1 3 test p.cleanUpLink # p
jmp queueempty
snz 1 1 test p.cleanUpLink # 0
jmp foundhead
mov 1 3 p ~ p.cleanUpLink
lda 1 cleanUpLink.3 load p.cleanUpLink
jmp findhead
foundhead:
mov 3 0 ; head ~ p
findtail :
lda llink.3
sne o1 ;test p.link head
jmp foundtail
mov 1 3 ; p ~ p.link
jmp findtail
queueempty:
sub 3 3 set qt ~ NIL when p.cleanUpLink=p
foundtail :
sta 3 0.2 qt ~ p
mov 2 0 return q
jmp @QSreturn
q1: 0
q2: 0
p: 0
QSreturn: 0
RequeueSub: (ql.q2.p)
returns with p still in AC2
sta 0 ql
sta 1 q2
sta 2 p
sta 3 QSreturn
lda 3 link.2
sub 2 3 szr tes t p. 1 ink .. p
Mesa-Nova2..asm 2.-Sep-78 17:21:54 Page 4
jmp delink not equal; must delink
pp .. a - AC3
sz aa if q1-0
jmp cleanStore
lda 1 link,2. AC1 IS p.link (added ... ddr)
jmp cleanLater
delink: movz a3 snr if q1-0
movo 2. 3 skp then p; carry"l iff ql