Update of /project/movitz/cvsroot/movitz/losp
In directory common-lisp.net:/tmp/cvs-serv20160
Modified Files:
los0.lisp
Log Message:
The repl package was renamed, so the init defpackage form needs
updating too. The other changes to this file is just my messing around
with testing various bits and pieces.
Date: Wed Jul 28 07:15:17 2004
Author: ffjeld
Index: movitz/losp/los0.lisp
diff -u movitz/losp/los0.lisp:1.19 movitz/losp/los0.lisp:1.20
--- movitz/losp/los0.lisp:1.19 Mon Jul 12 19:39:13 2004
+++ movitz/losp/los0.lisp Wed Jul 28 07:15:17 2004
@@ -9,7 +9,7 @@
;;;; Created at: Fri Dec 1 18:08:32 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: los0.lisp,v 1.19 2004/07/13 02:39:13 ffjeld Exp $
+;;;; $Id: los0.lisp,v 1.20 2004/07/28 14:15:17 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -28,17 +28,21 @@
(require :lib/repl)
(defpackage muerte.init
- (:use muerte.cl muerte muerte.lib
- muerte.x86-pc
- muerte.readline
- muerte.toplevel
- muerte.ethernet
- muerte.ip6
- muerte.ip4
- muerte.mop
+ (:nicknames #:los0)
+ (:use #:common-lisp
+ #:muerte
+ #:muerte.lib
+ #:muerte.x86-pc
+ #:repl
+ #:muerte.readline
+ #:muerte.toplevel
+ #:muerte.ethernet
+ #:muerte.ip6
+ #:muerte.ip4
+ #:muerte.mop
#+ignore muerte.x86-pc.serial))
-(require :los0-gc)
+(require :los0-gc) ; Must come after defpackage.
(in-package muerte.init)
@@ -657,7 +661,7 @@
(loop while (= s0 (rtc-register :second)))
(multiple-value-bind (c1-lo c1-hi)
(read-time-stamp-counter)
- (+ (ash (- c1-hi c0-hi) 20)
+ (+ (ash (- c1-hi c0-hi) 19)
(ash (+ 512 (- c1-lo c0-lo)) -10))))))
(defun report-cpu-frequency ()
@@ -666,6 +670,13 @@
(format t "~&CPU frequency: ~D.~2,'0D MHz.~%" mhz (round khz 10)))
(values))
+(defvar *a* #(#x1 #x2 #x3 #x4 #x5 #x6 #x7 #x8))
+(defvar *b* #(#x5 #xa #xf #x14 #x19 #x1e #x23 #x28 #x1400 #x1e00 #x2800 #x3200
+ #x3c00 #x4600 #x5000 #xa00 #x50 #x64 #x78 #x8c #xa0 #x14 #x28 #x3c
+ #xc800 #xf001 #x1801 #x4000 #x2800 #x5000 #x7800 #xa000 #x230 #x280
+ #x50 #xa0 #xf0 #x140 #x190 #x1e0 #x0 #xa001 #x4001 #xe002 #x8003
+ #x2003 #xc004 #x6005 #x280 #x3c0 #x500 #x640))
+
(defvar *cpu-frequency-mhz*)
(defun init-nano-sleep ()
@@ -685,6 +696,10 @@
;;;;;
+(defvar div #xa65feaab511c61e33df38fdddaf03b59b6f25e1fa4de57e5cf00ae478a855dda4f3638d38bb00ac4af7d8414c3fb36e04fbdf3d3166712d43b421bfa757e85694ad27c48f396d03c8bce8da58db5b82039f35dcf857235c2f1c73b2226a361429190dcb5b6cd0edfb0ff6933900b02cecc0ce69274d8dae7c694804318d6d6b9)
+
+(defvar guess #x1dc19f99401de22d476c89943491fc187b80bcfa8293ec1cf69c1a81352f047e894e262d24116c82ad0be241c6c6216cab9b66d64417d43bf433db10114c0)
+
;;;;;;;;;;;;;;; CL
(defun install-internal-time (&optional (minimum-frequency 100))
@@ -753,7 +768,7 @@
(define-toplevel-command :bt (&rest args)
(declare (dynamic-extent args))
- (apply #'backtrace args))
+ (apply #'backtrace (mapcar #'eval args)))
(define-toplevel-command :cpu-reset ()
(when (y-or-n-p "Really reset CPU?")
@@ -782,7 +797,7 @@
(define-toplevel-command :z (&optional x-list)
(flet ((do-print (x)
- (format t "~&~Z => ~S" x x)
+ (format t "~&~Z" x)
x))
(if x-list
(do-print (eval x-list))
@@ -959,6 +974,9 @@
(with-simple-restart (abort "Abort to command level ~D." (1+ *repl-level*))
(read-eval-print)))))
+(defun ub (x)
+ `(hello world ,x or . what))
+
(defun random (limit)
(etypecase limit
(fixnum
@@ -968,27 +986,57 @@
(dotimes (i (1- (muerte::%bignum-bigits x)))
(setf (memref x 2 i :unsigned-byte32)
(muerte::read-time-stamp-counter)))
- (setf x (muerte::%bignum-canonicalize x))
+ (setf x (muerte::bignum-canonicalize x))
(loop while (>= x limit)
do (setf x (truncate x 2)))
x))))
+(define-primitive-function test-irq-pf ()
+ ""
+ (with-inline-assembly (:returns :nothing)
+ (:int 113)
+ (:ret)))
+
+(defun test-irq (&optional eax ebx ecx edx)
+ (setf (memref nil #x7f 20 :code-vector) (symbol-value 'test-irq-pf))
+ (multiple-value-bind (p1 p2)
+ (with-inline-assembly (:returns :multiple-values)
+ (:load-lexical (:lexical-binding eax) :eax)
+ (:load-lexical (:lexical-binding ebx) :ebx)
+ (:load-lexical (:lexical-binding ecx) :ecx)
+ (:load-lexical (:lexical-binding edx) :edx)
+ (:pushl :eax)
+ (:pushl :ebx)
+ (:jecxz 'dont-call)
+ (:globally (:call (:edi (:edi-offset values) 80)))
+ dont-call
+ (:store-lexical (:lexical-binding eax) :eax :type t)
+ (:store-lexical (:lexical-binding ebx) :ebx :type t)
+ (:store-lexical (:lexical-binding ecx) :ecx :type t)
+ (:store-lexical (:lexical-binding edx) :edx :type t)
+ (:popl :ebx)
+ (:popl :eax)
+ (:movl 2 :ecx)
+ (:stc))
+ (values eax ebx ecx edx p1 p2)))
+
(defun genesis ()
- #+ignore
(let ((extended-memsize 0))
;; Find out how much extended memory we have
(setf (io-port #x70 :unsigned-byte8) #x18)
(setf extended-memsize (* 256 (io-port #x71 :unsigned-byte8)))
(setf (io-port #x70 :unsigned-byte8) #x17)
(incf extended-memsize (io-port #x71 :unsigned-byte8))
- (format t "Extended memory: ~D KB" extended-memsize))
+ (format t "Extended memory: ~D KB~%" extended-memsize)
- (idt-init)
- (install-los0-consing)
+ (idt-init)
+ (install-los0-consing :kb-size 50)
+ #+ignore
+ (install-los0-consing :kb-size (max 100 (truncate (- extended-memsize 1024 2048) 2))))
(setf *debugger-function* #'los0-debugger)
(let ((*repl-readline-context* (make-readline-context :history-size 16))
- (*backtrace-stack-frame-barrier* (stack-frame-uplink (current-stack-frame)))
+ #+ignore (*backtrace-stack-frame-barrier* (stack-frame-uplink (current-stack-frame)))
#+ignore (*error-no-condition-for-debugger* t)
#+ignore (*debugger-function* #'los0-debugger)
(*package* nil))