index : archi486 | |
Archlinux32 i486 tools | gitolite user |
summaryrefslogtreecommitdiff |
author | Andreas Baumann <mail@andreasbaumann.cc> | 2022-09-02 09:18:52 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2022-09-02 09:18:52 +0200 |
commit | 52be99d8c0862ff87db9a4f9ccec1ac4b5f7caed (patch) | |
tree | 1a1a1c98090afd8459cc8f045f9de2d4a7cba5ab /floppy/tests/test_unreal.asm | |
parent | 15adaba9eaa6a98c8b55bc5c5f73c3a9e0e55e7a (diff) |
-rw-r--r-- | floppy/tests/test_unreal.asm | 49 |
diff --git a/floppy/tests/test_unreal.asm b/floppy/tests/test_unreal.asm new file mode 100644 index 0000000..687a528 --- /dev/null +++ b/floppy/tests/test_unreal.asm @@ -0,0 +1,49 @@ +; Assembly example + +; nasm boot.asm -o boot.bin +; partcopy boot.bin 0 200 -f0 + +[ORG 0x7c00] ; add to offsets + +start: xor ax, ax ; make it zero + mov ds, ax ; DS=0 + mov ss, ax ; stack starts at seg 0 + mov sp, 0x9c00 ; 2000h past code start, + ; making the stack 7.5k in size + + cli ; no interrupts + push ds ; save real mode + + lgdt [gdtinfo] ; load gdt register + + mov eax, cr0 ; switch to pmode by + or al,1 ; set pmode bit + mov cr0, eax + + jmp $+2 ; tell 386/486 to not crash + + mov bx, 0x08 ; select descriptor 1 + mov ds, bx ; 8h = 1000b + + and al,0xFE ; back to realmode + mov cr0, eax ; by toggling bit again + + pop ds ; get back old segment + sti + + mov bx, 0x0f01 ; attrib/char of smiley + mov eax, 0x0b8000 ; note 32 bit offset + mov word [ds:eax], bx + + jmp $ ; loop forever + +gdtinfo: + dw gdt_end - gdt - 1 ;last byte in table + dd gdt ;start of table + +gdt dd 0,0 ; entry 0 is always unused +flatdesc db 0xff, 0xff, 0, 0, 0, 10010010b, 11001111b, 0 +gdt_end: + + times 510-($-$$) db 0 ; fill sector w/ 0's + dw 0xAA55 ; Required by some BIOSes |