From 12f7acaa7f67a79784633f9e187aa3d9cb083414 Mon Sep 17 00:00:00 2001 From: raxracks Date: Sat, 27 Jan 2024 12:23:51 +1300 Subject: [PATCH] idk what i changed --- emulator | Bin 25568 -> 25728 bytes emulator.c | 68 +++++++++++++++++++++++++++++++++++++++++------- hello | Bin 9 -> 11 bytes hello.asm | 9 ++++--- hello.o | Bin 304 -> 315 bytes implemented.txt | 20 ++++++++++++++ 6 files changed, 83 insertions(+), 14 deletions(-) diff --git a/emulator b/emulator index b1686aad18dd61d8c9a3e04f0f6b9dcfb12340b5..6e2b7944db3bf60d34f3305ee3736a2c40abd663 100755 GIT binary patch delta 5547 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 delta 4752 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 diff --git a/emulator.c b/emulator.c index 3ffe7d5..a127071 100644 --- a/emulator.c +++ b/emulator.c @@ -51,6 +51,11 @@ int main(int argc, char** argv) { memory[memory[one + cpu.X]] = cpu.A; cpu.PC++; break; + case 0x4: + printf(" ∟ STY $%02X\n", one); + memory[one] = cpu.Y; + cpu.PC++; + break; case 0x5: printf(" ∟ STA $%02X\n", one); memory[one] = cpu.A; @@ -61,6 +66,15 @@ int main(int argc, char** argv) { memory[one] = cpu.X; cpu.PC++; break; + case 0xA: + printf(" ∟ TXA\n"); + cpu.A = cpu.X; + break; + case 0xC: + printf(" ∟ STY $%04X\n", word); + memory[word] = cpu.Y; + cpu.PC += 2; + break; case 0xD: printf(" ∟ STA $%04X\n", word); memory[word] = cpu.A; @@ -80,17 +94,35 @@ int main(int argc, char** argv) { memory[memory[one] + cpu.Y] = cpu.A; cpu.PC++; break; + case 0x4: + printf(" ∟ STY $%02X, X\n", one); + memory[one + cpu.X] = cpu.Y; + cpu.PC++; + break; case 0x5: printf(" ∟ STA $%02X, X\n", word); memory[one + cpu.X] = cpu.A; cpu.PC++; break; + case 0x6: + printf(" ∟ STX $%02X, Y\n", one); + memory[one + cpu.Y] = cpu.X; + cpu.PC++; + break; + case 0x8: + printf(" ∟ TYA\n"); + cpu.A = cpu.Y; + break; case 0x9: printf(" ∟ STA $%04X, Y\n", word); memory[word + cpu.Y] = cpu.A; cpu.PC += 2; break; + case 0xA: + printf("TXS\n"); + cpu.SP = cpu.X; + break; case 0xD: printf(" ∟ STA $%04X, X\n", word); memory[word + cpu.X] = cpu.A; @@ -132,11 +164,19 @@ int main(int argc, char** argv) { cpu.X = memory[one]; cpu.PC++; break; + case 0x8: + printf(" ∟ TAY\n"); + cpu.Y = cpu.A; + break; case 0x9: printf(" ∟ LDA #$%02X\n", one); cpu.A = one; cpu.PC++; break; + case 0xA: + printf(" ∟ TAX\n"); + cpu.X = cpu.A; + break; case 0xC: printf(" ∟ LDY $%04X\n", word); cpu.Y = memory[word]; @@ -186,6 +226,10 @@ int main(int argc, char** argv) { printf("addr: %x val: %x\n", word + cpu.Y, cpu.A); cpu.PC++; break; + case 0xA: + printf("TSX\n"); + cpu.X = cpu.SP; + break; case 0xC: printf(" ∟ LDY $%04X, X\n", word); cpu.Y = memory[word + cpu.X]; @@ -225,6 +269,9 @@ int main(int argc, char** argv) { printf(" ∟ INX\n"); cpu.X++; break; + case 0xA: + printf(" ∟ NOP\n"); + break; case 0xE: printf(" ∟ INC $%04X\n", word); memory[word]++; @@ -252,19 +299,20 @@ int main(int argc, char** argv) { } } - printf("CPU State:\n" - "A\t:\t0x%08X\n" - "X\t:\t0x%08X\n" - "Y\t:\t0x%08X\n" - "SP\t:\t0x%08X\n" - "P\t:\t0x%08X\n" - "PC\t:\t0x%016X\n\n" - , cpu.A, cpu.X, cpu.Y, cpu.SP, cpu.P, cpu.PC); + printf("\nCPU State:\n" + "A=$%02X " + "X=$%02X " + "Y=$%02X\n" + "SP=$%02X " + "PC=$%04X\n" + "NV-BDIZC\n" + "%08b\n\n", + cpu.A, cpu.X, cpu.Y, cpu.SP, cpu.PC, cpu.P); printf("Memory State:\n"); - for(int i = 0; i < 0xffff; i++) { + for(int i = 0; i < 0xffff - 0x8000; i++) { if(memory[i] != 0x0) { - printf("0x%04X: 0x%02X (0b%08b)\n", i, memory[i], memory[i]); + printf("$%04X: $%02X (%%%08b)\n", i, memory[i], memory[i]); } } diff --git a/hello b/hello index a2d7a75a4e215f34cf74aa20323c90adc737673a..1a3c4f88c560e9297e5ec7bffec4759c39b1fc5d 100644 GIT binary patch literal 11 ScmZ3$vWT@sV2VHwg8%>(!2=)w literal 9 QcmZ3J z9L{~bu$GOH@vOy`R1-E;pdJ z95$>!x0a2OasBkosj6)9KuHz`PDUmc2BwuF(@!Hu>qB^ TGB8YBXu!?_GK+y};@vm^8TAy~ diff --git a/implemented.txt b/implemented.txt index fa8d60f..d704d1d 100644 --- a/implemented.txt +++ b/implemented.txt @@ -30,6 +30,16 @@ STA $, X (A) STA ($, X) STA ($), Y +==== STX (completed) ==== +STX $ (Z) +STX $, Y (Z) +STX $ (A) + +==== STY (completed) ==== +STY $ (Z) +STY $, X (Z) +STY $ (A) + ==== INC (completed) ==== INX INY @@ -37,3 +47,13 @@ INC $ (Z) INC $ (A) INC $, X (Z) INC $, X (A) + +==== TRANSFER (completed) ==== +TAX +TAY +TSX +TXA +TXS +TYA + +NOP