; -*- Mode:LISP; Package:GLOBAL-REGISTERS; Base:10; Readtable:CL -*-
;;;**********************************************************************************************************
;;;***** This file should be identical to global-registers(-for-k-debugger) at all times WKF 5/5/88 *****
;;;**********************************************************************************************************
;;; These duplicate versions are needed to fool make-system since COMPILER-FOR-K and K-DEBUGGER
;;; both use this file and k-debugger loads it in the k-user hierarchy. WKF
;;;; Global Register Frames
;;; There are 16 global frames
;;; each frame has 16 registers
;;; each register has 33 bits
;;; how many were going to St. Ives?
;;; It is a very bad idea to delete entries from here or insert entries between existing entries
;;; because it moves the locations of the rest of the globals. If you do this, you must
;;; recompile the entire system. What I have done is just picked a name like
;;; "*UNUSED-GLOBAL--*" to indicate the ones I have removed.
;;; Also, changing the name of a global is tricky, you must kill off all of the existing names
;;; so the new ones get allocated in the right order. A way that worked when I wrote this comment
;;; was to (SETQ NC::*GLOBAL-FRAMES* NIL) before loading this file. - JRM 29-Apr-87 19:58:10
;----------------------------------------------------------------
;;; 0 Trap
(define-global-frame trap)
(define-global-variable trap *save-oreg*)
(define-global-variable trap *save-left*)
(define-global-variable trap *save-right*)
(define-global-variable trap *save-status*)
(define-global-variable trap *save-jcond*)
(define-global-variable trap *save-trap*)
(define-global-variable trap *save-trap-pc*)
(define-global-variable trap *save-trap-pc+*)
(define-global-variable trap *trap-mask*)
(define-global-variable trap *trap-temp1*) ;Avoid using the higher numbers.
(define-global-variable trap *trap-temp2*)
(define-global-variable trap *trap-temp3*)
(define-global-variable trap *trap-temp4*)
(define-global-variable trap *kbug-trap*)
(define-global-variable trap *save-o-a-r*)
(define-global-constant trap *trap-dtp-code-5*
(hw:unboxed-constant #.(+ (lisp::ash vinc::$$dtp-code 26.) 4)))
;----------------------------------------------------------------
;;; 1 VMem
(define-global-frame vmem)
(define-global-variable vmem *findcore-pointer*)
(define-global-variable vmem *number-of-physical-clusters*) ;not currently used.
(define-global-variable vmem *physical-cluster-free-pointer*)
(define-global-variable vmem *physical-cluster-data-table*)
(define-global-variable vmem *physical-cluster-free-list*)
(define-global-variable vmem *physical-cluster-free-clusters*)
(define-global-variable vmem *physical-cluster-initially-wired-pointer*)
(define-global-variable vmem *quantum-map*) ;base vir (and phys) adr as fixnum.
;currently of of quantum 1.
(define-global-variable vmem *region-bits*) ; of quantum 1. as fixnum.
(define-global-variable vmem *swapping-quantum*)
(define-global-variable vmem *quantum-map-semaphore* -1)
(define-global-variable vmem *page-fault-code* 0)
(define-global-variable vmem *allow-write-in-read-only* nil)
(define-global-variable vmem *temporary-map-entry-virtual-cluster* -1) ;-1 free
;otherwise in use. Set up to never fault. Used to write in read-only.
;;; 2 unused
;----------------------------------------------------------------
;;; 2 Memory Management
(define-global-frame memory-management)
(define-global-variable memory-management *region-free-pointer*)
(define-global-variable memory-management *region-allocation-status*)
(define-global-variable memory-management *region-end*)
(define-global-variable memory-management *region-gc-pointer*)
(define-global-variable memory-management *area-region-data*) ;base of table
(define-global-variable memory-management *area-region-size*)
(define-global-variable memory-management *area-region-bits*)
(define-global-variable memory-management *region-list-thread*)
(define-global-variable memory-management *desperate-consing-area*)
(define-global-variable memory-management *default-consing-area*)
(define-global-variable memory-management *default-code-area*)
;;; this should not be neccessary, it should be a constant
(define-global-variable memory-management *special-pdl-area*)
;;; 5 unused
;----------------------------------------------------------------
;;; 3 Timer Registers
(define-global-frame timers)
(define-global-variable timers *one-million-count* 1000000.)
(define-global-variable timers *elapsed-time-since-1900* (hw:unboxed-constant 0.))
(define-global-variable timers *sequence-break-code* (hw:unboxed-constant 0.))
(define-global-variable timers *request-sequence-break* nil)
(define-global-variable timers *allow-sequence-break* 0.)
(define-global-variable timers *ticks-between-sequence-break-requests* 0.)
(define-global-variable timers *ticks-till-next-sequence-break* 0.)
(define-global-variable timers *debugger-step-count* 0.)
;used to by save-state to hold stuff affected by memory cycles.
(define-global-variable timers *state-processor-status* 0)
(define-global-variable timers *state-processor-control* 0)
(define-global-variable timers *state-memory-status* 0)
(define-global-variable timers *state-memory-control* 0)
(define-global-variable timers *state-trap-register* 0)
(define-global-variable timers *state-vma* 0)
(define-global-variable timers *state-md* 0)
(define-global-variable timers *state-bits* 0) ;boxed-md boxed-vma
;;; 0 unused
;----------------------------------------------------------------
;;; 4 Frequently Used Constants
(define-global-frame constants)
(define-global-constant constants *zero* 0. "Fixnum zero")
(define-global-constant constants *one* 1. "Fixnum one")
(define-global-constant constants *minus-one* -1. "Fixnum negative one")
(define-global-constant constants *two* 2. "Fixnum two")
(define-global-constant constants *T* t "Lisp symbol T")
(define-global-constant constants *NIL* nil "Lisp symbol nil")
(define-global-constant constants *all-zero* (hw:unboxed-constant #x00000000) "32 bits of zero")
(define-global-constant constants *all-ones* (hw:unboxed-constant #xffffffff) "32 bits of ones")
(define-global-constant constants *three* 3. "Fixnum three")
(define-global-constant constants *four* 4. "Fixnum four")
(define-global-constant constants *five* 5. "Fixnum five")
(define-global-constant constants *six* 6. "Fixnum six")
(define-global-constant constants *seven* 7. "Fixnum seven")
(define-global-constant constants *eight* 8. "Fixnum eight")
(define-global-constant constants *nine* 9. "Fixnum nine")
(define-global-constant constants *ten* 10. "Fixnum ten")
;;; 0 unused
;----------------------------------------------------------------
;;; 5 Datatypes
(define-global-frame datatypes)
(define-global-constant datatypes *data-type* #x061A "Byte specifier for data-type field")
(define-global-constant datatypes *dtp-cons*
(hw:unboxed-constant #.(lisp::ash vinc::$$dtp-cons 26.)))
(define-global-constant datatypes *dtp-bignum*
(hw:unboxed-constant #.(lisp::ash vinc::$$dtp-bignum 26.)))
(define-global-constant datatypes *dtp-locative*
(hw:unboxed-constant #.(lisp::ash vinc::$$dtp-locative 26.)))
(define-global-constant datatypes *dtp-character*
(hw:unboxed-constant #.(lisp::ash vinc::$$dtp-character 26.)))
(define-global-constant datatypes *dtp-compiled-function*
(hw:unboxed-constant #.(lisp::ash vinc::$$dtp-compiled-function 26.)))
(define-global-constant datatypes *dtp-unboxed-locative*
(hw:unboxed-constant #.(lisp::ash vinc::$$dtp-unboxed-locative 26.)))
;;; used for the other side for dt-not-right-array-or-left-structure
(define-global-variable datatypes *random-array*)
(define-global-variable datatypes *random-structure*)
;;; 7 unused
;----------------------------------------------------------------
;;; 6 Lisp Internals
(define-global-frame lisp-internals)
(define-global-variable lisp-internals *stack-pointer*)
(define-global-variable lisp-internals *special-pdl-ptr*)
(define-global-variable lisp-internals *lexical-environment*)
;;; A little "stack" for subroutines which don't want to
;;; mess up the call hardware
(define-global-variable lisp-internals *arg-1*)
(define-global-variable lisp-internals *arg-2*)
(define-global-variable lisp-internals *value-1*)
(define-global-variable lisp-internals *value-2*)
(define-global-variable lisp-internals *return-pc-1*)
(define-global-variable lisp-internals *return-pc-2*)
(define-global-variable lisp-internals gr:*warm-symbols* nil)
(define-global-constant lisp-internals *dtp-code-1*
(hw:unboxed-constant #.(+ (lisp::ash vinc::$$dtp-code 26.) 1)))
;;; The three "mini-fasl-" registers are a temporary hack for debugging bombs in the loader
(define-global-variable lisp-internals *mini-fasl-byte-counter*) ;these three are no longer needed
(define-global-variable lisp-internals *mini-fasl-top-level-opcode*)
(define-global-variable lisp-internals *mini-fasl-top-level-opcode-byte-count*)
(define-global-variable lisp-internals *special-pdl-limit*)
(define-global-variable lisp-internals *stack-limit*)
;----------------------------------------------------------------
;;; 7 Call hardware loader
(define-global-frame call-hardware-loader)
;;; These are changed on context switches
(define-global-variable call-hardware-loader *control-pdl*) ;the control pdl object
(define-global-variable call-hardware-loader *control-pdl-pointer*) ;next thing to write to
(define-global-variable call-hardware-loader *control-pdl-limit*) ;grow control pdl when pointer reaches here
(define-global-variable call-hardware-loader *ch-control-pdl-index*)
(define-global-variable call-hardware-loader *ch-temp-0*)
(define-global-variable call-hardware-loader *ch-temp-1*)
(define-global-variable call-hardware-loader *ch-temp-2*)
(define-global-variable call-hardware-loader *ch-temp-3*)
(define-global-variable call-hardware-loader *ch-temp-4*)
(define-global-variable call-hardware-loader *ch-base-csp*) ;call hardware index to start dumping at
(define-global-variable call-hardware-loader *ch-dumper-return-pc*)
(define-global-variable call-hardware-loader *ch-temp-5*)
(define-global-variable call-hardware-loader *ch-temp-6*)
(define-global-variable call-hardware-loader *ch-stuff*) ;obsolete
(define-global-variable call-hardware-loader *ch-stuff-pointer*) ;obsolete
(define-global-variable call-hardware-loader *next-control-pdl*) ;the control pdl to restore after dumping the current one
;;; 0 unused
;----------------------------------------------------------------
;;; 8 Cons
(define-global-frame cons-cache)
(define-global-variable cons-cache *cons-cache-area* -1)
(define-global-variable cons-cache *cons-cache-region* -1)
(define-global-variable cons-cache *cons-cache-free* (hw:unboxed-constant 0))
(define-global-variable cons-cache *cons-cache-limit* (hw:unboxed-constant 0))
(define-global-variable cons-cache *structure-cons-cache-area* -1)
(define-global-variable cons-cache *structure-cons-cache-region* -1)
(define-global-variable cons-cache *structure-cons-cache-free* (hw:unboxed-constant 0))
(define-global-variable cons-cache *structure-cons-cache-limit* (hw:unboxed-constant 0))
;;; These can't work like this, need to know volatility, etc.
;(define-global-variable cons-cache *copy-cons-cache-area*)
;(define-global-variable cons-cache *copy-cons-cache-region*)
;(define-global-variable cons-cache *copy-cons-cache-free*)
;(define-global-variable cons-cache *copy-cons-cache-limit*)
;(define-global-variable cons-cache *copy-structure-cons-cache-area*)
;(define-global-variable cons-cache *copy-structure-cons-cache-region*)
;(define-global-variable cons-cache *copy-structure-cons-cache-free*)
;(define-global-variable cons-cache *copy-structure-cons-cache-limit*)
;----------------------------------------------------------------
;;; 9 GC
(define-global-frame gc)
(define-global-variable gc *scavenge-work-while-consing*)
(define-global-variable gc *structure-handles*)
;;; 15 free
;----------------------------------------------------------------
;;; 10 and 11 Return values
(define-global-frame return-values-1)
(define-global-variable return-values-1 *return-0*)
(define-global-variable return-values-1 *return-1*)
(define-global-variable return-values-1 *return-2*)
(define-global-variable return-values-1 *return-3*)
(define-global-variable return-values-1 *return-4*)
(define-global-variable return-values-1 *return-5*)
(define-global-variable return-values-1 *return-6*)
(define-global-variable return-values-1 *return-7*)
(define-global-variable return-values-1 *return-8*)
(define-global-variable return-values-1 *return-9*)
(define-global-variable return-values-1 *return-10*)
(define-global-variable return-values-1 *return-11*)
(define-global-variable return-values-1 *return-12*)
(define-global-variable return-values-1 *return-13*)
(define-global-variable return-values-1 *return-14*)
(define-global-variable return-values-1 *return-15*)
(define-global-frame return-values-2)
(define-global-variable return-values-2 *return-16*)
(define-global-variable return-values-2 *return-17*)
(define-global-variable return-values-2 *return-18*)
(define-global-variable return-values-2 *return-19*)
(define-global-variable return-values-2 *return-20*)
(define-global-variable return-values-2 *return-21*)
(define-global-variable return-values-2 *return-22*)
(define-global-variable return-values-2 *return-23*)
(define-global-variable return-values-2 *return-24*)
(define-global-variable return-values-2 *return-25*)
(define-global-variable return-values-2 *return-26*)
(define-global-variable return-values-2 *return-27*)
(define-global-variable return-values-2 *return-28*)
(define-global-variable return-values-2 *return-29*)
(define-global-variable return-values-2 *save-return-crap-0*) ;; this register is reserved, do not use.
(define-global-variable return-values-2 *number-of-return-values*)
;;; 12 is next
;;; thru 15. is available hardware wise and allocation wise.