diff d09.c @ 33:7c5379eb406e

nitors9 version
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Jul 2018 15:22:54 +0900
parents 10e33568b38a
children 2032755628dc
line wrap: on
line diff
--- a/d09.c	Sat Jul 14 15:16:39 2018 +0900
+++ b/d09.c	Sat Jul 14 15:22:54 2018 +0900
@@ -1304,14 +1304,15 @@
 				  code, postbyte, suffix, op->name, IndexRegister(postbyte));
 		break;
 	 case 0x0c :
-		offset = (prog[pc+2]+pc+3) & 0xFFFF;
+		offset = (*(char *)(prog+pc+2)+pc+3) & 0xFFFF;
 		s = "<";
 		fprintf(fp,"%0.2X %0.2X %0.2X    %s%s       %s$%0.2X,PCR",
 				  code, postbyte, prog[pc+2], suffix, op->name, s, offset+adoffset);
 		extrabytes = 1;
 		break;
 	 case 0x0d :
-		offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF;
+		offset = prog[pc+2] * 256 + prog[pc+3];
+		offset = ((offset>0x7fff?offset-0x8001 : offset )+pc+4) & 0xFFFF;
 		s = ">";
 		fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s       %s$%0.4X,PCR",
 				  code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+adoffset);
@@ -1384,14 +1385,15 @@
 				  code, postbyte, suffix, op->name, IndexRegister(postbyte));
 		break;
 	 case 0x1c :
-		offset = (prog[pc+2]+pc+3) & 0xFFFF;
+		offset = (*((char*)prog+pc+2)+pc+3) & 0xFFFF;
 		s = "<";
 		fprintf(fp,"%0.2X %0.2X %0.2X    %s%s       [%s$%0.2X,PCR]",
 				  code, postbyte, prog[pc+2], suffix, op->name, s, offset+adoffset);
 		extrabytes = 1;
 		break;
 	 case 0x1d :
-		offset = (prog[pc+2] * 256 + prog[pc+3]+pc+4) & 0xFFFF;
+		offset = prog[pc+2] * 256 + prog[pc+3];
+		offset = ((offset>0x7fff?offset-0x8001 : offset )+pc+4) & 0xFFFF;
 		s = ">";
 		fprintf(fp,"%0.2X %0.2X %0.2X %0.2X %s%s       [%s$%0.4X,PCR]",
 				  code, postbyte, prog[pc+2], prog[pc+3], suffix, op->name, s, offset+adoffset);