stuff and things
This commit is contained in:
commit
4b85060139
3 changed files with 146 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
*.bin
|
||||||
|
*.elf
|
||||||
|
*.o
|
||||||
|
*.img
|
52
README.md
Normal file
52
README.md
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# rOSka
|
||||||
|
|
||||||
|
Compile with `fasm boot.asm`
|
||||||
|
|
||||||
|
## Reguirements
|
||||||
|
|
||||||
|
Pentium or newer should have all the bells and whistles needed.
|
||||||
|
|
||||||
|
In case you want all the details:
|
||||||
|
- 32bit 80386 or newer CPU
|
||||||
|
- VGA compatible graphics adapter
|
||||||
|
(640x480 graphics mode with 16 colours and a text mode)
|
||||||
|
- BIOS (or CSM, can't take anything granted these days...)
|
||||||
|
- RAM as I'm sure I'll just yank hard coded assumptions here and there
|
||||||
|
Like 1MB should be enough for now
|
||||||
|
- Hard disk access requires extended BIOS support (i486 CPU?)
|
||||||
|
Youknow, we support big disk like here in modern times.
|
||||||
|
- Floppies can't usually be accessed with extended calls, too bad.
|
||||||
|
As a workaround get USB or something and chainload with PLOP bootmgr
|
||||||
|
if direct USB boot is unavailable. Might make a floppy image at some
|
||||||
|
point.
|
||||||
|
|
||||||
|
|
||||||
|
## Preparing a bootable disk
|
||||||
|
|
||||||
|
- We use standard MBR, even on a floppy. Eat shit MSLosdows.
|
||||||
|
- We use partition 1 as our partition. This is ext2. Again, deal with it.
|
||||||
|
|
||||||
|
So make a new partition table, partition it, and format it on Lunix.
|
||||||
|
Or Losdows, but there you're on your own!
|
||||||
|
|
||||||
|
!!! WARNING
|
||||||
|
This will wipe the entire drive
|
||||||
|
Replace /dev/sdX accordingly and triplecheck
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo parted -s /dev/sdX mklabel msdos
|
||||||
|
sudo parted -s /dev/sdX mkpart primary ext2 0 100% --align cylinder
|
||||||
|
sudo mkfs.ext2 -L rOSka /dev/sdX1
|
||||||
|
```
|
||||||
|
|
||||||
|
Now put the thinking part to the MBR preserving partitiontable
|
||||||
|
```
|
||||||
|
sudo dd bs=1 count=446 if=boot.bin of=/dev/sdX conv=notrunc
|
||||||
|
```
|
||||||
|
|
||||||
|
And wow, you have a disk with a filesystem that boots the fancy loader
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
TODO: set bootable flag in fdisk and use VBR instead of MBR?
|
||||||
|
```
|
90
boot.asm
Executable file
90
boot.asm
Executable file
|
@ -0,0 +1,90 @@
|
||||||
|
format binary
|
||||||
|
org 0x7c00
|
||||||
|
use16
|
||||||
|
|
||||||
|
jmp short start
|
||||||
|
nop
|
||||||
|
|
||||||
|
;; reserved for (E)BPB (which BIOS might scramble)
|
||||||
|
;; you could also have one that *could* work
|
||||||
|
times 0x3B db 0
|
||||||
|
start:
|
||||||
|
|
||||||
|
;; setup segments
|
||||||
|
;; setup stack
|
||||||
|
;; trust nothing
|
||||||
|
cld
|
||||||
|
mov ax, 0
|
||||||
|
mov ds, ax
|
||||||
|
mov es, ax
|
||||||
|
|
||||||
|
mov ss, ax
|
||||||
|
mov sp, 0x7c00 ;stack down from our load address
|
||||||
|
mov bp, sp
|
||||||
|
|
||||||
|
;; ensure VGA textmode
|
||||||
|
mov ah, 0x00
|
||||||
|
mov al, 0x03 ;Colour Text mode 3 80x25
|
||||||
|
int 0x10
|
||||||
|
|
||||||
|
;; storeBootdiskNum
|
||||||
|
mov [diskNum], dl
|
||||||
|
|
||||||
|
checkLBASupport:
|
||||||
|
;; Set AH = 0x41
|
||||||
|
;; BX = 0x55AA
|
||||||
|
;; DL = drive
|
||||||
|
;; INT 0x13
|
||||||
|
|
||||||
|
mov si, msg.lba
|
||||||
|
mov ah, 0x41
|
||||||
|
mov bx, 0x55AA
|
||||||
|
int 0x13
|
||||||
|
|
||||||
|
jc msg.error
|
||||||
|
test bx, 0xAA55
|
||||||
|
jz msg.error
|
||||||
|
test cx, cx
|
||||||
|
jp msg.error
|
||||||
|
|
||||||
|
|
||||||
|
getPartitionLBA:
|
||||||
|
;; 1st partition entry at 0x1BE (16 bytes)
|
||||||
|
;; LBA start 4bytes at 0x1BE + 0x08
|
||||||
|
;; Sectors count 4bytes at 0x1BE + 0x0C
|
||||||
|
|
||||||
|
;; so uhmmmm, read those and use 'em to find next peace of data?
|
||||||
|
;; Wait is my MBR one block that is read at once? Lol wait MBR
|
||||||
|
;; is also part of my own current loaded memory!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
nomoreThings:
|
||||||
|
mov si, msg.nop
|
||||||
|
jmp msg.ok
|
||||||
|
endloop:
|
||||||
|
nop
|
||||||
|
jmp endloop
|
||||||
|
|
||||||
|
msg:
|
||||||
|
.ok:
|
||||||
|
mov ah, 0x20 ;greenblack
|
||||||
|
jmp .prepare
|
||||||
|
.error:
|
||||||
|
mov ah, 0x47 ;redgray
|
||||||
|
.prepare:
|
||||||
|
mov bx, 0xb800
|
||||||
|
mov es, bx
|
||||||
|
mov edi, 0
|
||||||
|
.loop:
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jz endloop
|
||||||
|
stosw
|
||||||
|
jmp .loop
|
||||||
|
|
||||||
|
.lba db "Inadequate LBA support: Ancient computor or floppy?", 0
|
||||||
|
.nop db "Nothingtodo :'(", 0
|
||||||
|
|
||||||
|
;; Store some data
|
||||||
|
diskNum db 0x00
|
Loading…
Add table
Add a link
Reference in a new issue