changeset 26:51a35f0347f6

fix label
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 11 Jul 2018 01:00:18 +0900
parents c4e3abe97e2c
children 2d6772a5c076
files a09.c os9/Makefile os9/level2/boot.asm
diffstat 3 files changed, 16 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/a09.c	Tue Jul 10 15:38:58 2018 +0900
+++ b/a09.c	Wed Jul 11 01:00:18 2018 +0900
@@ -180,6 +180,7 @@
 int symcounter=0;
 int os9 = 0;   // os9 flag
 int prevloc = 0;
+struct symrecord * prevlp = 0;
 
 /* expression categories...
    ECORD   all zeros is ordinary constant.
@@ -893,6 +894,11 @@
 void
 setlabel(struct symrecord * lp)
 {
+ if (prevlp) {
+     struct symrecord *l = prevlp;
+     prevlp = 0;
+     setlabel(l);
+ }
  if(lp) {
   if(lp->cat!=13&&lp->cat!=6) {
    if(lp->cat!=2||lp->value!=loccounter)
@@ -1355,6 +1361,9 @@
  if(isalnum(*srcptr)) {
   scanname();lp=findsym(namebuf);
   if(*srcptr==':') srcptr++;
+  if(lp && pass==2) {
+    oldlc = lp->value;
+  }
  }
  skipspace();
  if(isalnum(*srcptr)) {
@@ -1387,7 +1396,9 @@
    if(c!=' '&&*(srcptr-1)!=' '&&c!=0&&c!=';')error|=2;
   }
   else error|=0x8000;
- }else setlabel(lp);
+ } else {
+     prevlp = lp;    // os9 mode label can be data or code 
+ }
  if(pass==2) {
   outbuffer();
   if(listing)outlist();
@@ -1530,6 +1541,7 @@
    srcptr=srcline;
    if(suppress)suppressline(); else processline();
  }
+ setlabel(0);   // process prevlp
  fclose(srcfile);
  if(suppress) {
    fprintf(stderr,"improperly nested IF statements in %s",curname);
--- a/os9/Makefile	Tue Jul 10 15:38:58 2018 +0900
+++ b/os9/Makefile	Wed Jul 11 01:00:18 2018 +0900
@@ -22,5 +22,5 @@
 	./makerom -o os9d.rom  modules/Shell modules/init.b modules/mdir modules/dir.b modules/SysGo modules/IOMan modules/pty-dd.b modules/pty.b modules/pdisk.b modules/d0.b modules/d1.b modules/clock.b modules/SCF modules/rbf.b modules/OS9p2 modules/OS9
    
 os9lv2.rom : makerom level2/init
-	# ./makerom -o os9lv2.rom -2  level2/Shell  level2/d1 level2/dir  level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman  level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
-	./makerom -o os9lv2.rom -2  level2/Shell  level2/d1 level2/dir level2/mdir level2/ioman   level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
+	./makerom -o os9lv2.rom -2  level2/Shell  level2/d1 level2/mdir  level2/ioman  level2/os9p3_perr level2/os9p4_regdump  level2/pipe level2/piper level2/pipeman  level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
+# ./makerom -o os9lv2.rom -2  level2/Shell  level2/d1 level2/dir level2/mdir level2/ioman   level2/scf level2/rbf level2/os9p2 level2/sysgo level2/pdisk level2/d0 level2/pty level2/term level2/init level2/boot level2/os9p1 
--- a/os9/level2/boot.asm	Tue Jul 10 15:38:58 2018 +0900
+++ b/os9/level2/boot.asm	Wed Jul 11 01:00:18 2018 +0900
@@ -41,10 +41,9 @@
          bcs    last
          std   ,s       size return as d
          addb   #$ff     BtMem give us a little smaller memory
-         adda   #$0f     request +0x2000
+         adda   #$2f     request +0x2000
          clrb
          anda   #$e0
-         addd   #-1
          os9    F$BtMem
          bcs    last
      **  u points the memory