Compare commits

...

49 Commits

Author SHA1 Message Date
郭宇翔
9aa36a0f96 Merge pull request #26 from LJS08/patch-1
Fix: 翻译不完全04_day/asmhead.nas
2024-04-01 16:14:55 +08:00
LJS80
9bb71ea5ce Update asmhead.nas 2023-06-19 23:06:13 +08:00
郭宇翔
f8b2930281 Merge pull request #9 from sky5454/patch-2
Update README.md
2020-08-10 15:07:34 +08:00
郭宇翔
c462063e0b Update ipl10.nas
Fixed #10
2020-08-10 09:40:14 +08:00
郭宇翔
dade193e1f Update README.md 2020-08-10 09:36:42 +08:00
sky5454
670d454b4e Update README.md
Add HELP
2019-05-27 22:13:46 +08:00
郭宇翔
6ee187a190 Merge pull request #8 from sky5454/patch-1
Update helloos.nas
2019-05-26 23:29:22 +08:00
sky5454
7d59920a37 Update helloos.nas
修正:“必??”改为“必须是”,"字?"改为"字节"
不知道是不是仓库主人误操作,还是git的bug?
2019-05-26 21:48:38 +08:00
郭宇翔
b308a9e295 fix imgout BPB data error
fixed #3
2018-08-08 00:26:36 +08:00
Yourtion
a28136d3de bug fix 2016-05-31 18:13:22 +08:00
Yourtion
438eeb5135 Update README 2016-05-21 00:37:05 +08:00
Yourtion
d9d034cf43 update 2016-05-21 00:31:13 +08:00
Yourtion
c8be7ff36f update README 2016-05-21 00:30:29 +08:00
Yourtion
140774a293 bug fix 2016-05-21 00:24:41 +08:00
Yourtion
7c2fc66927 add screen 2016-05-20 15:28:31 +08:00
Yourtion
636c1a8c3d Update README 2016-05-20 15:16:20 +08:00
Yourtion
c177821913 整理 2016-05-20 14:56:29 +08:00
Yourtion
febac10ebf IPL的改良 2016-05-20 14:49:26 +08:00
Yourtion
0e31ff06ca bug fix 2016-05-20 14:27:07 +08:00
Yourtion
08d19d7512 图片阅览器 2016-05-20 14:05:13 +08:00
Yourtion
b2d31a8e54 MML播放器 2016-05-20 13:38:43 +08:00
Yourtion
72532c8cd7 文本阅览器 2016-05-20 12:03:41 +08:00
Yourtion
3871740126 命令行计算器 2016-05-20 11:01:41 +08:00
Yourtion
70b335278d bug fix 2016-05-20 10:54:34 +08:00
Yourtion
2c262f986d Add 30 day code 2016-05-20 10:44:09 +08:00
Yourtion
6b0457bed6 外星人游戏 2016-05-19 14:22:52 +08:00
Yourtion
0adab9385e bball 2016-05-19 14:13:37 +08:00
Yourtion
73b7421cf2 非矩形窗口 2016-05-19 14:08:59 +08:00
Yourtion
203dd63152 标准函数 2016-05-19 14:05:01 +08:00
Yourtion
9df2b90ad3 clean files 2016-05-19 13:07:37 +08:00
Yourtion
633089d320 文件压缩 2016-05-19 13:01:06 +08:00
Yourtion
41a0252634 修复bug 2016-05-19 12:27:28 +08:00
Yourtion
5a064e20c2 Add 29 day code 2016-05-19 12:27:14 +08:00
Yourtion
d925a8d992 update 2016-05-18 13:20:49 +08:00
Yourtion
7497159026 日文文字显示(3) 2016-05-18 13:19:01 +08:00
Yourtion
fcd87ee302 日文文字显示(2) 2016-05-18 12:58:00 +08:00
Yourtion
ac8b6b1411 日文文字显示(1) 2016-05-18 12:43:01 +08:00
Yourtion
86791cd7f4 命令行API 2016-05-18 11:41:34 +08:00
Yourtion
9231ce4a38 文件操作API 2016-05-18 11:31:29 +08:00
Yourtion
7b5d69c7c8 alloca(2) 2016-05-18 11:02:51 +08:00
Yourtion
1bcf500c14 bug fix 2016-05-18 10:54:21 +08:00
Yourtion
6bd4307e95 alloca(1) 2016-05-18 10:52:21 +08:00
Yourtion
c65ca780b3 Add 28 day code 2016-05-18 10:25:37 +08:00
Yourtion
f025b0083f 整理make环境 2016-05-17 13:30:27 +08:00
Yourtion
a1129763dd 2016-05-17 12:57:21 +08:00
Yourtion
d63b8acd91 优化应用程序的大小 2016-05-17 12:49:38 +08:00
Yourtion
575c4ffce8 保护应用程序(2) 2016-05-17 12:39:47 +08:00
Yourtion
f3f9a6c178 保护应用程序(1) 2016-05-17 12:30:15 +08:00
Yourtion
01bbd98aa8 应用程序运行时关闭命令行窗口 2016-05-17 12:24:03 +08:00
768 changed files with 38170 additions and 685 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
*.hrb
*.lst
*.map
*.bim
*.hrb

View File

@@ -12,15 +12,15 @@
DW 224 ; 根目录大小一般为224项 DW 224 ; 根目录大小一般为224项
DW 2880 ; 该磁盘大小必须为2880扇区1440*1024/512 DW 2880 ; 该磁盘大小必须为2880扇区1440*1024/512
DB 0xf0 ; 磁盘类型必须为0xf0 DB 0xf0 ; 磁盘类型必须为0xf0
DW 9 ; FAT的长度??9扇区 DW 9 ; FAT的长度须是9扇区
DW 18 ; 一个磁道track有几个扇区必须为18 DW 18 ; 一个磁道track有几个扇区必须为18
DW 2 ; 磁头数(必??2 DW 2 ; 磁头数(必须是2
DD 0 ; 不使用分区必须是0 DD 0 ; 不使用分区必须是0
DD 2880 ; 重写一次磁盘大小 DD 2880 ; 重写一次磁盘大小
DB 0,0,0x29 ; 意义不明(固定) DB 0,0,0x29 ; 意义不明(固定)
DD 0xffffffff ; (可能是)卷标号码 DD 0xffffffff ; (可能是)卷标号码
DB "HELLO-OS " ; 磁盘的名称必须为11字?,不足填空格) DB "HELLO-OS " ; 磁盘的名称必须为11字,不足填空格)
DB "FAT12 " ; 磁盘格式名称(必??8字?,不足填空格) DB "FAT12 " ; 磁盘格式名称(必须是8字,不足填空格)
RESB 18 ; 先空出18字节 RESB 18 ; 先空出18字节
; 程序主体 ; 程序主体
@@ -47,4 +47,4 @@
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600 RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432 RESB 1469432

View File

@@ -6,7 +6,7 @@
; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code ; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code
JMP entry JMP entry
DB 0xeb, 0x4e, 0x90 DB 0x90
DB "HELLOIPL" ; 启动扇区名称8字节 DB "HELLOIPL" ; 启动扇区名称8字节
DW 512 ; 每个扇区sector大小必须512字节 DW 512 ; 每个扇区sector大小必须512字节
DB 1 ; 簇cluster大小必须为1个扇区 DB 1 ; 簇cluster大小必须为1个扇区

View File

@@ -53,7 +53,7 @@ retry:
MOV BX,0 MOV BX,0
MOV DL,0x00 ; A驱动器 MOV DL,0x00 ; A驱动器
INT 0x13 ; 调用磁盘BIOS INT 0x13 ; 调用磁盘BIOS
JNC next ; 没出错则跳转到fin JNC next ; 没出错则跳转到next
ADD SI,1 ; 往SI加1 ADD SI,1 ; 往SI加1
CMP SI,5 ; 比较SI与5 CMP SI,5 ; 比较SI与5
JAE error ; SI >= 5 跳转到error JAE error ; SI >= 5 跳转到error

View File

@@ -15,7 +15,7 @@ VRAM EQU 0x0ff8 ; 图像缓冲区的起始地址
ORG 0xc200 ; 这个的程序要被装载的内存地址 ORG 0xc200 ; 这个的程序要被装载的内存地址
; 画面モードを設定 ; 设置画面模式
MOV AL,0x13 ; VGA显卡320x200x8bit MOV AL,0x13 ; VGA显卡320x200x8bit
MOV AH,0x00 MOV AH,0x00

View File

@@ -1,232 +1,142 @@
OBJS_BOOTPACK = bootpack.obj naskfunc.obj hankaku.obj graphic.obj dsctbl.obj \
int.obj fifo.obj keyboard.obj mouse.obj memory.obj sheet.obj timer.obj \
mtask.obj window.obj console.obj file.obj
TOOLPATH = ../z_tools/ TOOLPATH = ../z_tools/
INCPATH = ../z_tools/haribote/ INCPATH = ../z_tools/haribote/
MAKE = $(TOOLPATH)make.exe -r 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
MAKEFONT = $(TOOLPATH)makefont.exe
BIN2OBJ = $(TOOLPATH)bin2obj.exe
BIM2HRB = $(TOOLPATH)bim2hrb.exe
RULEFILE = $(TOOLPATH)haribote/haribote.rul
EDIMG = $(TOOLPATH)edimg.exe EDIMG = $(TOOLPATH)edimg.exe
IMGTOL = $(TOOLPATH)imgtol.com IMGTOL = $(TOOLPATH)imgtol.com
COPY = copy COPY = copy
DEL = del DEL = del
# 默认动作 #默认动作
default : default :
$(MAKE) img
# 镜像文件生成
ipl10.bin : ipl10.nas Makefile
$(NASK) ipl10.nas ipl10.bin ipl10.lst
asmhead.bin : asmhead.nas Makefile
$(NASK) asmhead.nas asmhead.bin asmhead.lst
hankaku.bin : hankaku.txt Makefile
$(MAKEFONT) hankaku.txt hankaku.bin
hankaku.obj : hankaku.bin Makefile
$(BIN2OBJ) hankaku.bin hankaku.obj _hankaku
bootpack.bim : $(OBJS_BOOTPACK) Makefile
$(OBJ2BIM) @$(RULEFILE) out:bootpack.bim stack:3136k map:bootpack.map \
$(OBJS_BOOTPACK)
# 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
hello.hrb : hello.nas Makefile
$(NASK) hello.nas hello.hrb hello.lst
hello2.hrb : hello2.nas Makefile
$(NASK) hello2.nas hello2.hrb hello2.lst
a.bim : a.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:a.bim map:a.map a.obj a_nask.obj
a.hrb : a.bim Makefile
$(BIM2HRB) a.bim a.hrb 0
hello3.bim : hello3.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:hello3.bim map:hello3.map hello3.obj a_nask.obj
hello3.hrb : hello3.bim Makefile
$(BIM2HRB) hello3.bim hello3.hrb 0
hello4.bim : hello4.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:hello4.bim stack:1k map:hello4.map \
hello4.obj a_nask.obj
hello4.hrb : hello4.bim Makefile
$(BIM2HRB) hello4.bim hello4.hrb 0
hello5.bim : hello5.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:hello5.bim stack:1k map:hello5.map hello5.obj
hello5.hrb : hello5.bim Makefile
$(BIM2HRB) hello5.bim hello5.hrb 0
winhelo.bim : winhelo.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:winhelo.bim stack:1k map:winhelo.map \
winhelo.obj a_nask.obj
winhelo.hrb : winhelo.bim Makefile
$(BIM2HRB) winhelo.bim winhelo.hrb 0
winhelo2.bim : winhelo2.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:winhelo2.bim stack:1k map:winhelo2.map \
winhelo2.obj a_nask.obj
winhelo2.hrb : winhelo2.bim Makefile
$(BIM2HRB) winhelo2.bim winhelo2.hrb 0
winhelo3.bim : winhelo3.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:winhelo3.bim stack:1k map:winhelo3.map \
winhelo3.obj a_nask.obj
winhelo3.hrb : winhelo3.bim Makefile
$(BIM2HRB) winhelo3.bim winhelo3.hrb 40k
star1.bim : star1.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:star1.bim stack:1k map:star1.map \
star1.obj a_nask.obj
star1.hrb : star1.bim Makefile
$(BIM2HRB) star1.bim star1.hrb 47k
stars.bim : stars.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:stars.bim stack:1k map:stars.map \
stars.obj a_nask.obj
stars.hrb : stars.bim Makefile
$(BIM2HRB) stars.bim stars.hrb 47k
stars2.bim : stars2.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:stars2.bim stack:1k map:stars2.map \
stars2.obj a_nask.obj
stars2.hrb : stars2.bim Makefile
$(BIM2HRB) stars2.bim stars2.hrb 47k
lines.bim : lines.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:lines.bim stack:1k map:lines.map \
lines.obj a_nask.obj
lines.hrb : lines.bim Makefile
$(BIM2HRB) lines.bim lines.hrb 48k
walk.bim : walk.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:walk.bim stack:1k map:walk.map \
walk.obj a_nask.obj
walk.hrb : walk.bim Makefile
$(BIM2HRB) walk.bim walk.hrb 48k
noodle.bim : noodle.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:noodle.bim stack:1k map:noodle.map \
noodle.obj a_nask.obj
noodle.hrb : noodle.bim Makefile
$(BIM2HRB) noodle.bim noodle.hrb 40k
beepdown.bim : beepdown.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:beepdown.bim stack:1k map:beepdown.map \
beepdown.obj a_nask.obj
beepdown.hrb : beepdown.bim Makefile
$(BIM2HRB) beepdown.bim beepdown.hrb 40k
color.bim : color.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:color.bim stack:1k map:color.map \
color.obj a_nask.obj
color.hrb : color.bim Makefile
$(BIM2HRB) color.bim color.hrb 56k
color2.bim : color2.obj a_nask.obj Makefile
$(OBJ2BIM) @$(RULEFILE) out:color2.bim stack:1k map:color2.map \
color2.obj a_nask.obj
color2.hrb : color2.bim Makefile
$(BIM2HRB) color2.bim color2.hrb 56k
haribote.img : ipl10.bin haribote.sys Makefile \
hello.hrb hello2.hrb a.hrb hello3.hrb hello4.hrb hello5.hrb \
winhelo.hrb winhelo2.hrb winhelo3.hrb star1.hrb stars.hrb stars2.hrb \
lines.hrb walk.hrb noodle.hrb beepdown.hrb color.hrb color2.hrb
$(EDIMG) imgin:../z_tools/fdimg0at.tek \
wbinimg src:ipl10.bin len:512 from:0 to:0 \
copy from:haribote.sys to:@: \
copy from:ipl10.nas to:@: \
copy from:make.bat to:@: \
copy from:hello.hrb to:@: \
copy from:hello2.hrb to:@: \
copy from:a.hrb to:@: \
copy from:hello3.hrb to:@: \
copy from:hello4.hrb to:@: \
copy from:hello5.hrb to:@: \
copy from:winhelo.hrb to:@: \
copy from:winhelo2.hrb to:@: \
copy from:winhelo3.hrb to:@: \
copy from:star1.hrb to:@: \
copy from:stars.hrb to:@: \
copy from:stars2.hrb to:@: \
copy from:lines.hrb to:@: \
copy from:walk.hrb to:@: \
copy from:noodle.hrb to:@: \
copy from:beepdown.hrb to:@: \
copy from:color.hrb to:@: \
copy from:color2.hrb to:@: \
imgout:haribote.img
# 其他指令
%.gas : %.c bootpack.h Makefile
$(CC1) -o $*.gas $*.c
%.nas : %.gas Makefile
$(GAS2NASK) $*.gas $*.nas
%.obj : %.nas Makefile
$(NASK) $*.nas $*.obj $*.lst
# 运行程序
img :
$(MAKE) haribote.img $(MAKE) haribote.img
#文件生成规则
haribote.img : haribote/ipl10.bin haribote/haribote.sys Makefile \
a/a.hrb hello3/hello3.hrb hello4/hello4.hrb hello5/hello5.hrb \
winhelo/winhelo.hrb winhelo2/winhelo2.hrb winhelo3/winhelo3.hrb \
star1/star1.hrb stars/stars.hrb stars2/stars2.hrb \
lines/lines.hrb walk/walk.hrb noodle/noodle.hrb \
beepdown/beepdown.hrb color/color.hrb color2/color2.hrb
$(EDIMG) imgin:../z_tools/fdimg0at.tek \
wbinimg src:haribote/ipl10.bin len:512 from:0 to:0 \
copy from:haribote/haribote.sys to:@: \
copy from:haribote/ipl10.nas to:@: \
copy from:make.bat to:@: \
copy from:a/a.hrb to:@: \
copy from:hello3/hello3.hrb to:@: \
copy from:hello4/hello4.hrb to:@: \
copy from:hello5/hello5.hrb to:@: \
copy from:winhelo/winhelo.hrb to:@: \
copy from:winhelo2/winhelo2.hrb to:@: \
copy from:winhelo3/winhelo3.hrb to:@: \
copy from:star1/star1.hrb to:@: \
copy from:stars/stars.hrb to:@: \
copy from:stars2/stars2.hrb to:@: \
copy from:lines/lines.hrb to:@: \
copy from:walk/walk.hrb to:@: \
copy from:noodle/noodle.hrb to:@: \
copy from:beepdown/beepdown.hrb to:@: \
copy from:color/color.hrb to:@: \
copy from:color2/color2.hrb to:@: \
imgout:haribote.img
#命令
run : run :
$(MAKE) img $(MAKE) haribote.img
$(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin $(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin
$(MAKE) -C ../z_tools/qemu $(MAKE) -C ../z_tools/qemu
install : install :
$(MAKE) img $(MAKE) haribote.img
$(IMGTOL) w a: haribote.img $(IMGTOL) w a: haribote.img
full :
$(MAKE) -C haribote
$(MAKE) -C apilib
$(MAKE) -C a
$(MAKE) -C hello3
$(MAKE) -C hello4
$(MAKE) -C hello5
$(MAKE) -C winhelo
$(MAKE) -C winhelo2
$(MAKE) -C winhelo3
$(MAKE) -C star1
$(MAKE) -C stars
$(MAKE) -C stars2
$(MAKE) -C lines
$(MAKE) -C walk
$(MAKE) -C noodle
$(MAKE) -C beepdown
$(MAKE) -C color
$(MAKE) -C color2
$(MAKE) haribote.img
run_full :
$(MAKE) full
$(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin
$(MAKE) -C ../z_tools/qemu
install_full :
$(MAKE) full
$(IMGTOL) w a: haribote.img
run_os :
$(MAKE) -C haribote
$(MAKE) run
clean : clean :
-$(DEL) *.bin #不执行任何操作
-$(DEL) *.lst
-$(DEL) *.obj
-$(DEL) bootpack.map
-$(DEL) bootpack.bim
-$(DEL) bootpack.hrb
-$(DEL) haribote.sys
src_only : src_only :
$(MAKE) clean $(MAKE) clean
-$(DEL) haribote.img -$(DEL) haribote.img
clean_full :
$(MAKE) -C haribote clean
$(MAKE) -C apilib clean
$(MAKE) -C a clean
$(MAKE) -C hello3 clean
$(MAKE) -C hello4 clean
$(MAKE) -C hello5 clean
$(MAKE) -C winhelo clean
$(MAKE) -C winhelo2 clean
$(MAKE) -C winhelo3 clean
$(MAKE) -C star1 clean
$(MAKE) -C stars clean
$(MAKE) -C stars2 clean
$(MAKE) -C lines clean
$(MAKE) -C walk clean
$(MAKE) -C noodle clean
$(MAKE) -C beepdown clean
$(MAKE) -C color clean
$(MAKE) -C color2 clean
src_only_full :
$(MAKE) -C haribote src_only
$(MAKE) -C apilib src_only
$(MAKE) -C a src_only
$(MAKE) -C hello3 src_only
$(MAKE) -C hello4 src_only
$(MAKE) -C hello5 src_only
$(MAKE) -C winhelo src_only
$(MAKE) -C winhelo2 src_only
$(MAKE) -C winhelo3 src_only
$(MAKE) -C star1 src_only
$(MAKE) -C stars src_only
$(MAKE) -C stars2 src_only
$(MAKE) -C lines src_only
$(MAKE) -C walk src_only
$(MAKE) -C noodle src_only
$(MAKE) -C beepdown src_only
$(MAKE) -C color src_only
$(MAKE) -C color2 src_only
-$(DEL) haribote.img
refresh :
$(MAKE) full
$(MAKE) clean_full
-$(DEL) haribote.img

1
27_day/a/!cons_9x.bat Normal file
View File

@@ -0,0 +1 @@
command

1
27_day/a/!cons_nt.bat Normal file
View File

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

5
27_day/a/Makefile Normal file
View File

@@ -0,0 +1,5 @@
APP = a
STACK = 1k
MALLOC = 0k
include ../app_make.txt

View File

@@ -1,5 +1,4 @@
void api_putchar(int c); #include "apilib.h"
void api_end(void);
void HariMain(void) void HariMain(void)
{ {

1
27_day/a/make.bat Normal file
View File

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

View File

@@ -1,230 +0,0 @@
[FORMAT "WCOFF"] ; 生成对象文件的模式
[INSTRSET "i486p"] ; 表示使用486兼容指令集
[BITS 32] ; 生成32位模式机器语言
[FILE "a_nask.nas"] ; 源文件名信息
GLOBAL _api_putchar
GLOBAL _api_putstr0
GLOBAL _api_end
GLOBAL _api_openwin
GLOBAL _api_putstrwin
GLOBAL _api_boxfilwin
GLOBAL _api_initmalloc
GLOBAL _api_malloc
GLOBAL _api_free
GLOBAL _api_point
GLOBAL _api_refreshwin
GLOBAL _api_linewin
GLOBAL _api_closewin
GLOBAL _api_getkey
GLOBAL _api_alloctimer
GLOBAL _api_inittimer
GLOBAL _api_settimer
GLOBAL _api_freetimer
GLOBAL _api_beep
[SECTION .text]
_api_putchar: ; void api_putchar(int c);
MOV EDX,1
MOV AL,[ESP+4] ; c
INT 0x40
RET
_api_putstr0: ; void api_putstr0(char *s);
PUSH EBX
MOV EDX,2
MOV EBX,[ESP+8] ; s
INT 0x40
POP EBX
RET
_api_end: ; void api_end(void);
MOV EDX,4
INT 0x40
_api_openwin: ; int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char *title);
PUSH EDI
PUSH ESI
PUSH EBX
MOV EDX,5
MOV EBX,[ESP+16] ; buf
MOV ESI,[ESP+20] ; xsiz
MOV EDI,[ESP+24] ; ysiz
MOV EAX,[ESP+28] ; col_inv
MOV ECX,[ESP+32] ; title
INT 0x40
POP EBX
POP ESI
POP EDI
RET
_api_putstrwin: ; void api_putstrwin(int win, int x, int y, int col, int len, char *str);
PUSH EDI
PUSH ESI
PUSH EBP
PUSH EBX
MOV EDX,6
MOV EBX,[ESP+20] ; win
MOV ESI,[ESP+24] ; x
MOV EDI,[ESP+28] ; y
MOV EAX,[ESP+32] ; col
MOV ECX,[ESP+36] ; len
MOV EBP,[ESP+40] ; str
INT 0x40
POP EBX
POP EBP
POP ESI
POP EDI
RET
_api_boxfilwin: ; void api_boxfilwin(int win, int x0, int y0, int x1, int y1, int col);
PUSH EDI
PUSH ESI
PUSH EBP
PUSH EBX
MOV EDX,7
MOV EBX,[ESP+20] ; win
MOV EAX,[ESP+24] ; x0
MOV ECX,[ESP+28] ; y0
MOV ESI,[ESP+32] ; x1
MOV EDI,[ESP+36] ; y1
MOV EBP,[ESP+40] ; col
INT 0x40
POP EBX
POP EBP
POP ESI
POP EDI
RET
_api_initmalloc: ; void api_initmalloc(void);
PUSH EBX
MOV EDX,8
MOV EBX,[CS:0x0020] ; malloc内存空间的地址
MOV EAX,EBX
ADD EAX,32*1024 ; 加上32KB
MOV ECX,[CS:0x0000] ; 数据段的大小
SUB ECX,EAX
INT 0x40
POP EBX
RET
_api_malloc: ; char *api_malloc(int size);
PUSH EBX
MOV EDX,9
MOV EBX,[CS:0x0020]
MOV ECX,[ESP+8] ; size
INT 0x40
POP EBX
RET
_api_free: ; void api_free(char *addr, int size);
PUSH EBX
MOV EDX,10
MOV EBX,[CS:0x0020]
MOV EAX,[ESP+ 8] ; addr
MOV ECX,[ESP+12] ; size
INT 0x40
POP EBX
RET
_api_point: ; void api_point(int win, int x, int y, int col);
PUSH EDI
PUSH ESI
PUSH EBX
MOV EDX,11
MOV EBX,[ESP+16] ; win
MOV ESI,[ESP+20] ; x
MOV EDI,[ESP+24] ; y
MOV EAX,[ESP+28] ; col
INT 0x40
POP EBX
POP ESI
POP EDI
RET
_api_refreshwin: ; void api_refreshwin(int win, int x0, int y0, int x1, int y1);
PUSH EDI
PUSH ESI
PUSH EBX
MOV EDX,12
MOV EBX,[ESP+16] ; win
MOV EAX,[ESP+20] ; x0
MOV ECX,[ESP+24] ; y0
MOV ESI,[ESP+28] ; x1
MOV EDI,[ESP+32] ; y1
INT 0x40
POP EBX
POP ESI
POP EDI
RET
_api_linewin: ; void api_linewin(int win, int x0, int y0, int x1, int y1, int col);
PUSH EDI
PUSH ESI
PUSH EBP
PUSH EBX
MOV EDX,13
MOV EBX,[ESP+20] ; win
MOV EAX,[ESP+24] ; x0
MOV ECX,[ESP+28] ; y0
MOV ESI,[ESP+32] ; x1
MOV EDI,[ESP+36] ; y1
MOV EBP,[ESP+40] ; col
INT 0x40
POP EBX
POP EBP
POP ESI
POP EDI
RET
_api_closewin: ; void api_closewin(int win);
PUSH EBX
MOV EDX,14
MOV EBX,[ESP+8] ; win
INT 0x40
POP EBX
RET
_api_getkey: ; int api_getkey(int mode);
MOV EDX,15
MOV EAX,[ESP+4] ; mode
INT 0x40
RET
_api_alloctimer: ; int api_alloctimer(void);
MOV EDX,16
INT 0x40
RET
_api_inittimer: ; void api_inittimer(int timer, int data);
PUSH EBX
MOV EDX,17
MOV EBX,[ESP+ 8] ; timer
MOV EAX,[ESP+12] ; data
INT 0x40
POP EBX
RET
_api_settimer: ; void api_settimer(int timer, int time);
PUSH EBX
MOV EDX,18
MOV EBX,[ESP+ 8] ; timer
MOV EAX,[ESP+12] ; time
INT 0x40
POP EBX
RET
_api_freetimer: ; void api_freetimer(int timer);
PUSH EBX
MOV EDX,19
MOV EBX,[ESP+ 8] ; timer
INT 0x40
POP EBX
RET
_api_beep: ; void api_beep(int tone);
MOV EDX,20
MOV EAX,[ESP+4] ; tone
INT 0x40
RET

20
27_day/apilib.h Normal file
View File

@@ -0,0 +1,20 @@
void api_putchar(int c);
void api_putstr0(char *s);
void api_putstr1(char *s, int l);
void api_end(void);
int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char *title);
void api_putstrwin(int win, int x, int y, int col, int len, char *str);
void api_boxfilwin(int win, int x0, int y0, int x1, int y1, int col);
void api_initmalloc(void);
char *api_malloc(int size);
void api_free(char *addr, int size);
void api_point(int win, int x, int y, int col);
void api_refreshwin(int win, int x0, int y0, int x1, int y1);
void api_linewin(int win, int x0, int y0, int x1, int y1, int col);
void api_closewin(int win);
int api_getkey(int mode);
int api_alloctimer(void);
void api_inittimer(int timer, int data);
void api_settimer(int timer, int time);
void api_freetimer(int timer);
void api_beep(int tone);

View File

@@ -0,0 +1 @@
command

View File

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

47
27_day/apilib/Makefile Normal file
View File

@@ -0,0 +1,47 @@
OBJS_API = api001.obj api002.obj api003.obj api004.obj api005.obj api006.obj \
api007.obj api008.obj api009.obj api010.obj api011.obj api012.obj \
api013.obj api014.obj api015.obj api016.obj api017.obj api018.obj \
api019.obj api020.obj
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
MAKEFONT = $(TOOLPATH)makefont.exe
BIN2OBJ = $(TOOLPATH)bin2obj.exe
BIM2HRB = $(TOOLPATH)bim2hrb.exe
RULEFILE = ../haribote.rul
EDIMG = $(TOOLPATH)edimg.exe
IMGTOL = $(TOOLPATH)imgtol.com
GOLIB = $(TOOLPATH)golib00.exe
COPY = copy
DEL = del
#默认动作
default :
$(MAKE) apilib.lib
#库生成规则
apilib.lib : Makefile $(OBJS_API)
$(GOLIB) $(OBJS_API) out:apilib.lib
#文件生成规则
%.obj : %.nas Makefile
$(NASK) $*.nas $*.obj $*.lst
#命令
clean :
-$(DEL) *.lst
-$(DEL) *.obj
src_only :
$(MAKE) clean
-$(DEL) apilib.lib

14
27_day/apilib/api001.nas Normal file
View File

@@ -0,0 +1,14 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api001.nas"]
GLOBAL _api_putchar
[SECTION .text]
_api_putchar: ; void api_putchar(int c);
MOV EDX,1
MOV AL,[ESP+4] ; c
INT 0x40
RET

16
27_day/apilib/api002.nas Normal file
View File

@@ -0,0 +1,16 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api002.nas"]
GLOBAL _api_putstr0
[SECTION .text]
_api_putstr0: ; void api_putstr0(char *s);
PUSH EBX
MOV EDX,2
MOV EBX,[ESP+8] ; s
INT 0x40
POP EBX
RET

17
27_day/apilib/api003.nas Normal file
View File

@@ -0,0 +1,17 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api003.nas"]
GLOBAL _api_putstr1
[SECTION .text]
_api_putstr1: ; void api_putstr1(char *s, int l);
PUSH EBX
MOV EDX,3
MOV EBX,[ESP+ 8] ; s
MOV ECX,[ESP+12] ; l
INT 0x40
POP EBX
RET

12
27_day/apilib/api004.nas Normal file
View File

@@ -0,0 +1,12 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api004.nas"]
GLOBAL _api_end
[SECTION .text]
_api_end: ; void api_end(void);
MOV EDX,4
INT 0x40

24
27_day/apilib/api005.nas Normal file
View File

@@ -0,0 +1,24 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api005.nas"]
GLOBAL _api_openwin
[SECTION .text]
_api_openwin: ; int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char *title);
PUSH EDI
PUSH ESI
PUSH EBX
MOV EDX,5
MOV EBX,[ESP+16] ; buf
MOV ESI,[ESP+20] ; xsiz
MOV EDI,[ESP+24] ; ysiz
MOV EAX,[ESP+28] ; col_inv
MOV ECX,[ESP+32] ; title
INT 0x40
POP EBX
POP ESI
POP EDI
RET

27
27_day/apilib/api006.nas Normal file
View File

@@ -0,0 +1,27 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api006.nas"]
GLOBAL _api_putstrwin
[SECTION .text]
_api_putstrwin: ; void api_putstrwin(int win, int x, int y, int col, int len, char *str);
PUSH EDI
PUSH ESI
PUSH EBP
PUSH EBX
MOV EDX,6
MOV EBX,[ESP+20] ; win
MOV ESI,[ESP+24] ; x
MOV EDI,[ESP+28] ; y
MOV EAX,[ESP+32] ; col
MOV ECX,[ESP+36] ; len
MOV EBP,[ESP+40] ; str
INT 0x40
POP EBX
POP EBP
POP ESI
POP EDI
RET

27
27_day/apilib/api007.nas Normal file
View File

@@ -0,0 +1,27 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api007.nas"]
GLOBAL _api_boxfilwin
[SECTION .text]
_api_boxfilwin: ; void api_boxfilwin(int win, int x0, int y0, int x1, int y1, int col);
PUSH EDI
PUSH ESI
PUSH EBP
PUSH EBX
MOV EDX,7
MOV EBX,[ESP+20] ; win
MOV EAX,[ESP+24] ; x0
MOV ECX,[ESP+28] ; y0
MOV ESI,[ESP+32] ; x1
MOV EDI,[ESP+36] ; y1
MOV EBP,[ESP+40] ; col
INT 0x40
POP EBX
POP EBP
POP ESI
POP EDI
RET

20
27_day/apilib/api008.nas Normal file
View File

@@ -0,0 +1,20 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api008.nas"]
GLOBAL _api_initmalloc
[SECTION .text]
_api_initmalloc: ; void api_initmalloc(void);
PUSH EBX
MOV EDX,8
MOV EBX,[CS:0x0020] ; malloc内存空间的地址
MOV EAX,EBX
ADD EAX,32*1024 ; 加上32KB
MOV ECX,[CS:0x0000] ; 数据段的大小
SUB ECX,EAX
INT 0x40
POP EBX
RET

17
27_day/apilib/api009.nas Normal file
View File

@@ -0,0 +1,17 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api009.nas"]
GLOBAL _api_malloc
[SECTION .text]
_api_malloc: ; char *api_malloc(int size);
PUSH EBX
MOV EDX,9
MOV EBX,[CS:0x0020]
MOV ECX,[ESP+8] ; size
INT 0x40
POP EBX
RET

18
27_day/apilib/api010.nas Normal file
View File

@@ -0,0 +1,18 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api010.nas"]
GLOBAL _api_free
[SECTION .text]
_api_free: ; void api_free(char *addr, int size);
PUSH EBX
MOV EDX,10
MOV EBX,[CS:0x0020]
MOV EAX,[ESP+ 8] ; addr
MOV ECX,[ESP+12] ; size
INT 0x40
POP EBX
RET

23
27_day/apilib/api011.nas Normal file
View File

@@ -0,0 +1,23 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api011.nas"]
GLOBAL _api_point
[SECTION .text]
_api_point: ; void api_point(int win, int x, int y, int col);
PUSH EDI
PUSH ESI
PUSH EBX
MOV EDX,11
MOV EBX,[ESP+16] ; win
MOV ESI,[ESP+20] ; x
MOV EDI,[ESP+24] ; y
MOV EAX,[ESP+28] ; col
INT 0x40
POP EBX
POP ESI
POP EDI
RET

24
27_day/apilib/api012.nas Normal file
View File

@@ -0,0 +1,24 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api012.nas"]
GLOBAL _api_refreshwin
[SECTION .text]
_api_refreshwin: ; void api_refreshwin(int win, int x0, int y0, int x1, int y1);
PUSH EDI
PUSH ESI
PUSH EBX
MOV EDX,12
MOV EBX,[ESP+16] ; win
MOV EAX,[ESP+20] ; x0
MOV ECX,[ESP+24] ; y0
MOV ESI,[ESP+28] ; x1
MOV EDI,[ESP+32] ; y1
INT 0x40
POP EBX
POP ESI
POP EDI
RET

27
27_day/apilib/api013.nas Normal file
View File

@@ -0,0 +1,27 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api013.nas"]
GLOBAL _api_linewin
[SECTION .text]
_api_linewin: ; void api_linewin(int win, int x0, int y0, int x1, int y1, int col);
PUSH EDI
PUSH ESI
PUSH EBP
PUSH EBX
MOV EDX,13
MOV EBX,[ESP+20] ; win
MOV EAX,[ESP+24] ; x0
MOV ECX,[ESP+28] ; y0
MOV ESI,[ESP+32] ; x1
MOV EDI,[ESP+36] ; y1
MOV EBP,[ESP+40] ; col
INT 0x40
POP EBX
POP EBP
POP ESI
POP EDI
RET

16
27_day/apilib/api014.nas Normal file
View File

@@ -0,0 +1,16 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api014.nas"]
GLOBAL _api_closewin
[SECTION .text]
_api_closewin: ; void api_closewin(int win);
PUSH EBX
MOV EDX,14
MOV EBX,[ESP+8] ; win
INT 0x40
POP EBX
RET

14
27_day/apilib/api015.nas Normal file
View File

@@ -0,0 +1,14 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api015.nas"]
GLOBAL _api_getkey
[SECTION .text]
_api_getkey: ; int api_getkey(int mode);
MOV EDX,15
MOV EAX,[ESP+4] ; mode
INT 0x40
RET

13
27_day/apilib/api016.nas Normal file
View File

@@ -0,0 +1,13 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api016.nas"]
GLOBAL _api_alloctimer
[SECTION .text]
_api_alloctimer: ; int api_alloctimer(void);
MOV EDX,16
INT 0x40
RET

17
27_day/apilib/api017.nas Normal file
View File

@@ -0,0 +1,17 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api017.nas"]
GLOBAL _api_inittimer
[SECTION .text]
_api_inittimer: ; void api_inittimer(int timer, int data);
PUSH EBX
MOV EDX,17
MOV EBX,[ESP+ 8] ; timer
MOV EAX,[ESP+12] ; data
INT 0x40
POP EBX
RET

17
27_day/apilib/api018.nas Normal file
View File

@@ -0,0 +1,17 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api018.nas"]
GLOBAL _api_settimer
[SECTION .text]
_api_settimer: ; void api_settimer(int timer, int time);
PUSH EBX
MOV EDX,18
MOV EBX,[ESP+ 8] ; timer
MOV EAX,[ESP+12] ; time
INT 0x40
POP EBX
RET

16
27_day/apilib/api019.nas Normal file
View File

@@ -0,0 +1,16 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api019.nas"]
GLOBAL _api_freetimer
[SECTION .text]
_api_freetimer: ; void api_freetimer(int timer);
PUSH EBX
MOV EDX,19
MOV EBX,[ESP+ 8] ; timer
INT 0x40
POP EBX
RET

14
27_day/apilib/api020.nas Normal file
View File

@@ -0,0 +1,14 @@
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[BITS 32]
[FILE "api020.nas"]
GLOBAL _api_beep
[SECTION .text]
_api_beep: ; void api_beep(int tone);
MOV EDX,20
MOV EAX,[ESP+4] ; tone
INT 0x40
RET

1
27_day/apilib/make.bat Normal file
View File

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

79
27_day/app_make.txt Normal file
View File

@@ -0,0 +1,79 @@
TOOLPATH = ../../z_tools/
INCPATH = ../../z_tools/haribote/
APILIBPATH = ../apilib/
HARIBOTEPATH = ../haribote/
MAKE = $(TOOLPATH)make.exe -r
NASK = $(TOOLPATH)nask.exe
CC1 = $(TOOLPATH)cc1.exe -I$(INCPATH) -I../ -Os -Wall -quiet
GAS2NASK = $(TOOLPATH)gas2nask.exe -a
OBJ2BIM = $(TOOLPATH)obj2bim.exe
MAKEFONT = $(TOOLPATH)makefont.exe
BIN2OBJ = $(TOOLPATH)bin2obj.exe
BIM2HRB = $(TOOLPATH)bim2hrb.exe
RULEFILE = ../haribote.rul
EDIMG = $(TOOLPATH)edimg.exe
IMGTOL = $(TOOLPATH)imgtol.com
GOLIB = $(TOOLPATH)golib00.exe
COPY = copy
DEL = del
#默认动作
default :
$(MAKE) $(APP).hrb
#文件生成规则
$(APP).bim : $(APP).obj $(APILIBPATH)apilib.lib Makefile ../app_make.txt
$(OBJ2BIM) @$(RULEFILE) out:$(APP).bim map:$(APP).map stack:$(STACK) \
$(APP).obj $(APILIBPATH)apilib.lib
$(APP).hrb : $(APP).bim Makefile ../app_make.txt
$(BIM2HRB) $(APP).bim $(APP).hrb $(MALLOC)
haribote.img : ../haribote/ipl10.bin ../haribote/haribote.sys $(APP).hrb \
Makefile ../app_make.txt
$(EDIMG) imgin:../../z_tools/fdimg0at.tek \
wbinimg src:../haribote/ipl10.bin len:512 from:0 to:0 \
copy from:../haribote/haribote.sys to:@: \
copy from:$(APP).hrb to:@: \
imgout:haribote.img
#一般规则
%.gas : %.c ../apilib.h Makefile ../app_make.txt
$(CC1) -o $*.gas $*.c
%.nas : %.gas Makefile ../app_make.txt
$(GAS2NASK) $*.gas $*.nas
%.obj : %.nas Makefile ../app_make.txt
$(NASK) $*.nas $*.obj $*.lst
#命令
run :
$(MAKE) haribote.img
$(COPY) haribote.img ..\..\z_tools\qemu\fdimage0.bin
$(MAKE) -C ../../z_tools/qemu
full :
$(MAKE) -C $(APILIBPATH)
$(MAKE) $(APP).hrb
run_full :
$(MAKE) -C $(APILIBPATH)
$(MAKE) -C ../haribote
$(MAKE) run
clean :
-$(DEL) *.lst
-$(DEL) *.obj
-$(DEL) *.map
-$(DEL) *.bim
-$(DEL) haribote.img
src_only :
$(MAKE) clean
-$(DEL) $(APP).hrb

View File

@@ -0,0 +1 @@
command

View File

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

5
27_day/beepdown/Makefile Normal file
View File

@@ -0,0 +1,5 @@
APP = beepdown
STACK = 1k
MALLOC = 40k
include ../app_make.txt

View File

@@ -1,9 +1,4 @@
void api_end(void); #include "apilib.h"
int api_getkey(int mode);
int api_alloctimer(void);
void api_inittimer(int timer, int data);
void api_settimer(int timer, int time);
void api_beep(int tone);
void HariMain(void) void HariMain(void)
{ {

1
27_day/beepdown/make.bat Normal file
View File

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

View File

@@ -0,0 +1 @@
command

View File

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

5
27_day/color/Makefile Normal file
View File

@@ -0,0 +1,5 @@
APP = color
STACK = 1k
MALLOC = 56k
include ../app_make.txt

View File

@@ -1,10 +1,4 @@
int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char *title); #include "apilib.h"
void api_initmalloc(void);
char *api_malloc(int size);
void api_refreshwin(int win, int x0, int y0, int x1, int y1);
void api_linewin(int win, int x0, int y0, int x1, int y1, int col);
int api_getkey(int mode);
void api_end(void);
void HariMain(void) void HariMain(void)
{ {

1
27_day/color/make.bat Normal file
View File

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

View File

@@ -0,0 +1 @@
command

View File

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

5
27_day/color2/Makefile Normal file
View File

@@ -0,0 +1,5 @@
APP = color2
STACK = 1k
MALLOC = 56k
include ../app_make.txt

View File

@@ -1,10 +1,4 @@
int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char *title); #include "apilib.h"
void api_initmalloc(void);
char *api_malloc(int size);
void api_refreshwin(int win, int x0, int y0, int x1, int y1);
void api_linewin(int win, int x0, int y0, int x1, int y1, int col);
int api_getkey(int mode);
void api_end(void);
unsigned char rgb2pal(int r, int g, int b, int x, int y); unsigned char rgb2pal(int r, int g, int b, int x, int y);
@@ -21,7 +15,7 @@ void HariMain(void)
} }
} }
api_refreshwin(win, 8, 28, 136, 156); api_refreshwin(win, 8, 28, 136, 156);
api_getkey(1); /*等待按下任意键*/ api_getkey(1); /* <20>Ă<EFBFBD><C482>Ƃ<EFBFBD><C682>ȃL<C883>[<5B><><EFBFBD>͂<EFBFBD>҂<EFBFBD> */
api_end(); api_end();
} }

1
27_day/color2/make.bat Normal file
View File

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

10
27_day/haribote.rul Normal file
View File

@@ -0,0 +1,10 @@
format:
code(align:1, logic:0x24, file:0x24);
data(align:4, logic:stack_end, file:code_end);
file:
../../z_tools/haribote/harilibc.lib;
../../z_tools/haribote/golibc.lib;
label:
_HariStartup;

View File

@@ -0,0 +1 @@
command

View File

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

79
27_day/haribote/Makefile Normal file
View File

@@ -0,0 +1,79 @@
OBJS_BOOTPACK = bootpack.obj naskfunc.obj hankaku.obj graphic.obj dsctbl.obj \
int.obj fifo.obj keyboard.obj mouse.obj memory.obj sheet.obj timer.obj \
mtask.obj window.obj console.obj file.obj
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
MAKEFONT = $(TOOLPATH)makefont.exe
BIN2OBJ = $(TOOLPATH)bin2obj.exe
BIM2HRB = $(TOOLPATH)bim2hrb.exe
RULEFILE = ../haribote.rul
EDIMG = $(TOOLPATH)edimg.exe
IMGTOL = $(TOOLPATH)imgtol.com
GOLIB = $(TOOLPATH)golib00.exe
COPY = copy
DEL = del
#默认动作
default :
$(MAKE) ipl10.bin
$(MAKE) haribote.sys
# 镜像文件生成
ipl10.bin : ipl10.nas Makefile
$(NASK) ipl10.nas ipl10.bin ipl10.lst
asmhead.bin : asmhead.nas Makefile
$(NASK) asmhead.nas asmhead.bin asmhead.lst
hankaku.bin : hankaku.txt Makefile
$(MAKEFONT) hankaku.txt hankaku.bin
hankaku.obj : hankaku.bin Makefile
$(BIN2OBJ) hankaku.bin hankaku.obj _hankaku
bootpack.bim : $(OBJS_BOOTPACK) Makefile
$(OBJ2BIM) @$(RULEFILE) out:bootpack.bim stack:3136k map:bootpack.map \
$(OBJS_BOOTPACK)
# 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
# 其他指令
%.gas : %.c bootpack.h Makefile
$(CC1) -o $*.gas $*.c
%.nas : %.gas Makefile
$(GAS2NASK) $*.gas $*.nas
%.obj : %.nas Makefile
$(NASK) $*.nas $*.obj $*.lst
# 运行程序
clean :
-$(DEL) asmhead.bin
-$(DEL) hankaku.bin
-$(DEL) *.lst
-$(DEL) *.obj
-$(DEL) *.map
-$(DEL) *.bim
-$(DEL) *.hrb
src_only :
$(MAKE) clean
-$(DEL) ipl10.bin
-$(DEL) haribote.sys

View File

@@ -46,7 +46,7 @@ void HariMain(void)
}; };
int key_shift = 0, key_leds = (binfo->leds >> 4) & 7, keycmd_wait = -1; int key_shift = 0, key_leds = (binfo->leds >> 4) & 7, keycmd_wait = -1;
int j, x, y, mmx = -1, mmy = -1, mmx2 = 0; int j, x, y, mmx = -1, mmy = -1, mmx2 = 0;
struct SHEET *sht = 0, *key_win; struct SHEET *sht = 0, *key_win, *sht2;
init_gdtidt(); init_gdtidt();
init_pic(); init_pic();
@@ -195,8 +195,8 @@ void HariMain(void)
io_cli(); /*强制结束处理时禁止任务切换*/ io_cli(); /*强制结束处理时禁止任务切换*/
task->tss.eax = (int) &(task->tss.esp0); task->tss.eax = (int) &(task->tss.esp0);
task->tss.eip = (int) asm_end_app; task->tss.eip = (int) asm_end_app;
task_run(task, -1, 0); /*为了确实执行结束处理,如果处于休眠状态则唤醒*/
io_sti(); io_sti();
task_run(task, -1, 0); /*为了确实执行结束处理,如果处于休眠状态则唤醒*/
} }
} }
if (i == 256 + 0x3c && key_shift != 0) { /* Shift+F2 */ if (i == 256 + 0x3c && key_shift != 0) { /* Shift+F2 */
@@ -267,10 +267,14 @@ void HariMain(void)
io_cli(); /*强制结束处理时禁止任务切换*/ io_cli(); /*强制结束处理时禁止任务切换*/
task->tss.eax = (int) &(task->tss.esp0); task->tss.eax = (int) &(task->tss.esp0);
task->tss.eip = (int) asm_end_app; task->tss.eip = (int) asm_end_app;
task_run(task, -1, 0);
io_sti(); io_sti();
task_run(task, -1, 0);
} else { /*命令行窗口*/ } else { /*命令行窗口*/
task = sht->task; task = sht->task;
sheet_updown(sht, -1); /*暂且隐藏该图层*/
keywin_off(key_win);
key_win = shtctl->sheets[shtctl->top - 1];
keywin_on(key_win);
io_cli(); io_cli();
fifo32_put(&task->fifo, 4); fifo32_put(&task->fifo, 4);
io_sti(); io_sti();
@@ -301,6 +305,10 @@ void HariMain(void)
close_console(shtctl->sheets0 + (i - 768)); close_console(shtctl->sheets0 + (i - 768));
} else if (1024 <= i && i <= 2023) { } else if (1024 <= i && i <= 2023) {
close_constask(taskctl->tasks0 + (i - 1024)); close_constask(taskctl->tasks0 + (i - 1024));
} else if (2024 <= i && i <= 2279) { /*只关闭命令行窗口*/
sht2 = shtctl->sheets0 + (i - 2024);
memman_free_4k(memman, (int) sht2->buf, 256 * 165);
sheet_free(sht2);
} }
} }
} }

View File

@@ -88,15 +88,16 @@ struct GATE_DESCRIPTOR {
void init_gdtidt(void); void init_gdtidt(void);
void set_segmdesc(struct SEGMENT_DESCRIPTOR *sd, unsigned int limit, int base, int ar); void set_segmdesc(struct SEGMENT_DESCRIPTOR *sd, unsigned int limit, int base, int ar);
void set_gatedesc(struct GATE_DESCRIPTOR *gd, int offset, int selector, int ar); void set_gatedesc(struct GATE_DESCRIPTOR *gd, int offset, int selector, int ar);
#define ADR_IDT 0x0026f800 #define ADR_IDT 0x0026f800
#define LIMIT_IDT 0x000007ff #define LIMIT_IDT 0x000007ff
#define ADR_GDT 0x00270000 #define ADR_GDT 0x00270000
#define LIMIT_GDT 0x0000ffff #define LIMIT_GDT 0x0000ffff
#define ADR_BOTPAK 0x00280000 #define ADR_BOTPAK 0x00280000
#define LIMIT_BOTPAK 0x0007ffff #define LIMIT_BOTPAK 0x0007ffff
#define AR_DATA32_RW 0x4092 #define AR_DATA32_RW 0x4092
#define AR_CODE32_ER 0x409a #define AR_CODE32_ER 0x409a
#define AR_TSS32 0x0089 #define AR_LDT 0x0082
#define AR_TSS32 0x0089
#define AR_INTGATE32 0x008e #define AR_INTGATE32 0x008e
/* int.c */ /* int.c */
@@ -210,6 +211,7 @@ struct TASK {
int level, priority; /* 优先级 */ int level, priority; /* 优先级 */
struct FIFO32 fifo; struct FIFO32 fifo;
struct TSS32 tss; struct TSS32 tss;
struct SEGMENT_DESCRIPTOR ldt[2];
struct CONSOLE *cons; struct CONSOLE *cons;
int ds_base, cons_stack; int ds_base, cons_stack;
}; };

View File

@@ -17,7 +17,7 @@ void console_task(struct SHEET *sheet, int memtotal)
cons.cur_c = -1; cons.cur_c = -1;
task->cons = &cons; task->cons = &cons;
if (sheet != 0) { if (cons.sht != 0) {
cons.timer = timer_alloc(); cons.timer = timer_alloc();
timer_init(cons.timer, &task->fifo, 1); timer_init(cons.timer, &task->fifo, 1);
timer_settime(cons.timer, 50); timer_settime(cons.timer, 50);
@@ -35,7 +35,7 @@ void console_task(struct SHEET *sheet, int memtotal)
} else { } else {
i = fifo32_get(&task->fifo); i = fifo32_get(&task->fifo);
io_sti(); io_sti();
if (i <= 1) { /*光标用定时器*/ if (i <= 1 && cons.sht != 0) { /*光标用定时器*/
if (i != 0) { if (i != 0) {
timer_init(cons.timer, &task->fifo, 0); /*下次置0 */ timer_init(cons.timer, &task->fifo, 0); /*下次置0 */
if (cons.cur_c >= 0) { if (cons.cur_c >= 0) {
@@ -53,7 +53,10 @@ void console_task(struct SHEET *sheet, int memtotal)
cons.cur_c = COL8_FFFFFF; cons.cur_c = COL8_FFFFFF;
} }
if (i == 3) { /*光标OFF */ if (i == 3) { /*光标OFF */
boxfill8(sheet->buf, sheet->bxsize, COL8_000000, cons.cur_x, cons.cur_y, cons.cur_x + 7, cons.cur_y + 15); if (cons.sht != 0) {
boxfill8(cons.sht->buf, cons.sht->bxsize, COL8_000000,
cons.cur_x, cons.cur_y, cons.cur_x + 7, cons.cur_y + 15);
}
cons.cur_c = -1; cons.cur_c = -1;
} }
if (i == 4) { /*点击命令行窗口的“×”按钮*/ if (i == 4) { /*点击命令行窗口的“×”按钮*/
@@ -74,7 +77,7 @@ void console_task(struct SHEET *sheet, int memtotal)
cmdline[cons.cur_x / 8 - 2] = 0; cmdline[cons.cur_x / 8 - 2] = 0;
cons_newline(&cons); cons_newline(&cons);
cons_runcmd(cmdline, &cons, fat, memtotal); /*运行命令*/ cons_runcmd(cmdline, &cons, fat, memtotal); /*运行命令*/
if (sheet == 0) { if (cons.sht == 0) {
cmd_exit(&cons, fat); cmd_exit(&cons, fat);
} }
/*显示提示符*/ /*显示提示符*/
@@ -89,11 +92,12 @@ void console_task(struct SHEET *sheet, int memtotal)
} }
} }
/*重新显示光标*/ /*重新显示光标*/
if (sheet != 0) { if (cons.sht != 0) {
if (cons.cur_c >= 0) { if (cons.cur_c >= 0) {
boxfill8(sheet->buf, sheet->bxsize, cons.cur_c, cons.cur_x, cons.cur_y, cons.cur_x + 7, cons.cur_y + 15); boxfill8(cons.sht->buf, cons.sht->bxsize, cons.cur_c,
cons.cur_x, cons.cur_y, cons.cur_x + 7, cons.cur_y + 15);
} }
sheet_refresh(sheet, cons.cur_x, cons.cur_y, cons.cur_x + 8, cons.cur_y + 16); sheet_refresh(cons.sht, cons.cur_x, cons.cur_y, cons.cur_x + 8, cons.cur_y + 16);
} }
} }
} }
@@ -108,8 +112,8 @@ void cons_putchar(struct CONSOLE *cons, int chr, char move)
for (;;) { for (;;) {
if (cons->sht != 0) { if (cons->sht != 0) {
putfonts8_asc_sht(cons->sht, cons->cur_x, cons->cur_y, COL8_FFFFFF, COL8_000000, " ", 1); putfonts8_asc_sht(cons->sht, cons->cur_x, cons->cur_y, COL8_FFFFFF, COL8_000000, " ", 1);
cons->cur_x += 8;
} }
cons->cur_x += 8;
if (cons->cur_x == 8 + 240) { if (cons->cur_x == 8 + 240) {
cons_newline(cons); cons_newline(cons);
} }
@@ -194,8 +198,8 @@ void cons_runcmd(char *cmdline, struct CONSOLE *cons, int *fat, int memtotal)
} else if (strncmp(cmdline, "start ", 6) == 0) { } else if (strncmp(cmdline, "start ", 6) == 0) {
cmd_start(cons, cmdline, memtotal); cmd_start(cons, cmdline, memtotal);
} else if (strncmp(cmdline, "ncst ", 5) == 0) { } else if (strncmp(cmdline, "ncst ", 5) == 0) {
cmd_ncst(cons, cmdline, memtotal); cmd_ncst(cons, cmdline, memtotal);
}else if (cmdline[0] != 0) { } else if (cmdline[0] != 0) {
if (cmd_app(cons, fat, cmdline) == 0) { if (cmd_app(cons, fat, cmdline) == 0) {
/*不是命令,不是应用程序,也不是空行*/ /*不是命令,不是应用程序,也不是空行*/
cons_putstr0(cons, "Bad command.\n\n"); cons_putstr0(cons, "Bad command.\n\n");
@@ -369,12 +373,12 @@ int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline)
dathrb = *((int *) (p + 0x0014)); dathrb = *((int *) (p + 0x0014));
q = (char *) memman_alloc_4k(memman, segsiz); q = (char *) memman_alloc_4k(memman, segsiz);
task->ds_base = (int) q; task->ds_base = (int) q;
set_segmdesc(gdt + task->sel / 8 + 1000, finfo->size - 1, (int) p, AR_CODE32_ER + 0x60); set_segmdesc(task->ldt + 0, finfo->size - 1, (int) p, AR_CODE32_ER + 0x60);
set_segmdesc(gdt + task->sel / 8 + 2000, segsiz - 1, (int) q, AR_DATA32_RW + 0x60); set_segmdesc(task->ldt + 1, segsiz - 1, (int) q, AR_DATA32_RW + 0x60);
for (i = 0; i < datsiz; i++) { for (i = 0; i < datsiz; i++) {
q[esp + i] = p[dathrb + i]; q[esp + i] = p[dathrb + i];
} }
start_app(0x1b, task->sel + 1000 * 8, esp, task->sel + 2000 * 8, &(task->tss.esp0)); start_app(0x1b, 0 * 8 + 4, esp, 1 * 8 + 4, &(task->tss.esp0));
shtctl = (struct SHTCTL *) *((int *) 0x0fe4); shtctl = (struct SHTCTL *) *((int *) 0x0fe4);
for (i = 0; i < MAX_SHEETS; i++) { for (i = 0; i < MAX_SHEETS; i++) {
sht = &(shtctl->sheets0[i]); sht = &(shtctl->sheets0[i]);
@@ -403,6 +407,7 @@ int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int
struct CONSOLE *cons = task->cons; struct CONSOLE *cons = task->cons;
struct SHTCTL *shtctl = (struct SHTCTL *) *((int *) 0x0fe4); struct SHTCTL *shtctl = (struct SHTCTL *) *((int *) 0x0fe4);
struct SHEET *sht; struct SHEET *sht;
struct FIFO32 *sys_fifo = (struct FIFO32 *) *((int *) 0x0fec);
int *reg = &eax + 1; /* eax后面的地址*/ int *reg = &eax + 1; /* eax后面的地址*/
/*强行改写通过PUSHAD保存的值*/ /*强行改写通过PUSHAD保存的值*/
/* reg[0] : EDI, reg[1] : ESI, reg[2] : EBP, reg[3] : ESP */ /* reg[0] : EDI, reg[1] : ESI, reg[2] : EBP, reg[3] : ESP */
@@ -490,6 +495,13 @@ int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int
if (i == 3) { /*光标OFF */ if (i == 3) { /*光标OFF */
cons->cur_c = -1; cons->cur_c = -1;
} }
if (i == 4) { /*只关闭命令行窗口*/
timer_cancel(cons->timer);
io_cli();
fifo32_put(sys_fifo, cons->sht - shtctl->sheets0 + 2024); /*20242279*/
cons->sht = 0;
io_sti();
}
if (i >= 256) { /*键盘数据通过任务A等*/ if (i >= 256) { /*键盘数据通过任务A等*/
reg[7] = i - 256; reg[7] = i - 256;
return 0; return 0;

1
27_day/haribote/make.bat Normal file
View File

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

View File

@@ -82,7 +82,9 @@ struct TASK *task_init(struct MEMMAN *memman)
for (i = 0; i < MAX_TASKS; i++) { for (i = 0; i < MAX_TASKS; i++) {
taskctl->tasks0[i].flags = 0; taskctl->tasks0[i].flags = 0;
taskctl->tasks0[i].sel = (TASK_GDT0 + i) * 8; taskctl->tasks0[i].sel = (TASK_GDT0 + i) * 8;
taskctl->tasks0[i].tss.ldtr = (TASK_GDT0 + MAX_TASKS + i) * 8;
set_segmdesc(gdt + TASK_GDT0 + i, 103, (int) &taskctl->tasks0[i].tss, AR_TSS32); set_segmdesc(gdt + TASK_GDT0 + i, 103, (int) &taskctl->tasks0[i].tss, AR_TSS32);
set_segmdesc(gdt + TASK_GDT0 + MAX_TASKS + i, 15, (int) taskctl->tasks0[i].ldt, AR_LDT);
} }
for (i = 0; i < MAX_TASKLEVELS; i++) { for (i = 0; i < MAX_TASKLEVELS; i++) {
taskctl->level[i].running = 0; taskctl->level[i].running = 0;
@@ -133,7 +135,6 @@ struct TASK *task_alloc(void)
task->tss.ds = 0; task->tss.ds = 0;
task->tss.fs = 0; task->tss.fs = 0;
task->tss.gs = 0; task->tss.gs = 0;
task->tss.ldtr = 0;
task->tss.iomap = 0x40000000; task->tss.iomap = 0x40000000;
task->tss.ss0 = 0; task->tss.ss0 = 0;
return task; return task;

View File

@@ -1,16 +0,0 @@
[INSTRSET "i486p"]
[BITS 32]
MOV ECX,msg
MOV EDX,1
putloop:
MOV AL,[CS:ECX]
CMP AL,0
JE fin
INT 0x40
ADD ECX,1
JMP putloop
fin:
MOV EDX,4
INT 0x40
msg:
DB "hello",0

View File

@@ -1,9 +0,0 @@
[INSTRSET "i486p"]
[BITS 32]
MOV EDX,2
MOV EBX,msg
INT 0x40
MOV EDX,4
INT 0x40
msg:
DB "hello",0

View File

@@ -0,0 +1 @@
command

View File

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

5
27_day/hello3/Makefile Normal file
View File

@@ -0,0 +1,5 @@
APP = hello3
STACK = 1k
MALLOC = 0k
include ../app_make.txt

View File

@@ -1,5 +1,4 @@
void api_putchar(int c); #include "apilib.h"
void api_end(void);
void HariMain(void) void HariMain(void)
{ {

1
27_day/hello3/make.bat Normal file
View File

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

View File

@@ -0,0 +1 @@
command

View File

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

5
27_day/hello4/Makefile Normal file
View File

@@ -0,0 +1,5 @@
APP = hello4
STACK = 1k
MALLOC = 0k
include ../app_make.txt

View File

@@ -1,5 +1,4 @@
void api_putstr0(char *s); #include "apilib.h"
void api_end(void);
void HariMain(void) void HariMain(void)
{ {

1
27_day/hello4/make.bat Normal file
View File

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

View File

@@ -0,0 +1 @@
command

View File

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

5
27_day/hello5/Makefile Normal file
View File

@@ -0,0 +1,5 @@
APP = hello5
STACK = 1k
MALLOC = 0k
include ../app_make.txt

1
27_day/hello5/make.bat Normal file
View File

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

View File

@@ -0,0 +1 @@
command

View File

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

5
27_day/lines/Makefile Normal file
View File

@@ -0,0 +1,5 @@
APP = lines
STACK = 1k
MALLOC = 48k
include ../app_make.txt

View File

@@ -1,11 +1,4 @@
int api_openwin(char *buf, int xsiz, int ysiz, int col_inv, char *title); #include "apilib.h"
void api_initmalloc(void);
char *api_malloc(int size);
void api_refreshwin(int win, int x0, int y0, int x1, int y1);
void api_linewin(int win, int x0, int y0, int x1, int y1, int col);
void api_closewin(int win);
int api_getkey(int mode);
void api_end(void);
void HariMain(void) void HariMain(void)
{ {

1
27_day/lines/make.bat Normal file
View File

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

View File

@@ -0,0 +1 @@
command

Some files were not shown because too many files have changed in this diff Show More