Skip to content

Commit 09fedba

Browse files
committed
32 bit CPU Onloader
1 parent f48bacd commit 09fedba

File tree

5 files changed

+152
-0
lines changed

5 files changed

+152
-0
lines changed

bim2hel/Makefile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
TARGET = bim2hel
2+
MODE = exe
3+
OBJS = $(TARGET).obj
4+
STACKSIZE = 0x1000000 # 16MB (default)
5+
6+
INCPATH = ../z_tools/win32/
7+
CC1OPT = -Dmain=main0
8+
include ../z_tools/com_mak.txt
9+
10+
# tolset08‘ΉžMakefile

bim2hel/bim2hel.c

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
4+
typedef unsigned char UCHAR;
5+
int getnum(const UCHAR *p);
6+
int get32(const UCHAR *p);
7+
void put32(UCHAR *p, int i);
8+
9+
#define MAXSIZ 4 * 1024 * 1024
10+
11+
int main(int argc, UCHAR **argv)
12+
{
13+
UCHAR *fbuf = malloc(MAXSIZ);
14+
int heap_siz, mmarea, fsiz, dsize, dofs, stksiz, wrksiz, entry, bsssiz;
15+
int heap_adr, i;
16+
FILE *fp;
17+
static UCHAR sign[4] = "XuNet OS!"; //XuNet OS 标准!!!
18+
if (argc < 4) {
19+
puts("usage>bim2hel appname.bim appname.hel heap-size [mmarea-size]");
20+
return 1;
21+
}
22+
heap_siz = getnum(argv[3]);
23+
mmarea = 0;
24+
if (argc >= 5)
25+
mmarea = getnum(argv[4]);
26+
fp = fopen(argv[1], "rb");
27+
if (fp == NULL) {
28+
err_bim:
29+
puts("bim file read error");
30+
return 1;
31+
}
32+
fsiz = fread(fbuf, 1, MAXSIZ, fp);
33+
fclose(fp);
34+
if (fsiz >= MAXSIZ || fsiz < 0)
35+
goto err_bim;
36+
if (get32(&fbuf[4]) != 0x24) {
37+
err_form:
38+
puts("bim file format error");
39+
return 1;
40+
}
41+
if (get32(&fbuf[8]) != 0x24)
42+
goto err_form;
43+
dsize = get32(&fbuf[12]);
44+
dofs = get32(&fbuf[16]);
45+
stksiz = get32(&fbuf[20]);
46+
entry = get32(&fbuf[24]);
47+
bsssiz = get32(&fbuf[28]);
48+
heap_adr = stksiz + dsize + bsssiz;
49+
heap_adr = (heap_adr + 0xf) & 0xfffffff0;
50+
wrksiz = heap_adr + heap_siz;
51+
wrksiz = (wrksiz + 0xfff) & 0xfffff000;
52+
put32(&fbuf[ 0], wrksiz);
53+
for (i = 0; i < 4; i++)
54+
fbuf[4 + i] = sign[i];
55+
put32(&fbuf[ 8], mmarea);
56+
put32(&fbuf[12], stksiz);
57+
put32(&fbuf[16], dsize);
58+
put32(&fbuf[20], dofs);
59+
put32(&fbuf[24], 0xe9000000);
60+
put32(&fbuf[28], entry - 0x20);
61+
put32(&fbuf[32], heap_adr);
62+
fp = fopen(argv[2], "wb");
63+
if (fp == NULL) {
64+
err_hrb:
65+
puts("hel file write error");
66+
return 1;
67+
}
68+
i = fwrite(fbuf, 1, fsiz, fp);
69+
fclose(fp);
70+
if (fsiz != i)
71+
goto err_hrb;
72+
73+
return 0;
74+
}
75+
76+
int getnum(const UCHAR *p)
77+
{
78+
int i = 0, base = 10, sign = 1;
79+
UCHAR c;
80+
if (*p == '-') {
81+
p++;
82+
sign = -1;
83+
}
84+
if (*p == '0') {
85+
p++;
86+
base = 8;
87+
c = *p;
88+
if (c >= 'a')
89+
c -= 'a' - 'A';
90+
if (c == 'X') {
91+
p++;
92+
base = 16;
93+
}
94+
if (c == 'O') {
95+
p++;
96+
base = 8;
97+
}
98+
if (c == 'B') {
99+
p++;
100+
base = 2;
101+
}
102+
}
103+
for (;;) {
104+
c = *p++;
105+
if ('0' <= c && c <= '9')
106+
c -= '0';
107+
else if ('A' <= c && c <= 'F')
108+
c -= 'A' - 10;
109+
else if ('a' <= c && c <= 'f')
110+
c -= 'a' - 10;
111+
else
112+
break;
113+
if (c >= base)
114+
break;
115+
i = i * base + c;
116+
}
117+
if (c >= 'a')
118+
c -= 'a' - 'A';
119+
if (c == 'K')
120+
i <<= 10;
121+
if (c == 'M')
122+
i <<= 20;
123+
if (c == 'G')
124+
i <<= 30;
125+
return i * sign;
126+
}
127+
128+
int get32(const UCHAR *p)
129+
{
130+
return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24;
131+
}
132+
133+
void put32(UCHAR *p, int i)
134+
{
135+
p[0] = i & 0xff;
136+
p[1] = (i >> 8) & 0xff;
137+
p[2] = (i >> 16) & 0xff;
138+
p[3] = (i >> 24) & 0xff;
139+
return;
140+
}

bim2hel/bim2hel.exe

4 KB
Binary file not shown.

bim2hel/cmd.bat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
cmd.exe

bim2hel/make.bat

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9

0 commit comments

Comments
 (0)