diff --git a/20150426.html b/20150426.html new file mode 100644 index 0000000..41fc58c --- /dev/null +++ b/20150426.html @@ -0,0 +1,87 @@ +
+

20150426 - Source-Less Programming : 5

+
+ +Boot Loader Bring-up +
+Managed to get the boot loader done, which includes the following steps,
+
+(1.) Move the stack seg:pointer (since next step overwrites it).
+(2.) Use BIOS to read the other 62 512-byte sectors for the first track.
+(3.) Use BIOS to switch to 80x50 text mode and load custom character glyphs.
+(4.) Use BIOS to set EGA text palette to 0-15 with 0 for overscan.
+(5.) Program VGA palette registers for those 16 colors.
+(6.) Use BIOS to enable A20.
+(7.) Turn off interrupts, and relocate the image's 63 sectors to zero.
+(8.) Load zero entry IDT, minimal 3 entry GDT.
+(9.) Enable protected mode and jump to the 3rd sector.
+
+The 2nd 512-byte sector contains the 8x8 character bitmaps for the first 64 characters. +The majority of the time was spent making a nice font, +getting colors the way I wanted, +and prototyping editor look and feel (without building it).
+
+Didn't feel like fully hand assembling 16-bit x86 machine code for the boot loader, +so I used NASM and hexdump to accellerate the process +(to provide machine code I could pad out to 32-bit alignment). +Also wrote a quick C based tool to bootstrap the process of building the loader. +Something which would enable me to easily build out an annotated image, +and show a print out in the console of what I'd be seeing in the editor. +Here is a shot of a bit of the scratch C code I used to make the font,
+
+
+
+Here is a shot in QEMU of the loader displaying the font,
+
+
+
+And another shot from QEMU showing the pallet,
+
+
+
+What the Current Annotated Image Looks Like +
+Below is a shot captured from the terminal window output of the C tool. +I'm using 3 cache lines for the loader code.
+
+
+
+Grey lines separate the 512-byte sectors. +Memory address on the left in grey. +Each pair of lines shows half a x86 cacheline. +The blue to white shows the 5 character/word annotation strings +(now using the extra 2 bits of the label for color). +The red hex show the image data. +Not using {GET,ABS,REL} tagged words in this part, +so everything in the bootloader is just hand assembled 16-bit machine code, +and this is not representative of what the rest of the system will look like. +The rest of the system will have {GET opcode} followed by {HEX} or {ABS} +for opcode immediates (easy to write). +The 16-bit code is {HEX} mixed opcode and immediates, quite a bit different (hard to write).
+
+Some hints on the annotations,
+
+Everything is in base 16. +AX is TOP so I don't bother with "A=9000" (which wouldn't fit anyway), +instead I just write "9000" (the A= is implied). +The "!" means store so "SSSP!" is storing TOP (or AX) into both SS and SP. +The "B=200" means BX=200h. +In this 16-bit x86 case I use 3E to pad out opcodes to 32-bit. +The "X" = SI, "Y" = DI, "F" = BP.
+
+Next Step +
+Ground work is done, +next step is to bring up the opcode dictionary for {GET} words, +then write a little IDE driver to get access to load the rest of the image, +and to be able to save in the editor. +After that, write the drawing code for the editor, +then a mini PS/2 driver for the input, +then write editor input handling. +Then I have a full OS ready to start on a real machine. + + +
+ + + diff --git a/index.html b/index.html index 4ffb0e1..047eebf 100644 --- a/index.html +++ b/index.html @@ -92,6 +92,7 @@ Below this is active random migration (400 prior posts still to filter through) 20150630 - Sugar Free Peppermint Chocolate Chip Custard Ice Cream
20150522 - The Other Project Cleaned Up
20150430 - The Other Project Getting Wired
+20150426 - Source-Less Programming : 5
20150416 - Pixel Art and Slot Mask Pitch
20150415 - Indie vs Real Slug Fest
20150328 - Stills From My Talk