;;; -*- Mode:LISP; Package:TRAP; Readtable:ZL; Base:10 -*- (prims:define-global-frame trap) (prims:define-global-variable trap save-oreg) (prims:define-global-variable trap save-left) (prims:define-global-variable trap save-right) (prims:define-global-variable trap save-status) (prims:define-global-variable trap save-jcond) (prims:define-global-variable trap save-trap) (prims:define-global-variable trap save-trap-pc) (prims:define-global-variable trap save-trap-pc+) (prims:define-global-variable trap trap-mask) (prims:define-global-variable trap trap-temp) (defafun trap-entry () ;;; at absolute location 0 (alu setl save-oreg r0 r0 bw-32) ;save OREG (alu setl save-left r0 r0 bw-32) ;save LEFT (alu setr save-right r0 r0 bw-32) ;save RIGHT (alu pass-status save-status r0 r0 bw-32) ;save STATUS (alu-field extract-bit-right save-jcond r0 processor-status (byte 1. -16.)) ;save JCOND (alu-field field-and save-trap trap-mask trap-register (byte 31. 0.)) ;save TRAP reg (alu prioritize-r trap-temp r0 save-trap bw-32) ;prioritize traps (alu-field set-bit-right trap-temp r0 trap-temp (byte 1. 5.)) ;add 32. (alu-field field-extract-r save-trap-pc r0 trap-pc (byte 24. 0.)) ;save trap-pc (alu-field field-extract-r save-trap-pc+ r0 trap-pc+ (byte 24. 0.) next-pc-dispatch) (nop) (nop)) (defafun interrupt-exit () ;;; at absolute location 12. (alu-field field-pass processor-control save-jcond processor-control (byte 1. 4.)) (alu load-status-r nop r0 save-status bw-32) (alu setl nop save-trap-pc save-right bw-32) (alu setl nop save-trap-pc+ save-right bw-32) (move nop save-oreg bw-32 next-pc-dispatch br-jindir) (nop) (nop) (nop)) (defafun trap-exit () ;;; at absolute location 20. (alu-field field-pass processor-control save-jcond processor-control (byte 1. 4.)) (alu load-status-r nop r0 save-status bw-32) (alu setl nop save-trap-pc save-right bw-32) (alu setl nop save-trap-pc+ save-right bw-32) (move nop save-oreg bw-32 next-pc-dispatch br-jindir) (nop) (nop) (nop)) (defafun diag-trap-exit () ;;; at absolute location 28. (alu setl nop save-trap-pc save-right bw-32) (alu setl nop save-trap-pc+ save-right bw-32) (move nop save-oreg bw-32 next-pc-dispatch br-jindir) (nop)) (defafun trap-vector-table () ;;; at absolute location 32. (jump trap-reset ()) ;Bit 31 - Highest priority trap-trace (unconditional-branch trap-trace ()) ;Bit 30 trap-icache-parity (unconditional-branch trap-icache-parity ()) ;Bit 29 trap-icache-nubus-err (unconditional-branch trap-icache-nubus-err ()) ;Bit 28 trap-icache-nubus-timeout (unconditional-branch trap-icache-nubus-timeout ()) ;Bit 27 trap-icache-page-fault (unconditional-branch trap-icache-page-fault ()) ;Bit 26 trap-proc-mread-parity (unconditional-branch trap-proc-mread-parity ()) ;Bit 25 trap-proc-mread-nubus-err (unconditional-branch trap-proc-mread-nubus-err ()) ;Bit 24 trap-proc-mread-nubus-timeout (unconditional-branch trap-proc-mread-nubus-timeout ()) ;Bit 23 trap-proc-mread-page-fault (unconditional-branch trap-proc-mread-page-fault ()) ;Bit 22 trap-proc-mread-transporter (unconditional-branch trap-proc-mread-transporter ()) ;Bit 21 trap-proc-mwrite-nubus-err (unconditional-branch trap-proc-mwrite-nubus-err ()) ;Bit 20 trap-proc-mwrite-nubus-timeout (unconditional-branch trap-proc-mwrite-nubus-timeout ());Bit 19 trap-proc-mwrite-page-fault (unconditional-branch trap-proc-mwrite-page-fault ()) ;Bit 18 trap-proc-mwrite-gc (unconditional-branch trap-proc-mwrite-gc ()) ;Bit 17 trap-floating-point (unconditional-branch trap-floating-point ()) ;Bit 16 trap-heap-empty (unconditional-branch trap-heap-empty ()) ;Bit 15 trap-spare14 (unconditional-branch trap-spare14 ()) ;Bit 14 trap-datatype (unconditional-branch trap-datatype ()) ;Bit 13 trap-overflow (unconditional-branch trap-overflow ()) ;Bit 12 trap-spare11 (unconditional-branch trap-spare11 ()) ;Bit 11 trap-interrupt7 (unconditional-branch trap-interrupt7 ()) ;Bit 10 trap-interrupt6 (unconditional-branch trap-interrupt6 ()) ;Bit 9 trap-interrupt5 (unconditional-branch trap-interrupt5 ()) ;Bit 8 trap-interrupt4 (unconditional-branch trap-interrupt4 ()) ;Bit 7 trap-interrupt3 (unconditional-branch trap-interrupt3 ()) ;Bit 6 trap-interrupt2 (unconditional-branch trap-interrupt2 ()) ;Bit 5 trap-interrupt1 (unconditional-branch trap-interrupt1 ()) ;Bit 4 trap-interrupt0 (unconditional-branch trap-interrupt0 ()) ;Bit 3 trap-timer-1024 (unconditional-branch trap-timer-1024 ()) ;Bit 2 trap-timer-16384 (unconditional-branch trap-timer-16384 ()) ;Bit 1 trap-spurious (unconditional-branch trap-spurious ())) ;Bit 0 (prims:define-global-variable trap trap-xtemp1) (prims:define-global-variable trap trap-xtemp2) (defafun trap-reset () blinker (alu r+1 trap-xtemp1 trap-xtemp1 trap-xtemp1) (alu-field field-pass trap-xtemp2 trap-xtemp1 trap-xtemp2 (byte 3. -17.)) (alu-field field-pass memory-control trap-xtemp2 memory-control hw:%%memory-control-leds) (nop) (unconditional-branch blinker ())) (defun tt () (lam:k-setup) (lam:k-init-virtual-memory) (kbug:load-fcns '(trap-entry interrupt-exit trap-exit diag-trap-exit trap-vector-table trap-reset) 0) (kbug:run 'trap-entry)) (defun daisy-lowcore () (kbug:make-boot-prom-simulation '(trap-entry interrupt-exit trap-exit diag-trap-exit trap-vector-table trap-reset)))