# IndigoOS

This project is in it's infancy. There's a lot to clean up (bootloader), and this is for my own entertainment. I'll likely be working on it on and off, and only updating the branch after major steps forward.

##Questions and answers
### Why are you already parsing APCI tables?
When I first started this project, it was intended to be a bare metal mandelbrotset, then an operating system. This way I could set up an enviornment and become comftorable with the x86 architecture. I was going to have a pretty simple multi-core SMP setup to acheive a higher speed. However, as I worked more and more, I realized that this plan was counter productive. The main reason for this is that I'd be doing a lot of "static" work (for lack of a better word). It would be too hard to modify an existing project into an operating system, due to all the code I'd need to discard.

### Will you support UEFI?
Maybe some day. What I have so far of the bootloader was a lot of work, so I need to take a break on it for now.

##Cleaning list
- [] clean RSDP v1 vs v2+ ugly unison code
- [] clean static paging code if possible
- [] fallback to best compatable video mode if not found
- [] find out when and why checksum of binary vs debug binary stripped is occationally diffrent (maybe linker script?)


##debugging
- [x] get debugging into into a seperate elf for GDB
- [] md5sum of striped binary is the same as one built without debugging info
_Almost_ always, there was one time when it wasn't. Can't seem to reproduce. Check linker sizes.

##bootloader
- [x] make USB bootable as floppy
- [] make USB bootable as harddisk
- [x] detect native resolution
- [x] set VESA video to native resolution
- [] fallback to best compatable video mode if not found
- [x] record video mode info for kernel
- [x] setup temporary page tabels
- [x] get memory map
- [x] load sectors into 0x100000
- [x] boot into kernel long mode

##kernel (listed in order of dependency)
###ACPI
- [x] find, check, and parse RSDP
- [x] find, check, and parse RSDT or XSDT
- [x] static page mapping
- [] remap paging to higher/more available physical address
- [] remap kernel to higher virtual address
- [] re-create page tables to accomidate amount of ram in system without becoming too big
- [] dynamic page allocation

###multicpu
- [] boot cpus
- [] parse MDST

