git @ Cat's Eye Technologies SixtyPical / 7fb454f
Get rid of more IMM commands. Cat's Eye Technologies 11 years ago
3 changed file(s) with 14 addition(s) and 19 deletion(s). Raw diff Collapse all Expand all
6565 emitInstr p r (CMP X (NamedLocation label)) = "cpx " ++ label
6666 emitInstr p r (CMP Y (NamedLocation label)) = "cpy " ++ label
6767
68 emitInstr p r (CMPIMM A val) = "cmp #" ++ (show val)
69 emitInstr p r (CMPIMM X val) = "cpx #" ++ (show val)
70 emitInstr p r (CMPIMM Y val) = "cpy #" ++ (show val)
68 emitInstr p r (CMP A (Immediate val)) = "cmp #" ++ (show val)
69 emitInstr p r (CMP X (Immediate val)) = "cpx #" ++ (show val)
70 emitInstr p r (CMP Y (Immediate val)) = "cpy #" ++ (show val)
7171
7272 emitInstr p r (ADD A (NamedLocation label)) = "adc " ++ label
73 emitInstr p r (ADDIMM A val) = "adc #" ++ (show val)
73 emitInstr p r (ADD A (Immediate val)) = "adc #" ++ (show val)
7474
7575 emitInstr p r (AND A (NamedLocation label)) = "and " ++ label
76 emitInstr p r (ANDIMM A val) = "and #" ++ (show val)
76 emitInstr p r (AND A (Immediate val)) = "and #" ++ (show val)
7777
7878 emitInstr p r (SUB A (NamedLocation label)) = "sbc " ++ label
79 emitInstr p r (SUBIMM A val) = "sbc #" ++ (show val)
79 emitInstr p r (SUB A (Immediate val)) = "sbc #" ++ (show val)
8080
8181 emitInstr p r (OR A (NamedLocation label)) = "ora " ++ label
82 emitInstr p r (ORIMM A val) = "ora #" ++ (show val)
82 emitInstr p r (OR A (Immediate val)) = "ora #" ++ (show val)
8383
8484 emitInstr p r (DELTA X 1) = "inx"
8585 emitInstr p r (DELTA X (-1)) = "dex"
5858 deriving (Show, Ord, Eq)
5959
6060 data Instruction = COPY StorageLocation StorageLocation
61 | CMPIMM StorageLocation DataValue
6261 | CMP StorageLocation StorageLocation
63 | ADDIMM StorageLocation DataValue
6462 | ADD StorageLocation StorageLocation
65 | ANDIMM StorageLocation DataValue
6663 | AND StorageLocation StorageLocation
67 | SUBIMM StorageLocation DataValue
6864 | SUB StorageLocation StorageLocation
69 | ORIMM StorageLocation DataValue
7065 | OR StorageLocation StorageLocation
7166 | JSR RoutineName
7267 -- | JSRVECTOR StorageLocation
264264 cmp = do
265265 string "cmp"
266266 spaces
267 (try $ immediate (\v -> CMPIMM A v) <|>
267 (try $ immediate (\v -> CMP A (Immediate v)) <|>
268268 absolute (\l -> CMP A (NamedLocation l)))
269269
270270 cpx :: Parser Instruction
271271 cpx = do
272272 string "cpx"
273273 spaces
274 (try $ immediate (\v -> CMPIMM X v) <|>
274 (try $ immediate (\v -> CMP X (Immediate v)) <|>
275275 absolute (\l -> CMP X (NamedLocation l)))
276276
277277 cpy :: Parser Instruction
278278 cpy = do
279279 string "cpy"
280280 spaces
281 (try $ immediate (\v -> CMPIMM Y v) <|>
281 (try $ immediate (\v -> CMP Y (Immediate v)) <|>
282282 absolute (\l -> CMP Y (NamedLocation l)))
283283
284284 adc :: Parser Instruction
285285 adc = do
286286 string "adc"
287287 spaces
288 (try $ immediate (\v -> ADDIMM A v) <|>
288 (try $ immediate (\v -> ADD A (Immediate v)) <|>
289289 absolute (\l -> ADD A (NamedLocation l)))
290290
291291 sbc :: Parser Instruction
292292 sbc = do
293293 string "sbc"
294294 spaces
295 (try $ immediate (\v -> SUBIMM A v) <|>
295 (try $ immediate (\v -> SUB A (Immediate v)) <|>
296296 absolute (\l -> SUB A (NamedLocation l)))
297297
298298 and :: Parser Instruction
299299 and = do
300300 string "and"
301301 spaces
302 (try $ immediate (\v -> ANDIMM A v) <|>
302 (try $ immediate (\v -> AND A (Immediate v)) <|>
303303 absolute (\l -> AND A (NamedLocation l)))
304304
305305 ora :: Parser Instruction
306306 ora = do
307307 string "ora"
308308 spaces
309 (try $ immediate (\v -> ORIMM A v) <|>
309 (try $ immediate (\v -> OR A (Immediate v)) <|>
310310 absolute (\l -> OR A (NamedLocation l)))
311311
312312 lda :: Parser Instruction