Mercurial > hg > Members > kono > os9 > sbc09
changeset 105:6eef99bb4771
fix runtime
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 29 Dec 2018 12:25:26 +0900 |
parents | 096b3fc7aa66 |
children | 6566b9f47f4a |
files | os9/mc09/crtos9.asm os9/mc09/makefile os9/mc09/mc.c os9/mc09/mc2.c os9/mc09/mclibos9.c |
diffstat | 5 files changed, 54 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/os9/mc09/crtos9.asm Fri Dec 28 17:43:55 2018 +0900 +++ b/os9/mc09/crtos9.asm Sat Dec 29 12:25:26 2018 +0900 @@ -31,14 +31,42 @@ pshs x,y POINT TO CONTENT OF ARGUMENT VECTOR leay ,u PSHS Y + leay _GLOBALS,y + sty heapp,y + +* allocate memory and change stack +* try to allocate maximum memory if not specified + ifndef __MEMSIZ + LDD #(1024*48) + else + LDD #__MEMSIZ + endif + pshs d +__0C004 + os9 F$Mem + bcc __0C005 + ldd ,s + subd #$1000 + blo exit can't get any memroy + std ,s + bra __0C004 +__0C005 +* y is heap upper bound +* copy saved arg into new stack +* and change the stack + leax ,y + ldy 2,s + ldd 4,s + std ,--x + ldd 6,s + std ,--x + leas ,x * clear globals on Y - LDX #_GLOBALS -_0C002 BEQ _0C003 - CLR ,Y+ - LEAX -1,X - BRA _0C002 - -_0C003 PULS Y + LDD #_GLOBALS +_0C002 CLR D,Y + subd #1 + BNE _0C002 +_0C003 LBSR _INITIALIZE call initializer LBSR _main exit clrb @@ -68,6 +96,7 @@ ADDA 5,S LEAS 6,S +initheap RTS * _00002 CLR ,-S signed divide
--- a/os9/mc09/makefile Fri Dec 28 17:43:55 2018 +0900 +++ b/os9/mc09/makefile Sat Dec 29 12:25:26 2018 +0900 @@ -37,7 +37,7 @@ patch <diff_to_mc2 -o mc2.c testcp : mc test/cp.c - ./mc -Mtestcp test/cp.c + ./mc -s -Mtestcp test/cp.c $(AS09) crtos9.asm -l c.lst -o testcp clean:
--- a/os9/mc09/mc.c Fri Dec 28 17:43:55 2018 +0900 +++ b/os9/mc09/mc.c Sat Dec 29 12:25:26 2018 +0900 @@ -212,7 +212,8 @@ if (!chk) { if ( (obuf = fopen(ccout,"w")) == NULL ) error(FILERR); else { - printf("\tmod _eom,_name,_tylg,_atrv,_start,_GLOBALS\n"); /* os9 module header */ + /* we'l resize data area later */ + printf("\tmod _eom,_name,_tylg,_atrv,_start,16384\n"); /* os9 module header */ printf("_name fcs /%s/\n\tfcb 0\n",modname); } } @@ -1865,9 +1866,9 @@ s=(char *)cadr(e1); lb=fwdlabel(); if ((l = caddr(e1)) < 128) - printf("\tLEAX\t2,PC\n\tBRA\t_%d\n",lb); + printf("\tLEAX\t*+5,PCR\n\tBRA\t_%d\n",lb); else - printf("\tLEAX\t3,PC\n\tLBRA\t_%d\n",lb); + printf("\tLEAX\t*+6,PCR\n\tLBRA\t_%d\n",lb); do { printf("\tFCB\t%d",*s++); for (i=8; --l && --i;) printf(",%d",*s++);
--- a/os9/mc09/mc2.c Fri Dec 28 17:43:55 2018 +0900 +++ b/os9/mc09/mc2.c Sat Dec 29 12:25:26 2018 +0900 @@ -1858,9 +1858,9 @@ s=(char *)cadr(e1); lb=fwdlabel(); if ((l = caddr(e1)) < 128) - printf("\tLEAX\t2,PC\n\tBRA\t_%d\n",lb); + printf("\tLEAX\t*+5,PCR\n\tBRA\t_%d\n",lb); else - printf("\tLEAX\t3,PC\n\tLBRA\t_%d\n",lb); + printf("\tLEAX\t*+6,PCR\n\tLBRA\t_%d\n",lb); do { printf("\tFCB\t%d",*s++); for (i=8; --l && --i;) printf(",%d",*s++);
--- a/os9/mc09/mclibos9.c Fri Dec 28 17:43:55 2018 +0900 +++ b/os9/mc09/mclibos9.c Sat Dec 29 12:25:26 2018 +0900 @@ -31,9 +31,9 @@ #define STDOUT (&_s0[1]) #define STDERR (&_s0[2]) -_main(args,prog) +_main(prog,args) +char *prog; char *args; -char *prog; {int i; char **argv,*p,*q; int argc,n,quote,c; @@ -54,12 +54,13 @@ quote = 0; q = p = args; if (i==1) argv[n] = args; - while((c = *p++) && c!='\r') { + while((c = *p) && c!='\r') { if (c=='\'') { if (!quote) { - q--; + p++; quote = 1; } else { + p++; if (i==1) *q=0; quote = 0; } @@ -68,14 +69,14 @@ } else if (c==' ') { if (!quote) { if (i==1) { - *q = 0; argv[n++] = q+1; + *q = 0; argv[++n] = q+1; } } } if (i==1) *q = *p; q++; p++; } - if (i==1) *q = 0; + if (i==1) { *q = 0; argv[++n] = q+1; } argc = n; } argv[n]=0; @@ -115,6 +116,7 @@ if ( i >= NFILES) return NULL; if ( (fcbp = malloc(FCBSIZE)) == NULL ) return NULL; if ( _setname(name,fcbp) == 0 ) return NULL; + 0; #asm pshs x,y,u ldx -4,u @@ -152,6 +154,7 @@ if ( i >= NFILES) return NULL; if ( (fcbp = malloc(FCBSIZE)) == NULL ) return NULL; if ( _setname(name,fcbp) == 0 ) return NULL; + 0; #asm pshs x,y,u ldx -4,u @@ -187,6 +190,7 @@ if ( i >= NFILES ) return EOF; _fcbtbl[i] = NULL; if ( (fcbp == STDIN) || (fcbp == STDOUT) || (fcbp == STDERR) ) return 0; + 0; #asm pshs x,y,u ldx -4,u @@ -535,11 +539,7 @@ #asm sbrk PSHS U LEAU ,S - - LDD heapp,Y - BNE _mc0 - BSR initheap -_mc0 PSHS D + PSHS D TFR S,D SUBD ,S++ CMPD 4,U @@ -556,14 +556,6 @@ LEAS ,U PULS U,PC -initheap - PSHS U - LEAU ,S - TFR Y,D - ADDD #_GLOBALS - STD heapp,Y - LEAS ,U - PULS U,PC #endasm mfree(ap)