X-Git-Url: http://git.osdn.net/view?p=chnosproject%2FCHNOSProject.git;a=blobdiff_plain;f=CHNOSProject%2Fchnos%2Ftolset_chn_000%2Fz_tools%2Ftolsrc_chn%2Fbim2chn%2Fbim2chn.c;fp=CHNOSProject%2Fchnos%2Ftolset_chn_000%2Fz_tools%2Ftolsrc_chn%2Fbim2chn%2Fbim2chn.c;h=0000000000000000000000000000000000000000;hp=e4c65adde5da756cadb36b7344d2eec31231cf1f;hb=b5024d774f4b8266155880a767a76408903ed886;hpb=e7d5093d765f166cb92f5ed6e5e5d19173aebf5d diff --git a/CHNOSProject/chnos/tolset_chn_000/z_tools/tolsrc_chn/bim2chn/bim2chn.c b/CHNOSProject/chnos/tolset_chn_000/z_tools/tolsrc_chn/bim2chn/bim2chn.c deleted file mode 100644 index e4c65ad..0000000 --- a/CHNOSProject/chnos/tolset_chn_000/z_tools/tolsrc_chn/bim2chn/bim2chn.c +++ /dev/null @@ -1,180 +0,0 @@ -#include -#include - -typedef unsigned char UCHAR; -int getnum(const UCHAR *p); -int get32(const UCHAR *p); -void put32(UCHAR *p, int i); - -#define MAXSIZ 4 * 1024 * 1024 - -int main(int argc, UCHAR **argv) -{ - UCHAR *fbuf = malloc(MAXSIZ); - int heap_siz, mmarea, fsiz, dsize, dofs, stksiz, wrksiz, entry, bsssiz; - int heap_adr, i; - FILE *fp; - static UCHAR sign[4] = "CHNP"; - - /* ƒpƒ‰ƒ[ƒ^‚̎擾 */ - if (argc < 4) { - puts("usage>bim2chn appname.bim appname.chn heap-size [mmarea-size]"); - return 1; - } - heap_siz = getnum(argv[3]); - mmarea = 0; - if (argc >= 5) - mmarea = getnum(argv[4]); - - /* ƒtƒ@ƒCƒ‹“ǂݍž‚Ý */ - fp = fopen(argv[1], "rb"); - if (fp == NULL) { -err_bim: - puts("bim file read error"); - return 1; - } - fsiz = fread(fbuf, 1, MAXSIZ, fp); - fclose(fp); - if (fsiz >= MAXSIZ || fsiz < 0) - goto err_bim; - - /* ƒwƒbƒ_Šm”F */ - if (get32(&fbuf[4]) != 0x24) { /* ƒtƒ@ƒCƒ‹’†‚Ì.textƒXƒ^[ƒgƒAƒhƒŒƒX */ -err_form: - puts("bim file format error"); - return 1; - } - if (get32(&fbuf[8]) != 0x24) /* ƒƒ‚ƒŠƒ[ƒhŽž‚Ì.textƒXƒ^[ƒgƒAƒhƒŒƒX */ - goto err_form; - dsize = get32(&fbuf[12]); /* .dataƒZƒNƒVƒ‡ƒ“ƒTƒCƒY */ - dofs = get32(&fbuf[16]); /* ƒtƒ@ƒCƒ‹‚Ì‚Ç‚±‚É.dataƒZƒNƒVƒ‡ƒ“‚ª‚ ‚é‚© */ - stksiz = get32(&fbuf[20]); /* ƒXƒ^ƒbƒNƒTƒCƒY */ - entry = get32(&fbuf[24]); /* ƒGƒ“ƒgƒŠƒ|ƒCƒ“ƒg */ - bsssiz = get32(&fbuf[28]); /* bssƒTƒCƒY */ - - /* ƒwƒbƒ_¶¬ */ - heap_adr = stksiz + dsize + bsssiz; - heap_adr = (heap_adr + 0xf) & 0xfffffff0; /* 16ƒoƒCƒg’PˆÊ‚ɐ؂èã‚° */ - wrksiz = heap_adr + heap_siz; - wrksiz = (wrksiz + 0xfff) & 0xfffff000; /* 4KB’PˆÊ‚ɐ؂èã‚° */ - put32(&fbuf[ 0], wrksiz); - for (i = 0; i < 4; i++) - fbuf[4 + i] = sign[i]; - put32(&fbuf[ 8], mmarea); - put32(&fbuf[12], stksiz); - put32(&fbuf[16], dsize); - put32(&fbuf[20], dofs); - put32(&fbuf[24], 0xe9000000); - put32(&fbuf[28], entry - 0x20); - put32(&fbuf[32], heap_adr); - - /* ƒtƒ@ƒCƒ‹‘‚«ž‚Ý */ - fp = fopen(argv[2], "wb"); - if (fp == NULL) { -err_chn: - puts("chn file write error"); - return 1; - } - i = fwrite(fbuf, 1, fsiz, fp); - fclose(fp); - if (fsiz != i) - goto err_chn; - - return 0; -} - -int getnum(const UCHAR *p) -{ - int i = 0, base = 10, sign = 1; - UCHAR c; - if (*p == '-') { - p++; - sign = -1; - } - if (*p == '0') { - p++; - base = 8; - c = *p; - if (c >= 'a') - c -= 'a' - 'A'; - if (c == 'X') { - p++; - base = 16; - } - if (c == 'O') { - p++; - base = 8; - } - if (c == 'B') { - p++; - base = 2; - } - } - for (;;) { - c = *p++; - if ('0' <= c && c <= '9') - c -= '0'; - else if ('A' <= c && c <= 'F') - c -= 'A' - 10; - else if ('a' <= c && c <= 'f') - c -= 'a' - 10; - else - break; - if (c >= base) - break; - i = i * base + c; - } - if (c >= 'a') - c -= 'a' - 'A'; - if (c == 'K') - i <<= 10; - if (c == 'M') - i <<= 20; - if (c == 'G') - i <<= 30; - return i * sign; -} - -int get32(const UCHAR *p) -{ - return p[0] | p[1] << 8 | p[2] << 16 | p[3] << 24; -} - -void put32(UCHAR *p, int i) -{ - p[0] = i & 0xff; - p[1] = (i >> 8) & 0xff; - p[2] = (i >> 16) & 0xff; - p[3] = (i >> 24) & 0xff; - return; -} - -/* - -memo - -[ .bimƒtƒ@ƒCƒ‹‚̍\‘¢ ] - -+ 0 : .textƒTƒCƒY -+ 4 : ƒtƒ@ƒCƒ‹’†‚Ì.textƒXƒ^[ƒgƒAƒhƒŒƒXi0x24j -+ 8 : ƒƒ‚ƒŠƒ[ƒhŽž‚Ì.textƒXƒ^[ƒgƒAƒhƒŒƒXi0x24j -+12 : .dataƒTƒCƒY -+16 : ƒtƒ@ƒCƒ‹’†‚Ì.dataƒXƒ^[ƒgƒAƒhƒŒƒX -+20 : ƒƒ‚ƒŠƒ[ƒhŽž‚Ì.dataƒXƒ^[ƒgƒAƒhƒŒƒX -+24 : ƒGƒ“ƒgƒŠƒ|ƒCƒ“ƒg -+28 : bss—̈æ‚̃oƒCƒg” -+36 : ƒR[ƒh - -[ .chnƒtƒ@ƒCƒ‹‚̍\‘¢ (.hrb‚ƃVƒOƒlƒ`ƒƒˆÈŠO“¯“™)] - -+ 0 : stack+.data+heap ‚Ì‘å‚«‚³i4KB‚Ì”{”j -+ 4 : ƒVƒOƒlƒ`ƒƒ "CHNP" -+ 8 : mmarea ‚Ì‘å‚«‚³i4KB‚Ì”{”j -+12 : ƒXƒ^ƒbƒN‰Šú’l•.data“]‘—æ -+16 : .data‚̃TƒCƒY -+20 : .data‚̏‰Šú’l—ñ‚ªƒtƒ@ƒCƒ‹‚Ì‚Ç‚±‚É‚ ‚é‚© -+24 : 0xe9000000 -+28 : ƒGƒ“ƒgƒŠƒAƒhƒŒƒX-0x20 -+32 : heap—̈æimalloc—̈æjŠJŽnƒAƒhƒŒƒX - -*/