Skip to content

Commit 28e4fc5

Browse files
committed
Add INC instruction (ZeroPage and Absolute modes)
1 parent b7fa75f commit 28e4fc5

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

crates/rmachine-mos6502/src/instructions.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,64 @@ pub const INSTRUCTIONS: &[Instruction] = &[
371371
assert!(!m.test_bit("SR", ZERO), "zero flag not cleared");
372372
},
373373
},
374+
Instruction {
375+
mnemonic: "INC",
376+
mode: Mode::ZeroPage,
377+
opcode: 0xE6,
378+
bytes: 2,
379+
cycles: 5,
380+
execute: |m| {
381+
let addr = u16::from(m.fetch8());
382+
let result = m.get8(addr).wrapping_add(1);
383+
m.set8(addr, result);
384+
update_zero_flag(m, result);
385+
},
386+
test: |m| {
387+
m.set8(0x10, 0xFF);
388+
m.run_program(&[
389+
0xE6, 0x10, // $0000 INC $10
390+
0x00, // $0002 BRK
391+
]);
392+
assert_eq!(m.get8(0x10), 0x00, "wrong value");
393+
assert!(m.test_bit("SR", ZERO), "zero flag not set");
394+
395+
m.run_program(&[
396+
0xE6, 0x10, // $0000 INC $10
397+
0x00, // $0002 BRK
398+
]);
399+
assert_eq!(m.get8(0x10), 0x01, "wrong value");
400+
assert!(!m.test_bit("SR", ZERO), "zero flag not cleared");
401+
},
402+
},
403+
Instruction {
404+
mnemonic: "INC",
405+
mode: Mode::Absolute,
406+
opcode: 0xEE,
407+
bytes: 3,
408+
cycles: 6,
409+
execute: |m| {
410+
let addr = m.fetch16();
411+
let result = m.get8(addr).wrapping_add(1);
412+
m.set8(addr, result);
413+
update_zero_flag(m, result);
414+
},
415+
test: |m| {
416+
m.set8(0x1000, 0xFF);
417+
m.run_program(&[
418+
0xEE, 0x00, 0x10, // $0000 INC $1000
419+
0x00, // $0003 BRK
420+
]);
421+
assert_eq!(m.get8(0x1000), 0x00, "wrong value");
422+
assert!(m.test_bit("SR", ZERO), "zero flag not set");
423+
424+
m.run_program(&[
425+
0xEE, 0x00, 0x10, // $0000 INC $1000
426+
0x00, // $0003 BRK
427+
]);
428+
assert_eq!(m.get8(0x1000), 0x01, "wrong value");
429+
assert!(!m.test_bit("SR", ZERO), "zero flag not cleared");
430+
},
431+
},
374432
Instruction {
375433
mnemonic: "INX",
376434
mode: Mode::Implied,

0 commit comments

Comments
 (0)