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)