オペランド長取得時のバグを修正
[YACASL2.git] / src / exec.c
index ec9687f..00cee8d 100644 (file)
@@ -30,20 +30,20 @@ void svcin()
 void svcout()
 {
     int i;
-    char c;
+    WORD w;
 
-    for(i = 0; i < GR[2]; i++) {
+    for(i = 0; i < memory[GR[2]]; i++) {
         if(GR[1] + i >= memsize - 1) {
             setcerr(203, NULL);    /* SVC output - out of Comet II memory */
             return;
         }
-        if(memory[GR[1]+i] == '\0') {
+        if((w = memory[GR[1]+i]) == '\0') {
             break;
         }
         /* 「文字の組」の符号表に記載された文字と、改行(CR)/タブを表示 */
         /* それ以外の文字は、「.」で表す */
-        if(((c = (char)(memory[GR[1]+i])) >= 0x20 && c <= 0x7E) || c == 0xA || c == '\t') {
-            putchar(c);
+        if((w >= 0x20 && w <= 0x7E) || w == 0xA || w == '\t') {
+            putchar((char)w);
         } else {
             putchar('.');
         }
@@ -273,7 +273,7 @@ void exec()
     char *errpr = malloc(8);
     clock_t clock_begin, clock_end;
 
-    if((&execmode)->tracemode) {
+    if((&execmode)->trace) {
         fprintf(stdout, "\nExecuting machine codes\n");
     }
     /* フラグレジスタの初期値設定 */
@@ -309,15 +309,15 @@ void exec()
         if(cerrno > 0) {
             goto execerr;
         }
-        if((&execmode)->tracemode){
+        if((&execmode)->trace){
             fprintf(stdout, "#%04X: Register::::\n", PR);
             dspregister();
         }
-        if((&execmode)->dumpmode){
+        if((&execmode)->dump){
             fprintf(stdout, "#%04X: Memory::::\n", PR);
             dumpmemory();
         }
-        if((&execmode)->dumpmode || (&execmode)->tracemode) {
+        if((&execmode)->dump || (&execmode)->trace) {
             fprintf(stdout, "\n");
         }
         PR++;