mirror of
https://github.com/yourtion/30dayMakeOS.git
synced 2026-02-05 02:53:19 +08:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d925a8d992 | ||
|
|
7497159026 | ||
|
|
fcd87ee302 | ||
|
|
ac8b6b1411 | ||
|
|
86791cd7f4 | ||
|
|
9231ce4a38 |
Binary file not shown.
@@ -14,17 +14,19 @@ default :
|
||||
|
||||
#文件生成规则
|
||||
|
||||
haribote.img : haribote/ipl10.bin haribote/haribote.sys Makefile \
|
||||
haribote.img : haribote/ipl20.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 \
|
||||
sosu/sosu.hrb sosu2/sosu2.hrb sosu3/sosu3.hrb
|
||||
sosu/sosu.hrb sosu2/sosu2.hrb sosu3/sosu3.hrb \
|
||||
typeipl/typeipl.hrb type/type.hrb iroha/iroha.hrb \
|
||||
chklang/chklang.hrb
|
||||
$(EDIMG) imgin:../z_tools/fdimg0at.tek \
|
||||
wbinimg src:haribote/ipl10.bin len:512 from:0 to:0 \
|
||||
wbinimg src:haribote/ipl20.bin len:512 from:0 to:0 \
|
||||
copy from:haribote/haribote.sys to:@: \
|
||||
copy from:haribote/ipl10.nas to:@: \
|
||||
copy from:haribote/jp.nas to:@: \
|
||||
copy from:make.bat to:@: \
|
||||
copy from:a/a.hrb to:@: \
|
||||
copy from:hello3/hello3.hrb to:@: \
|
||||
@@ -45,6 +47,12 @@ haribote.img : haribote/ipl10.bin haribote/haribote.sys Makefile \
|
||||
copy from:sosu/sosu.hrb to:@: \
|
||||
copy from:sosu2/sosu2.hrb to:@: \
|
||||
copy from:sosu3/sosu3.hrb to:@: \
|
||||
copy from:typeipl/typeipl.hrb to:@: \
|
||||
copy from:type/type.hrb to:@: \
|
||||
copy from:iroha/iroha.hrb to:@: \
|
||||
copy from:chklang/chklang.hrb to:@: \
|
||||
copy from:euc.txt to:@: \
|
||||
copy from:nihongo/nihongo.fnt to:@: \
|
||||
imgout:haribote.img
|
||||
|
||||
#命令
|
||||
@@ -80,6 +88,10 @@ full :
|
||||
$(MAKE) -C sosu
|
||||
$(MAKE) -C sosu2
|
||||
$(MAKE) -C sosu3
|
||||
$(MAKE) -C typeipl
|
||||
$(MAKE) -C type
|
||||
$(MAKE) -C iroha
|
||||
$(MAKE) -C chklang
|
||||
$(MAKE) haribote.img
|
||||
|
||||
run_full :
|
||||
@@ -104,49 +116,57 @@ src_only :
|
||||
|
||||
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 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 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
|
||||
$(MAKE) -C sosu clean
|
||||
$(MAKE) -C sosu2 clean
|
||||
$(MAKE) -C sosu3 clean
|
||||
$(MAKE) -C color clean
|
||||
$(MAKE) -C color2 clean
|
||||
$(MAKE) -C sosu clean
|
||||
$(MAKE) -C sosu2 clean
|
||||
$(MAKE) -C sosu3 clean
|
||||
$(MAKE) -C typeipl clean
|
||||
$(MAKE) -C type clean
|
||||
$(MAKE) -C iroha clean
|
||||
$(MAKE) -C chklang 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 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 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
|
||||
$(MAKE) -C sosu src_only
|
||||
$(MAKE) -C sosu2 src_only
|
||||
$(MAKE) -C sosu3 src_only
|
||||
$(MAKE) -C color src_only
|
||||
$(MAKE) -C color2 src_only
|
||||
$(MAKE) -C sosu src_only
|
||||
$(MAKE) -C sosu2 src_only
|
||||
$(MAKE) -C sosu3 src_only
|
||||
$(MAKE) -C typeipl src_only
|
||||
$(MAKE) -C type src_only
|
||||
$(MAKE) -C iroha src_only
|
||||
$(MAKE) -C chklang src_only
|
||||
-$(DEL) haribote.img
|
||||
|
||||
refresh :
|
||||
|
||||
@@ -18,3 +18,10 @@ void api_inittimer(int timer, int data);
|
||||
void api_settimer(int timer, int time);
|
||||
void api_freetimer(int timer);
|
||||
void api_beep(int tone);
|
||||
int api_fopen(char *fname);
|
||||
void api_fclose(int fhandle);
|
||||
void api_fseek(int fhandle, int offset, int mode);
|
||||
int api_fsize(int fhandle, int mode);
|
||||
int api_fread(char *buf, int maxsize, int fhandle);
|
||||
int api_cmdline(char *buf, int maxsize);
|
||||
int api_getlang(void);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
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 \
|
||||
alloca.obj
|
||||
api019.obj api020.obj api021.obj api022.obj api023.obj api024.obj \
|
||||
api025.obj api026.obj api027.obj alloca.obj
|
||||
|
||||
TOOLPATH = ../../z_tools/
|
||||
INCPATH = ../../z_tools/haribote/
|
||||
|
||||
16
28_day/apilib/api021.nas
Normal file
16
28_day/apilib/api021.nas
Normal file
@@ -0,0 +1,16 @@
|
||||
[FORMAT "WCOFF"]
|
||||
[INSTRSET "i486p"]
|
||||
[BITS 32]
|
||||
[FILE "api021.nas"]
|
||||
|
||||
GLOBAL _api_fopen
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
_api_fopen: ; int api_fopen(char *fname);
|
||||
PUSH EBX
|
||||
MOV EDX,21
|
||||
MOV EBX,[ESP+8] ; fname
|
||||
INT 0x40
|
||||
POP EBX
|
||||
RET
|
||||
14
28_day/apilib/api022.nas
Normal file
14
28_day/apilib/api022.nas
Normal file
@@ -0,0 +1,14 @@
|
||||
[FORMAT "WCOFF"]
|
||||
[INSTRSET "i486p"]
|
||||
[BITS 32]
|
||||
[FILE "api022.nas"]
|
||||
|
||||
GLOBAL _api_fclose
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
_api_fclose: ; void api_fclose(int fhandle);
|
||||
MOV EDX,22
|
||||
MOV EAX,[ESP+4] ; fhandle
|
||||
INT 0x40
|
||||
RET
|
||||
18
28_day/apilib/api023.nas
Normal file
18
28_day/apilib/api023.nas
Normal file
@@ -0,0 +1,18 @@
|
||||
[FORMAT "WCOFF"]
|
||||
[INSTRSET "i486p"]
|
||||
[BITS 32]
|
||||
[FILE "api023.nas"]
|
||||
|
||||
GLOBAL _api_fseek
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
_api_fseek: ; void api_fseek(int fhandle, int offset, int mode);
|
||||
PUSH EBX
|
||||
MOV EDX,23
|
||||
MOV EAX,[ESP+8] ; fhandle
|
||||
MOV ECX,[ESP+16] ; mode
|
||||
MOV EBX,[ESP+12] ; offset
|
||||
INT 0x40
|
||||
POP EBX
|
||||
RET
|
||||
15
28_day/apilib/api024.nas
Normal file
15
28_day/apilib/api024.nas
Normal file
@@ -0,0 +1,15 @@
|
||||
[FORMAT "WCOFF"]
|
||||
[INSTRSET "i486p"]
|
||||
[BITS 32]
|
||||
[FILE "api024.nas"]
|
||||
|
||||
GLOBAL _api_fsize
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
_api_fsize: ; int api_fsize(int fhandle, int mode);
|
||||
MOV EDX,24
|
||||
MOV EAX,[ESP+4] ; fhandle
|
||||
MOV ECX,[ESP+8] ; mode
|
||||
INT 0x40
|
||||
RET
|
||||
18
28_day/apilib/api025.nas
Normal file
18
28_day/apilib/api025.nas
Normal file
@@ -0,0 +1,18 @@
|
||||
[FORMAT "WCOFF"]
|
||||
[INSTRSET "i486p"]
|
||||
[BITS 32]
|
||||
[FILE "api025.nas"]
|
||||
|
||||
GLOBAL _api_fread
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
_api_fread: ; int api_fread(char *buf, int maxsize, int fhandle);
|
||||
PUSH EBX
|
||||
MOV EDX,25
|
||||
MOV EAX,[ESP+16] ; fhandle
|
||||
MOV ECX,[ESP+12] ; maxsize
|
||||
MOV EBX,[ESP+8] ; buf
|
||||
INT 0x40
|
||||
POP EBX
|
||||
RET
|
||||
17
28_day/apilib/api026.nas
Normal file
17
28_day/apilib/api026.nas
Normal file
@@ -0,0 +1,17 @@
|
||||
[FORMAT "WCOFF"]
|
||||
[INSTRSET "i486p"]
|
||||
[BITS 32]
|
||||
[FILE "api026.nas"]
|
||||
|
||||
GLOBAL _api_cmdline
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
_api_cmdline: ; int api_cmdline(char *buf, int maxsize);
|
||||
PUSH EBX
|
||||
MOV EDX,26
|
||||
MOV ECX,[ESP+12] ; maxsize
|
||||
MOV EBX,[ESP+8] ; buf
|
||||
INT 0x40
|
||||
POP EBX
|
||||
RET
|
||||
13
28_day/apilib/api027.nas
Normal file
13
28_day/apilib/api027.nas
Normal file
@@ -0,0 +1,13 @@
|
||||
[FORMAT "WCOFF"]
|
||||
[INSTRSET "i486p"]
|
||||
[BITS 32]
|
||||
[FILE "api027.nas"]
|
||||
|
||||
GLOBAL _api_getlang
|
||||
|
||||
[SECTION .text]
|
||||
|
||||
_api_getlang: ; int api_getlang(void);
|
||||
MOV EDX,27
|
||||
INT 0x40
|
||||
RET
|
||||
1
28_day/chklang/!cons_9x.bat
Normal file
1
28_day/chklang/!cons_9x.bat
Normal file
@@ -0,0 +1 @@
|
||||
command
|
||||
1
28_day/chklang/!cons_nt.bat
Normal file
1
28_day/chklang/!cons_nt.bat
Normal file
@@ -0,0 +1 @@
|
||||
cmd.exe
|
||||
5
28_day/chklang/Makefile
Normal file
5
28_day/chklang/Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
APP = chklang
|
||||
STACK = 1k
|
||||
MALLOC = 0k
|
||||
|
||||
include ../app_make.txt
|
||||
24
28_day/chklang/chklang.c
Normal file
24
28_day/chklang/chklang.c
Normal file
@@ -0,0 +1,24 @@
|
||||
#include "apilib.h"
|
||||
|
||||
void HariMain(void)
|
||||
{
|
||||
int langmode = api_getlang();
|
||||
static char s1[23] = { /* 日本語シフトJISモード(日文Shift-JIS模式)*/
|
||||
0x93, 0xfa, 0x96, 0x7b, 0x8c, 0xea, 0x83, 0x56, 0x83, 0x74, 0x83, 0x67,
|
||||
0x4a, 0x49, 0x53, 0x83, 0x82, 0x81, 0x5b, 0x83, 0x68, 0x0a, 0x00
|
||||
};
|
||||
static char s2[17] = { /*日本語EUCモード(日文EUC模式)*/
|
||||
0xc6, 0xfc, 0xcb, 0xdc, 0xb8, 0xec, 0x45, 0x55, 0x43, 0xa5, 0xe2, 0xa1,
|
||||
0xbc, 0xa5, 0xc9, 0x0a, 0x00
|
||||
};
|
||||
if (langmode == 0) {
|
||||
api_putstr0("English ASCII mode\n");
|
||||
}
|
||||
if (langmode == 1) {
|
||||
api_putstr0(s1);
|
||||
}
|
||||
if (langmode == 2) {
|
||||
api_putstr0(s2);
|
||||
}
|
||||
api_end();
|
||||
}
|
||||
1
28_day/chklang/make.bat
Normal file
1
28_day/chklang/make.bat
Normal file
@@ -0,0 +1 @@
|
||||
..\..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
1
28_day/euc.txt
Normal file
1
28_day/euc.txt
Normal file
@@ -0,0 +1 @@
|
||||
日本語EUCで書いてみたよー
|
||||
@@ -23,7 +23,7 @@ DEL = del
|
||||
#默认动作
|
||||
|
||||
default :
|
||||
$(MAKE) ipl10.bin
|
||||
$(MAKE) ipl20.bin
|
||||
$(MAKE) haribote.sys
|
||||
|
||||
# 镜像文件生成
|
||||
@@ -31,6 +31,9 @@ default :
|
||||
ipl10.bin : ipl10.nas Makefile
|
||||
$(NASK) ipl10.nas ipl10.bin ipl10.lst
|
||||
|
||||
ipl20.bin : ipl20.nas Makefile
|
||||
$(NASK) ipl20.nas ipl20.bin ipl20.lst
|
||||
|
||||
asmhead.bin : asmhead.nas Makefile
|
||||
$(NASK) asmhead.nas asmhead.bin asmhead.lst
|
||||
|
||||
@@ -76,4 +79,5 @@ clean :
|
||||
src_only :
|
||||
$(MAKE) clean
|
||||
-$(DEL) ipl10.bin
|
||||
-$(DEL) ipl20.bin
|
||||
-$(DEL) haribote.sys
|
||||
|
||||
@@ -47,6 +47,10 @@ void HariMain(void)
|
||||
int key_shift = 0, key_leds = (binfo->leds >> 4) & 7, keycmd_wait = -1;
|
||||
int j, x, y, mmx = -1, mmy = -1, mmx2 = 0;
|
||||
struct SHEET *sht = 0, *key_win, *sht2;
|
||||
int *fat;
|
||||
unsigned char *nihongo;
|
||||
struct FILEINFO *finfo;
|
||||
extern char hankaku[4096];
|
||||
|
||||
init_gdtidt();
|
||||
init_pic();
|
||||
@@ -71,6 +75,7 @@ void HariMain(void)
|
||||
fifo.task = task_a;
|
||||
task_run(task_a, 1, 2);
|
||||
*((int *) 0x0fe4) = (int) shtctl;
|
||||
task_a->langmode = 0;
|
||||
|
||||
/* sht_back */
|
||||
sht_back = sheet_alloc(shtctl);
|
||||
@@ -96,10 +101,28 @@ void HariMain(void)
|
||||
sheet_updown(sht_mouse, 2);
|
||||
keywin_on(key_win);
|
||||
|
||||
/*为了避免和键盘当前状态冲突,在一开始先进行设置*/
|
||||
/* 为了避免和键盘当前状态冲突,在一开始先进行设置 */
|
||||
fifo32_put(&keycmd, KEYCMD_LED);
|
||||
fifo32_put(&keycmd, key_leds);
|
||||
|
||||
/* 载入nihongo.fnt */
|
||||
nihongo = (unsigned char *) memman_alloc_4k(memman, 16 * 256 + 32 * 94 * 47);
|
||||
fat = (int *) memman_alloc_4k(memman, 4 * 2880);
|
||||
file_readfat(fat, (unsigned char *) (ADR_DISKIMG + 0x000200));
|
||||
finfo = file_search("nihongo.fnt", (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
|
||||
if (finfo != 0) {
|
||||
file_loadfile(finfo->clustno, finfo->size, nihongo, fat, (char *) (ADR_DISKIMG + 0x003e00));
|
||||
} else {
|
||||
for (i = 0; i < 16 * 256; i++) {
|
||||
nihongo[i] = hankaku[i]; /* 没有字库,半角部分直接复制英文字库 */
|
||||
}
|
||||
for (i = 16 * 256; i < 16 * 256 + 32 * 94 * 47; i++) {
|
||||
nihongo[i] = 0xff; /* 没有字库,全角部分以0xff填充 */
|
||||
}
|
||||
}
|
||||
*((int *) 0x0fe8) = (int) nihongo;
|
||||
memman_free_4k(memman, (int) fat, 4 * 2880);
|
||||
|
||||
for (;;) {
|
||||
if (fifo32_status(&keycmd) > 0 && keycmd_wait < 0) {
|
||||
/* 如果存在向键盘控制器发送的数据,则发送它 */
|
||||
|
||||
@@ -214,6 +214,10 @@ struct TASK {
|
||||
struct SEGMENT_DESCRIPTOR ldt[2];
|
||||
struct CONSOLE *cons;
|
||||
int ds_base, cons_stack;
|
||||
struct FILEHANDLE *fhandle;
|
||||
int *fat;
|
||||
char *cmdline;
|
||||
unsigned char langmode, langbyte1;
|
||||
};
|
||||
struct TASKLEVEL {
|
||||
int running; /*正在运行的任务数量*/
|
||||
@@ -248,6 +252,11 @@ struct CONSOLE {
|
||||
int cur_x, cur_y, cur_c;
|
||||
struct TIMER *timer;
|
||||
};
|
||||
struct FILEHANDLE {
|
||||
char *buf;
|
||||
int size;
|
||||
int pos;
|
||||
};
|
||||
void console_task(struct SHEET *sheet, int memtotal);
|
||||
void cons_putchar(struct CONSOLE *cons, int chr, char move);
|
||||
void cons_newline(struct CONSOLE *cons);
|
||||
@@ -257,10 +266,10 @@ void cons_runcmd(char *cmdline, struct CONSOLE *cons, int *fat, int memtotal);
|
||||
void cmd_mem(struct CONSOLE *cons, int memtotal);
|
||||
void cmd_cls(struct CONSOLE *cons);
|
||||
void cmd_dir(struct CONSOLE *cons);
|
||||
void cmd_type(struct CONSOLE *cons, int *fat, char *cmdline);
|
||||
void cmd_exit(struct CONSOLE *cons, int *fat);
|
||||
void cmd_start(struct CONSOLE *cons, char *cmdline, int memtotal);
|
||||
void cmd_ncst(struct CONSOLE *cons, char *cmdline, int memtotal);
|
||||
void cmd_langmode(struct CONSOLE *cons, char *cmdline);
|
||||
int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline);
|
||||
int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax);
|
||||
int *inthandler0d(int *esp);
|
||||
|
||||
@@ -9,13 +9,17 @@ void console_task(struct SHEET *sheet, int memtotal)
|
||||
struct TASK *task = task_now();
|
||||
struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
|
||||
int i, *fat = (int *) memman_alloc_4k(memman, 4 * 2880);
|
||||
struct FILEHANDLE fhandle[8];
|
||||
struct CONSOLE cons;
|
||||
char cmdline[30];
|
||||
unsigned char *nihongo = (char *) *((int *) 0x0fe8);
|
||||
|
||||
cons.sht = sheet;
|
||||
cons.cur_x = 8;
|
||||
cons.cur_y = 28;
|
||||
cons.cur_c = -1;
|
||||
task->cons = &cons;
|
||||
task->cmdline = cmdline;
|
||||
|
||||
if (cons.sht != 0) {
|
||||
cons.timer = timer_alloc();
|
||||
@@ -23,6 +27,17 @@ void console_task(struct SHEET *sheet, int memtotal)
|
||||
timer_settime(cons.timer, 50);
|
||||
}
|
||||
file_readfat(fat, (unsigned char *) (ADR_DISKIMG + 0x000200));
|
||||
for (i = 0; i < 8; i++) {
|
||||
fhandle[i].buf = 0; /*未使用标记*/
|
||||
}
|
||||
task->fhandle = fhandle;
|
||||
task->fat = fat;
|
||||
if (nihongo[4096] != 0xff) { /* 是否载入了字库?*/
|
||||
task->langmode = 1;
|
||||
} else {
|
||||
task->langmode = 0;
|
||||
}
|
||||
task->langbyte1 = 0;
|
||||
|
||||
/*显示提示符*/
|
||||
cons_putchar(&cons, '>', 1);
|
||||
@@ -144,6 +159,7 @@ void cons_newline(struct CONSOLE *cons)
|
||||
{
|
||||
int x, y;
|
||||
struct SHEET *sheet = cons->sht;
|
||||
struct TASK *task = task_now();
|
||||
if (cons->cur_y < 28 + 112) {
|
||||
cons->cur_y += 16; /*到下一行*/
|
||||
} else {
|
||||
@@ -163,6 +179,9 @@ void cons_newline(struct CONSOLE *cons)
|
||||
}
|
||||
}
|
||||
cons->cur_x = 8;
|
||||
if (task->langmode == 1 && task->langbyte1 != 0) {
|
||||
cons->cur_x += 8;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -191,15 +210,15 @@ void cons_runcmd(char *cmdline, struct CONSOLE *cons, int *fat, int memtotal)
|
||||
cmd_cls(cons);
|
||||
} else if ((strcmp(cmdline, "dir") == 0 || strcmp(cmdline, "ls") == 0) && cons->sht != 0) {
|
||||
cmd_dir(cons);
|
||||
} else if (strncmp(cmdline, "type ", 5) == 0 && cons->sht != 0) {
|
||||
cmd_type(cons, fat, cmdline);
|
||||
} else if (strcmp(cmdline, "exit") == 0) {
|
||||
cmd_exit(cons, fat);
|
||||
} else if (strncmp(cmdline, "start ", 6) == 0) {
|
||||
cmd_start(cons, cmdline, memtotal);
|
||||
} else if (strncmp(cmdline, "ncst ", 5) == 0) {
|
||||
cmd_ncst(cons, cmdline, memtotal);
|
||||
} else if (cmdline[0] != 0) {
|
||||
} else if (strncmp(cmdline, "langmode ", 9) == 0) {
|
||||
cmd_langmode(cons, cmdline);
|
||||
}else if (cmdline[0] != 0) {
|
||||
if (cmd_app(cons, fat, cmdline) == 0) {
|
||||
/*不是命令,不是应用程序,也不是空行*/
|
||||
cons_putstr0(cons, "Bad command.\n\n");
|
||||
@@ -257,25 +276,6 @@ void cmd_dir(struct CONSOLE *cons)
|
||||
return;
|
||||
}
|
||||
|
||||
void cmd_type(struct CONSOLE *cons, int *fat, char *cmdline)
|
||||
{
|
||||
struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
|
||||
struct FILEINFO *finfo = file_search(cmdline + 5, (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
|
||||
char *p;
|
||||
if (finfo != 0) {
|
||||
/*找到文件的情况*/
|
||||
p = (char *) memman_alloc_4k(memman, finfo->size);
|
||||
file_loadfile(finfo->clustno, finfo->size, p, fat, (char *) (ADR_DISKIMG + 0x003e00));
|
||||
cons_putstr1(cons, p, finfo->size);
|
||||
memman_free_4k(memman, (int) p, finfo->size);
|
||||
} else {
|
||||
/*没有找到文件的情况*/
|
||||
cons_putstr0(cons, "File not found.\n");
|
||||
}
|
||||
cons_newline(cons);
|
||||
return;
|
||||
}
|
||||
|
||||
void cmd_exit(struct CONSOLE *cons, int *fat)
|
||||
{
|
||||
struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
|
||||
@@ -330,6 +330,19 @@ void cmd_ncst(struct CONSOLE *cons, char *cmdline, int memtotal)
|
||||
return;
|
||||
}
|
||||
|
||||
void cmd_langmode(struct CONSOLE *cons, char *cmdline)
|
||||
{
|
||||
struct TASK *task = task_now();
|
||||
unsigned char mode = cmdline[9] - '0';
|
||||
if (mode <= 2) {
|
||||
task->langmode = mode;
|
||||
} else {
|
||||
cons_putstr0(cons, "mode number error.\n");
|
||||
}
|
||||
cons_newline(cons);
|
||||
return;
|
||||
}
|
||||
|
||||
int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline)
|
||||
{
|
||||
struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
|
||||
@@ -387,8 +400,15 @@ int cmd_app(struct CONSOLE *cons, int *fat, char *cmdline)
|
||||
sheet_free(sht); /*关闭*/
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 8; i++) { /*将未关闭的文件关闭*/
|
||||
if (task->fhandle[i].buf != 0) {
|
||||
memman_free_4k(memman, (int) task->fhandle[i].buf, task->fhandle[i].size);
|
||||
task->fhandle[i].buf = 0;
|
||||
}
|
||||
}
|
||||
timer_cancelall(&task->fifo);
|
||||
memman_free_4k(memman, (int) q, segsiz);
|
||||
task->langbyte1 = 0;
|
||||
} else {
|
||||
cons_putstr0(cons, ".hrb file format error.\n");
|
||||
}
|
||||
@@ -413,6 +433,9 @@ int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int
|
||||
/* reg[0] : EDI, reg[1] : ESI, reg[2] : EBP, reg[3] : ESP */
|
||||
/* reg[4] : EBX, reg[5] : EDX, reg[6] : ECX, reg[7] : EAX */
|
||||
int i;
|
||||
struct FILEINFO *finfo;
|
||||
struct FILEHANDLE *fh;
|
||||
struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR;
|
||||
|
||||
if (edx == 1) {
|
||||
cons_putchar(cons, eax & 0xff, 1);
|
||||
@@ -528,6 +551,77 @@ int *hrb_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int
|
||||
i = io_in8(0x61);
|
||||
io_out8(0x61, (i | 0x03) & 0x0f);
|
||||
}
|
||||
} else if (edx == 21) {
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (task->fhandle[i].buf == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
fh = &task->fhandle[i];
|
||||
reg[7] = 0;
|
||||
if (i < 8) {
|
||||
finfo = file_search((char *) ebx + ds_base, (struct FILEINFO *) (ADR_DISKIMG + 0x002600), 224);
|
||||
if (finfo != 0) {
|
||||
reg[7] = (int) fh;
|
||||
fh->buf = (char *) memman_alloc_4k(memman, finfo->size);
|
||||
fh->size = finfo->size;
|
||||
fh->pos = 0;
|
||||
file_loadfile(finfo->clustno, finfo->size, fh->buf, task->fat, (char *) (ADR_DISKIMG + 0x003e00));
|
||||
}
|
||||
}
|
||||
} else if (edx == 22) {
|
||||
fh = (struct FILEHANDLE *) eax;
|
||||
memman_free_4k(memman, (int) fh->buf, fh->size);
|
||||
fh->buf = 0;
|
||||
} else if (edx == 23) {
|
||||
fh = (struct FILEHANDLE *) eax;
|
||||
if (ecx == 0) {
|
||||
fh->pos = ebx;
|
||||
} else if (ecx == 1) {
|
||||
fh->pos += ebx;
|
||||
} else if (ecx == 2) {
|
||||
fh->pos = fh->size + ebx;
|
||||
}
|
||||
if (fh->pos < 0) {
|
||||
fh->pos = 0;
|
||||
}
|
||||
if (fh->pos > fh->size) {
|
||||
fh->pos = fh->size;
|
||||
}
|
||||
} else if (edx == 24) {
|
||||
fh = (struct FILEHANDLE *) eax;
|
||||
if (ecx == 0) {
|
||||
reg[7] = fh->size;
|
||||
} else if (ecx == 1) {
|
||||
reg[7] = fh->pos;
|
||||
} else if (ecx == 2) {
|
||||
reg[7] = fh->pos - fh->size;
|
||||
}
|
||||
} else if (edx == 25) {
|
||||
fh = (struct FILEHANDLE *) eax;
|
||||
for (i = 0; i < ecx; i++) {
|
||||
if (fh->pos == fh->size) {
|
||||
break;
|
||||
}
|
||||
*((char *) ebx + ds_base + i) = fh->buf[fh->pos];
|
||||
fh->pos++;
|
||||
}
|
||||
reg[7] = i;
|
||||
} else if (edx == 26) {
|
||||
i = 0;
|
||||
for (;;) {
|
||||
*((char *) ebx + ds_base + i) = task->cmdline[i];
|
||||
if (task->cmdline[i] == 0) {
|
||||
break;
|
||||
}
|
||||
if (i >= ecx) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
reg[7] = i;
|
||||
} else if (edx == 27) {
|
||||
reg[7] = task->langmode;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -107,10 +107,64 @@ void putfont8(char *vram, int xsize, int x, int y, char c, char *font)
|
||||
void putfonts8_asc(char *vram, int xsize, int x, int y, char c, unsigned char *s)
|
||||
{
|
||||
extern char hankaku[4096];
|
||||
/* C语言中,字符串都是以0x00结尾 */
|
||||
for (; *s != 0x00; s++) {
|
||||
putfont8(vram, xsize, x, y, c, hankaku + *s * 16);
|
||||
x += 8;
|
||||
struct TASK *task = task_now();
|
||||
char *nihongo = (char *) *((int *) 0x0fe8), *font;
|
||||
int k, t;
|
||||
|
||||
if (task->langmode == 0) {
|
||||
for (; *s != 0x00; s++) {
|
||||
putfont8(vram, xsize, x, y, c, hankaku + *s * 16);
|
||||
x += 8;
|
||||
}
|
||||
}
|
||||
if (task->langmode == 1) {
|
||||
for (; *s != 0x00; s++) {
|
||||
if (task->langbyte1 == 0) {
|
||||
if ((0x81 <= *s && *s <= 0x9f) || (0xe0 <= *s && *s <= 0xfc)) {
|
||||
task->langbyte1 = *s;
|
||||
} else {
|
||||
putfont8(vram, xsize, x, y, c, nihongo + *s * 16);
|
||||
}
|
||||
} else {
|
||||
if (0x81 <= task->langbyte1 && task->langbyte1 <= 0x9f) {
|
||||
k = (task->langbyte1 - 0x81) * 2;
|
||||
} else {
|
||||
k = (task->langbyte1 - 0xe0) * 2 + 62;
|
||||
}
|
||||
if (0x40 <= *s && *s <= 0x7e) {
|
||||
t = *s - 0x40;
|
||||
} else if (0x80 <= *s && *s <= 0x9e) {
|
||||
t = *s - 0x80 + 63;
|
||||
} else {
|
||||
t = *s - 0x9f;
|
||||
k++;
|
||||
}
|
||||
task->langbyte1 = 0;
|
||||
font = nihongo + 256 * 16 + (k * 94 + t) * 32;
|
||||
putfont8(vram, xsize, x - 8, y, c, font ); /* 左半部分 */
|
||||
putfont8(vram, xsize, x , y, c, font + 16); /* 右半部分 */
|
||||
}
|
||||
x += 8;
|
||||
}
|
||||
}
|
||||
if (task->langmode == 2) {
|
||||
for (; *s != 0x00; s++) {
|
||||
if (task->langbyte1 == 0) {
|
||||
if (0x81 <= *s && *s <= 0xfe) {
|
||||
task->langbyte1 = *s;
|
||||
} else {
|
||||
putfont8(vram, xsize, x, y, c, nihongo + *s * 16);
|
||||
}
|
||||
} else {
|
||||
k = task->langbyte1 - 0xa1;
|
||||
t = *s - 0xa1;
|
||||
task->langbyte1 = 0;
|
||||
font = nihongo + 256 * 16 + (k * 94 + t) * 32;
|
||||
putfont8(vram, xsize, x - 8, y, c, font ); /* 左半部分 */
|
||||
putfont8(vram, xsize, x , y, c, font + 16); /* 右半部分 */
|
||||
}
|
||||
x += 8;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Binary file not shown.
109
28_day/haribote/ipl20.nas
Normal file
109
28_day/haribote/ipl20.nas
Normal file
@@ -0,0 +1,109 @@
|
||||
; haribote-ipl
|
||||
; TAB=4
|
||||
|
||||
CYLS EQU 20 ; 声明CYLS=20
|
||||
|
||||
ORG 0x7c00 ; 指明程序装载地址
|
||||
|
||||
; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code
|
||||
|
||||
JMP entry
|
||||
DB 0x90
|
||||
DB "HARIBOTE" ; 启动扇区名称(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 "HARIBOTEOS " ; 磁盘的名称(必须为11字?,不足填空格)
|
||||
DB "FAT12 " ; 磁盘格式名称(必??8字?,不足填空格)
|
||||
RESB 18 ; 先空出18字节
|
||||
|
||||
; 程序主体
|
||||
|
||||
entry:
|
||||
MOV AX,0 ; 初始化寄存器
|
||||
MOV SS,AX
|
||||
MOV SP,0x7c00
|
||||
MOV DS,AX
|
||||
|
||||
; 读取磁盘
|
||||
|
||||
MOV AX,0x0820
|
||||
MOV ES,AX
|
||||
MOV CH,0 ; 柱面0
|
||||
MOV DH,0 ; 磁头0
|
||||
MOV CL,2 ; 扇区2
|
||||
|
||||
readloop:
|
||||
MOV SI,0 ; 记录失败次数寄存器
|
||||
|
||||
retry:
|
||||
MOV AH,0x02 ; AH=0x02 : 读入磁盘
|
||||
MOV AL,1 ; 1个扇区
|
||||
MOV BX,0
|
||||
MOV DL,0x00 ; A驱动器
|
||||
INT 0x13 ; 调用磁盘BIOS
|
||||
JNC next ; 没出错则跳转到fin
|
||||
ADD SI,1 ; 往SI加1
|
||||
CMP SI,5 ; 比较SI与5
|
||||
JAE error ; SI >= 5 跳转到error
|
||||
MOV AH,0x00
|
||||
MOV DL,0x00 ; A驱动器
|
||||
INT 0x13 ; 重置驱动器
|
||||
JMP retry
|
||||
next:
|
||||
MOV AX,ES ; 把内存地址后移0x200(512/16十六进制转换)
|
||||
ADD AX,0x0020
|
||||
MOV ES,AX ; ADD ES,0x020因为没有ADD ES,只能通过AX进行
|
||||
ADD CL,1 ; 往CL里面加1
|
||||
CMP CL,18 ; 比较CL与18
|
||||
JBE readloop ; CL <= 18 跳转到readloop
|
||||
MOV CL,1
|
||||
ADD DH,1
|
||||
CMP DH,2
|
||||
JB readloop ; DH < 2 跳转到readloop
|
||||
MOV DH,0
|
||||
ADD CH,1
|
||||
CMP CH,CYLS
|
||||
JB readloop ; CH < CYLS 跳转到readloop
|
||||
|
||||
; 读取完毕,跳转到haribote.sys执行!
|
||||
MOV [0x0ff0],CH ; IPLがどこまで読んだのかをメモ
|
||||
JMP 0xc200
|
||||
|
||||
error:
|
||||
MOV SI,msg
|
||||
|
||||
putloop:
|
||||
MOV AL,[SI]
|
||||
ADD SI,1 ; 给SI加1
|
||||
CMP AL,0
|
||||
JE fin
|
||||
MOV AH,0x0e ; 显示一个文字
|
||||
MOV BX,15 ; 指定字符颜色
|
||||
INT 0x10 ; 调用显卡BIOS
|
||||
JMP putloop
|
||||
|
||||
fin:
|
||||
HLT ; 让CPU停止,等待指令
|
||||
JMP fin ; 无限循环
|
||||
|
||||
msg:
|
||||
DB 0x0a, 0x0a ; 换行两次
|
||||
DB "load error"
|
||||
DB 0x0a ; 换行
|
||||
DB 0
|
||||
|
||||
RESB 0x7dfe-$ ; 填写0x00直到0x001fe
|
||||
|
||||
DB 0x55, 0xaa
|
||||
107
28_day/haribote/jp.nas
Normal file
107
28_day/haribote/jp.nas
Normal file
@@ -0,0 +1,107 @@
|
||||
; haribote-ipl
|
||||
; TAB=4
|
||||
|
||||
CYLS EQU 10 ; どこまで読み込むか
|
||||
|
||||
ORG 0x7c00 ; このプログラムがどこに読み込まれるのか
|
||||
|
||||
; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述
|
||||
|
||||
JMP entry
|
||||
DB 0x90
|
||||
DB "HARIBOTE" ; ブートセクタの名前を自由に書いてよい(8バイト)
|
||||
DW 512 ; 1セクタの大きさ(512にしなければいけない)
|
||||
DB 1 ; クラスタの大きさ(1セクタにしなければいけない)
|
||||
DW 1 ; FATがどこから始まるか(普通は1セクタ目からにする)
|
||||
DB 2 ; FATの個数(2にしなければいけない)
|
||||
DW 224 ; ルートディレクトリ領域の大きさ(普通は224エントリにする)
|
||||
DW 2880 ; このドライブの大きさ(2880セクタにしなければいけない)
|
||||
DB 0xf0 ; メディアのタイプ(0xf0にしなければいけない)
|
||||
DW 9 ; FAT領域の長さ(9セクタにしなければいけない)
|
||||
DW 18 ; 1トラックにいくつのセクタがあるか(18にしなければいけない)
|
||||
DW 2 ; ヘッドの数(2にしなければいけない)
|
||||
DD 0 ; パーティションを使ってないのでここは必ず0
|
||||
DD 2880 ; このドライブ大きさをもう一度書く
|
||||
DB 0,0,0x29 ; よくわからないけどこの値にしておくといいらしい
|
||||
DD 0xffffffff ; たぶんボリュームシリアル番号
|
||||
DB "HARIBOTEOS " ; ディスクの名前(11バイト)
|
||||
DB "FAT12 " ; フォーマットの名前(8バイト)
|
||||
RESB 18 ; とりあえず18バイトあけておく
|
||||
|
||||
; プログラム本体
|
||||
|
||||
entry:
|
||||
MOV AX,0 ; レジスタ初期化
|
||||
MOV SS,AX
|
||||
MOV SP,0x7c00
|
||||
MOV DS,AX
|
||||
|
||||
; ディスクを読む
|
||||
|
||||
MOV AX,0x0820
|
||||
MOV ES,AX
|
||||
MOV CH,0 ; シリンダ0
|
||||
MOV DH,0 ; ヘッド0
|
||||
MOV CL,2 ; セクタ2
|
||||
readloop:
|
||||
MOV SI,0 ; 失敗回数を数えるレジスタ
|
||||
retry:
|
||||
MOV AH,0x02 ; AH=0x02 : ディスク読み込み
|
||||
MOV AL,1 ; 1セクタ
|
||||
MOV BX,0
|
||||
MOV DL,0x00 ; Aドライブ
|
||||
INT 0x13 ; ディスクBIOS呼び出し
|
||||
JNC next ; エラーがおきなければnextへ
|
||||
ADD SI,1 ; SIに1を足す
|
||||
CMP SI,5 ; SIと5を比較
|
||||
JAE error ; SI >= 5 だったらerrorへ
|
||||
MOV AH,0x00
|
||||
MOV DL,0x00 ; Aドライブ
|
||||
INT 0x13 ; ドライブのリセット
|
||||
JMP retry
|
||||
next:
|
||||
MOV AX,ES ; アドレスを0x200進める
|
||||
ADD AX,0x0020
|
||||
MOV ES,AX ; ADD ES,0x020 という命令がないのでこうしている
|
||||
ADD CL,1 ; CLに1を足す
|
||||
CMP CL,18 ; CLと18を比較
|
||||
JBE readloop ; CL <= 18 だったらreadloopへ
|
||||
MOV CL,1
|
||||
ADD DH,1
|
||||
CMP DH,2
|
||||
JB readloop ; DH < 2 だったらreadloopへ
|
||||
MOV DH,0
|
||||
ADD CH,1
|
||||
CMP CH,CYLS
|
||||
JB readloop ; CH < CYLS だったらreadloopへ
|
||||
|
||||
; 読み終わったのでharibote.sysを実行だ!
|
||||
|
||||
MOV [0x0ff0],CH ; IPLがどこまで読んだのかをメモ
|
||||
JMP 0xc200
|
||||
|
||||
error:
|
||||
MOV AX,0
|
||||
MOV ES,AX
|
||||
MOV SI,msg
|
||||
putloop:
|
||||
MOV AL,[SI]
|
||||
ADD SI,1 ; SIに1を足す
|
||||
CMP AL,0
|
||||
JE fin
|
||||
MOV AH,0x0e ; 一文字表示ファンクション
|
||||
MOV BX,15 ; カラーコード
|
||||
INT 0x10 ; ビデオBIOS呼び出し
|
||||
JMP putloop
|
||||
fin:
|
||||
HLT ; 何かあるまでCPUを停止させる
|
||||
JMP fin ; 無限ループ
|
||||
msg:
|
||||
DB 0x0a, 0x0a ; 改行を2つ
|
||||
DB "load error"
|
||||
DB 0x0a ; 改行
|
||||
DB 0
|
||||
|
||||
RESB 0x7dfe-$ ; 0x7dfeまでを0x00で埋める命令
|
||||
|
||||
DB 0x55, 0xaa
|
||||
1
28_day/iroha/!cons_9x.bat
Normal file
1
28_day/iroha/!cons_9x.bat
Normal file
@@ -0,0 +1 @@
|
||||
command
|
||||
1
28_day/iroha/!cons_nt.bat
Normal file
1
28_day/iroha/!cons_nt.bat
Normal file
@@ -0,0 +1 @@
|
||||
cmd.exe
|
||||
5
28_day/iroha/Makefile
Normal file
5
28_day/iroha/Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
APP = iroha
|
||||
STACK = 1k
|
||||
MALLOC = 0k
|
||||
|
||||
include ../app_make.txt
|
||||
9
28_day/iroha/iroha.c
Normal file
9
28_day/iroha/iroha.c
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "apilib.h"
|
||||
|
||||
void HariMain(void)
|
||||
{
|
||||
static char s[9] = { 0xb2, 0xdb, 0xca, 0xc6, 0xce, 0xcd, 0xc4, 0x0a, 0x00 };
|
||||
/*半角片假名イロハニホヘト的字符编码+换行+0 */
|
||||
api_putstr0(s);
|
||||
api_end();
|
||||
}
|
||||
1
28_day/iroha/make.bat
Normal file
1
28_day/iroha/make.bat
Normal file
@@ -0,0 +1 @@
|
||||
..\..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
BIN
28_day/nihongo/jpn16v00.bin
Normal file
BIN
28_day/nihongo/jpn16v00.bin
Normal file
Binary file not shown.
BIN
28_day/nihongo/jpn16v00.fnt
Normal file
BIN
28_day/nihongo/jpn16v00.fnt
Normal file
Binary file not shown.
BIN
28_day/nihongo/nihongo.fnt
Normal file
BIN
28_day/nihongo/nihongo.fnt
Normal file
Binary file not shown.
1
28_day/type/!cons_9x.bat
Normal file
1
28_day/type/!cons_9x.bat
Normal file
@@ -0,0 +1 @@
|
||||
command
|
||||
1
28_day/type/!cons_nt.bat
Normal file
1
28_day/type/!cons_nt.bat
Normal file
@@ -0,0 +1 @@
|
||||
cmd.exe
|
||||
5
28_day/type/Makefile
Normal file
5
28_day/type/Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
APP = type
|
||||
STACK = 1k
|
||||
MALLOC = 0k
|
||||
|
||||
include ../app_make.txt
|
||||
1
28_day/type/make.bat
Normal file
1
28_day/type/make.bat
Normal file
@@ -0,0 +1 @@
|
||||
..\..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
23
28_day/type/type.c
Normal file
23
28_day/type/type.c
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "apilib.h"
|
||||
|
||||
void HariMain(void)
|
||||
{
|
||||
int fh;
|
||||
char c, cmdline[30], *p;
|
||||
|
||||
api_cmdline(cmdline, 30);
|
||||
for (p = cmdline; *p > ' '; p++) { } /*跳过之前的内容,直到遇到空格*/
|
||||
for (; *p == ' '; p++) { } /*跳过空格*/
|
||||
fh = api_fopen(p);
|
||||
if (fh != 0) {
|
||||
for (;;) {
|
||||
if (api_fread(&c, 1, fh) == 0) {
|
||||
break;
|
||||
}
|
||||
api_putchar(c);
|
||||
}
|
||||
} else {
|
||||
api_putstr0("File not found.\n");
|
||||
}
|
||||
api_end();
|
||||
}
|
||||
1
28_day/typeipl/!cons_9x.bat
Normal file
1
28_day/typeipl/!cons_9x.bat
Normal file
@@ -0,0 +1 @@
|
||||
command
|
||||
1
28_day/typeipl/!cons_nt.bat
Normal file
1
28_day/typeipl/!cons_nt.bat
Normal file
@@ -0,0 +1 @@
|
||||
cmd.exe
|
||||
5
28_day/typeipl/Makefile
Normal file
5
28_day/typeipl/Makefile
Normal file
@@ -0,0 +1,5 @@
|
||||
APP = typeipl
|
||||
STACK = 1k
|
||||
MALLOC = 0k
|
||||
|
||||
include ../app_make.txt
|
||||
1
28_day/typeipl/make.bat
Normal file
1
28_day/typeipl/make.bat
Normal file
@@ -0,0 +1 @@
|
||||
..\..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
17
28_day/typeipl/typeipl.c
Normal file
17
28_day/typeipl/typeipl.c
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "apilib.h"
|
||||
|
||||
void HariMain(void)
|
||||
{
|
||||
int fh;
|
||||
char c;
|
||||
fh = api_fopen("ipl10.nas");
|
||||
if (fh != 0) {
|
||||
for (;;) {
|
||||
if (api_fread(&c, 1, fh) == 0) {
|
||||
break;
|
||||
}
|
||||
api_putchar(c);
|
||||
}
|
||||
}
|
||||
api_end();
|
||||
}
|
||||
Reference in New Issue
Block a user