]> git.sur5r.net Git - cc65/commitdiff
Added code to make the 65816's MVN and MVP instructions handle both immediate (bank...
authorGreg King <gregdk@users.sf.net>
Sun, 29 Jul 2018 07:50:02 +0000 (03:50 -0400)
committerGreg King <gregdk@users.sf.net>
Sun, 29 Jul 2018 07:50:02 +0000 (03:50 -0400)
src/ca65/instr.c

index 8d1e967054a6211a8f863b3dd375e7a7055b5663..eb005289cc44e00bfe1384f56d11606917e51cc8 100644 (file)
@@ -1295,18 +1295,38 @@ static void PutPCRel4510 (const InsDesc* Ins)
 }
 
 
+
 static void PutBlockMove (const InsDesc* Ins)
 /* Handle the blockmove instructions (65816) */
 {
-    ExprNode* Arg1 = Expression ();
+    ExprNode* Arg1;
+    ExprNode* Arg2;
 
     Emit0 (Ins->BaseCode);
+
+    if (CurTok.Tok == TOK_HASH) {
+        /* The operand is a bank-byte expression. */
+        NextTok ();
+        Arg1 = Expression ();
+    } else {
+        /* The operand is a far-address expression.
+        ** Use only its bank part.
+        */
+        Arg1 = FuncBankByte ();
+    }
     ConsumeComma ();
 
+    if (CurTok.Tok == TOK_HASH) {
+        NextTok ();
+        Arg2 = Expression ();
+    } else {
+        Arg2 = FuncBankByte ();
+    }
+
     /* The operands are written in Assembly code as source, destination;
     ** but, they're assembled as <destination> <source>.
     */
-    EmitByte (Expression ());
+    EmitByte (Arg2);
     EmitByte (Arg1);
 }