This commit is contained in:
Yourtion
2014-09-05 15:01:38 +08:00
parent e041908391
commit 358f1a4d33
2 changed files with 35 additions and 35 deletions

View File

@@ -1,10 +1,10 @@
# <EFBFBD>f<EFBFBD>t<EFBFBD>H<EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
# 默认动作
default :
../z_tools/make.exe img
# <EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD><4B>
# 镜像文件生成
ipl.bin : ipl.nas Makefile
../z_tools/nask.exe ipl.nas ipl.bin ipl.lst
@@ -13,7 +13,7 @@ helloos.img : ipl.bin Makefile
../z_tools/edimg.exe imgin:../z_tools/fdimg0at.tek \
wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img
# <EFBFBD>R<EFBFBD>}<7D><><EFBFBD>h
# 其他指令
asm :
../z_tools/make.exe -r ipl.bin

View File

@@ -1,35 +1,35 @@
; hello-os
; TAB=4
ORG 0x7c00 ; <EFBFBD><EFBFBD><EFBFBD>̃v<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><EFBFBD>ɓǂݍ<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD>
ORG 0x7c00 ; 指明程序装载地址
; <EFBFBD>ȉ<EFBFBD><EFBFBD>͕W<EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><EFBFBD>FAT12<EFBFBD>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>t<EFBFBD><74><EFBFBD>b<EFBFBD>s<EFBFBD>[<5B>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD>̂<EFBFBD><CC82>߂̋L<CC8B>q
; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code
JMP entry
DB 0x90
DB "HELLOIPL" ; <EFBFBD>u<EFBFBD>[<5B>g<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E>̖<EFBFBD><CC96>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>ɏ<EFBFBD><C98F><EFBFBD><EFBFBD>Ă悢<C482>i8<69>o<EFBFBD>C<EFBFBD>g<EFBFBD>j
DW 512 ; 1<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E>̑傫<CC91><E582AB><EFBFBD>i512<31>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DB 1 ; <EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>^<5E>̑傫<CC91><E582AB><EFBFBD>i1<69>Z<EFBFBD>N<EFBFBD>^<5E>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DW 1 ; FAT<EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>܂<EFBFBD>i<EFBFBD><EFBFBD><EFBFBD>ʂ<EFBFBD>1<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E>ڂ<EFBFBD><DA82><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>j
DB 2 ; FAT<EFBFBD>̌<EFBFBD><EFBFBD>i2<EFBFBD>ɂ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>΂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>j
DW 224 ; <EFBFBD><EFBFBD><EFBFBD>[<5B>g<EFBFBD>f<EFBFBD>B<EFBFBD><42><EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>̈<EFBFBD><CC88>̑傫<CC91><E582AB><EFBFBD>i<EFBFBD><69><EFBFBD>ʂ<EFBFBD>224<32>G<EFBFBD><47><EFBFBD>g<EFBFBD><67><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>j
DW 2880 ; <EFBFBD><EFBFBD><EFBFBD>̃h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD>̑傫<EFBFBD><EFBFBD><EFBFBD>i2880<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DB 0xf0 ; <EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>B<EFBFBD>A<EFBFBD>̃^<5E>C<EFBFBD>v<EFBFBD>i0xf0<66>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DW 9 ; FAT<EFBFBD>̈<EFBFBD><EFBFBD>̒<EFBFBD><EFBFBD><EFBFBD><EFBFBD>i9<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DW 18 ; 1<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD>ɂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚̃Z<EFBFBD>N<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i18<31>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DW 2 ; <EFBFBD>w<EFBFBD>b<EFBFBD>h<EFBFBD>̐<EFBFBD><EFBFBD>i2<EFBFBD>ɂ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>΂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>j
DD 0 ; <EFBFBD>p<EFBFBD>[<5B>e<EFBFBD>B<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g<EFBFBD><67><EFBFBD>ĂȂ<C482><C882>̂ł<CC82><C582><EFBFBD><EFBFBD>͕K<CD95><4B>0
DD 2880 ; <EFBFBD><EFBFBD><EFBFBD>̃h<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>u<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DB 0,0,0x29 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><EFBFBD>̒l<EFBFBD>ɂ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DD 0xffffffff ; <EFBFBD><EFBFBD><EFBFBD>Ԃ<EFBFBD><EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>V<EFBFBD><56><EFBFBD>A<EFBFBD><41><EFBFBD>ԍ<EFBFBD>
DB "HELLO-OS " ; <EFBFBD>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD>̖<EFBFBD><EFBFBD>O<EFBFBD>i11<EFBFBD>o<EFBFBD>C<EFBFBD>g<EFBFBD>j
DB "FAT12 " ; <EFBFBD>t<EFBFBD>H<EFBFBD>[<5B>}<7D>b<EFBFBD>g<EFBFBD>̖<EFBFBD><CC96>O<EFBFBD>i8<69>o<EFBFBD>C<EFBFBD>g<EFBFBD>j
RESB 18 ; <EFBFBD>Ƃ肠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>18<EFBFBD>o<EFBFBD>C<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD>
DB 0xeb, 0x4e, 0x90
DB "HELLOIPL" ; 启动扇区名称8字节
DW 512 ; 每个扇区sector大小必须512字节
DB 1 ; cluster大小必须为1个扇区
DW 1 ; FAT起始位置(一般为第一个扇区)
DB 2 ; FAT个数必须为2
DW 224 ; 根目录大小一般为224项
DW 2880 ; 该磁盘大小必须为2880扇区1440*1024/512
DB 0xf0 ; 磁盘类型必须为0xf0
DW 9 ; FAT的长度(必??9扇区
DW 18 ; 一个磁道track有几个扇区必须为18
DW 2 ; 磁头数(必??2
DD 0 ; 不使用分区,必须是0
DD 2880 ; 重写一次磁盘大小
DB 0,0,0x29 ; 意义不明(固定)
DD 0xffffffff ; (可能是)卷标号码
DB "HELLO-OS " ; 磁盘的名称必须为11字?,不足填空格)
DB "FAT12 " ; 磁盘格式名称(必??8字?,不足填空格)
RESB 18 ; 先空出18字节
; <EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B><>
; 程序主体
entry:
MOV AX,0 ; <EFBFBD><EFBFBD><EFBFBD>W<EFBFBD>X<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MOV AX,0 ; 初始化寄存器
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
@@ -38,23 +38,23 @@ entry:
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1 ; SI<EFBFBD><EFBFBD>1<EFBFBD>𑫂<EFBFBD>
ADD SI,1 ; SI加1
CMP AL,0
JE fin
MOV AH,0x0e ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><><EFBFBD>t<EFBFBD>@<40><><EFBFBD>N<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD>
MOV BX,15 ; <EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>[<5B>R<EFBFBD>[<5B>h
INT 0x10 ; <EFBFBD>r<EFBFBD>f<EFBFBD>IBIOS<EFBFBD>Ăяo<EFBFBD><EFBFBD>
MOV AH,0x0e ; 显示一个文字
MOV BX,15 ; 指定字符颜色
INT 0x10 ; 调用显卡BIOS
JMP putloop
fin:
HLT ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD>CPU<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JMP fin ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>v
HLT ; 让CPU停止等待指令
JMP fin ; 无限循环
msg:
DB 0x0a, 0x0a ; <EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>
DB 0x0a, 0x0a ; 换行两次
DB "hello, world"
DB 0x0a ; <EFBFBD><EFBFBD><EFBFBD>s
DB 0x0a ; 换行
DB 0
RESB 0x7dfe-$ ; 0x7dfe<EFBFBD>܂ł<EFBFBD>0x00<EFBFBD>Ŗ<EFBFBD><EFBFBD>߂閽<EFBFBD><EFBFBD>
RESB 0x7dfe-$ ; 填写0x00直到0x001fe
DB 0x55, 0xaa