From 5ed288eaa957bbfea229a341bf366f31a4de7614 Mon Sep 17 00:00:00 2001 From: Matthew Laux Date: Wed, 18 Oct 2023 17:14:20 -0500 Subject: [PATCH] not really sure what i was working on --- cli/save.sav | Bin 0 -> 32768 bytes src/cpu.c | 32 +++++++++++++++++++++++++++++++- src/dmg.c | 3 ++- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 cli/save.sav diff --git a/cli/save.sav b/cli/save.sav new file mode 100644 index 0000000000000000000000000000000000000000..aa3652cab5c6bc0e60ca36ccfdbde92b8ab702cd GIT binary patch literal 32768 zcmeI2zi%8x6vyA}+}t5EK*$ zi3kbNoG3yO{{f(tP6`oPX(=g#Xpm?|+6JT{!+W=P_R5PfmN1c>?;Ck{e!MsD&F9VR zxfr7TMQfrcGA5e~kuiT~rDq}|T4&jGT9)2dmDW*Yt@P%3mdU#oW75?7Ec4qU?UKdX z>D2o)6?aJz$JR#C!peJNv^GYJoU5v$kXl(LNmV&lmi3r(wMU7(mOOV(EUXoasuC-) zND^twOjQ-f;xkPb)(cyST>k7#>iS~VI3_BJT4P85;ngGs6iK=`VTnnyU4=5r49mZY zP;(+1LfjTRZM4baES{Ep#%atddB$aK zvM`;!Q_q`%gB>~5 z$O;a!E~PCkqcc@e73{{Bnzt2OF6_jnxkl}E%U^DD>mnENkapzAYO9N=h`jOatuixD z9I(`7zNAdb!m&FR@mV=8X~l42CXmh;rjEBJi)_Q)>ua`i7UGh}d2Aa++OvKcZ;0r} zEV6GTMh@3W{0$XUK>!4fH36l=-r!iT5Q_r=5C8!X009sH0T2KI5C8!X009sH0T2KI z5C8!X009sH0T2KI5CDOPL7?~3FSj>8UT?eJxY_P&-9Bln%zG|h|N5I#n;(73_juHe zJHG`KefRz2OQdK>Cx`ECbg$~Gk$U3VuXmSM&JVx6M}NNZ(!Jr3=#RS%AB}3z8C~iv zrTVFtUsZ2x5G_#{(uHtD7ndUS^qyfH;y@#~L-g_wQ>!NjgI=h^rM+}?*zGmPg5R}L zK|tDfehhur_k3Rs{Lt??LDRUdk5|roK}wyye~s3EP<(~xb?H|t>VKm#q4!mEC7|VH zzAH!p-BgPx*S~D6*7LomXZ3TPweb1wrC!{>+z#+$xUg)$wT~zDTJr=-=O>Q>q(fTcSv}ShJqaekm}}$Cq%#i3>Q*BKXY|_Y8qtkAL?7$~@%e}6 z`8ycW3V&jyY~N(vQ8_-f`d90}UC(Ir;z1`=d@@p6=P%JZKWNwqJiSKuxw0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4ea zAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd&00JNY0w4eaAOHd& V00JNY0w4eaAOHd&00Kvfz+V(M$T$E1 literal 0 HcmV?d00001 diff --git a/src/cpu.c b/src/cpu.c index 2b75c19..88b4379 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -356,6 +356,32 @@ static void add16(struct cpu *cpu, u16 src) write_hl(cpu, trunc); } +static void add_sp(struct cpu *cpu, u8 value) +{ + int total = cpu->sp + (signed char) value; + clear_flag(cpu, FLAG_ZERO); + clear_flag(cpu, FLAG_SIGN); + if (total > 0xffff) { + set_flag(cpu, FLAG_CARRY); + } else { + clear_flag(cpu, FLAG_CARRY); + } + cpu->sp = (u16) total; +} + +static void ld_hl_sp(struct cpu *cpu, u8 value) +{ + int total = cpu->sp + (signed char) value; + clear_flag(cpu, FLAG_ZERO); + clear_flag(cpu, FLAG_SIGN); + if (total > 0xffff) { + set_flag(cpu, FLAG_CARRY); + } else { + clear_flag(cpu, FLAG_CARRY); + } + write_hl(cpu, total); +} + static u8 read_reg(struct cpu *cpu, int index) { switch (index) { @@ -1026,6 +1052,10 @@ void cpu_step(struct cpu *cpu) case 0xe5: // PUSH HL push(cpu, read_hl(cpu)); break; + case 0xe8: + add_sp(cpu, read8(cpu, cpu->pc)); + cpu->pc++; + break; case 0xe9: // JP HL cpu->pc = read_hl(cpu); break; @@ -1051,7 +1081,7 @@ void cpu_step(struct cpu *cpu) push(cpu, read_af(cpu)); break; case 0xf8: // LD HL, SP+i8 - write_hl(cpu, cpu->sp + (signed) read8(cpu, cpu->pc)); + ld_hl_sp(cpu, read8(cpu, cpu->pc)); cpu->pc++; break; case 0xf9: // LD SP, HL diff --git a/src/dmg.c b/src/dmg.c index b4f6b3d..e9d95b2 100644 --- a/src/dmg.c +++ b/src/dmg.c @@ -263,6 +263,7 @@ static void render_objs(struct dmg *dmg) static void timer_step(struct dmg *dmg) { dmg->timer_div++; + return; if (!(dmg_read(dmg, REG_TIMER_CONTROL) & TIMER_CONTROL_ENABLED)) { return; @@ -290,7 +291,7 @@ void dmg_step(void *_dmg) // order of dependencies? i think cpu needs to step first then update // all other hw cpu_step(dmg->cpu); - //timer_step(dmg); + timer_step(dmg); // each line takes 456 cycles int cycle_diff = dmg->cpu->cycle_count - dmg->last_lcd_update;