changeset 29:3c14d647bb51

assembler and emulator fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 11 Jul 2018 21:16:06 +0900
parents d34482fd6945
children 7b1b25ff010a
files a09.c os9/level2/boot.asm trace.c v09.c
diffstat 4 files changed, 25 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/a09.c	Wed Jul 11 09:03:54 2018 +0900
+++ b/a09.c	Wed Jul 11 21:16:06 2018 +0900
@@ -43,6 +43,9 @@
                 Compatibility: Octal number prefix "&".
         2014-07-15 j at klasek at
                 Fixed usage message.
+        2018-07-11
+                leax  $ED00/256,x kernel offset in map
+                should be positive offset expr should be int(32bit)
 */
 
 #include <stdlib.h>
@@ -354,12 +357,12 @@
  srcptr--;
 }
 
-short scanexpr(int);
+int scanexpr(int);
 
-short scandecimal()
+int scandecimal()
 {
  char c;
- short t=0;
+ int t=0;
  c=*srcptr++;
  while(isdigit(c)) {
   t=t*10+c-'0';
@@ -369,9 +372,9 @@
  return t;
 }
 
-short scanhex()
+int scanhex()
 {
- short t=0,i=0;
+ int t=0,i=0;
  srcptr++;
  scanname();
  while(namebuf[i]>='0'&&namebuf[i]<='F') {
@@ -383,9 +386,9 @@
  return t;
 }
 
-short scanchar()
+int scanchar()
 {
- short t;
+ int t;
  srcptr++;
  t=*srcptr;
  if(t)srcptr++;
@@ -393,10 +396,10 @@
  return t;
 }
 
-short scanbin()
+int scanbin()
 {
  char c;
- short t=0;
+ int t=0;
  srcptr++;
  c=*srcptr++;
  while(c=='0'||c=='1') {
@@ -407,10 +410,10 @@
  return t;
 }
 
-short scanoct()
+int scanoct()
 {
  char c;
- short t=0;
+ int t=0;
  srcptr++;
  c=*srcptr++;
  while(c>='0'&&c<='7') {
@@ -422,7 +425,7 @@
 }
 
 
-short scanlabel()
+int scanlabel()
 {
  struct symrecord * p;
  scanname();
@@ -443,10 +446,10 @@
 }
 
 
-short scanfactor()
+int scanfactor()
 {
  char c;
- short t;
+ int t;
  skipspace();
  c=*srcptr;
  if(isalpha(c))return scanlabel();
@@ -484,9 +487,9 @@
    two addresses in same module */
 
 
-short scanexpr(int level) /* This is what you call _recursive_ descent!!!*/
+int scanexpr(int level) /* This is what you call _recursive_ descent!!!*/
 {
- short t,u;
+ int t,u;
  char oldcat,c;
  exprcat=0;
  if(level==10)return scanfactor();
--- a/os9/level2/boot.asm	Wed Jul 11 09:03:54 2018 +0900
+++ b/os9/level2/boot.asm	Wed Jul 11 21:16:06 2018 +0900
@@ -43,8 +43,6 @@
          adca   #0
          clrb
          std   ,s       size return as d
-      ** BtMem give us a little smaller memory
-         adda   #$20     request +0x2000
          os9    F$BtMem
          bcs    last
      **  u points the memory
--- a/trace.c	Wed Jul 11 09:03:54 2018 +0900
+++ b/trace.c	Wed Jul 11 21:16:06 2018 +0900
@@ -146,12 +146,12 @@
         fgets(s, sizeof(s)-1, stdin); 
         s[strlen(s)-1] = 0; // chop
         switch (s[0]) {
-        default:
         case 'n':   // step over
                 if (nexti()) {
                    bpskip = -1;
                    break;
                 } 
+        default:
         case 's':   // one step trace
                 trskip = 1;
                 if (s[1]) {
@@ -381,12 +381,14 @@
                     ofs=3; break;
                 }
             }
+            break;
         case 0x11: // page3
             {
                 if (op2==0x3f) { // SWI3
                     ofs=2; break;
                 }
             }
+            break;
         case 0x3f: // SWI
             ofs=1; break;
         case 0x3c: // CWAI
--- a/v09.c	Wed Jul 11 09:03:54 2018 +0900
+++ b/v09.c	Wed Jul 11 21:16:06 2018 +0900
@@ -90,14 +90,15 @@
  mmu = &mem[0xffa0];
  prog = (char*)mem;
  if (romstart==0x8000) {
-     romstart = memsize - 0x2000;
+     romstart = memsize - 0x10000 + 0xed00 ;
  }
+ fread(mem+ 0xe000,len,1,image);
 #else
  if (romstart==0x8000) {
      romstart = 0x10000 - len; 
  }
+ fread(mem+(romstart&0xffff),len,1,image);
 #endif
- fread(mem+(romstart&0xffff),len,1,image);
  mem[0xffa7] = 0x3f;
  fclose(image);
 }