作者erspicu (.)
看板ASM
标题[问题] nasm bios撰写
时间Mon Feb 15 16:36:13 2016
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去做)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.121.24.207
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1455525375.A.D50.html
※ 编辑: erspicu (122.121.24.207), 02/15/2016 16:40:49