Get rid of more IMM commands.
Cat's Eye Technologies
11 years ago
65 | 65 | emitInstr p r (CMP X (NamedLocation label)) = "cpx " ++ label |
66 | 66 | emitInstr p r (CMP Y (NamedLocation label)) = "cpy " ++ label |
67 | 67 | |
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) | |
71 | 71 | |
72 | 72 | 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) | |
74 | 74 | |
75 | 75 | 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) | |
77 | 77 | |
78 | 78 | 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) | |
80 | 80 | |
81 | 81 | 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) | |
83 | 83 | |
84 | 84 | emitInstr p r (DELTA X 1) = "inx" |
85 | 85 | emitInstr p r (DELTA X (-1)) = "dex" |
58 | 58 | deriving (Show, Ord, Eq) |
59 | 59 | |
60 | 60 | data Instruction = COPY StorageLocation StorageLocation |
61 | | CMPIMM StorageLocation DataValue | |
62 | 61 | | CMP StorageLocation StorageLocation |
63 | | ADDIMM StorageLocation DataValue | |
64 | 62 | | ADD StorageLocation StorageLocation |
65 | | ANDIMM StorageLocation DataValue | |
66 | 63 | | AND StorageLocation StorageLocation |
67 | | SUBIMM StorageLocation DataValue | |
68 | 64 | | SUB StorageLocation StorageLocation |
69 | | ORIMM StorageLocation DataValue | |
70 | 65 | | OR StorageLocation StorageLocation |
71 | 66 | | JSR RoutineName |
72 | 67 | -- | JSRVECTOR StorageLocation |
264 | 264 | cmp = do |
265 | 265 | string "cmp" |
266 | 266 | spaces |
267 | (try $ immediate (\v -> CMPIMM A v) <|> | |
267 | (try $ immediate (\v -> CMP A (Immediate v)) <|> | |
268 | 268 | absolute (\l -> CMP A (NamedLocation l))) |
269 | 269 | |
270 | 270 | cpx :: Parser Instruction |
271 | 271 | cpx = do |
272 | 272 | string "cpx" |
273 | 273 | spaces |
274 | (try $ immediate (\v -> CMPIMM X v) <|> | |
274 | (try $ immediate (\v -> CMP X (Immediate v)) <|> | |
275 | 275 | absolute (\l -> CMP X (NamedLocation l))) |
276 | 276 | |
277 | 277 | cpy :: Parser Instruction |
278 | 278 | cpy = do |
279 | 279 | string "cpy" |
280 | 280 | spaces |
281 | (try $ immediate (\v -> CMPIMM Y v) <|> | |
281 | (try $ immediate (\v -> CMP Y (Immediate v)) <|> | |
282 | 282 | absolute (\l -> CMP Y (NamedLocation l))) |
283 | 283 | |
284 | 284 | adc :: Parser Instruction |
285 | 285 | adc = do |
286 | 286 | string "adc" |
287 | 287 | spaces |
288 | (try $ immediate (\v -> ADDIMM A v) <|> | |
288 | (try $ immediate (\v -> ADD A (Immediate v)) <|> | |
289 | 289 | absolute (\l -> ADD A (NamedLocation l))) |
290 | 290 | |
291 | 291 | sbc :: Parser Instruction |
292 | 292 | sbc = do |
293 | 293 | string "sbc" |
294 | 294 | spaces |
295 | (try $ immediate (\v -> SUBIMM A v) <|> | |
295 | (try $ immediate (\v -> SUB A (Immediate v)) <|> | |
296 | 296 | absolute (\l -> SUB A (NamedLocation l))) |
297 | 297 | |
298 | 298 | and :: Parser Instruction |
299 | 299 | and = do |
300 | 300 | string "and" |
301 | 301 | spaces |
302 | (try $ immediate (\v -> ANDIMM A v) <|> | |
302 | (try $ immediate (\v -> AND A (Immediate v)) <|> | |
303 | 303 | absolute (\l -> AND A (NamedLocation l))) |
304 | 304 | |
305 | 305 | ora :: Parser Instruction |
306 | 306 | ora = do |
307 | 307 | string "ora" |
308 | 308 | spaces |
309 | (try $ immediate (\v -> ORIMM A v) <|> | |
309 | (try $ immediate (\v -> OR A (Immediate v)) <|> | |
310 | 310 | absolute (\l -> OR A (NamedLocation l))) |
311 | 311 | |
312 | 312 | lda :: Parser Instruction |