;;-*- Mode:LISP; Package:LAMBDA; Base:8 -*-
(DEFUN FLX-STRAIGHT-MAP (&KEY &OPTIONAL
(N-L2-PAGES 4096.)
(L2-PAGE-OFFSET 0)
(L2C-CONTENTS 1400)
(REFLECTION-PHYSICAL-PAGE 0))
(LET* ((BASE-PHYSICAL-ADDRESS (ND-SLOT-PHYSICAL-NUBUS-ADDRESS MEM-SLOT 0))
(BASE-PHYSICAL-PAGE (// BASE-PHYSICAL-ADDRESS 1024.))) ;address is in bytes.
(FLX-STRAIGHT-L1-AND-CHECK)
(FLX-SML2 0 N-L2-PAGES L2C-CONTENTS
(+ BASE-PHYSICAL-PAGE L2-PAGE-OFFSET)
REFLECTION-PHYSICAL-PAGE)))
(DEF-UTEST FLX-STRAIGHT-L1-AND-CHECK "LOAD THE L1 MAP WITH A STRAIGHT MAP AND VERIFY IT"
:initializers (SET-25-BIT-VIRTUAL-ADDRESS-MODE)
:postializers (CLEAR-25-BIT-VIRTUAL-ADDRESS-MODE) ;FOR NOW.
:CONSTANTS ((M-MAP-DATA 2)
(M-NUMBER-OF-LOC-USED 3)
(M-INCREMENT 4)
(M-FILLER 5)
(NUMBER-OF-LOC-IN-L1-MAP 6)
(M-ONE 7))
:INPUT-VALUES (((M-MEM M-MAP-DATA) 0) ;MAP DATA
((M-MEM M-NUMBER-OF-LOC-USED) 128.) ;NUMBER OF LOCATIONS USED
((M-MEM M-INCREMENT) 20000) ;INCREMENT MD BY THIS TO ADDRESS
;L1-MAP NEXT LOCATION
((M-MEM M-FILLER) 177) ;FILL UNUSED LOCATIONS WITH THIS
((M-MEM NUMBER-OF-LOC-IN-L1-MAP) 4096.) ;NUMBER OF LOCATIONS IN L1-MAP
((M-MEM M-ONE) 1)
(md 0))
:START WRITE-LEVEL-1-MAP-USED-LOCATIONS
:GOOD-STOP GOOD-STOP
:error-stops ((F-TO-C "failed check in readback loop"))
:TIME-OUT 10
:CODE (0
WRITE-LEVEL-1-MAP-USED-LOCATIONS ;((level-1-map) 2@M)
(LAM-IR-M-SRC M-MAP-DATA
lam-ir-op lam-op-alu
LAM-IR-ALUF LAM-ALU-SETM
LAM-IR-OB LAM-OB-ALU
LAM-IR-FUNC-DEST LAM-FUNC-DEST-L1-MAP
LAM-IR-SLOW-DEST 1)
(LAM-IR-OB LAM-OB-ALU ;((2@M) M+1 2@M) INCREMENT THE DATA
lam-ir-op lam-op-alu
LAM-IR-M-MEM-DEST M-MAP-DATA
LAM-IR-M-SRC M-MAP-DATA
LAM-IR-ALUF LAM-ALU-M+1)
(LAM-IR-OP LAM-OP-JUMP ;(JUMP-LESS-THAN-XCT-NEXT 2@M 3@A LOC)
LAM-IR-M-SRC M-MAP-DATA ;LOOP UNTIL ALL USED LOCATIONS ARE WRITTEN
LAM-IR-A-SRC M-NUMBER-OF-LOC-USED
LAM-IR-JUMP-COND LAM-JUMP-COND-M=A
LAM-IR-JUMP-ADDR READ-BACK-FILLER-TILL-USED-LOCATIONS
LAM-IR-N 0)
(LAM-IR-OP LAM-OP-ALU
LAM-IR-OB LAM-OB-ALU
LAM-IR-M-SRC LAM-M-SRC-MD
lam-ir-a-src m-increment
LAM-IR-ALUF LAM-ALU-SUB
LAM-IR-FUNC-DEST LAM-FUNC-DEST-MD)
;;now we should see that the contents of the m-map-data is the same as the
;;contents of the level 1 map
READ-BACK-M-MAP-DATA-FROM-LEVEL-1-MAP
(LAM-IR-OP LAM-OP-ALU) ;ALLOW MAP TO SETTLE AFTER MD CHANGED.
(LAM-IR-OP LAM-OP-JUMP
LAM-IR-M-SRC LAM-M-SRC-L1-MAP
LAM-IR-A-SRC M-MAP-DATA
LAM-IR-JUMP-COND LAM-JUMP-COND-M-NEQ-A
LAM-IR-JUMP-ADDR FAILED-TO-CHECK
LAM-IR-N 1)
(LAM-IR-OP LAM-OP-ALU
LAM-IR-OB LAM-OB-ALU
LAM-IR-M-SRC M-MAP-DATA
LAM-IR-A-SRC M-ONE
LAM-IR-ALUF LAM-ALU-sub
LAM-IR-M-MEM-DEST M-MAP-DATA)
(LAM-IR-OP LAM-OP-JUMP
LAM-IR-M-SRC M-MAP-DATA
LAM-IR-A-SRC M-ONE
LAM-IR-JUMP-COND LAM-JUMP-COND-M>=A
LAM-IR-JUMP-ADDR READ-BACK-M-MAP-DATA-FROM-LEVEL-1-MAP
LAM-IR-N 0)
(LAM-IR-OP LAM-OP-ALU
LAM-IR-OB LAM-OB-ALU
LAM-IR-M-SRC LAM-M-SRC-MD
lam-ir-a-src m-increment
LAM-IR-ALUF LAM-ALU-SUB
LAM-IR-FUNC-DEST LAM-FUNC-DEST-MD)
(LAM-IR-HALT 1)
GOOD-STOP ;stop here if we win
( LAM-IR-HALT 1)
FAILED-TO-CHECK
(LAM-IR-HALT 1)
F-TO-C
(LAM-IR-HALT 1)
))
;assumes first level map set up.
(def-utest FLX-SML2 "FAST-LOAD-STRAIGHT-MAP-LEVEL-2 and verify it"
:arguments (FIRST-PAGE N-PAGES DATA-CONTROL DATA-PHYSICAL-PAGE REFLECTION-PHYSICAL-PAGE)
:constants ((M-A 5) (M-B 6) (M-C 7) (M-D 10) (M-E 11) (M-F 12) (M-ONE 13) (M-TEM 14)
(M-ZERO 15))
:input-values (((m-mem m-a) 'DATA-CONTROL) ;
((m-mem m-b) 'DATA-PHYSICAL-PAGE) ; incremented each time around loop
((m-mem m-c) (ash 1 8.)) ; map address increment
((m-mem m-d) 0) ; COUNT
((m-mem m-e) 'N-PAGES) ;
((M-MEM M-F) 'REFLECTION-PHYSICAL-PAGE) ;XORed each time
((M-MEM M-ONE) 1)
((M-MEM M-TEM) 0)
((M-MEM M-ZERO) 0)
(md '(ash first-page 8.))
)
:time-out 10
:good-stop GOOD-STOP
:error-stops ((L2C-F-C "L2C failed check in readback loop")
(L2P-F-C "L2P failed check in readback loop"))
:start loc
:code (0
LOC
(LAM-IR-M-SRC M-B ;((LEVEL-2-MAP-PHYSICAL-PAGE) XOR M-B A-F)
LAM-IR-A-SRC M-F
LAM-IR-ALUF LAM-ALU-XOR
LAM-IR-OB LAM-OB-ALU
LAM-IR-FUNC-DEST LAM-FUNC-DEST-L2-MAP-PHYSICAL-PAGE
LAM-IR-SLOW-DEST 1)
(LAM-IR-M-SRC M-A ;((LEVEL-2-MAP-CONTROL) M-a)
LAM-IR-ALUF LAM-ALU-SETM
LAM-IR-OB LAM-OB-ALU
LAM-IR-FUNC-DEST LAM-FUNC-DEST-L2-MAP-CONTROL
LAM-IR-SLOW-DEST 1)
(LAM-IR-OB LAM-OB-ALU ;((M-B) M+1 M-B) -data
LAM-IR-M-MEM-DEST M-B
LAM-IR-M-SRC M-B
LAM-IR-ALUF LAM-ALU-M+1)
(LAM-IR-OB LAM-OB-ALU ;((M-D) M+1 M-D) -count
LAM-IR-M-MEM-DEST M-D
LAM-IR-M-SRC M-D
LAM-IR-ALUF LAM-ALU-M+1)
(LAM-IR-OP LAM-OP-JUMP ;(JUMP-LESS-THAN-XCT-NEXT M-D A-E LOC)
LAM-IR-M-SRC M-D
LAM-IR-A-SRC M-E
LAM-IR-JUMP-COND LAM-JUMP-COND-MA
LAM-IR-JUMP-ADDR CHECK-LOOP
LAM-IR-N 1)
(LAM-IR-HALT 1)
GOOD-STOP ;note tag comes after instruction to which it refers.
L2C-FAILED-TO-CHECK
(LAM-IR-HALT 1)
L2C-F-C
L2P-FAILED-TO-CHECK
(LAM-IR-HALT 1)
L2P-F-C
(LAM-IR-OP LAM-OP-ALU)
))