about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-12-27 11:39:38 -0800
committerKartik Agaram <vc@akkartik.com>2020-12-27 11:39:38 -0800
commitb3a0a540cd283644e896db975fdb8904c9debe1f (patch)
tree79f7f574fb27be14c51913a84ff6cbc8634d84ac
parent46cf7b79083f9ebe4c70f232fe564b62d09eac20 (diff)
downloadmu-b3a0a540cd283644e896db975fdb8904c9debe1f.tar.gz
7428
-rw-r--r--baremetal/bos/3-1.hex51
-rw-r--r--baremetal/bos/3-2.hex65
-rw-r--r--baremetal/bos/32bit.hex132
-rw-r--r--baremetal/bos/4.asm143
-rw-r--r--baremetal/bos/4.xxd87
-rw-r--r--baremetal/bos/README.md7
-rw-r--r--baremetal/bos/bochsrc3
-rw-r--r--baremetal/bos/print-mem-real-mode.hex67
8 files changed, 0 insertions, 555 deletions
diff --git a/baremetal/bos/3-1.hex b/baremetal/bos/3-1.hex
deleted file mode 100644
index bf4ef208..00000000
--- a/baremetal/bos/3-1.hex
+++ /dev/null
@@ -1,51 +0,0 @@
-# Bootable image.
-# Boot sector must have exactly 512 bytes.
-# 16-bit real mode.
-#
-# To convert to a disk image:
-#   ./bootstrap run apps/hex < baremetal/bos/3-1.hex > boot.bin
-# To run:
-#   qemu-system-i386 boot.bin
-# Or:
-#   bochs -f baremetal/bos/bochsrc  # bochsrc loads boot.bin
-#
-# Expected output inside emulator:
-#   Booting from floppy...
-
-e9 fd ff
-
-# padding to 512 bytes
-         00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
-
-# vim:ft=subx
diff --git a/baremetal/bos/3-2.hex b/baremetal/bos/3-2.hex
deleted file mode 100644
index 85792e26..00000000
--- a/baremetal/bos/3-2.hex
+++ /dev/null
@@ -1,65 +0,0 @@
-# Bootable image.
-# Boot sector must have exactly 512 bytes.
-# 16-bit real mode.
-#
-# To convert to a disk image:
-#   ./bootstrap run apps/hex < baremetal/bos/3-2.hex > boot.bin
-# To run:
-#   qemu-system-i386 boot.bin
-# Or:
-#   bochs -f baremetal/bos/bochsrc  # bochsrc loads boot.bin
-#
-# Expected output inside emulator:
-#   Hello
-
-b4 0e  # ah <- 0e (teletype output)
-
-b0 48  # al <- 'H'
-cd 10  # int 10h
-b0 65  # al <- 'e'
-cd 10  # int 10h
-b0 6c  # al <- 'l'
-cd 10  # int 10h
-b0 6c  # al <- 'l'
-cd 10  # int 10h
-b0 6f  # al <- 'o'
-cd 10  # int 10h
-
-e9 fd ff  # loop forever
-
-# padding to 512 bytes
-                           00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00
-
-55 aa  # final 2 bytes: boot sector marker
-
-# vim:ft=subx
diff --git a/baremetal/bos/32bit.hex b/baremetal/bos/32bit.hex
deleted file mode 100644
index 5a85aa36..00000000
--- a/baremetal/bos/32bit.hex
+++ /dev/null
@@ -1,132 +0,0 @@
-# Bootable image demonstrating printing to screen in 32-bit mode.
-# Must have exactly 512 bytes.
-#
-# To convert to a disk image:
-#   ./bootstrap run apps/hex < baremetal/bos/32bit.hex > boot.bin
-# To run:
-#   qemu-system-i386 boot.bin
-# Or:
-#   bochs -f baremetal/bos/bochsrc  # bochsrc loads boot.bin
-#
-# Expected output inside emulator:
-#   H
-
-## 16-bit entry point
-
-# Boot image starts executing at address 0x7c00,
-# and so occupies [0x7c00, 0x7e00).
-# We don't read or write the stack before we get to 32-bit mode.
-
-# 00:
-  fa  # cli  # TODO: don't forget to reenable interrupts at some point
-  0f 01 16  # lgdt 00/mod/indirect 010/subop 110/rm32/TODO
-    80 7c  # *gdt_descriptor
-  0f 20 c0  # eax <- cr0
-  66 83 c8 01  # eax <- or 0x1
-  0f 22 c0  # cr0 <- eax
-  ea c0 7c 08 00  # far jump to initialize_32bit_mode after setting cs to the record at offset 8 in the gdt (gdt_code)
-
-# padding
-# 15:
-               00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-
-## GDT: 3 records of 8 bytes each
-
-# 60:
-# gdt_start:
-# gdt_null:  mandatory null descriptor
-  00 00 00 00 00 00 00 00
-# gdt_code:  (offset 8 from gdt_start)
-  ff ff  # limit[0:16]
-  00 00 00  # base[0:24]
-  9a  # 1/present 00/privilege 1/descriptor type = 1001b
-      # 1/code 0/conforming 1/readable 0/accessed = 1010b
-  cf  # 1/granularity 1/32-bit 0/64-bit-segment 0/AVL = 1100b
-      # limit[16:20] = 1111b
-  00  # base[24:32]
-# gdt_data:  (offset 16 from gdt_start)
-  ff ff  # limit[0:16]
-  00 00 00  # base[0:24]
-  92  # 1/present 00/privilege 1/descriptor type = 1001b
-      # 0/data 0/conforming 1/readable 0/accessed = 0010b
-  cf  # same as gdt_code
-  00  # base[24:32]
-# gdt_end:
-
-# padding
-# 78:
-                        00 00 00 00 00 00 00 00
-
-# 80:
-# gdt_descriptor:
-  17 00  # final index of gdt = gdt_end - gdt_start - 1
-  60 7c 00 00  # start = gdt_start
-
-# padding
-# 85:
-                  00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-
-## 32-bit code from this point (still some instructions not in SubX)
-
-# c0:
-# initialize_32bit_mode:
-  66 b8 10 00  # ax <- offset 16 from gdt_start
-  8e d8  # ds <- ax
-  8e d0  # ss <- ax
-  8e c0  # es <- ax
-  8e e0  # fs <- ax
-  8e e8  # gs <- ax
-  e9 1d 00 00 00  # jump to 0x7cf0
-
-# padding
-# d3:
-         00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-
-## 'application' SubX code: print one character to top-left of screen
-
-# f0:
-# Entry:
-  # *0xb8000 <- 0x0f48
-  c7  # opcode
-    # modrm
-    05  # 00/mod/indirect 000/subop/copy 101/rm32/use-disp32
-    # disp32
-    00 80 0b 00
-    # imm32
-    48  # 'H'
-    0f  # white on black
-    00 00
-
-e9 fb ff ff ff  # loop forever
-
-# padding to 512 bytes
-                                             00
-# 100:
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00
-
-55 aa  # final 2 bytes: boot sector marker
-
-# vim:ft=subx
diff --git a/baremetal/bos/4.asm b/baremetal/bos/4.asm
deleted file mode 100644
index 71c51d97..00000000
--- a/baremetal/bos/4.asm
+++ /dev/null
@@ -1,143 +0,0 @@
-; A boot sector that enters 32-bit protected mode.
-;
-; To convert to a disk image:
-;   cd apps/bos
-;   nasm 4.asm -f bin -o boot.bin
-; To run:
-;   qemu-system-i386 boot.bin
-; Or:
-;   bochs  # bochsrc loads boot.bin
-
-[org 0x7c00]
-
-  mov bp, 0x9000
-  mov sp, bp
-
-  mov bx, MSG_REAL_MODE
-  call print_string
-
-  call switch_to_pm
-  ; never gets here
-
-  jmp $
-
-switch_to_pm:
-  cli
-  lgdt [gdt_descriptor]
-  ; set LSB of CR0
-  mov eax, cr0
-  or eax, 0x1
-  mov cr0, eax
-  jmp CODE_SEG:init_pm  ; Far jump to a new segment containing 32-bit code.
-                        ; This also forces the CPU to flush its cache of
-                        ; prefetched and real-mode decoded instructions.
-  ; never gets here
-
-;; === GDT stuff
-gdt_start:
-
-gdt_null:  ; the mandatory null descriptor
-  dd 0x0  ; ’dd’ means define double word (i.e. 4 bytes)
-  dd 0x0
-
-gdt_code: ; the code segment descriptor
-  ; base=0x0, limit=0xfffff,
-  ; 1st flags: (present)1 (privilege)00 (descriptor type)1 -> 1001b
-  ; type flags: (code)1 (conforming)0 (readable)1 (accessed )0 -> 1010b
-  ; 2nd flags: (granularity)1 (32-bit default)1 (64-bit seg)0 (AVL)0 -> 1100b
-  dw 0xffff     ; Limit (bits 0-15)
-  dw 0x0        ; Base (bits 0-15)
-  db 0x0        ; Base (bits 16 -23)
-  db 10011010b  ; 1st flags, type flags
-  db 11001111b  ; 2nd flags, Limit (bits 16-19)
-  db 0x0        ; Base (bits 24 -31)
-
-gdt_data: ; the  data segment descriptor
-  ; Same as code segment except for the type flags:
-  ; type flags: (code)0 (expand down)0 (writable)1 (accessed)0 -> 0010b
-  dw 0xffff    ; Limit (bits 0-15)
-  dw 0x0       ; Base (bits 0-15)
-  db 0x0       ; Base (bits 16 -23)
-  db 10010010b ; 1st flags, type flags
-  db 11001111b ; 2nd flags, Limit (bits 16-19)
-  db 0x0       ; Base (bits 24 -31)
-
-gdt_end:
-
-gdt_descriptor:
-  dw gdt_end - gdt_start - 1  ; last valid byte
-  dd gdt_start
-
-; some handy constants
-CODE_SEG equ gdt_code - gdt_start
-DATA_SEG equ gdt_data - gdt_start
-;; === end GDT stuff
-
-;; some 16-bit helpers
-
-; print string whose address is in bx
-print_string:
-  pusha
-  mov ah, 0x0e
-loop:
-  mov al, [bx]
-  int 0x10
-  add bx, 1
-  cmp al, 0
-  jne loop
-  popa
-  ret
-
-;; 32-bit code starts here
-[bits  32]
-
-; Initialise registers and the stack once in PM.
-init_pm:
-
-  mov ax, DATA_SEG        ; Now in PM, our old segments are meaningless,
-  mov ds, ax              ; so we point our segment registers to the
-  mov ss, ax              ; data selector we defined in our GDT
-  mov es, ax
-  mov fs, ax
-  mov gs, ax
-
-  mov ebp, 0x90000        ; Update our stack position so it is right
-  mov esp, ebp            ; at the top of the free space.
-
-  ;; Protected Mode is now initialized
-
-  mov ebx, MSG_PROT_MODE
-  call print_string_pm
-
-  ; all done; hang
-  jmp $
-
-; Define  some  constants
-VIDEO_MEMORY  equ 0xb8000
-WHITE_ON_BLACK  equ 0x0f
-
-; prints a null -terminated  string  pointed  to by EDX
-print_string_pm:
-  pusha
-  mov edx, VIDEO_MEMORY  ; Set  edx to the  start  of vid  mem.
-print_string_pm_loop:
-  mov al, [ebx]          ; Store  the  char at EBX in AL
-  mov ah, WHITE_ON_BLACK ; Store  the  attributes  in AH
-  cmp al, 0         ; if (al == 0), at end of string , so
-  je print_string_pm_done
-  mov [edx], ax     ; Store  char  and  attributes  at  current
-                    ; character  cell.
-  add ebx , 1       ; Increment  EBX to the  next  char in  string.
-  add edx , 2       ; Move to next  character  cell in vid  mem.
-  jmp  print_string_pm_loop   ; loop  around  to  print  the  next  char.
-print_string_pm_done:
-  popa
-  ret               ; Return  from  the  function
-
-; Global variables
-MSG_REAL_MODE   db "Started in 16-bit Real Mode", 0
-MSG_PROT_MODE   db "Successfully landed in 32-bit Protected Mode", 0
-
-; Bootsector padding
-times 510-($-$$) db 0
-dw 0xaa55
diff --git a/baremetal/bos/4.xxd b/baremetal/bos/4.xxd
deleted file mode 100644
index be677134..00000000
--- a/baremetal/bos/4.xxd
+++ /dev/null
@@ -1,87 +0,0 @@
-## 16-bit code
-
-# Entry:
-00:
-  bd 00 90  # bp <- 0x9000
-  89 ec  # sp <- bp
-
-  bb 8f 7c  # bx <- MSG_REAL_MODE
-  e8 38 00  # call print_string
-
-  e8 02 00  # call switch_to_pm
-  eb fe  # jump $  (should never get here)
-
-# switch_to_pm:
-10:
-  fa  # cli
-  0f 01 16 3d 7c  # lgdt [gdt_descriptor]
-  0f 20 c0  # eax <- cr0
-  66 83 c8 01  # eax <- or 0x1
-  0f 22 c0  # cr0 <- eax
-20:
-  ea 53 7c 08 00  # jmp CODE_SEG:init_pm
-
-# gdt_start:
-# gdt_null:  mandatory null descriptor
-  00 00 00 00 00 00 00 00
-# gdt_code:
-  ff ff 00
-30:
-  00 00 9a cf 00
-# gdt_data:
-  ff ff 00 00 00 92 cf 00
-# gdt_end:
-
-# gdt_descriptor:
-3d:
-  17 00  # limit
-  25 7c 00 00  # start
-
-# print_string:
-43:
-  60  # pusha
-  b4 0e  # ah <- 0x0e
-# loop:
-  8a 07  # al <- *bx
-  cd 10  # int 10h
-  83 c3 01  # add bx, 1
-  3c 00  # cmp al, 0
-  75 f5  # jne loop
-  61  # popa
-  c3  # ret
-
-## 32-bit code
-
-# init_pm:
-53:
-  66 b8 10 00  # ax <- DATA_SEG
-  8e d8  # ds <- ax
-  8e d0  # ss <- ax
-  8e c0  # es <- ax
-  8e e0  # fs <- ax
-  8e e8  # gs <- ax
-61:
-  bd 00 00 09 00  # ebp <- 0x90000
-  89 ec  # esp <- ebp
-  bb ab 7c 00 00  # ebx <- MSG_PROT_MODE
-  e8 02 00 00 00  # call print_string_pm
-  eb fe  # hang
-
-# print_string_pm:
-74:
-  60  # pusha
-  ba 00 80 0b 00 8a 03 b4 0f 3c 00
-80:
-  74 0b 66 89 02 83 c3 01 83 c2 02 eb ed 61 c3 53
-90:
-  74 61 72 74 65 64 20 69 6e 20 31 36 2d 62 69 74
-a0:
-  20 52 65 61 6c 20 4d 6f 64 65 00 53 75 63 63 65
-b0:
-  73 73 66 75 6c 6c 79 20 6c 61 6e 64 65 64 20 69
-c0:
-  6e 20 33 32 2d 62 69 74 20 50 72 6f 74 65 63 74
-d0:
-  65 64 20 4d 6f 64 65
-
-# vim:ft=conf
diff --git a/baremetal/bos/README.md b/baremetal/bos/README.md
deleted file mode 100644
index 989ebf44..00000000
--- a/baremetal/bos/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Exercises while reading the incomplete "Writing a simple operating system from
-scratch" by Nick Blundell.
-  https://www.cs.bham.ac.uk/~exr/lectures/opsys/10\_11/lectures/os-dev.pdf
-
-The name of this directory is a reference to "Bootstrapping a simple compiler
-from nothing" by Edmund Grimley-Evans.
-  https://github.com/certik/bcompiler
diff --git a/baremetal/bos/bochsrc b/baremetal/bos/bochsrc
deleted file mode 100644
index de225b4c..00000000
--- a/baremetal/bos/bochsrc
+++ /dev/null
@@ -1,3 +0,0 @@
-ata0-master: type=disk, path="boot.bin", mode=flat, cylinders=1, heads=1, spt=1
-boot: disk
-log: -
diff --git a/baremetal/bos/print-mem-real-mode.hex b/baremetal/bos/print-mem-real-mode.hex
deleted file mode 100644
index 3610308c..00000000
--- a/baremetal/bos/print-mem-real-mode.hex
+++ /dev/null
@@ -1,67 +0,0 @@
-# Experiment: write to video RAM from 16-bit real mode. And it works.
-#
-# To convert to a disk image:
-#   ./bootstrap run apps/hex < baremetal/bos/print-mem-real-mode.hex > boot.bin
-# To run:
-#   qemu-system-i386 boot.bin
-# Or:
-#   bochs  # reads bochsrc, which loads boot.bin
-
-# - figure 4.1 of https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf in protected mode
-# edx <- 0xb8000
-# al <- 'H'
-# ah <- 0x0f  # white on black
-# *edx <- ax
-
-# - translating to real mode
-# bx <- 0xb800
-bb 00 b8
-# ds <- bx
-8e db  # 11b/mod 011b/reg/ds 011b/rm/bx
-# al <- 'H'
-b0 48
-# ah <- 0x0f  # white on black
-b4 0f
-# bx <- 0
-bb 00 00
-# *ds:bx <- ax
-89 07  # 00b/mod/indirect 000b/reg/ax 111b/rm/bx
-
-e9 fd ff  # loop forever
-
-# padding to 512 bytes
-   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00
-
-55 aa  # final 2 bytes: boot sector marker
-
-# vim:ft=subx