FunOS Documentation
As of March 8, 2000.
Borrowed Linux Initialization Code
bootsect.S, head.S, then setup.S (with video.S)
- moves loaded init code higher in memory
- read hard drive information
- move kernel (we'll need to write stuff here later)
- enable A20 unit (what's this? I forget.)
- reset coprocessor
- reprogram the interrupts (8259 and 386 interrupt line ranges overlap; bad)
- disable interrupts
- set protected mode bit
- jump into kernel code (the Scheme interpreter (CAML code))
OS Initialization Code
Scheme init code is stored after the interpreter; execute that.
Overview
- init-r5rs.scm
- R5RS scheme that isn't implemented in CAML code
- init-library.scm
- generally useful code that we want to assume we always have
- devices.scm
- general init code for physical devices
- console.scm
- code for writing information to the screen
- keyboard.scm
- code for reading data from the keyboard hw and putting it into a useful format
- bit-hack.scm
- Common Lisp style bit manipulations (dpb, ldb, ...)
- word-vectors.scm
- reading and writing vectors of data in memory
- queues.scm
- simple queues (not used)
- init-memory.scm
- allocating buffers, allocating memory pages
- buffer-cache.scm
- accesses to disk are cached and written back when dirty. That code is here.
- interrupts.scm
- dealing with i386 interrupt descriptors (unfinished)
- virtual-memory.scm
- i386 page tables
- squishy.scm
- squishy buffers, i.e. emacs-style text buffers (not used)
- fs.scm
- ext2 filesystem code (unfinished)
init-r5rs.scm
Fix or add syntax and procedures to the Scheme interpreter to make it r5rs compliant.
- cond (built-in cond doesn't handle =>)
- ceiling
- gensym (not r5rs, but earlier than init-library.scm is convenient)
- do
- string->list
- list->string
init-library.scm
Useful library routines
- lcond
- cond that allows embedded lets. Maybe not a good idea.
(lcond ((null? list) '())
(let ((top (car list)))
((= top y) #t)
(else (blah (cdr list)))))
- destructuring-bind
- binds variables to elements of a list or vector.
(destructuring-bind pattern
structure
body ...)
(destructuring-bind (a b c . d) '(1 2 3 4 5)
(format #t "~a ~a ~a ~a~%" a b c d))
=> 1 2 3 (4 5)
- pattern-match
- like destructuring-bind by sequentially tries multiple patterns.
(pattern-match structure
(pattern1 body1 ...) ...
(else body ...))
- dotimes
- Do body n times with
var bound to that iteration number.
Returns result of return-value expression.
(dotimes (var
n
return-value)
body ...)
devices.scm
block and character devices: ide, partitions
- low-read-block
(low-read-block device
block number)
Read a block from the device.
- low-write-block
(low-write-block device
block number
buffer)
Write the buffer contents into the device.