ORG 0xffff0000 ; 64k BIOS
BITS 16
rom_start:
nop
mov ax,0xb800
mov es,ax
mov ax,message ; offset ofMessage string terminating with $
mov si,ax ; Make Si point to string address
mov di,0 ; Make Destination Index point to
B800:0000
loop1:
mov al,[si] ; Read First Character
mov [es:di],al ; Write to Video
inc si ; Point to next character
inc di
inc di ; Next Display Area
cmp al,'$'
jne loop1 ; if not '$' jump to loop1
stoploop:
nop
jmp stoploop
message db "Hello World $" ; Message to be displayed terminating with a $
gdtEnd:
TIMES 0xfff0-($-$$) DB 0xff
reset_entry: ; power on
jmp rom_start
TIMES 0x10000-($-$$) DB 0xff
參考一些範例修改而來的
我想做的事情很簡單 因為想寫一個簡單的8086模擬器
想說先從最基本能跑完簡化版bios的完整度開始
因此這個bios只做很簡單的事情 那就是透過memory address
直接寫入字元印到文字模式的螢幕上
不過這寫好後 透過一些模擬器 ex,fake86 or Bochs
都沒有任何畫面出來
在我的觀念裡vga卡預設應該就是文字模式
把char code寫入到mapping的記體裡 應該就會看到字元
不過後來觀察到一點 vga卡本身也有bios
流程應該是 bios會先跑些東西後跳去vga的bios 做些初始化動作後 在跳回bios
不知道是不是因為vga卡要能夠用文字模式列印
還需要先進行初始化硬體的過程?
(只是文字模式透過memory寫入印字,還需要這麼麻煩??沒透過INT去做)