From e050a2ae3df441e3fd2409a7a49e8190a6916dbd Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 20 Nov 2020 02:38:37 -0800 Subject: [PATCH] GB: Improve emulation of DMG-on-CGB register reads --- .../bits/unused_hwio-C/xbaseline_0000.png | Bin 1095 -> 1057 bytes .../misc/boot_hwio-C/xbaseline_0000.png | Bin 827 -> 853 bytes src/gb/io.c | 53 +++++++++--------- 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/cinema/gb/mooneye-gb/misc/bits/unused_hwio-C/xbaseline_0000.png b/cinema/gb/mooneye-gb/misc/bits/unused_hwio-C/xbaseline_0000.png index f9b20ce1253e0c13c459234e1287ed23d56d4f9d..809ac32e667330e01f4812769c70cbc5ad527455 100644 GIT binary patch literal 1057 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62NRHFxc>b*0|WC5PZ!6KiaBrR+?~~=Ai}V9 z{rCFR?@7^06O^-}tGnE3v@K4sRUwKcCEy!p8K=XSqY z|5Id+-`u?A)A`4aA0_UzU)R>x+fn-W=fs!A6a2fkewCJfd%oT|(EpUJ-#YorU$%bR z)fo0q^YdJ$sGsretOp(UE-|a|zx&nvLH_ywN;({QAAcw8eX5w9dheIk>KD0-+OIEH zeBV^N>Dy(`?qkWh^{=daxAU{lxxJlR;eU72Lk)>ORN~y}kW^dFIm_4066cxZXI{ST z+pea^ml+RQm3uqJ=5OBo<*3TLy&f8q#IFZOAH2!>ctM2wvd_Ds>@`<>-Tq2_-S(ST zxBc3#f4^DhSN`f<8go65r>Aq9o4m5LaFvPQ!@MkW*K(&N>N_G#XX(1vw6jTP7?jn| zTzfxvws_Rn&71Gdo4Y1thpqP8kGve4rDbGPp4M}He*F3C*GGH){+|5l>6J~L=lZ+X zXF2cD^YZWHce=A^+4*WKcWJBagL%uR`}p1cJJHpI>v$)h1y|eR1QeoJUdlNA=#r9b zp&E|m*V_8N_xK-?ex7G9_P%zvLBz~gmG(dO1PQNIZD~H9?|AFO_Fo(8`>dXBR-gQS zQ`yrm3Llq0*cBHJtX7)V{hiJv*H-xSbRv7_^nBxO|K45m+$^ZI_TTZ3kGJPO zzTzF|bI#`Z$MXXE_dm#&oOxuH`u}?L*3C74HSY-PU+1r~imbd;`mVFNWY)D~`YA7F jS@59;Ia&-1ZSH4g%cH-H?b&tAL0R9^)z4*}Q$iB}zz6tZ literal 1095 zcmeAS@N?(olHy`uVBq!ia0vp^3xIe62NRHFxc>b*0|N`6r;B4q#hkaZZ%@Qy z-t`K#UIK55zl&V?dM#$DzF48WtBc^?UGr~o=j2JSAKhit{Qau+(goM$3mtH1GTA?tWntTN7@5 z==GwWDL<5s*k=8zO)1!tyg{ty?UzX>*S6bl>T-Ly;{v1m!2%H;6hbaI{pp&BDerWf z{2yMrW%9xP@$LWP?fhEyu=c0uobt_EAJ5*lr~Ko`unLtue_1`V&K}I( zx?Mg}y==nQg9Y2UA6oFYeYWO5*BrLoP5J)HFN>PKXgUVWOMCXet-EAr^x^;eR;|g` ztmhTqRL$>bJpbPAn&W#cEuMy~GhTmJ%5GQE)$GdE50%xL93wY>X}-CyyWiVNNN($c zhO1&_0_}D0lTs&`{{J8Q?%m3Q!gsREuS}nHJ&*VOx;Wp%v5xZ=%=DMr`fC#3r@{$a zmG4v<$UHw-P{$tmaaXe7)!F;!1synDkac~R)x?`~_ucvMesB5b`}1e@)J+IpZsIuC zf9}>y}ZnLPyF)izf`>M_dKP| z7S;cxKIB{uzWQ<5*Uqmpmkv+j3XE6o_%$#6kyZ1WUu$J_ENdn%e18P!4A#Se!b`f diff --git a/cinema/gb/mooneye-gb/misc/boot_hwio-C/xbaseline_0000.png b/cinema/gb/mooneye-gb/misc/boot_hwio-C/xbaseline_0000.png index fb836d344a281e22ec87159031e82cd3d3f6b310..5b043da580aa7df98499f80135765c041e01ba7b 100644 GIT binary patch delta 574 zcmV-E0>S;e2Gs_TB!3)9L_t(|obB4(a;h)@0AX-=|5v6Lo{2f+KcJQEeixk%Vt_7C zHLm-DlF?6N`qy62kIvmX2x+sId-i@F)c@j#70%=t+HO<0U7g>hGrKWrt3MpyW0(K` z_tft~XS{XrIe+Q@nz=zr|C`@;i~jTpb!(r${?5DK9&5;>y^8M4z;FhJGccTi;S3CC zU^oNAZA*3jGW#KT>2tNA$>VhWutLv#>cq$9oy%cf(}n3{@w`xJ7Nuu)r8M_hnGkKx z()7>vXZQcAX~ggMn(%-AlAZfYm-o+ucFwOITr$~kIDeV4QAa09Z>M$zS4_-_gMvEB>(2?=2(!`=F!w;YR%X=$p}B^zK*t-*20HpL!Q_-&-bmeXA0A%wEBd z_zlC~ITY-_V_T~4Q@`*l${O;H0x}kU06@b`!%-vah5!Hn M07*qoM6N<$g4X;yCjbBd delta 549 zcmV+=0^0r62D=83B!2=)L_t(|obB4%lA!hZ_F4)m-nEPvRz(m2n5 z#(!0E_`~##6*M<;XuX|V^&BnTo^<)r^V!2Yv{OU2@F;t&t_Vl%@F%5lF4_9#l{R(N zdb4lbp)1dn^*pE_@xuaV@(iuFDV)J4Hz~f3>bS^@Byp`_=^T&M;T`zAe^}M|%-{GXujJ7|y_O28J^*oPpsC47V-S zdClxBUOJx`7RZhhztl4?+cVGFKNDOZr*o+9_4`|Nb|>R`q0%f$&+JNRez)@5Y;)G7 ze_C_sd7jsV|MNk1?k|15w0!e6kIo}|)nr5ec2d>O;D3s{&y2gr!FLTBAF|Hh5pm)C zt|lBW(M#d#+Ihc6cASa%-R9@Gt1jK=hx%|%7sB~H7_RXtI{VU_Z~UC*_uwV`(9!&H zBYylR_ZH3ZQ}j0XJ@s4oJ@|E3C32rVgCFs4RsUzV|Br2{eoy_tTa-2A(?2EYB)= GB_SIZE_IO) { - return; - } - break; + mLOG(GB_IO, GAME_ERROR, "Writing to unknown register FF%02X:%02X", address, value); + return; } success: gb->memory.io[address] = value; @@ -662,31 +660,32 @@ uint8_t GBIORead(struct GB* gb, unsigned address) { case GB_REG_WX: // Handled transparently by the registers break; - default: - if (gb->model >= GB_MODEL_CGB) { - switch (address) { - case GB_REG_KEY1: - case GB_REG_VBK: - case GB_REG_HDMA1: - case GB_REG_HDMA2: - case GB_REG_HDMA3: - case GB_REG_HDMA4: - case GB_REG_HDMA5: - case GB_REG_BCPS: - case GB_REG_BCPD: - case GB_REG_OCPS: - case GB_REG_OCPD: - case GB_REG_SVBK: - // Handled transparently by the registers - goto success; - default: - break; - } + case GB_REG_KEY1: + case GB_REG_VBK: + case GB_REG_HDMA1: + case GB_REG_HDMA2: + case GB_REG_HDMA3: + case GB_REG_HDMA4: + case GB_REG_HDMA5: + case GB_REG_BCPS: + case GB_REG_BCPD: + case GB_REG_OCPS: + case GB_REG_OCPD: + case GB_REG_SVBK: + case GB_REG_UNK72: + case GB_REG_UNK73: + case GB_REG_UNK75: + // Handled transparently by the registers + if (gb->model < GB_MODEL_CGB) { + // In DMG mode, these all get initialized to 0xFF during reset + // But in DMG-on-CGB mode, they get initialized by the CGB reset so they can be non-zero + mLOG(GB_IO, GAME_ERROR, "Reading from CGB register FF%02X in DMG mode", address); } + break; + default: mLOG(GB_IO, STUB, "Reading from unknown register FF%02X", address); return 0xFF; } - success: return gb->memory.io[address] | _registerMask[address]; }