;;-*- 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) ))