diff --git a/ROM.bin b/ROM.bin
index 89f0759..be9bf96 100644
--- a/ROM.bin
+++ b/ROM.bin
@@ -2431,37 +2431,37 @@ v3.0 hex words addressed
4be8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
4bf0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
4bf8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c08: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c10: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c10: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c18: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c20: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c20: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c28: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c30: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c30: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c38: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c40: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c40: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c48: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c50: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c50: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c58: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c60: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c60: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c68: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c70: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c70: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c78: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c80: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c80: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c88: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4c90: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4c90: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4c98: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4ca0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4ca0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4ca8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4cb0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4cb0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4cb8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4cc0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4cc0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4cc8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4cd0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4cd0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4cd8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4ce0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4ce0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4ce8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-4cf0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+4cf0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
4cf8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
4d00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
4d08: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
@@ -2561,35 +2561,35 @@ v3.0 hex words addressed
4ff8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5000: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5008: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5010: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5010: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5018: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5020: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5028: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5030: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5030: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5038: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5040: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5048: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5050: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5050: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5058: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5060: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5068: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5070: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5070: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5078: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5080: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5088: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5090: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5090: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5098: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
50a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
50a8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-50b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+50b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
50b8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
50c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
50c8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-50d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+50d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
50d8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
50e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
50e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-50f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+50f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
50f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5100: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5108: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
@@ -2687,35 +2687,35 @@ v3.0 hex words addressed
53e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
53f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
53f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5400: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5400: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5408: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5410: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5418: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5420: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5420: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5428: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5430: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5438: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5440: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5440: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5448: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5450: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5458: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5460: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5460: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5468: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5470: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5478: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5480: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5480: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5488: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5490: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5498: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-54a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+54a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
54a8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
54b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
54b8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-54c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+54c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
54c8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
54d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
54d8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-54e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+54e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
54e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
54f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
54f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
@@ -2819,33 +2819,33 @@ v3.0 hex words addressed
5808: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5810: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5818: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5820: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5820: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5828: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5830: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5830: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5838: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5840: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5848: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5850: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5858: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5860: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5860: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5868: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5870: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5870: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5878: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5880: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5888: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5890: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5898: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-58a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+58a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
58a8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-58b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+58b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
58b8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
58c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
58c8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
58d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
58d8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-58e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+58e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
58e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-58f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+58f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
58f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5900: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5908: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
@@ -2943,33 +2943,33 @@ v3.0 hex words addressed
5be8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5bf0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5bf8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5c00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5c00: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5c08: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5c10: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5c10: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5c18: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5c20: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5c28: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5c30: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5c38: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5c40: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5c40: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5c48: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5c50: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5c50: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5c58: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5c60: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5c68: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5c70: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5c78: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5c80: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5c80: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5c88: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5c90: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5c90: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5c98: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5ca0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5ca8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5cb0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5cb8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5cc0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5cc0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5cc8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-5cd0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+5cd0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
5cd8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
5ce0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
5ce8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
@@ -3079,13 +3079,13 @@ v3.0 hex words addressed
6028: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
6030: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
6038: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6040: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6040: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6048: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6050: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6050: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6058: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6060: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6060: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6068: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6070: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6070: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6078: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
6080: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
6088: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
@@ -3095,13 +3095,13 @@ v3.0 hex words addressed
60a8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
60b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
60b8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-60c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+60c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
60c8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-60d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+60d0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
60d8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-60e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+60e0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
60e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-60f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+60f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
60f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
6100: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
6108: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
@@ -3199,13 +3199,13 @@ v3.0 hex words addressed
63e8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
63f0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
63f8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6400: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6400: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6408: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6410: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6410: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6418: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6420: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6420: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6428: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6430: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6430: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6438: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
6440: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
6448: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
@@ -3215,13 +3215,13 @@ v3.0 hex words addressed
6468: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
6470: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
6478: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6480: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6480: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6488: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-6490: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+6490: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
6498: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-64a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+64a0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
64a8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
-64b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
+64b0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 0000c006 40000000
64b8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
64c0: 00008040 0001c0a4 00008040 0001c0c4 00008040 0001c0e4 40000000 40000000
64c8: 40000000 40000000 40000000 40000000 40000000 40000000 40000000 40000000
diff --git a/assembly.py b/assembly.py
index 5e582e3..eb3007e 100644
--- a/assembly.py
+++ b/assembly.py
@@ -24,6 +24,14 @@ XOR = 6 << pin.ADDR_2_SHIFT | pin.ADDR_2
INC = 0 << pin.ADDR_1_SHIFT | pin.ADDR_1
DEC = 1 << pin.ADDR_1_SHIFT | pin.ADDR_1
NOT = 2 << pin.ADDR_1_SHIFT | pin.ADDR_1
+JMP = 3 << pin.ADDR_1_SHIFT | pin.ADDR_1
+
+JO = 4 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 溢出跳转
+JNO = 5 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 不溢出跳转
+JZ = 6 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 如果为0跳转
+JNZ = 7 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 非0跳转
+JP = 8 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 奇数跳转
+JNP = 9 << pin.ADDR_1_SHIFT | pin.ADDR_1 # 偶数跳转
NOP = 0b0
@@ -138,36 +146,36 @@ INSTRUCTIONS = {
],
},
AND: {
- (pin.AM_REG, pin.AM_INS): [ # sub b, 5
+ (pin.AM_REG, pin.AM_INS): [ # and b, 5
pin.DST_R | pin.A_IN, # 将b寄存器内的值 转移到 A寄存器
pin.SRC_OUT | pin.B_IN, # 将 src中的值 转移到 b寄存器
pin.OP_AND | pin.ALU_OUT | pin.DST_W | pin.ALU_PSW
],
- (pin.AM_REG, pin.AM_REG): [ # sub a, b
+ (pin.AM_REG, pin.AM_REG): [ # and a, b
pin.DST_R | pin.A_IN,
pin.SRC_R | pin.B_IN,
pin.OP_AND | pin.ALU_OUT | pin.DST_W | pin.ALU_PSW
],
},
OR: {
- (pin.AM_REG, pin.AM_INS): [ # sub b, 5
+ (pin.AM_REG, pin.AM_INS): [ # or b, 5
pin.DST_R | pin.A_IN, # 将b寄存器内的值 转移到 A寄存器
pin.SRC_OUT | pin.B_IN, # 将 src中的值 转移到 b寄存器
pin.OP_OR | pin.ALU_OUT | pin.DST_W | pin.ALU_PSW
],
- (pin.AM_REG, pin.AM_REG): [ # sub a, b
+ (pin.AM_REG, pin.AM_REG): [ # or a, b
pin.DST_R | pin.A_IN,
pin.SRC_R | pin.B_IN,
pin.OP_OR | pin.ALU_OUT | pin.DST_W | pin.ALU_PSW
],
},
XOR: {
- (pin.AM_REG, pin.AM_INS): [ # sub b, 5
+ (pin.AM_REG, pin.AM_INS): [ # xor b, 5
pin.DST_R | pin.A_IN, # 将b寄存器内的值 转移到 A寄存器
pin.SRC_OUT | pin.B_IN, # 将 src中的值 转移到 b寄存器
pin.OP_XOR | pin.ALU_OUT | pin.DST_W | pin.ALU_PSW
],
- (pin.AM_REG, pin.AM_REG): [ # sub a, b
+ (pin.AM_REG, pin.AM_REG): [ # xor a, b
pin.DST_R | pin.A_IN,
pin.SRC_R | pin.B_IN,
pin.OP_XOR | pin.ALU_OUT | pin.DST_W | pin.ALU_PSW
@@ -182,18 +190,53 @@ INSTRUCTIONS = {
],
},
DEC: {
- pin.AM_REG: [ # inc b
+ pin.AM_REG: [ # dec b
pin.DST_R | pin.A_IN,
pin.OP_DEC | pin.ALU_OUT | pin.DST_W | pin.ALU_PSW
],
},
NOT: {
- pin.AM_REG: [ # inc b
+ pin.AM_REG: [ # not b
pin.DST_R | pin.A_IN,
pin.OP_NOT | pin.ALU_OUT | pin.DST_W | pin.ALU_PSW
],
- }
+ },
+ JMP: { # jmp 0x5 跳转到立即数的地址
+ pin.AM_INS: [
+ pin.DST_OUT | pin.PC_IN,
+ ]
+ },
+ JO: {
+ pin.AM_INS: [
+ pin.DST_OUT | pin.PC_IN,
+ ]
+ },
+ JNO: {
+ pin.AM_INS: [
+ pin.DST_OUT | pin.PC_IN,
+ ]
+ },
+ JZ: {
+ pin.AM_INS: [
+ pin.DST_OUT | pin.PC_IN,
+ ]
+ },
+ JNZ: {
+ pin.AM_INS: [
+ pin.DST_OUT | pin.PC_IN,
+ ]
+ },
+ JP: {
+ pin.AM_INS: [
+ pin.DST_OUT | pin.PC_IN,
+ ]
+ },
+ JNP: {
+ pin.AM_INS: [
+ pin.DST_OUT | pin.PC_IN,
+ ]
+ },
},
0: {
NOP: [
diff --git a/compiler.py b/compiler.py
index 9150f99..877c971 100644
--- a/compiler.py
+++ b/compiler.py
@@ -21,13 +21,19 @@ OP2_STR_MAP = {
"and": ASM.AND,
"or": ASM.OR,
"xor": ASM.XOR,
-
}
OP1_STR_MAP = {
"inc": ASM.INC,
"dec": ASM.DEC,
"not": ASM.NOT,
+ "jmp": ASM.JMP,
+ "jo": ASM.JO,
+ "jno": ASM.JNO,
+ "jz": ASM.JZ,
+ "jnz": ASM.JNZ,
+ "jp": ASM.JP,
+ "jnp": ASM.JNP,
}
OP0_STR_MAP = {
@@ -41,17 +47,30 @@ OP0_VALUE_SET = set(OP0_STR_MAP.values())
class Code:
+ TYPE_CODE = 1
+ TYPE_LABLE = 2
def __init__(self, number, source):
- self.number: int = number # 行号
+ self.number: int = number # 源文件中行号
self.source: str = source # 源代码
self._op_str = self._src = self._dst = None
+ self.code_type = ...
+ self.name = ...
+ self.code_from_bin_addr = ... # 对应bin文件中的位置
+
self.prepare_source()
def __repr__(self):
- return f"[{self.number}] - op: {self._op_str}, dst: {self._dst}, src: {self._src} - '{self.source}'"
+ return f"[{self.number}-{self.code_from_bin_addr}] - op: {self._op_str}, dst: {self._dst}, src: {self._src} - '{self.source}'"
def prepare_source(self):
+ if self.source.endswith(":"):
+ self.code_type = self.TYPE_LABLE
+ self.name = self.source.strip(":")
+ return
+
+ self.code_type = self.TYPE_CODE
+
tup = self.source.split(",")
if len(tup) > 2:
raise Exception("指令格式错误")
@@ -82,6 +101,9 @@ class Code:
def get_am(self, addr: str):
# 得到目的操作数和源操作数, 返回(寻址方式, 地址)
+ global marks
+ if addr in marks:
+ return pin.AM_INS, marks[addr].code_from_bin_addr * 3 # 我们所有的指令都是占了3个字节: ir dst src
if addr is None:
return None, None
if addr in ALLOW_REGISTER_MAP: # 如果是寄存器寻址, 且必须是允许的寄存器
@@ -138,7 +160,29 @@ def compile_program(input_file: str):
continue
code = Code(idx + 1, source)
codes.append(code)
- return codes
+
+ # 保底的
+ codes.append(Code(idx + 1 + 1, "hlt"))
+
+ ret = []
+ marks = {}
+ current_code = ...
+ for code in reversed(codes): # 从后往前
+ if code.code_type == Code.TYPE_CODE:
+ current_code = code
+ ret.insert(0, code)
+ continue
+ if code.code_type == Code.TYPE_LABLE:
+ marks[code.name] = current_code
+ continue
+
+ raise Exception("语法之外的 错误")
+
+ # 更新代码在bin中的索引
+ for idx, code in enumerate(ret):
+ code.code_from_bin_addr = idx
+
+ return ret, marks
if __name__ == '__main__':
@@ -148,7 +192,8 @@ if __name__ == '__main__':
output_file = "test_mov.bin"
program_bin_data = []
- for code in compile_program(input_file):
+ ret_codes, marks = compile_program(input_file)
+ for code in ret_codes:
values = code.compile_code()
for value in values:
program_bin_data.append(value)
diff --git a/controller.py b/controller.py
index 87ebba0..9b1e76c 100644
--- a/controller.py
+++ b/controller.py
@@ -1,8 +1,11 @@
from assembly import FETCH, INSTRUCTIONS
+import assembly as ASM
import pin
META_DATA = "v3.0 hex words addressed\n"
+CJMPS = [ASM.JO, ASM.JNO, ASM.JZ, ASM.JNZ, ASM.JP, ASM.JNP]
+
def chunk(l, n):
for i in range(0, len(l), n):
yield l[i:i + n]
@@ -76,6 +79,28 @@ def compile_addr2(addr, ir, psw, idx):
return
+def get_condition_jump(EXEC, op, psw):
+ overflow = psw & 0b001
+ zero = psw & 0b010
+ partiy = psw & 0b100
+
+ if op == ASM.JO and overflow:
+ return EXEC
+ elif op == ASM.JNO and not overflow:
+ return EXEC
+ elif op == ASM.JZ and zero:
+ return EXEC
+ elif op == ASM.JNZ and not zero:
+ return EXEC
+ elif op == ASM.JP and partiy:
+ return EXEC
+ elif op == ASM.JNP and not partiy:
+ return EXEC
+ else:
+ return [pin.CYC]
+
+
+
def compile_addr1(addr, ir, psw, idx):
# 01xxxx[aa]
global base_bin_data
@@ -92,6 +117,12 @@ def compile_addr1(addr, ir, psw, idx):
return
EXEC = INST[op][amd]
+
+ # 判断是否是条件转移指令, 处在的 bin段
+ # 如果不是就用cyc填充
+ if op in CJMPS:
+ EXEC = get_condition_jump(EXEC, op, psw)
+
# 当前指令周期 长度塞不下了
if idx < len(EXEC):
# print(f"{hex(addr)} 写入指令: {bin(EXEC[idx])}")
diff --git a/cpu.circ b/cpu.circ
index fa61bbe..42ba5f9 100644
--- a/cpu.circ
+++ b/cpu.circ
@@ -3855,7 +3855,7 @@
-
+
@@ -5103,6 +5103,22 @@
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
@@ -5146,40 +5162,20 @@
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
+1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 c006 9*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
+1c0c4 8040 1c0e4 c006 9*40000000 8040 1c0a4 8040
1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
+1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 c006
+9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
@@ -5222,41 +5218,21 @@
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
+1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 c006 9*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
+1c0c4 8040 1c0e4 c006 9*40000000 8040 1c0a4 8040
1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
+1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
-8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
-1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
-8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
-1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
-8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
-1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
-10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 c006
+9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
@@ -5301,11 +5277,19 @@
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 c006 9*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 c006 9*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
@@ -5348,12 +5332,20 @@
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 c006 9*40000000 8040 1c0a4
+8040 1c0c4 8040 1c0e4 c006 9*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
+c006 9*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
@@ -5401,9 +5393,17 @@
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
@@ -5446,10 +5446,18 @@
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
+8040 1c0a4 8040 1c0c4 8040 1c0e4 c006 9*40000000
8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040
1c0a4 8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4
8040 1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040
1c0c4 8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
+8040 1c0e4 c006 9*40000000 8040 1c0a4 8040 1c0c4
8040 1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040
1c0e4 10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4
10*40000000 8040 1c0a4 8040 1c0c4 8040 1c0e4 10*40000000
diff --git a/program.bin b/program.bin
index 93dd2c7..b74f172 100644
--- a/program.bin
+++ b/program.bin
@@ -1,19 +1,23 @@
v3.0 hex words addressed
-0000: 84 08 05 84 0b 04 e5 08
-0008: 0b 49 08 00 3f 00 00 84
-0010: 08 fd 41 08 00 41 08 00
-0018: 41 08 00 45 08 00 45 08
-0020: 00 45 08 00 45 08 00 45
-0028: 08 00 45 08 00 45 08 00
-0030: 3f 00 00 84 09 05 94 09
-0038: 03 85 08 09 95 08 09 94
-0040: 08 fa 84 08 00 84 09 00
-0048: 95 08 09 84 08 05 84 09
-0050: 02 a5 08 09 a4 08 04 84
-0058: 08 04 84 09 02 a5 08 09
-0060: 3f 00 00 88 33 99 86 08
-0068: 33 89 2f 08 84 08 2f 8b
-0070: 00 08 84 08 00 8c 08 05
-0078: 84 08 01 8e 08 00 84 09
-0080: 02 84 0b 00 8f 09 0b 3f
-0088: 00 00
+0000: 84 0b 00 41 0b 00 b4 0b
+0008: 05 58 0f 00 4c 03 00 45
+0010: 0b 00 b4 0b 00 58 03 00
+0018: 4c 0f 00 3f 00 00 84 08
+0020: 05 84 0b 04 e5 08 0b 49
+0028: 08 00 3f 00 00 84 08 fd
+0030: 41 08 00 41 08 00 41 08
+0038: 00 45 08 00 45 08 00 45
+0040: 08 00 45 08 00 45 08 00
+0048: 45 08 00 45 08 00 3f 00
+0050: 00 84 09 05 94 09 03 85
+0058: 08 09 95 08 09 94 08 fa
+0060: 84 08 00 84 09 00 95 08
+0068: 09 84 08 05 84 09 02 a5
+0070: 08 09 a4 08 04 84 08 04
+0078: 84 09 02 a5 08 09 3f 00
+0080: 00 88 33 99 86 08 33 89
+0088: 2f 08 84 08 2f 8b 00 08
+0090: 84 08 00 8c 08 05 84 08
+0098: 01 8e 08 00 84 09 02 84
+00a0: 0b 00 8f 09 0b 3f 00 00
+00a8: 3f 00 00
diff --git a/test_mov.asm b/test_mov.asm
index 6310e0d..9c07fd6 100644
--- a/test_mov.asm
+++ b/test_mov.asm
@@ -11,8 +11,26 @@
;mov a, 0xff
;mov [0x0], a
-;逻辑运算 测试
+; 转移指令测试
+mov d, 0
+
+increase:
+ inc d
+ cmp d, 0x5
+ jz decrease
+ jmp increase
+decrease:
+ dec d
+ cmp d, 0x0
+ jz increase
+ jmp decrease
+end:
+ hlt
+
+
+
+;逻辑运算 测试
;mov a, 5
;mov d, 2
; and a, d ; a:0
@@ -25,7 +43,9 @@ not a ; a: 1111_1110
hlt
-; 加减法测试
+
+
+; 加减 1 测试
mov a, 253
inc a
inc a