[movitz-cvs] CVS update: movitz/losp/muerte/segments.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Wed Apr 13 06:43:15 UTC 2005


Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv2998

Modified Files:
	segments.lisp 
Log Message:
Added segment-descriptor-xxx accessors.

Date: Wed Apr 13 08:43:14 2005
Author: ffjeld

Index: movitz/losp/muerte/segments.lisp
diff -u movitz/losp/muerte/segments.lisp:1.5 movitz/losp/muerte/segments.lisp:1.6
--- movitz/losp/muerte/segments.lisp:1.5	Fri Apr  8 08:17:28 2005
+++ movitz/losp/muerte/segments.lisp	Wed Apr 13 08:43:12 2005
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Thu May  8 14:25:06 2003
 ;;;;                
-;;;; $Id: segments.lisp,v 1.5 2005/04/08 06:17:28 ffjeld Exp $
+;;;; $Id: segments.lisp,v 1.6 2005/04/13 06:43:12 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -50,7 +50,7 @@
       (:gs (set-sreg :gs))))
   value)
 
-(defun sgdt ()
+(defun %sgdt ()
   "Return the location of the GDT, and the limit.
 Error if the GDT location is not zero modulo 4."
   (eval-when (:compile-toplevel)
@@ -74,7 +74,7 @@
     (:movl 2 :ecx)
     (:stc)))
 
-(defun lgdt (base-location limit)
+(defun %lgdt (base-location limit)
   "Set the GDT according to base-location and limit.
 This is the setter corresponding to the sgdt getter."
   (eval-when (:compile-toplevel)
@@ -162,4 +162,67 @@
       (:cr4 (set-creg :cr4)))
     value))
     
-  
+(defun segment-descriptor-base (table index)
+  (check-type table (and vector (not simple-vector)))
+  (let ((offset (+ (* index 8) (movitz-type-slot-offset 'movitz-basic-vector 'data))))
+    (logior (ash (memref table (+ 7 offset) :type :unsigned-byte8)
+		 24)
+	    (ash (memref table (+ 4 offset) :type :unsigned-byte16)
+		 16)
+	    (ash (memref table (+ 2 offset) :type :unsigned-byte16)
+		 0))))
+
+(defun (setf segment-descriptor-base) (base table index)
+  (check-type table (and vector (not simple-vector)))
+  (let ((offset (+ (* index 8) (movitz-type-slot-offset 'movitz-basic-vector 'data))))
+    (setf (memref table (+ 7 offset) :type :unsigned-byte8)
+      (ldb (byte 8 24) base))
+    (setf (memref table (+ 4 offset) :type :unsigned-byte8)
+      (ldb (byte 8 16) base))
+    (setf (memref table (+ 2 offset) :type :unsigned-byte16)
+      (ldb (byte 16 0) base))
+    base))
+
+(defun segment-descriptor-limit (table index)
+  (check-type table (and vector (not simple-vector)))
+  (let ((offset (+ (* index 8) (movitz-type-slot-offset 'movitz-basic-vector 'data))))
+    (dpb (memref table (+ 6 offset) :type :unsigned-byte8)
+	 (byte 4 16)
+	 (memref table (+ 0 offset) :type :unsigned-byte16))))
+
+(defun (setf segment-descriptor-limit) (limit table index)
+  (check-type table (and vector (not simple-vector)))
+  (let ((offset (+ (* index 8) (movitz-type-slot-offset 'movitz-basic-vector 'data))))
+    (setf (memref table (+ 6 offset) :type :unsigned-byte8)
+      (ldb (byte 4 16) limit))
+    (setf (memref table (+ 0 offset) :type :unsigned-byte8)
+      (ldb (byte 16 0) limit))
+    limit))
+
+(defun segment-descriptor-type-s-dpl-p (table index)
+  "Access bits 40-47 of the segment descriptor."
+  (check-type table (and vector (not simple-vector)))
+  (memref table (+ 5 (* index 8) (movitz-type-slot-offset 'movitz-basic-vector 'data))
+	  :type :unsigned-byte8))
+
+(defun (setf segment-descriptor-type-s-dpl-p) (bits table index)
+  "Access bits 40-47 of the segment descriptor."
+  (check-type table (and vector (not simple-vector)))
+  (setf (memref table (+ 5 (* index 8) (movitz-type-slot-offset 'movitz-basic-vector 'data))
+		:type :unsigned-byte8)
+    bits))
+		   
+(defun segment-descriptor-avl-x-db-g (table index)
+  "Access bits 52-55 of the segment descriptor."
+  (check-type table (and vector (not simple-vector)))
+  (ldb (byte 4 4)
+       (memref table (+ 5 (* index 8) (movitz-type-slot-offset 'movitz-basic-vector 'data))
+	       :type :unsigned-byte8)))
+
+(defun (setf segment-descriptor-avl-x-db-g) (bits table index)
+  "Access bits 52-55 of the segment descriptor."
+  (check-type table (and vector (not simple-vector)))
+  (setf (ldb (byte 4 4)
+	     (memref table (+ 5 (* index 8) (movitz-type-slot-offset 'movitz-basic-vector 'data))
+		     :type :unsigned-byte8))
+    bits))




More information about the Movitz-cvs mailing list