From e3bf6880262164875431c22ea7e85694c81381a4 Mon Sep 17 00:00:00 2001 From: raxracks Date: Sun, 28 Jan 2024 10:04:41 +1300 Subject: [PATCH] add cpu flags --- emulator | Bin 25800 -> 26304 bytes emulator.c | 170 ++++++++++++++++++++++++++++++++++++++++-------- hello | Bin 49 -> 10 bytes hello.asm | 32 ++------- hello.o | Bin 568 -> 843 bytes implemented.txt | 12 ++-- 6 files changed, 155 insertions(+), 59 deletions(-) diff --git a/emulator b/emulator index bd7e0672d80ba2b6e135d2e87d1ffbe64b6443f8..bf0dc74ac111df9f0b4f1f5010c5e667642dcc8b 100755 GIT binary patch literal 26304 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 CbI|ty literal 25800 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

y) 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 ONeTKm#hMaG_J05_kpn6K diff --git a/emulator.c b/emulator.c index 565ab09..cfff66b 100644 --- a/emulator.c +++ b/emulator.c @@ -3,13 +3,13 @@ #include #include -#define NEGATIVE 1 << 7 -#define OVERFLOW 1 << 6 -#define BREAK 1 << 4 -#define DECIMAL 1 << 3 -#define INTERRUPT 1 << 2 -#define ZERO 1 << 1 -#define CARRY 1 << 0 +uint8_t N = 1 << 7; +uint8_t V = 1 << 6; +uint8_t B = 1 << 4; +uint8_t D = 1 << 3; +uint8_t I = 1 << 2; +uint8_t Z = 1 << 1; +uint8_t C = 1 << 0; typedef struct { uint8_t A; @@ -21,7 +21,23 @@ typedef struct { } CPU; CPU cpu = { 0 }; -uint8_t* memory; +uint8_t* memory; + +void add_flag(uint8_t flag) { + cpu.P |= flag; +} + +void clear_flag(uint8_t flag) { + cpu.P &= ~flag; +} + +void set_flag(uint8_t flag, int condition) { + if(condition == 1) { + add_flag(flag); + } else if(condition == 0) { + clear_flag(flag); + } +} int main(int argc, char** argv) { assert(argc > 1); @@ -44,13 +60,6 @@ int main(int argc, char** argv) { printf("%d: 0x%02X (h_nib: 0x%X, l_nib: 0x%X)\n", cpu.PC, opcode, h_nib, l_nib); switch(h_nib) { - case 0x0: - switch(l_nib) { - case 0x0: - printf("%c", cpu.A); - break; - } - break; case 0x8: switch(l_nib) { case 0x1: @@ -76,6 +85,10 @@ int main(int argc, char** argv) { case 0xA: printf(" ∟ TXA\n"); cpu.A = cpu.X; + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + break; case 0xC: printf(" ∟ STY $%04X\n", word); @@ -120,6 +133,10 @@ int main(int argc, char** argv) { case 0x8: printf(" ∟ TYA\n"); cpu.A = cpu.Y; + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + break; case 0x9: printf(" ∟ STA $%04X, Y\n", word); @@ -142,61 +159,108 @@ int main(int argc, char** argv) { case 0x0: printf(" ∟ LDY #$%02X\n", one); cpu.Y = one; + + set_flag(N, cpu.Y & 0x80 != 0); + set_flag(Z, cpu.Y == 0); + cpu.PC++; break; case 0x1: printf(" ∟ LDA ($%02X, X)\n", one); cpu.A = memory[memory[one + cpu.X]]; - printf("addr: %x val: %x\n", memory[one + cpu.X], cpu.A); + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + cpu.PC++; break; case 0x2: printf(" ∟ LDX #$%02X\n", one); cpu.X = one; + + set_flag(N, cpu.X & 0x80 != 0); + set_flag(Z, cpu.X == 0); + cpu.PC++; break; case 0x4: printf(" ∟ LDY $%02X\n", one); cpu.Y = memory[one]; + + set_flag(N, cpu.Y & 0x80 != 0); + set_flag(Z, cpu.Y == 0); + cpu.PC++; break; case 0x5: printf(" ∟ LDA $%02X\n", one); cpu.A = memory[one]; + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + cpu.PC++; break; case 0x6: printf(" ∟ LDX $%02X\n", one); cpu.X = memory[one]; + + set_flag(N, cpu.X & 0x80 != 0); + set_flag(Z, cpu.X == 0); + cpu.PC++; break; case 0x8: printf(" ∟ TAY\n"); cpu.Y = cpu.A; + + set_flag(N, cpu.Y & 0x80 != 0); + set_flag(Z, cpu.Y == 0); + break; case 0x9: printf(" ∟ LDA #$%02X\n", one); cpu.A = one; + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + cpu.PC++; break; case 0xA: printf(" ∟ TAX\n"); cpu.X = cpu.A; + + set_flag(N, cpu.X & 0x80 != 0); + set_flag(Z, cpu.X == 0); + break; case 0xC: printf(" ∟ LDY $%04X\n", word); cpu.Y = memory[word]; + + set_flag(N, cpu.Y & 0x80 != 0); + set_flag(Z, cpu.Y == 0); + cpu.PC += 2; break; case 0xD: printf(" ∟ LDA $%04X\n", word); cpu.A = memory[word]; + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + cpu.PC += 2; break; case 0xE: printf(" ∟ LDX $%04X\n", word); cpu.X = memory[word]; + + set_flag(N, cpu.X & 0x80 != 0); + set_flag(Z, cpu.X == 0); + cpu.PC += 2; break; } @@ -206,53 +270,81 @@ int main(int argc, char** argv) { case 0x1: printf(" ∟ LDA ($%02X), Y\n", one); cpu.A = memory[memory[one] + cpu.Y]; - printf("addr: %x val: %x\n", memory[one] + cpu.Y, cpu.A); + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + cpu.PC++; break; case 0x4: printf(" ∟ LDY $%02X, X\n", one); cpu.Y = memory[one + cpu.X]; - printf("addr: %x val: %x\n", one + cpu.X, cpu.Y); + + set_flag(N, cpu.Y & 0x80 != 0); + set_flag(Z, cpu.Y == 0); + cpu.PC++; break; case 0x5: printf(" ∟ LDA $%02X, X\n", one); cpu.A = memory[one + cpu.X]; - printf("addr: %x val: %x\n", one + cpu.X, cpu.A); + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + cpu.PC++; break; case 0x6: printf(" ∟ LDX $%02X, Y\n", one); cpu.X = memory[one + cpu.Y]; - printf("addr: %x val: %x\n", one + cpu.Y, cpu.X); + + set_flag(N, cpu.X & 0x80 != 0); + set_flag(Z, cpu.X == 0); + cpu.PC++; break; case 0x9: printf(" ∟ LDA $%04X, Y\n", word); cpu.A = memory[word + cpu.Y]; - printf("addr: %x val: %x\n", word + cpu.Y, cpu.A); + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + cpu.PC++; break; case 0xA: printf("TSX\n"); cpu.X = cpu.SP; + + set_flag(N, cpu.X & 0x80 != 0); + set_flag(Z, cpu.X == 0); + break; case 0xC: printf(" ∟ LDY $%04X, X\n", word); cpu.Y = memory[word + cpu.X]; - printf("addr: %x val: %x\n", word + cpu.X, cpu.Y); + + set_flag(N, cpu.Y & 0x80 != 0); + set_flag(Z, cpu.Y == 0); + cpu.PC += 2; break; case 0xD: printf(" ∟ LDA $%04X, X\n", word); cpu.A = memory[word + cpu.X]; - printf("addr: %x val: %x\n", word + cpu.X, cpu.A); + + set_flag(N, cpu.A & 0x80 != 0); + set_flag(Z, cpu.A == 0); + cpu.PC += 2; break; case 0xE: printf(" ∟ LDX $%04X, Y\n", word); cpu.X = memory[word + cpu.Y]; - printf("addr: %x val: %x\n", word + cpu.Y, cpu.X); + + set_flag(N, cpu.X & 0x80 != 0); + set_flag(Z, cpu.X == 0); + cpu.PC += 2; break; } @@ -262,6 +354,10 @@ int main(int argc, char** argv) { case 0x8: printf(" ∟ INY\n"); cpu.Y++; + + set_flag(N, cpu.Y & 0x80 != 0); + set_flag(Z, cpu.Y == 0); + break; } break; @@ -270,11 +366,19 @@ int main(int argc, char** argv) { case 0x6: printf(" ∟ INC $%02X\n", one); memory[one]++; + + set_flag(N, memory[one] & 0x80 != 0); + set_flag(Z, memory[one] == 0); + cpu.PC++; break; case 0x8: printf(" ∟ INX\n"); cpu.X++; + + set_flag(N, cpu.X & 0x80 != 0); + set_flag(Z, cpu.X == 0); + break; case 0xA: printf(" ∟ NOP\n"); @@ -282,6 +386,10 @@ int main(int argc, char** argv) { case 0xE: printf(" ∟ INC $%04X\n", word); memory[word]++; + + set_flag(N, memory[word] & 0x80 != 0); + set_flag(Z, memory[word] == 0); + cpu.PC += 2; break; } @@ -290,12 +398,22 @@ int main(int argc, char** argv) { switch(l_nib) { case 0x6: printf(" ∟ INC $%02X, X\n", one); - memory[one + cpu.X]++; + uint8_t addr = one + cpu.X; + memory[addr]++; + + set_flag(N, memory[addr] & 0x80 != 0); + set_flag(Z, memory[addr] == 0); + cpu.PC++; break; case 0xE: printf(" ∟ INC $%04X, X\n", word); - memory[word + cpu.X]++; + uint16_t addr = word + cpu.X; + memory[addr]++; + + set_flag(N, memory[addr] & 0x80 != 0); + set_flag(Z, cpu.Y == 0); + cpu.PC += 2; break; } diff --git a/hello b/hello index 91e08f763e8b782696067c12989e944a24bceec5..a126b35ef6a03e58aadf5308ed4aa66e1fc93375 100644 GIT binary patch literal 10 ScmZ1=u;Awcfdvc;{sRCTcm+8C literal 49 YcmZ3)uvfEz;RRtLBQ+-{KPHa>03ZYv2><{9 diff --git a/hello.asm b/hello.asm index d02624e..d442a17 100644 --- a/hello.asm +++ b/hello.asm @@ -1,27 +1,5 @@ -LDX #0 -LDA hello, X -BRK -INX -LDA hello, X -BRK -INX -LDA hello, X -BRK -INX -LDA hello, X -BRK -INX -LDA hello, X -BRK -INX -LDA hello, X -BRK -INX -LDA hello, X -BRK -INX -LDA hello, X -BRK - -.DATA -hello: .byte "hello\n", 0 +LDY #$10 +LDY #$f9 +LDY #$10 +LDY #$0 +LDY #$ff diff --git a/hello.o b/hello.o index 2858793c84085e7bea9860c151289e4dec3b1c73..aab3117f6ef9cdcd04242abfa7cda1e8e217233b 100644 GIT binary patch literal 843 zcmZvZOK%ck6o$|FW*F#T3%x+w8K6{+JGq0P@q(5#8X^rB7jEcR7z-&3guw>c2@B)K zty^Pa)P;!)P5cGMg_8PWi3^Kn8CK?DziFiV(M+fB*48Qxt)}tdMZuAT$?;GIr;RNKp$Wk6&>gBGzb8w z@Fb+q5JP~6xD4Vo;3kOoF4TGC)n|a-MR%RLIxcZHpw9sVi>{lxfEuqg7Hi|Y*5GC5 zG>Rrw0yu@vQur*4Tf~qE5`7|os_>gU5cI{XxCY`2igo@3gVqLd z1-GcNHU|TP!V{ogB*K5y%Lp;fGj5O;rvn8p^NbZnj*(_$7}rQ}kyDJ*E~hZ#I+x3w zvJ5^*xWd>ZL5h=)VKS~V=r{l_kYHy~!cxcT^#(EN^o^FxWup&Lv1B27IlA8+NAtOS zDpANjDwwSnjZUNgn+a#AIwR}YO>*R^#eO916Ls7lCK)M4nvqe5<57~4Vx$?F-MG_{ zBP-62h|_Cy?N+=uu#b;M(r$HPecAFho3(neT5lXQn`%?G+pcC`c5Q9=nC_godu=&+ z;tW0GfkQJnag`H^L{g(Y&M@POIo+wH-l^=Bv}$FqST8EKYc-XF=V7T@IVkRz)ccKc G8Q>3>m3}h- literal 568 zcmXYuyG{a85Qb+CyUQ*YxnGRUwiXgE5iLa_6cRC9ER2Z|Tq6l$3|16I<3rfnSlQX~ z1~$Hem6gxn|8GckzM1pwY-Vz{Kc5aWA~HaDh%v%N+#~)Fmnwos2FpA|HaK4)KO+Ai z_mHcQC}jjN?=8>9n1kon?+-`y>G(7FQs*6SZCO|2i+K|@q6@WRFA=ryp%z7dHB0Bv zIdo;ZBwdOwMHivV&?y~^Xo4qs!5i9IT4K zj;x|#RYc{AtHwz5CYVg_E~Z*wcY!^)LhQmS7Ivc$S#sXb9jl8=g}sz#0tT` zAq9e?Btc-bNSffkktBfuA{J31Qp6e&A<6{zz+5lfvof6BmPf&+1mFv{O0(< w4@N