diff options
| author | vin <git@vineetk.net> | 2024-06-10 14:27:53 +0530 |
|---|---|---|
| committer | vin <git@vineetk.net> | 2024-06-10 14:33:12 +0530 |
| commit | dbb952a52b1b7168b4d1e98e9819d632ad16e087 (patch) | |
| tree | e3cabeb469eccaf6c9f39ac08b1480bd278ccc72 | |
| parent | ebdf50cdf3a357a0e37a5751fd9d78ae975979a0 (diff) | |
add lsr, rol, ror
| -rw-r--r-- | cpu.c | 27 |
1 files changed, 24 insertions, 3 deletions
| @@ -443,7 +443,12 @@ ldy(uint8_t arg) | |||
| 443 | static void | 443 | static void |
| 444 | lsr(uint8_t arg) | 444 | lsr(uint8_t arg) |
| 445 | { | 445 | { |
| 446 | /* TODO: complete this */ | 446 | regs.status.carry = regs.a & 1; // bit 0 in carry |
| 447 | regs.a >>= 1; | ||
| 448 | regs.a &= ~(1 << 7); // bit 7 cleared | ||
| 449 | |||
| 450 | STATUS_UPDATE_ZERO(regs.a); | ||
| 451 | STATUS_UPDATE_NEGATIVE(regs.a); | ||
| 447 | } | 452 | } |
| 448 | 453 | ||
| 449 | static void | 454 | static void |
| @@ -512,13 +517,29 @@ ply(uint8_t arg) | |||
| 512 | static void | 517 | static void |
| 513 | rol(uint8_t arg) | 518 | rol(uint8_t arg) |
| 514 | { | 519 | { |
| 515 | /* TODO: complete this */ | 520 | uint8_t tmp; |
| 521 | tmp = (regs.a & (1 << 7)) > 0; | ||
| 522 | |||
| 523 | regs.a <<= 1; | ||
| 524 | regs.a |= regs.status.carry; | ||
| 525 | |||
| 526 | regs.status.carry = tmp; | ||
| 527 | STATUS_UPDATE_ZERO(regs.a); | ||
| 528 | STATUS_UPDATE_NEGATIVE(regs.a); | ||
| 516 | } | 529 | } |
| 517 | 530 | ||
| 518 | static void | 531 | static void |
| 519 | ror(uint8_t arg) | 532 | ror(uint8_t arg) |
| 520 | { | 533 | { |
| 521 | /* TODO: complete this */ | 534 | uint8_t tmp; |
| 535 | tmp = regs.a & 1; | ||
| 536 | |||
| 537 | regs.a >>= 1; | ||
| 538 | regs.a |= regs.status.carry << 7; | ||
| 539 | |||
| 540 | regs.status.carry = tmp; | ||
| 541 | STATUS_UPDATE_ZERO(regs.a); | ||
| 542 | STATUS_UPDATE_NEGATIVE(regs.a); | ||
| 522 | } | 543 | } |
| 523 | 544 | ||
| 524 | static void | 545 | static void |
