From 1470f01a90e13c7833947bb8539d7bfba229ce34 Mon Sep 17 00:00:00 2001 From: Mark Canlas Date: Wed, 12 Aug 2020 22:16:53 -0400 Subject: [PATCH] pattern matching --- src/main/scala/com/htmlism/MatchOpcodes.scala | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/scala/com/htmlism/MatchOpcodes.scala b/src/main/scala/com/htmlism/MatchOpcodes.scala index ad9003d..989c022 100644 --- a/src/main/scala/com/htmlism/MatchOpcodes.scala +++ b/src/main/scala/com/htmlism/MatchOpcodes.scala @@ -266,12 +266,27 @@ object MatchOpcodes { Seq(ASL, ROL, LSR, ROR, STX, LDX, DEC, INC)(aaa) val addressingMode = - Seq(Immediate, ZeroPage, Accumulator, Absolute, NoMode, ZeroPageX, NoMode, AbsoluteX)(bbb) + Seq(Immediate, ZeroPage, Accumulator, Absolute, NoMode, ZeroPageX, Implied, AbsoluteX)(bbb) - if (addressingMode == NoMode) - None - else + val useLookup = (instruction -> addressingMode).some + + (instruction, addressingMode) match { + case (ASL | ROL | LSR | ROR, ZeroPage | Accumulator | Absolute | ZeroPageX | AbsoluteX) => + useLookup + + case (STX, ZeroPage | Absolute) => + useLookup + + case (DEC | INC, ZeroPage | Absolute | AbsoluteX | ZeroPageX) => + useLookup + + case (LDX, Immediate | ZeroPage | Absolute) => + useLookup + + case _ => + None + } } def c00(aaa: Int, bbb: Int): Option[(Instruction, AddressingMode)] = { @@ -281,18 +296,21 @@ object MatchOpcodes { val addressingMode = Seq(Immediate, ZeroPage, NoMode, Absolute, NoMode, ZeroPageX, NoMode, AbsoluteX)(bbb) + val useLookup = + (instruction -> addressingMode).some + (instruction, addressingMode) match { case (BIT, ZeroPage | Absolute) => - (instruction -> addressingMode).some + useLookup case (STY, ZeroPage | Absolute | ZeroPageX) => - (instruction -> addressingMode).some + useLookup case (LDY, Immediate | ZeroPage | Absolute | ZeroPageX | AbsoluteX) => - (instruction -> addressingMode).some + useLookup case (CPY | CPX, Immediate | ZeroPage | Absolute) => - (instruction -> addressingMode).some + useLookup case _ => None