Add day 04 code

This commit is contained in:
Yourtion
2014-09-10 14:54:39 +08:00
parent 99585655ec
commit a13dc8e850
8 changed files with 375 additions and 0 deletions

1
04_day/!cons_9x.bat Normal file
View File

@@ -0,0 +1 @@
command

1
04_day/!cons_nt.bat Normal file
View File

@@ -0,0 +1 @@
cmd.exe

85
04_day/Makefile Normal file
View File

@@ -0,0 +1,85 @@
TOOLPATH = ../z_tools/
INCPATH = ../z_tools/haribote/
MAKE = $(TOOLPATH)make.exe -r
NASK = $(TOOLPATH)nask.exe
CC1 = $(TOOLPATH)cc1.exe -I$(INCPATH) -Os -Wall -quiet
GAS2NASK = $(TOOLPATH)gas2nask.exe -a
OBJ2BIM = $(TOOLPATH)obj2bim.exe
BIM2HRB = $(TOOLPATH)bim2hrb.exe
RULEFILE = $(TOOLPATH)haribote/haribote.rul
EDIMG = $(TOOLPATH)edimg.exe
IMGTOL = $(TOOLPATH)imgtol.com
COPY = copy
DEL = del
# <20>f<EFBFBD>t<EFBFBD>H<EFBFBD><48><EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD>
default :
$(MAKE) img
# <20>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD><4B>
ipl10.bin : ipl10.nas Makefile
$(NASK) ipl10.nas ipl10.bin ipl10.lst
asmhead.bin : asmhead.nas Makefile
$(NASK) asmhead.nas asmhead.bin asmhead.lst
bootpack.gas : bootpack.c Makefile
$(CC1) -o bootpack.gas bootpack.c
bootpack.nas : bootpack.gas Makefile
$(GAS2NASK) bootpack.gas bootpack.nas
bootpack.obj : bootpack.nas Makefile
$(NASK) bootpack.nas bootpack.obj bootpack.lst
naskfunc.obj : naskfunc.nas Makefile
$(NASK) naskfunc.nas naskfunc.obj naskfunc.lst
bootpack.bim : bootpack.obj naskfunc.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:bootpack.bim stack:3136k map:bootpack.map \
bootpack.obj naskfunc.obj
# 3MB+64KB=3136KB
bootpack.hrb : bootpack.bim Makefile
$(BIM2HRB) bootpack.bim bootpack.hrb 0
haribote.sys : asmhead.bin bootpack.hrb Makefile
copy /B asmhead.bin+bootpack.hrb haribote.sys
haribote.img : ipl10.bin haribote.sys Makefile
$(EDIMG) imgin:../z_tools/fdimg0at.tek \
wbinimg src:ipl10.bin len:512 from:0 to:0 \
copy from:haribote.sys to:@: \
imgout:haribote.img
# <20>R<EFBFBD>}<7D><><EFBFBD>h
img :
$(MAKE) haribote.img
run :
$(MAKE) img
$(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin
$(MAKE) -C ../z_tools/qemu
install :
$(MAKE) img
$(IMGTOL) w a: haribote.img
clean :
-$(DEL) *.bin
-$(DEL) *.lst
-$(DEL) *.gas
-$(DEL) *.obj
-$(DEL) bootpack.nas
-$(DEL) bootpack.map
-$(DEL) bootpack.bim
-$(DEL) bootpack.hrb
-$(DEL) haribote.sys
src_only :
$(MAKE) clean
-$(DEL) haribote.img

146
04_day/asmhead.nas Normal file
View File

@@ -0,0 +1,146 @@
; haribote-os boot asm
; TAB=4
BOTPAK EQU 0x00280000 ; bootpack<63>̃<EFBFBD><CC83>[<5B>h<EFBFBD><68>
DSKCAC EQU 0x00100000 ; <20>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD>L<EFBFBD><4C><EFBFBD>b<EFBFBD>V<EFBFBD><56><EFBFBD>̏ꏊ
DSKCAC0 EQU 0x00008000 ; <20>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD>L<EFBFBD><4C><EFBFBD>b<EFBFBD>V<EFBFBD><56><EFBFBD>̏ꏊ<CC8F>i<EFBFBD><69><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD>j
; BOOT_INFO<46>֌W
CYLS EQU 0x0ff0 ; <20>u<EFBFBD>[<5B>g<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E><><EFBFBD>ݒ肷<DD92><E882B7>
LEDS EQU 0x0ff1
VMODE EQU 0x0ff2 ; <20>F<EFBFBD><46><EFBFBD>Ɋւ<C98A><D682><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><42><EFBFBD>r<EFBFBD>b<EFBFBD>g<EFBFBD>J<EFBFBD><4A><EFBFBD>[<5B><><EFBFBD>H
SCRNX EQU 0x0ff4 ; <20>𑜓x<F0919C93><78>X
SCRNY EQU 0x0ff6 ; <20>𑜓x<F0919C93><78>Y
VRAM EQU 0x0ff8 ; <20>O<EFBFBD><4F><EFBFBD>t<EFBFBD>B<EFBFBD>b<EFBFBD>N<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>̊J<CC8A>n<EFBFBD>Ԓn
ORG 0xc200 ; <20><><EFBFBD>̃v<CC83><76><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782>ɓǂݍ<C782><DD8D>܂<EFBFBD><DC82><EFBFBD><EFBFBD>̂<EFBFBD>
; <20><><EFBFBD>ʃ<EFBFBD><CA83>[<5B>h<EFBFBD><68><EFBFBD>ݒ<EFBFBD>
MOV AL,0x13 ; VGA<47>O<EFBFBD><4F><EFBFBD>t<EFBFBD>B<EFBFBD>b<EFBFBD>N<EFBFBD>X<EFBFBD>A320x200x8bit<69>J<EFBFBD><4A><EFBFBD>[
MOV AH,0x00
INT 0x10
MOV BYTE [VMODE],8 ; <20><><EFBFBD>ʃ<EFBFBD><CA83>[<5B>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>iC<69><43><EFBFBD><EFBFBD>Q<EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>j
MOV WORD [SCRNX],320
MOV WORD [SCRNY],200
MOV DWORD [VRAM],0x000a0000
; <20>L<EFBFBD>[<5B>{<7B>[<5B>h<EFBFBD><68>LED<45><44><EFBFBD>Ԃ<EFBFBD>BIOS<4F>ɋ<EFBFBD><C98B><EFBFBD><EFBFBD>Ă<EFBFBD><C482>
MOV AH,0x02
INT 0x16 ; keyboard BIOS
MOV [LEDS],AL
; PIC<49><43><EFBFBD><EFBFBD><EFBFBD>؂̊<D882><CC8A><EFBFBD>݂<EFBFBD><DD82>󂯕t<F382AF95><74><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD>ɂ<EFBFBD><C982><EFBFBD>
; AT<41>݊<EFBFBD><DD8A>@<40>̎d<CC8E>l<EFBFBD>ł́APIC<49>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>A
; <09><><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD>CLI<4C>O<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>ƁA<C681><41><EFBFBD>܂Ƀn<C983><6E><EFBFBD>O<EFBFBD>A<EFBFBD>b<EFBFBD>v<EFBFBD><76><EFBFBD><EFBFBD>
; PIC<49>̏<EFBFBD><CC8F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͂<EFBFBD><CD82>Ƃł<C682><C582><EFBFBD>
MOV AL,0xff
OUT 0x21,AL
NOP ; OUT<55><54><EFBFBD>߂<EFBFBD><DF82>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682>܂<EFBFBD><DC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>@<40><EFBFBD><ED82AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E782B5><EFBFBD>̂<EFBFBD>
OUT 0xa1,AL
CLI ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<50><55><EFBFBD>x<EFBFBD><78><EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD>݋֎~
; CPU<50><55><EFBFBD><EFBFBD>1MB<4D>ȏ<EFBFBD><C88F>̃<EFBFBD><CC83><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɃA<C983>N<EFBFBD>Z<EFBFBD>X<EFBFBD>ł<EFBFBD><C582><EFBFBD><EFBFBD><EFBFBD>ɁAA20GATE<54><45><EFBFBD>ݒ<EFBFBD>
CALL waitkbdout
MOV AL,0xd1
OUT 0x64,AL
CALL waitkbdout
MOV AL,0xdf ; enable A20
OUT 0x60,AL
CALL waitkbdout
; <20>v<EFBFBD><76><EFBFBD>e<EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B>h<EFBFBD>ڍs
[INSTRSET "i486p"] ; 486<38>̖<EFBFBD><CC96>߂܂Ŏg<C58E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>L<EFBFBD>q
LGDT [GDTR0] ; <20>b<EFBFBD><62>GDT<44><54><EFBFBD>ݒ<EFBFBD>
MOV EAX,CR0
AND EAX,0x7fffffff ; bit31<33><31>0<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>i<EFBFBD>y<EFBFBD>[<5B>W<EFBFBD><57><EFBFBD>O<EFBFBD>֎~<7E>̂<EFBFBD><CC82>߁j
OR EAX,0x00000001 ; bit0<74><30>1<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>i<EFBFBD>v<EFBFBD><76><EFBFBD>e<EFBFBD>N<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B>h<EFBFBD>ڍs<DA8D>̂<EFBFBD><CC82>߁j
MOV CR0,EAX
JMP pipelineflush
pipelineflush:
MOV AX,1*8 ; <20>ǂݏ<C782><DD8F><EFBFBD><EFBFBD>”\<5C>Z<EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>g32bit
MOV DS,AX
MOV ES,AX
MOV FS,AX
MOV GS,AX
MOV SS,AX
; bootpack<63>̓]<5D><>
MOV ESI,bootpack ; <20>]<5D><><EFBFBD><EFBFBD>
MOV EDI,BOTPAK ; <20>]<5D><><EFBFBD><EFBFBD>
MOV ECX,512*1024/4
CALL memcpy
; <20>‚<EFBFBD><C282>łɃf<C983>B<EFBFBD>X<EFBFBD>N<EFBFBD>f<EFBFBD>[<5B>^<5E><><EFBFBD>{<7B><><EFBFBD>̈ʒu<CA92>֓]<5D><>
; <20>܂<EFBFBD><DC82>̓u<CD83>[<5B>g<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E><><EFBFBD><EFBFBD>
MOV ESI,0x7c00 ; <20>]<5D><><EFBFBD><EFBFBD>
MOV EDI,DSKCAC ; <20>]<5D><><EFBFBD><EFBFBD>
MOV ECX,512/4
CALL memcpy
; <20>c<EFBFBD><63><EFBFBD>S<EFBFBD><53>
MOV ESI,DSKCAC0+512 ; <20>]<5D><><EFBFBD><EFBFBD>
MOV EDI,DSKCAC+512 ; <20>]<5D><><EFBFBD><EFBFBD>
MOV ECX,0
MOV CL,BYTE [CYLS]
IMUL ECX,512*18*2/4 ; <20>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><5F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>C<EFBFBD>g<EFBFBD><67>/4<>ɕϊ<C995>
SUB ECX,512/4 ; IPL<50>̕<EFBFBD><CC95><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CALL memcpy
; asmhead<61>ł<EFBFBD><C582>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>Ƃ͑S<CD91><53><EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA
; <09><><EFBFBD>Ƃ<EFBFBD>bootpack<63>ɔC<C994><43><EFBFBD><EFBFBD>
; bootpack<63>̋N<CC8B><4E>
MOV EBX,BOTPAK
MOV ECX,[EBX+16]
ADD ECX,3 ; ECX += 3;
SHR ECX,2 ; ECX /= 4;
JZ skip ; <20>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ׂ<EFBFBD><D782><EFBFBD><EFBFBD>̂<EFBFBD><CC82>Ȃ<EFBFBD>
MOV ESI,[EBX+20] ; <20>]<5D><><EFBFBD><EFBFBD>
ADD ESI,EBX
MOV EDI,[EBX+12] ; <20>]<5D><><EFBFBD><EFBFBD>
CALL memcpy
skip:
MOV ESP,[EBX+12] ; <20>X<EFBFBD>^<5E>b<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>l
JMP DWORD 2*8:0x0000001b
waitkbdout:
IN AL,0x64
AND AL,0x02
JNZ waitkbdout ; AND<4E>̌<EFBFBD><CC8C>ʂ<EFBFBD>0<EFBFBD>łȂ<C582><C882><EFBFBD><EFBFBD><EFBFBD>waitkbdout<75><74>
RET
memcpy:
MOV EAX,[ESI]
ADD ESI,4
MOV [EDI],EAX
ADD EDI,4
SUB ECX,1
JNZ memcpy ; <20><><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><5A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʂ<EFBFBD>0<EFBFBD>łȂ<C582><C882><EFBFBD><EFBFBD><EFBFBD>memcpy<70><79>
RET
; memcpy<70>̓A<CD83>h<EFBFBD><68><EFBFBD>X<EFBFBD>T<EFBFBD>C<EFBFBD>Y<EFBFBD>v<EFBFBD><76><EFBFBD>t<EFBFBD>B<EFBFBD>N<EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΁A<CE81>X<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD><4F><EFBFBD>߂ł<DF82><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ALIGNB 16
GDT0:
RESB 8 ; <20>k<EFBFBD><6B><EFBFBD>Z<EFBFBD><5A><EFBFBD>N<EFBFBD>^
DW 0xffff,0x0000,0x9200,0x00cf ; <20>ǂݏ<C782><DD8F><EFBFBD><EFBFBD>”\<5C>Z<EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>g32bit
DW 0xffff,0x0000,0x9a28,0x0047 ; <20><><EFBFBD>s<EFBFBD>”\<5C>Z<EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>g32bit<69>ibootpack<63>p<EFBFBD>j
DW 0
GDTR0:
DW 8*3-1
DD GDT0
ALIGNB 16
bootpack:

15
04_day/bootpack.c Normal file
View File

@@ -0,0 +1,15 @@
void io_hlt(void);
void write_mem8(int addr, int data);
void HariMain(void)
{
int i; /* <20>ϐ<EFBFBD><CF90><EFBFBD>Bi<42>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>ϐ<EFBFBD><CF90>́A32<33>r<EFBFBD>b<EFBFBD>g<EFBFBD>̐<EFBFBD><CC90><EFBFBD><EFBFBD>^ */
for (i = 0xa0000; i <= 0xaffff; i++) {
write_mem8(i, 15); /* MOV BYTE [i],15 */
}
for (;;) {
io_hlt();
}
}

105
04_day/ipl10.nas Normal file
View File

@@ -0,0 +1,105 @@
; haribote-ipl
; TAB=4
CYLS EQU 10 ; <20>ǂ<EFBFBD><C782>܂œǂݍ<C782><DD8D>ނ<EFBFBD>
ORG 0x7c00 ; <20><><EFBFBD>̃v<CC83><76><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǂ<EFBFBD><C782>ɓǂݍ<C782><DD8D>܂<EFBFBD><DC82><EFBFBD><EFBFBD>̂<EFBFBD>
; <20>ȉ<EFBFBD><C889>͕W<CD95><57><EFBFBD>I<EFBFBD><49>FAT12<31>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
JMP entry
DB 0x90
DB "HARIBOTE" ; <20>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<>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 ; <20>N<EFBFBD><4E><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<41><54><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>܂<DC82>i<EFBFBD><69><EFBFBD>ʂ<EFBFBD>1<EFBFBD>Z<EFBFBD>N<EFBFBD>^<5E>ڂ<EFBFBD><DA82><EFBFBD><EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>j
DB 2 ; FAT<41>̌<CC8C><C290>i2<69>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DW 224 ; <20><><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 ; <20><><EFBFBD>̃h<CC83><68><EFBFBD>C<EFBFBD>u<EFBFBD>̑傫<CC91><E582AB><EFBFBD>i2880<38>Z<EFBFBD>N<EFBFBD>^<5E>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DB 0xf0 ; <20><><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<41>̈<EFBFBD><CC88>̒<EFBFBD><CC92><EFBFBD><EFBFBD>i9<69>Z<EFBFBD>N<EFBFBD>^<5E>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DW 18 ; 1<>g<EFBFBD><67><EFBFBD>b<EFBFBD>N<EFBFBD>ɂ<EFBFBD><C982><EFBFBD><EFBFBD>‚̃Z<CC83>N<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>i18<31>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DW 2 ; <20>w<EFBFBD>b<EFBFBD>h<EFBFBD>̐<EFBFBD><CC90>i2<69>ɂ<EFBFBD><C982>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>΂<EFBFBD><CE82><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882>j
DD 0 ; <20>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 ; <20><><EFBFBD>̃h<CC83><68><EFBFBD>C<EFBFBD>u<EFBFBD><EFBFBD><E582AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD><EFBFBD>
DB 0,0,0x29 ; <20><EFBFBD><EFBFBD><ED82A9><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>ǂ<EFBFBD><C782>̒l<CC92>ɂ<EFBFBD><C982>Ă<EFBFBD><C482><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><E782B5>
DD 0xffffffff ; <20><><EFBFBD>Ԃ<EFBFBD><D482>{<7B><><EFBFBD><EFBFBD><EFBFBD>[<5B><><EFBFBD>V<EFBFBD><56><EFBFBD>A<EFBFBD><41><EFBFBD>ԍ<EFBFBD>
DB "HARIBOTEOS " ; <20>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD>̖<EFBFBD><CC96>O<EFBFBD>i11<31>o<EFBFBD>C<EFBFBD>g<EFBFBD>j
DB "FAT12 " ; <20>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 ; <20>Ƃ肠<C682><E882A0><EFBFBD><EFBFBD>18<31>o<EFBFBD>C<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
; <20>v<EFBFBD><76><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>{<7B><>
entry:
MOV AX,0 ; <20><><EFBFBD>W<EFBFBD>X<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
; <20>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD><4E><EFBFBD>ǂ<EFBFBD>
MOV AX,0x0820
MOV ES,AX
MOV CH,0 ; <20>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>_0
MOV DH,0 ; <20>w<EFBFBD>b<EFBFBD>h0
MOV CL,2 ; <20>Z<EFBFBD>N<EFBFBD>^2
readloop:
MOV SI,0 ; <20><><EFBFBD>s<EFBFBD>񐔂𐔂<F1909482><F0909482><EFBFBD>W<EFBFBD>X<EFBFBD>^
retry:
MOV AH,0x02 ; AH=0x02 : <20>f<EFBFBD>B<EFBFBD>X<EFBFBD>N<EFBFBD>ǂݍ<C782><DD8D><EFBFBD>
MOV AL,1 ; 1<>Z<EFBFBD>N<EFBFBD>^
MOV BX,0
MOV DL,0x00 ; A<>h<EFBFBD><68><EFBFBD>C<EFBFBD>u
INT 0x13 ; <20>f<EFBFBD>B<EFBFBD>X<EFBFBD>NBIOS<4F>Ăяo<D18F><6F>
JNC next ; <20>G<EFBFBD><47><EFBFBD>[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD><EFBFBD>next<78><74>
ADD SI,1 ; SI<53><49>1<EFBFBD>𑫂<EFBFBD>
CMP SI,5 ; SI<53><49>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD>r
JAE error ; SI >= 5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>error<6F><72>
MOV AH,0x00
MOV DL,0x00 ; A<>h<EFBFBD><68><EFBFBD>C<EFBFBD>u
INT 0x13 ; <20>h<EFBFBD><68><EFBFBD>C<EFBFBD>u<EFBFBD>̃<EFBFBD><CC83>Z<EFBFBD>b<EFBFBD>g
JMP retry
next:
MOV AX,ES ; <20>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58>0x200<30>i<EFBFBD>߂<EFBFBD>
ADD AX,0x0020
MOV ES,AX ; ADD ES,0x020 <20>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߂<EFBFBD><DF82>Ȃ<EFBFBD><C882>̂ł<CC82><C582><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD>
ADD CL,1 ; CL<43><4C>1<EFBFBD>𑫂<EFBFBD>
CMP CL,18 ; CL<43><4C>18<31><38><EFBFBD><EFBFBD><EFBFBD>r
JBE readloop ; CL <= 18 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>readloop<6F><70>
MOV CL,1
ADD DH,1
CMP DH,2
JB readloop ; DH < 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>readloop<6F><70>
MOV DH,0
ADD CH,1
CMP CH,CYLS
JB readloop ; CH < CYLS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>readloop<6F><70>
; <20>ǂݏI<DD8F><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD>haribote.sys<79><73><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD><73><EFBFBD>I
MOV [0x0ff0],CH ; IPL<50><4C><EFBFBD>ǂ<EFBFBD><C782>܂œǂ񂾂̂<F182BE82><CC82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JMP 0xc200
error:
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1 ; SI<53><49>1<EFBFBD>𑫂<EFBFBD>
CMP AL,0
JE fin
MOV AH,0x0e ; <20><EFBFBD><EA95B6><EFBFBD>\<5C><><EFBFBD>t<EFBFBD>@<40><><EFBFBD>N<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD>
MOV BX,15 ; <20>J<EFBFBD><4A><EFBFBD>[<5B>R<EFBFBD>[<5B>h
INT 0x10 ; <20>r<EFBFBD>f<EFBFBD>IBIOS<4F>Ăяo<D18F><6F>
JMP putloop
fin:
HLT ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD>CPU<50><55><EFBFBD><EFBFBD><EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
JMP fin ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>v
msg:
DB 0x0a, 0x0a ; <20><><EFBFBD>s<EFBFBD><73>2<EFBFBD><32>
DB "load error"
DB 0x0a ; <20><><EFBFBD>s
DB 0
RESB 0x7dfe-$ ; 0x7dfe<66>܂ł<DC82>0x00<30>Ŗ<EFBFBD><C596>߂閽<DF82><E996BD>
DB 0x55, 0xaa

1
04_day/make.bat Normal file
View File

@@ -0,0 +1 @@
..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

21
04_day/naskfunc.nas Normal file
View File

@@ -0,0 +1,21 @@
; naskfunc
; TAB=4
[FORMAT "WCOFF"] ; <20>I<EFBFBD>u<EFBFBD>W<EFBFBD>F<EFBFBD>N<EFBFBD>g<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h
[INSTRSET "i486p"] ; 486<38>̖<EFBFBD><CC96>߂܂Ŏg<C58E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><C682><EFBFBD><EFBFBD>L<EFBFBD>q
[BITS 32] ; 32<33>r<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD>[<5B>h<EFBFBD>p<EFBFBD>̋@<40>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E782B9>
[FILE "naskfunc.nas"] ; <20>\<5C>[<5B>X<EFBFBD>t<EFBFBD>@<40>C<EFBFBD><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GLOBAL _io_hlt,_write_mem8
[SECTION .text]
_io_hlt: ; void io_hlt(void);
HLT
RET
_write_mem8: ; void write_mem8(int addr, int data);
MOV ECX,[ESP+4] ; [ESP+4]<5D><>addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>̂ł<CC82><C582><EFBFBD><EFBFBD><EFBFBD>ECX<43>ɓǂݍ<C782><DD8D><EFBFBD>
MOV AL,[ESP+8] ; [ESP+8]<5D><>data<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>̂ł<CC82><C582><EFBFBD><EFBFBD><EFBFBD>AL<41>ɓǂݍ<C782><DD8D><EFBFBD>
MOV [ECX],AL
RET