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 TOP_OF_MEM equ 0x40000000
20 VM_SIZE equ 0x20000000
23 ; BIOS loads the boot sector at offset 0 in this segment
26 ; We'll move the boot sector up to higher memory.
27 ; Note that the "ISA hole" begins at segment 0xA000 == 640K.
30 ; Put the setup code here, just after the boot sector.
33 ; Load our "Kernel" at this segment, which starts at 64K.
34 ; The number of sectors in the kernel, NUM_KERN_SECTORS,
35 ; will be passed on the command line.
38 ; Size of PFAT boot record.
39 ; Keep up to date with <geekos/pfat.h>.
40 PFAT_BOOT_RECORD_SIZE equ 28
42 ; Offset of BIOS signature word in boot sector.
43 BIOS_SIGNATURE_OFFSET equ 510
45 ; Offset of PFAT boot record in boot sector.
46 PFAT_BOOT_RECORD_OFFSET equ BIOS_SIGNATURE_OFFSET - PFAT_BOOT_RECORD_SIZE
48 ; Video memory segment
51 ; The following information is correct for a 1.44M floppy.
52 ; Yes, I'm hard coding this.
53 SECTORS_PER_TRACK equ 18
57 ; 8259A PIC initialization codes.
58 ; Source: Linux bootsect.S, and Intel 8259A datasheet
60 ; The most important reason why we reprogram the PICs is to
61 ; route the hardware interrupts through vectors *above*
62 ; those reserved by Intel. The BIOS (for historical reasons :-)
63 ; routes them such that they conflict with internal processor-generated
66 ICW1 equ 0x11 ; ICW1 - ICW4 needed, cascade mode, interval=8,
67 ; edge triggered. (I think interval is irrelevant
69 ICW2_MASTER equ 0x20 ; put IRQs 0-7 at 0x20 (above Intel reserved ints)
70 ICW2_SLAVE equ 0x28 ; put IRQs 8-15 at 0x28
71 ICW3_MASTER equ 0x04 ; IR2 connected to slave
72 ICW3_SLAVE equ 0x02 ; slave has id 2
73 ICW4 equ 0x01 ; 8086 mode, no auto-EOI, non-buffered mode,
74 ; not special fully nested mode
76 ; Kernel code and data segment selectors.
77 ; Keep these up to date with defs.h.
78 KERNEL_CS equ 1<<3 ; kernel code segment is GDT entry 1
79 KERNEL_DS equ 2<<3 ; kernel data segment is GDT entry 2
81 ; Pages for context object and stack for initial kernel thread -
82 ; the one we construct for Main(). Keep these up to date with defs.h.
83 ; We put them at 1MB, for no particular reason.
84 ;; Moved to just after where the VM will go
85 KERN_THREAD_OBJ equ (START_OF_VM+VM_SIZE)
86 KERN_STACK equ KERN_THREAD_OBJ + 4096