1 ; Definitions for use in GeekOS boot code
2 ; Copyright (c) 2001, David H. Hovemeyer <daveho@cs.umd.edu>
5 ; This is free software. You are permitted to use,
6 ; redistribute, and modify it as specified in the file "COPYING".
8 ; A lot of this code is adapted from Kernel Toolkit 0.2
9 ; and Linux version 2.2.x, so the following copyrights apply:
11 ; Copyright (C) 1991, 1992 Linus Torvalds
12 ; modified by Drew Eckhardt
13 ; modified by Bruce Evans (bde)
14 ; adapted for Kernel Toolkit by Luigi Sgro
19 VM_KERNEL_TARGET equ 0x100000
21 ; BIOS loads the boot sector at offset 0 in this segment
24 ; We'll move the boot sector up to higher memory.
25 ; Note that the "ISA hole" begins at segment 0xA000 == 640K.
28 ; Put the setup code here, just after the boot sector.
31 ; Load our "Kernel" at this segment, which starts at 64K.
32 ; The number of sectors in the kernel, NUM_KERN_SECTORS,
33 ; will be passed on the command line.
36 ;; Load Segment for moving guest kernel to extended memory
37 ;; Note that this segment must not colide with where the VMM kernel
38 ;; is initially loaded. At this point, we just place it in the last
39 ;; 64K of RAM available before the ISA hole and hope for the best
42 ; Size of PFAT boot record.
43 ; Keep up to date with <geekos/pfat.h>.
44 PFAT_BOOT_RECORD_SIZE equ 28
46 ; Offset of BIOS signature word in boot sector.
47 BIOS_SIGNATURE_OFFSET equ 510
49 ; Offset of PFAT boot record in boot sector.
50 PFAT_BOOT_RECORD_OFFSET equ BIOS_SIGNATURE_OFFSET - PFAT_BOOT_RECORD_SIZE
52 ; Video memory segment
55 ; The following information is correct for a 1.44M floppy.
56 ; Yes, I'm hard coding this.
57 SECTORS_PER_TRACK equ 18
61 ; 8259A PIC initialization codes.
62 ; Source: Linux bootsect.S, and Intel 8259A datasheet
64 ; The most important reason why we reprogram the PICs is to
65 ; route the hardware interrupts through vectors *above*
66 ; those reserved by Intel. The BIOS (for historical reasons :-)
67 ; routes them such that they conflict with internal processor-generated
70 ICW1 equ 0x11 ; ICW1 - ICW4 needed, cascade mode, interval=8,
71 ; edge triggered. (I think interval is irrelevant
73 ICW2_MASTER equ 0x20 ; put IRQs 0-7 at 0x20 (above Intel reserved ints)
74 ICW2_SLAVE equ 0x28 ; put IRQs 8-15 at 0x28
75 ICW3_MASTER equ 0x04 ; IR2 connected to slave
76 ICW3_SLAVE equ 0x02 ; slave has id 2
77 ICW4 equ 0x01 ; 8086 mode, no auto-EOI, non-buffered mode,
78 ; not special fully nested mode
80 ; Kernel code and data segment selectors.
81 ; Keep these up to date with defs.h.
82 KERNEL_CS equ 1<<3 ; kernel code segment is GDT entry 1
83 KERNEL_DS equ 2<<3 ; kernel data segment is GDT entry 2
85 ; Pages for context object and stack for initial kernel thread -
86 ; the one we construct for Main(). Keep these up to date with defs.h.
87 ; We put them at 1MB, for no particular reason.
88 ;; Moved to just after where the VM will go
89 KERN_THREAD_OBJ equ 4096
90 KERN_STACK equ KERN_THREAD_OBJ + 4096