From b5f23e51887d9de5a47daa63d7c444e8cb7c0b79 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Tue, 16 Apr 2024 21:59:58 +0200 Subject: [PATCH 01/13] Add DocBoy emulator --- emulators/docboy.ini | 1 + emulators/docboy.py | 23 +++++++++++++++++++++++ main.py | 3 +++ 3 files changed, 27 insertions(+) create mode 100644 emulators/docboy.ini create mode 100644 emulators/docboy.py diff --git a/emulators/docboy.ini b/emulators/docboy.ini new file mode 100644 index 0000000..4478ee0 --- /dev/null +++ b/emulators/docboy.ini @@ -0,0 +1 @@ +dmg_palette=FFFF,AD55,52AA,0000 \ No newline at end of file diff --git a/emulators/docboy.py b/emulators/docboy.py new file mode 100644 index 0000000..1b2f6e9 --- /dev/null +++ b/emulators/docboy.py @@ -0,0 +1,23 @@ +from util import * +from emulator import Emulator +from test import * +import os +import shutil + + +class DocBoy(Emulator): + def __init__(self): + super().__init__("DocBoy", "https://github.com/Docheinstein/docboy", startup_time=1) + self.title_check = lambda title: "DocBoy" in title + + def setup(self): + downloadGithubRelease("Docheinstein/docboy", "downloads/docboy.zip") + extract("downloads/docboy.zip", "emu/docboy") + setDPIScaling("emu/docboy/docboy-sdl.exe") + shutil.copyfile(os.path.join(os.path.dirname(__file__), "docboy.ini"), + "emu/docboy/docboy.ini") + + def startProcess(self, rom, *, model, required_features): + if model != DMG: + return None + return subprocess.Popen(["emu/docboy/docboy-sdl.exe", os.path.abspath(rom), "-c", "docboy.ini"], cwd="emu/docboy") diff --git a/main.py b/main.py index 292274a..e0881fd 100644 --- a/main.py +++ b/main.py @@ -35,6 +35,8 @@ from emulators.pyboy import PyBoy from emulators.ares import Ares from emulators.emmy import Emmy +from emulators.docboy import DocBoy + from emulators.gameroy import GameRoy from util import * from test import * @@ -58,6 +60,7 @@ Ares(), Emmy(), GameRoy(), + DocBoy(), ] tests = testroms.acid.all + testroms.blarg.all + testroms.daid.all + testroms.ax6.all + testroms.mooneye.all + testroms.samesuite.all + testroms.hacktix.all + testroms.cpp.all + testroms.mealybug.all From 868c6ea251f1fb8874cb7a50b3635cb55ead0a66 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Tue, 16 Apr 2024 22:09:24 +0200 Subject: [PATCH 02/13] Update deprecated Extract-7Zip command The Extract-7Zip command is not supported anymore by GitHub actions. It has been replaced with the Expand-7ZipArchive. Source: https://github.com/actions/runner-images/issues/9361#issuecomment-1952093465 --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6fb9032..2b4dd0d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -38,7 +38,7 @@ jobs: run: | Start-Service audio* Invoke-WebRequest https://github.com/duncanthrax/scream/releases/download/3.6/Scream3.6.zip -OutFile C:\Scream3.6.zip - Extract-7Zip -Path C:\Scream3.6.zip -DestinationPath C:\Scream + Expand-7ZipArchive -Path C:\Scream3.6.zip -DestinationPath C:\Scream $cert = (Get-AuthenticodeSignature C:\Scream\Install\driver\Scream.sys).SignerCertificate $store = [System.Security.Cryptography.X509Certificates.X509Store]::new("TrustedPublisher", "LocalMachine") $store.Open("ReadWrite") From 50436eda6cebe30ceff69912037d10d43dc8dcc7 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Tue, 16 Apr 2024 22:19:27 +0200 Subject: [PATCH 03/13] Update deprecated distutils usage The distutils package has been removed with Python 3.12 (that is the Python version run by the GitHub actions at the moment). We were using it for distutils.dir_util.copy_tree, which has been replaced with shutil.copytree. Source: https://docs.python.org/3.11/whatsnew/3.10.html#distutils-deprecated --- emulators/ares.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emulators/ares.py b/emulators/ares.py index 32e3aeb..dbb50b2 100644 --- a/emulators/ares.py +++ b/emulators/ares.py @@ -6,7 +6,7 @@ import os import PIL.Image import PIL.ImageOps -from distutils.dir_util import copy_tree +from shutil import copytree class Ares(Emulator): def __init__(self): @@ -18,7 +18,7 @@ def setup(self): extract("downloads/ares.zip", "emu/ares") if not os.path.exists("emu/ares/ares.exe"): - copy_tree(os.path.join("emu/ares", os.listdir("emu/ares")[0]), "emu/ares") + copytree(os.path.join("emu/ares", os.listdir("emu/ares")[0]), "emu/ares") setDPIScaling("emu/ares/ares.exe") shutil.copyfile(os.path.join(os.path.dirname(__file__), "ares-settings.bml"), "emu/ares/settings.bml") From 7c3fc900c345c3e30ce5c133f9811d0601dc67e0 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Tue, 16 Apr 2024 22:28:52 +0200 Subject: [PATCH 04/13] Run ax6 RTC test also on DMG ax6's RTC tests do not actually need CGB; DMG is fully capable of run these roms. Therefore, the CGB requirement has been removed and the screenshots of such roms have been updated with the DMG's one. --- testroms/ax6.py | 6 +++--- testroms/ax6/rtc3test-1.png | Bin 1708 -> 1850 bytes testroms/ax6/rtc3test-2.png | Bin 2563 -> 1693 bytes testroms/ax6/rtc3test-3.png | Bin 1440 -> 1642 bytes 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/testroms/ax6.py b/testroms/ax6.py index 26562a1..530ee52 100644 --- a/testroms/ax6.py +++ b/testroms/ax6.py @@ -2,7 +2,7 @@ all = [ - Test("ax6/rtc3test-1.gb", runtime=9.5, model=CGB), - Test("ax6/rtc3test-2.gb", runtime=7.5, model=CGB), - Test("ax6/rtc3test-3.gb", runtime=20.0, model=CGB), + Test("ax6/rtc3test-1.gb", runtime=9.5), + Test("ax6/rtc3test-2.gb", runtime=7.5), + Test("ax6/rtc3test-3.gb", runtime=20.0), ] diff --git a/testroms/ax6/rtc3test-1.png b/testroms/ax6/rtc3test-1.png index b439e5dee0d39b90c86c409610b33940ecca25cb..e5789a499b02a25c07fa47802898be517d3f490e 100644 GIT binary patch literal 1850 zcmb`IX*3%M7lw6w(^N|$n21IwT1%&`qSRX222ER0)Dl~)O&MvI+Nx4Z zEs@4HmQp1{ht^(8EFp%J+CuGn#{B-~=lA2j_s2cwp7Wk_pZCVyLz#-4Jbh9?KtKd} z3t@TG-yBu)iJy*CfVIUE5C9xQBCg*L&R%*wmNu;{Z0u)q$WJ!_F>+PLMQe>zuuV^H zD^`{p-AXPf+xyrLWGu+1g73)StakmKSQa72iA(irv>$L{aGDXPgMPY?OU^=KB_{Tnt-xwZZvbb}04~r)` z6Z^!b$HF=0uU4JRYN6LVp;?Pk739bRpyCQTRmI)O>SVuKXe{YRqfF>+V(o!~_o+S; zh!b#a5vGt6I@F%hcV_;PJw|^?(hqSSG*t2K?oZTXKp;?BT3TCM8;{3NPEIy6nGqC< z!t!q6C=tg|1WyL%RIRLCc7|7ce+8xUhE^20D4X2_WF7FO?Am~1W7 zd7s(uy5c3Df60f?SfGg1a#7O7oL8t@2Pk zD{-kZifUzqb=Q|GI_Pq>q}RhBbXW$C6ajLp+R?AeDvpsQA8pJB_RqVU%P&Qk$~nlS zek0&F{^Xjg1yq%wg3OTHb6%I5fX+{3T$1WqXC5xhghC;MOx1}gjfZM)RJ0INhg8er zU-AmLnp|zrwJae5zU0?Ap+t=o@rs29d9F63Lt7)baCC7t;A*Ltc|SvgWIoR<=PTxB+|;>;y{js103@{#;19^U)8ZV<7!DDb@)Olm|&0eF0 z+eQ~G^>!N)F><;v?4njOFj#puCXMEp$ayP90Dh&lxfk_udU}?-b+>1`c-8&A`NoDf z&8?ulQyMIHPF@RY2_j3tw~1cjvt^z=?V{3`;)YXrNXYbi4Gl)RF0usRd`@| zoQPE94RBBNF^NUvvUwSmxX@7u88E8ID;}MtHY&*-V{63nB}!ig*%bU@4H|@tn@v-nx_+j&znVD?l&4!wMDto2;r=kLvQmOXV(x8(JI)<*)WdVU^OQuCD5 z<&BMdftFVpn-N0TAsR9|tj1#nVvYEg*PA&NSc_?EV6$luR;2MXBil0GGKp@u!={hm z`G>8ysvFx1-fM)8Zc#Lem|GGXrQsQkCL#V{iy~+;Z8P?yh^u%pg%ZFf6O8+Y)H4S{S_ms&lmePzw9v*6&RC?GO!Q5CXvJP46W!PM;Q}Va{0cgu0nJC z@Zl}L2Jl5m>P;*8@qImXRWH5Mc1a5DeBL2P!=&i4GoXKv5yH^1K>1*6x0GjT-EF*d zL(@L)k;%1XtCv0T#)ps%fSq<5+8Ll^aG~c9@y({RBW`xqm#0ka6o*PaRG3x!%#i9_!cEK(OKAM?Rf1rHBX z)mCz@Wv|LS+N|ANco*gAU}3#1v}3F@|LMhfm6EjRnsYASeKoBm#12fF>Y`j1Cg*RQ z(~mFQt*p_CTOv-=NJWlI1433JbU_YiBB5?KwNxPmgmD@XHlHJoTZD8!C!`;7aBp!n z!BLZoUs2&^ed_+Nebwc&=)Hf#p}+p+t8@=P@{0~|9)%+HKM5@e0090qy8rKkZgTEA VztcNa-SnTIh%`na7&ly={S8M5kx~Ev literal 1708 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 Q`}gfQ*tytJ&-f<(3&~AvW&i*H literal 2563 zcmd5;`#T$U7k4e1hAvuRqB>d>9qC07jmzBD8*QnWOF~Mz(Wa^;N)lzQx-HFGLunb$ z-l|qYQk1AhEn=w5Hfu1~xQ#?2sfgUX`n-GgYYH5M4y%+6?L~H!kU)iVrzG3)S;RC?s<>SWwxRo3%lratacGdCRN4<7yhZC5_ zd;P~%_2HMtu6AlR=DEci3WZ`_0E6M+-&5!MI%$I>ebS~nGYao3gz!(6rOz!9QJ0Rf zgy}xIh0E;He2U9~cBtm-5l(WHB)#rNodj15YvI{v9MC=#IVQfPUP>u-UU_z7T$Rq3 z;kr(?+-d1`r^Y*a15!dvg7~!g@ANK;b0nw=u3r1=$?6@mlTms3OV1?Ajqs}5t+-;6 zoy*!mo(uYUwHrq^0LFw|SWpF;MNx)h=hof$!J?iC4Q*;aLO1q@aomqg>8j2yM#pbh zpVipl?D$@1!wm8KnwI70x4Q-2XC%+?c>F4>t9!zXp22mh3-6~Sz`fd(|q2k zQEpC@lQdGL=hVUiu*$YjKba)R?#RwEt`9gyUmQnDqc#Ew-i5Yry@7>YgV4mG3k%zN z!jls>3oSV?yd*IY>FsWVM@YIM)=}=Dq_9;dI5zq1SvUdMBiH90bRr;DK&u;S85r%m0c#GW9q+Oo+$JD(SNhIfOa86mk zy@!_O5l!VWTy4uO;1yk|<=mJjdU`hAc8p~YwC`?_u&176O|n0^&-uQw0BppdkDWyR z-~w{F=AVF?#?(d!Ep=~ek-aEbcbiHIQ-{z&G5bEOl?X@IAdSBEj|fwxP0bpszXEyn zqT|jGFu_r|oyy5*`Ng0TAV*?CNJV7tpC*s|0{~n89su-ngr1?*N=Avq_%8dpBu#>E zhmI@8+eJB(4}F?V4+W*M&UNaiUw*I=M$EiSg#D+U>!;a=+>!Pbw9pO?bEU=~&ODKw zmMZ7zmZVv;c^(MFt>Zp>C7457F5a=m+~k+qPaksJmwOU3>J`Zg%SYbVT64NA z80lcea{(nLw3g=?n3aGba?3B|6+79`@^NlNhK;93eTNe~8GQmrV;#RnxmeWKnzY#u zYiLgqwTLY!Q*y;iwdtSmU6wFzAnPf87<0Y&vN?mjXAafXi7=^K%B`c4k9rbbZvSTj zRPPgzVc5w0Bs!oa6*{ys`}=HL&Xe{%%luwNKs4bJ8P`>bkJpADee+mSu{d5<-`^N& z1M=RK{>_CA=_pWT+RGSI`F`B-hcX>t8W=^nh5*P;`h zHgo>|WKNuvJ;Ldo2M*$7&i1`mb4!l(O~&m$H-}|Tr$UNFGt!)cYKvrSg$O2*wmH3n zyk`WWyC!0LsM_W=WMlvA0hHhOgg7YAqsRGy;5XKbf;R$CHS&+4E!AS1*n!NB8^{X3 zj2v0B2z3qs=l9fQG1G+EHMflHOvCq2mBi?%uHYkPq#y4Lw|m}4ZAC+mZ=C2oeCJV1 zrf0|~JcC+Y4KEA#0DYy{$oon@hLu67#Oy`V-)50%(Wm0Nb?a; zq}`$g6_3LgUyuf6^tGay!4NDTEH;dA7Bd!~;jR(NKFKQK zCmREPL}hn@`%;H=extzG3J~-){Y4ATb`hT+nm4V$o+ScgU?FF31ntmfu_dF!W}YMZ$8X@qUNP7DRqKpiKkG4Se(aXCNuha2G&O0~Qp z6D9HvfPaZm1AX}*vMB!REW@3i1CQ_`0%$N~l=h1vJY>n@X-a~|h#tdz6%)t=i#_N_ zmP{7acu@6-P5Ko$HiiNdKYD5UH?DfQ-zO>y^1;N!s&HnjjR!U|axYQHRsC5$i3{C) zA>~g3+cdn=?E3VfK9qM8FMwLkGd{DJ=R&hOmrSa?F-eyOxfwfV`y`og|NqUom!wgdpqLs^Rb_6%*5Ri0X~1cJsvkP%zhS26 AM*si- diff --git a/testroms/ax6/rtc3test-3.png b/testroms/ax6/rtc3test-3.png index e97719bc52d460774e2a64152b9df676a2f6c1e7..8ab8c443f6b959a9ea6e2cce942a13db11935e4b 100644 GIT binary patch delta 1436 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 From 8a74c6f567f8f572d2d5efb751bfb7f336ec1118 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Sat, 18 May 2024 14:30:15 +0200 Subject: [PATCH 05/13] Explicitly set DocBoy scaling factor to 1 --- emulators/docboy.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emulators/docboy.py b/emulators/docboy.py index 1b2f6e9..6ac8667 100644 --- a/emulators/docboy.py +++ b/emulators/docboy.py @@ -20,4 +20,5 @@ def setup(self): def startProcess(self, rom, *, model, required_features): if model != DMG: return None - return subprocess.Popen(["emu/docboy/docboy-sdl.exe", os.path.abspath(rom), "-c", "docboy.ini"], cwd="emu/docboy") + return subprocess.Popen(["emu/docboy/docboy-sdl.exe", os.path.abspath(rom), "-c", "docboy.ini", "-z", "1"], + cwd="emu/docboy") From a5f44370aee06775b6ab852c2723d23aafeed384 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Sat, 21 Mar 2026 11:42:31 +0100 Subject: [PATCH 06/13] Add missing newlines at end of files --- emulators/ares.py | 2 +- emulators/docboy.ini | 2 +- main.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/emulators/ares.py b/emulators/ares.py index 637ef50..9ae23e6 100644 --- a/emulators/ares.py +++ b/emulators/ares.py @@ -51,4 +51,4 @@ def getScreenshot(self): if not self.cgb: screenshot = screenshot.convert(mode="L", dither=PIL.Image.NONE) screenshot = PIL.ImageOps.autocontrast(screenshot) - return screenshot \ No newline at end of file + return screenshot diff --git a/emulators/docboy.ini b/emulators/docboy.ini index 4478ee0..17a7a35 100644 --- a/emulators/docboy.ini +++ b/emulators/docboy.ini @@ -1 +1 @@ -dmg_palette=FFFF,AD55,52AA,0000 \ No newline at end of file +dmg_palette=FFFF,AD55,52AA,0000 diff --git a/main.py b/main.py index 9e90593..a220ad5 100644 --- a/main.py +++ b/main.py @@ -242,4 +242,4 @@ def toBase64(data): }, } if results[emulator]: - json.dump(data, open(emulator.getJsonFilename(), "wt"), indent=" ") \ No newline at end of file + json.dump(data, open(emulator.getJsonFilename(), "wt"), indent=" ") From c3fc761a24b5cffcafc0138a5e6d578143a6de07 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Sat, 21 Mar 2026 14:36:33 +0100 Subject: [PATCH 07/13] Revert ax6 tests changes --- testroms/ax6.py | 6 +++--- testroms/ax6/rtc3test-1.png | Bin 1850 -> 1708 bytes testroms/ax6/rtc3test-2.png | Bin 1693 -> 2563 bytes testroms/ax6/rtc3test-3.png | Bin 1642 -> 1440 bytes 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/testroms/ax6.py b/testroms/ax6.py index 530ee52..26562a1 100644 --- a/testroms/ax6.py +++ b/testroms/ax6.py @@ -2,7 +2,7 @@ all = [ - Test("ax6/rtc3test-1.gb", runtime=9.5), - Test("ax6/rtc3test-2.gb", runtime=7.5), - Test("ax6/rtc3test-3.gb", runtime=20.0), + Test("ax6/rtc3test-1.gb", runtime=9.5, model=CGB), + Test("ax6/rtc3test-2.gb", runtime=7.5, model=CGB), + Test("ax6/rtc3test-3.gb", runtime=20.0, model=CGB), ] diff --git a/testroms/ax6/rtc3test-1.png b/testroms/ax6/rtc3test-1.png index e5789a499b02a25c07fa47802898be517d3f490e..b439e5dee0d39b90c86c409610b33940ecca25cb 100644 GIT binary patch literal 1708 zcmc(g{XY{30LCSZu;s%coO$U@Ue49LEVPv6yhNc}+PsB1Z%b3QE~eVj<+WnindW7Y z<)sW^r!~~LS*}Lh(9IZOxaDPJIQR4Y0r&Yl-{<)}zdpY__s{uxYVR@Hqokyy?e&94 zz)qI!@IYO8$CZZULrO|&$zC4rL3rwXDYCHEObcF)$ax76=uQzX7FC#Oj2|%S-(sA} z7CrP-7oH%AQbZm70cX6i7fS*R7B`n%;X5tNRhl|KAJ?cLHhSwxsL z^=#Rak|w?S+q9)!t+WiI;%IgLSspT`GoG z=iL}M^SR$4a0Noqom?Sv%pb?bg|z?gc_EP5Jw$Kcww@@vv*44s`oq_$zBef(~Q% z{H`K*zwOxyha4*&5tw2Xb*Rs6Z`9X3Gyj&CpOXipKpD@Pf2-;Pk*Ho8-R98zd>>EO zVdq+~;>2ic$XUuhkHQU3t{fM_BSd}{a)%X z>p=j`&2X;Ihe<%>?e@GSg=p&0`Az#Ds}3IJfKq;A`&1%lJkO4OtnExl73x9%X(n`Nnjix*3h_?IvXbr>?0#ww?K za)VE_|G3~TT^(JPM}0@rM;)0**E*8w7f)*pC4MV{#s@;o5K@;}R&Imcas6E6-4wVg zgg#F!Vc_53YJMmoHVNMs1U_9{pJxd`1X``Bi>eE1@z8MWtXk_7`AzKseFrFP6f+YvjK_CDMpc@<8~2@iu9iX|ym zDvBEuZZ;p-0_wjhVPh8RN1{$XcK6~0L zM4$Dvz2=)~8#Cj`X2C14$GJuUXjQ}Vy4gHE{n5Qv#b~(|yaUK%=abJ+s1?CX z)x@SQ$#exHb_?6znd7|S5{z9YW?_4vD{OXVsAiA)?J{Ii-C`8~)Nr&&&-SQW!4yOQ z2TRxeKGt62E~}iC33JzEPhR61U+<-bkhyvApYvD8omk0Y&KHvy6Cd4*85=oKz@oK* znTi4b=xdnl1e!u%IwIzz5g37T?F;Nb8THQ;B6$Rwxa|QWC$Q=W$8a-9=10&$#9b5? z$=wY4gRcTBmd3*FRe!B9av5AMTgx5KxdqnBz}JJNHAR<~(}<|Gx#jOcE5x?A*=iuR zB_!~{hnuOf??N*Li&xHh#a>5`g$AF8o_O41Wv{8+OLS*2+bj;qf~#MVq4OJ96R`&?k`E=`vMg efb##KY4EXUx=jDS0k;3XkQdy~qyAL*oqqrr&MvI+Nx4Z zEs@4HmQp1{ht^(8EFp%J+CuGn#{B-~=lA2j_s2cwp7Wk_pZCVyLz#-4Jbh9?KtKd} z3t@TG-yBu)iJy*CfVIUE5C9xQBCg*L&R%*wmNu;{Z0u)q$WJ!_F>+PLMQe>zuuV^H zD^`{p-AXPf+xyrLWGu+1g73)StakmKSQa72iA(irv>$L{aGDXPgMPY?OU^=KB_{Tnt-xwZZvbb}04~r)` z6Z^!b$HF=0uU4JRYN6LVp;?Pk739bRpyCQTRmI)O>SVuKXe{YRqfF>+V(o!~_o+S; zh!b#a5vGt6I@F%hcV_;PJw|^?(hqSSG*t2K?oZTXKp;?BT3TCM8;{3NPEIy6nGqC< z!t!q6C=tg|1WyL%RIRLCc7|7ce+8xUhE^20D4X2_WF7FO?Am~1W7 zd7s(uy5c3Df60f?SfGg1a#7O7oL8t@2Pk zD{-kZifUzqb=Q|GI_Pq>q}RhBbXW$C6ajLp+R?AeDvpsQA8pJB_RqVU%P&Qk$~nlS zek0&F{^Xjg1yq%wg3OTHb6%I5fX+{3T$1WqXC5xhghC;MOx1}gjfZM)RJ0INhg8er zU-AmLnp|zrwJae5zU0?Ap+t=o@rs29d9F63Lt7)baCC7t;A*Ltc|SvgWIoR<=PTxB+|;>;y{js103@{#;19^U)8ZV<7!DDb@)Olm|&0eF0 z+eQ~G^>!N)F><;v?4njOFj#puCXMEp$ayP90Dh&lxfk_udU}?-b+>1`c-8&A`NoDf z&8?ulQyMIHPF@RY2_j3tw~1cjvt^z=?V{3`;)YXrNXYbi4Gl)RF0usRd`@| zoQPE94RBBNF^NUvvUwSmxX@7u88E8ID;}MtHY&*-V{63nB}!ig*%bU@4H|@tn@v-nx_+j&znVD?l&4!wMDto2;r=kLvQmOXV(x8(JI)<*)WdVU^OQuCD5 z<&BMdftFVpn-N0TAsR9|tj1#nVvYEg*PA&NSc_?EV6$luR;2MXBil0GGKp@u!={hm z`G>8ysvFx1-fM)8Zc#Lem|GGXrQsQkCL#V{iy~+;Z8P?yh^u%pg%ZFf6O8+Y)H4S{S_ms&lmePzw9v*6&RC?GO!Q5CXvJP46W!PM;Q}Va{0cgu0nJC z@Zl}L2Jl5m>P;*8@qImXRWH5Mc1a5DeBL2P!=&i4GoXKv5yH^1K>1*6x0GjT-EF*d zL(@L)k;%1XtCv0T#)ps%fSq<5+8Ll^aG~c9@y({RBW`xqm#0ka6o*PaRG3x!%#i9_!cEK(OKAM?Rf1rHBX z)mCz@Wv|LS+N|ANco*gAU}3#1v}3F@|LMhfm6EjRnsYASeKoBm#12fF>Y`j1Cg*RQ z(~mFQt*p_CTOv-=NJWlI1433JbU_YiBB5?KwNxPmgmD@XHlHJoTZD8!C!`;7aBp!n z!BLZoUs2&^ed_+Nebwc&=)Hf#p}+p+t8@=P@{0~|9)%+HKM5@e0090qy8rKkZgTEA VztcNa-SnTIh%`na7&ly={S8M5kx~Ev diff --git a/testroms/ax6/rtc3test-2.png b/testroms/ax6/rtc3test-2.png index cda70a3e8c5afb2cc5afd08925c68ca7e60c0e65..ee672344001bfaa28a9d5ca1fb239df797ed2428 100644 GIT binary patch literal 2563 zcmd5;`#T$U7k4e1hAvuRqB>d>9qC07jmzBD8*QnWOF~Mz(Wa^;N)lzQx-HFGLunb$ z-l|qYQk1AhEn=w5Hfu1~xQ#?2sfgUX`n-GgYYH5M4y%+6?L~H!kU)iVrzG3)S;RC?s<>SWwxRo3%lratacGdCRN4<7yhZC5_ zd;P~%_2HMtu6AlR=DEci3WZ`_0E6M+-&5!MI%$I>ebS~nGYao3gz!(6rOz!9QJ0Rf zgy}xIh0E;He2U9~cBtm-5l(WHB)#rNodj15YvI{v9MC=#IVQfPUP>u-UU_z7T$Rq3 z;kr(?+-d1`r^Y*a15!dvg7~!g@ANK;b0nw=u3r1=$?6@mlTms3OV1?Ajqs}5t+-;6 zoy*!mo(uYUwHrq^0LFw|SWpF;MNx)h=hof$!J?iC4Q*;aLO1q@aomqg>8j2yM#pbh zpVipl?D$@1!wm8KnwI70x4Q-2XC%+?c>F4>t9!zXp22mh3-6~Sz`fd(|q2k zQEpC@lQdGL=hVUiu*$YjKba)R?#RwEt`9gyUmQnDqc#Ew-i5Yry@7>YgV4mG3k%zN z!jls>3oSV?yd*IY>FsWVM@YIM)=}=Dq_9;dI5zq1SvUdMBiH90bRr;DK&u;S85r%m0c#GW9q+Oo+$JD(SNhIfOa86mk zy@!_O5l!VWTy4uO;1yk|<=mJjdU`hAc8p~YwC`?_u&176O|n0^&-uQw0BppdkDWyR z-~w{F=AVF?#?(d!Ep=~ek-aEbcbiHIQ-{z&G5bEOl?X@IAdSBEj|fwxP0bpszXEyn zqT|jGFu_r|oyy5*`Ng0TAV*?CNJV7tpC*s|0{~n89su-ngr1?*N=Avq_%8dpBu#>E zhmI@8+eJB(4}F?V4+W*M&UNaiUw*I=M$EiSg#D+U>!;a=+>!Pbw9pO?bEU=~&ODKw zmMZ7zmZVv;c^(MFt>Zp>C7457F5a=m+~k+qPaksJmwOU3>J`Zg%SYbVT64NA z80lcea{(nLw3g=?n3aGba?3B|6+79`@^NlNhK;93eTNe~8GQmrV;#RnxmeWKnzY#u zYiLgqwTLY!Q*y;iwdtSmU6wFzAnPf87<0Y&vN?mjXAafXi7=^K%B`c4k9rbbZvSTj zRPPgzVc5w0Bs!oa6*{ys`}=HL&Xe{%%luwNKs4bJ8P`>bkJpADee+mSu{d5<-`^N& z1M=RK{>_CA=_pWT+RGSI`F`B-hcX>t8W=^nh5*P;`h zHgo>|WKNuvJ;Ldo2M*$7&i1`mb4!l(O~&m$H-}|Tr$UNFGt!)cYKvrSg$O2*wmH3n zyk`WWyC!0LsM_W=WMlvA0hHhOgg7YAqsRGy;5XKbf;R$CHS&+4E!AS1*n!NB8^{X3 zj2v0B2z3qs=l9fQG1G+EHMflHOvCq2mBi?%uHYkPq#y4Lw|m}4ZAC+mZ=C2oeCJV1 zrf0|~JcC+Y4KEA#0DYy{$oon@hLu67#Oy`V-)50%(Wm0Nb?a; zq}`$g6_3LgUyuf6^tGay!4NDTEH;dA7Bd!~;jR(NKFKQK zCmREPL}hn@`%;H=extzG3J~-){Y4ATb`hT+nm4V$o+ScgU?FF31ntmfu_dF!W}YMZ$8X@qUNP7DRqKpiKkG4Se(aXCNuha2G&O0~Qp z6D9HvfPaZm1AX}*vMB!REW@3i1CQ_`0%$N~l=h1vJY>n@X-a~|h#tdz6%)t=i#_N_ zmP{7acu@6-P5Ko$HiiNdKYD5UH?DfQ-zO>y^1;N!s&HnjjR!U|axYQHRsC5$i3{C) zA>~g3+cdn=?E3VfK9qM8FMwLkGd{DJ=R&hOmrSa?F-eyOxfwfV`y`og|NqUom!wgdpqLs^Rb_6%*5Ri0X~1cJsvkP%zhS26 AM*si- literal 1693 zcmd6o`#aMM0LFEBkjXelX1OJjA{~)bQxucqb|$7KQDh>OFqT`4ToNnAday}}*oMqq zG!k-4#pWwo<~D5DvSBu-em#G|d7jVvzR&yP`_r5DkBj|Ih207=GBP_I&e^*C%EDj5 z%WwVVG7J$zMn=}(!Pdq-DxX_0iec|jwBu4YHV;Q@!`cmJ6aVroN1rZM*z#=KRvUoG zh|n^!95AaU^Yz)V0TbfSvXVz6kDVnctjHk?GvvCH_}-`0IkFS6;5ZyF?K(v~%mzYa)P^UVn+A%NLVD)0T&z zhPqMnDCW_xIg1^46Tti>c*dbPWVGm+Wn4P?~vdm~u1w@@`+=HWQ?zw&YKS;Gb($QxD`t_lNGH<43qD~~? z*rqk}T??cxLIs2t>a5=vxR;jsEVOZsSo+Pz&M7q-WJHG|a`hW75JpdrKo@%#byf9j z*`YkPnAIMu=3LRXF3h9!NM1zA5JzSx^qJF-i`8{YE5eh41gC;|c=%5opJq3p)otcB zqw1#}Q6IROI;>(Yo0cQ~3Y6<-E!#|4NQ={jlgm~*^^)wjj1ER-c!TRoZw7hCay5KY z5ygmVGXGq^&|EYT8#Dw2kUcO~T+!yTWs3*V{02LJs7HP)z z&NgF>0w(FS64;g{H$H&=5`1U8Ill^9Ipz z<`~n)cp4&d5ZEpB4KcJB{LFs40bRa?vH~u5mTra)ds=pv0m;KW)WekJtWTNJz<$jY ziM19>2&^|WO3!@~w8e*v!@5X34=7WQb+KRwJ=iqW7q-zL@1aB94ZZs9kIu%^ZIaDV zKU!n^rEJ@t<+mT4dh+a7*~UKeZr;-Mx4yycbqlh57W2k(iDJAN%IVeOiO8`ct=1o{ z>Mc|KZ^&$~;~@;ni0;xWCMUZ#c@iVv41%dBt7Q2op0v0)f53!x44&!BG{x1y72AM& z%3S3r(+QW4)+d<=aEx-1A5P4I9x~Z3qMM;&oWvAVzS#G&S4Ee5H1bw%o#aONQ^C5} zcf3OsEG~TK8e)aQW|3e-s7k*>zL-VXO8#*?7oR!Jb447goc`o@W&MbAfES@igC@gm z&z7X8mssE!-{mwwTsEda_~I*AZr-)&4qD=|2dt#T!$JH=$HjU{0iB4ctFyYcwMA(q z1i-|*`Yg-2>Pz*4ce_$Tq)n63M?>wb$+KJX$Wy8iKtm60xB(LRu}=N9Ry}n8 zHGIyblS^NwvXA5BSM_FZ6nnms~R80-vE%Ti>u@ zVbdqGDJ7 zsfg78>xxxGMSlFP@CNqxBZ z2I`KMA@E~4jj4`DrBh9uqaxu@xdR?X$YsEb?i;M}n`?6_v9~Lz19J_?nVK5)FAm0Q znXvkk;cspd7{mMt*af3SC=sSAQ1G0pso4XTb-oensQ}PDF^Ss}aQ|}za`JF*0Y7oI Q`}gfQ*tytJ&-f<(3&~AvW&i*H diff --git a/testroms/ax6/rtc3test-3.png b/testroms/ax6/rtc3test-3.png index 8ab8c443f6b959a9ea6e2cce942a13db11935e4b..e97719bc52d460774e2a64152b9df676a2f6c1e7 100644 GIT binary patch delta 1233 zcmV;?1TOpP44?~;BYy>FNkl(Ym7`421Q3`@H92_J!RGTbhO>fZ8n?=f83z z1auG_>G^iuwrv??UDtBltX>KqXy_|^w8MLHGxNHxpJ?%Cv_k3P-Ww^lNfuoTAMJ3t zZ;Iw^Jj|bC)%M{g`zps~Fity@%YT+U-pnx+_mUs$q)NMOn}0emn^ujMxS2D)uI42i znHJ2B1_GNMs>f_RIK2E<9ee$ZZ^AC5)K%RdZyW?y*MGe|9C?CEOGAyxTHZ{xJa0;K zum?>X!&IoVmRbIisos1Hg8Nf5EU;XIKeTel@vdGyI-jaf^y(O+o$0yW;Qkm1FMNwO zr>0;{Y9{ycpCO6&Owsk!8g$j0pX=(e`|xIIv;RRJop!46PA+HICXrl|!37k5aX+GZ zn*on%t&c3;_mld=R-C6No|^Sl3pNqj4lW!OXKk z{3Y<{_MgI=NM$g1cI#SqQ+NG;yP6ZSqMTKdd-1o;>Ui7Pi|CFzzhr1uF?VCkHM?`S zCkxGmcE>9a$KR&tp0!PtDbKw(0R+EcIJSF_A!;Y)B4TwsaLnC*oRS2=2g^pi zD*f^7&~HNuduWr?|`qtC=?VLb+6Hs>%=fqelRMt`(T-5v;N@jqz?|RIXgLg zuqyCs@9O>FTXEh8{{(k`S#1EkT7Cb@*i^zS;3biZ{e2$a#d>5-%95<)^y2iv;C#&o zt2|zEvv6G{FUUSv<*9=*KdL{5^}#*s>z(~^dLJwsH3hqyx@bPwE8zKHV1JD1gPV9& zFhuQSqWxfRiCy`-=n(D)lT&=e2M5z~&kS+fCwOOSAKbVYYY^0bi+YLE2djf+nZO5o z9H@9VrzDxw2gjz?^TFOJuZhFmo0&8|xGvNAU0Mboou&^K%;JM}@B0Qs{7%;sha~ZS zaLF9JGt2y5JUiSECa1XA2iJvz&tY%{BcSjJanTEEU0&I zP?P%LQR)_(Z*Zu8>dx+i)v4GPoAI6`kBhrk vo9^lVN1+b}Ca2(k5Dk+N211kI1#}gE4E3>#?DMU_00000NkvXXu0mjf;J<-n delta 1436 zcmV;N1!MZ43+fDzBYy@lNkl+mfU>3`9-E{Qobr56rM?-7F~6;3UsewZOtS zeamu1^s=sNJIJyu`{!=){pJ%7x`j(Cyd`%tFUxYp6F)}_>{Z-qBgJ-^Mc186E4;Ux zqT7t8`E#z=*4<=XW#3HtX)(F{bI%ja9Eajj@^h6`Y1egCAAj6OtB3A!H)sA{-B&m> zEw~j;1a>QA`)uAhqWq&iNA=7bVG~m7s@f;&2g%#j-?ze<5xhU?(8FY@Xr^la8l~IW zlSiDxRj63Xy?@A5?+$~ceJqCsmTT}uD~IgwYU@!PRaeyN97iitdEcacoP+~+(eBig ztV!MEQT}h@l^-eEPOV8*qxsnu&)r8fOS|hEMYhiwv>3zGo_6o28DsL^4- z-(tNlS)%Vx>=#>ko=SXbD(zhSM$C`W=Un7%A*p;gCpn4pV zMDl7}=4$Z|8=|$d1(SmeMv_!^gHe84rAf&f!HUu?qT)Oc2In>(oZSD~5xfzNW4B0G zl-qo8#m`0gD|>}mNZNmh4-UVoRHCY3WUJ*qMsj*DU5_J?516Q(ZGZeuA1ogl6{*K( z=OQ2cN8a&e+bPYWLEo*DEE4rxJegfx-PerT*^S@kgS$6GMKJbOMchevJ|CPUkMi46 zlR_U%zG9dUF0Q-DB8ojyBc}1e@>0G5R(ok_ZB=q4zZ-G24<39T+>WT*yv|ff^#;@$ zyxe{sT(9ni8oQBGdVdcW`QVY~!F!UUPRVjzS9>gKsoHSA2$G{ht-Cfp%m=F*WEE{N zs(O;=og|VM-fWA^ z3$hPZd2CSTNA<@^`w#KKgU^H8ado2#bW>rIj3RqAiQndf<$pt6!QQ4WrVsA+P<21> zzFMw6I}`ihE>RIkbt4kVt8tmDnXf?ARhcd+DF0meyXcg>5t6ozil{h!FgTa^;AC2^ z%n+{~!5h&yc8hdJ@L(TYc^TCS5_)i35?D4|c1Vs~g$*qyjJDdmnt; zd9bRMy;SwG+vtPg8SI1Y&5>!-^?0j4p2i2;xgt;ECXAA+IFdiU+6Rw6 z4{pJjjySQPzQI97g1J|d_%EFYN7yHJcW|icUgU!ZpMM8eu(OK2+U>b+&bd}!g%FYIjXkuBrVj?^ zmwd3>6Mxi$KKLKeIChJ4NATr7xc-tVTjKNNCHmkz{x~1(CUlF`<1;du4|X@(EtrDx z%Al${w|@_I$7S+9-JV-dH4Ac;*_qD=ckhYDx~f1uJ~fHt)ws;nF7v@|@<@``?xO9> zy4zU#VDdl1eDKM~8%vhQ)eUZyj&4Kl?c&q;;1fj4K@@jyui*$l89TR9>0sZeXu2(1CqHRd4FlH zqS?Nf>MrD}vGY(Ld Date: Sat, 21 Mar 2026 15:35:48 +0100 Subject: [PATCH 08/13] Update download accordingly to latest DocBoy release deploy --- emulators/docboy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emulators/docboy.py b/emulators/docboy.py index 6ac8667..4b37ca4 100644 --- a/emulators/docboy.py +++ b/emulators/docboy.py @@ -11,7 +11,7 @@ def __init__(self): self.title_check = lambda title: "DocBoy" in title def setup(self): - downloadGithubRelease("Docheinstein/docboy", "downloads/docboy.zip") + downloadGithubRelease("Docheinstein/docboy", "downloads/docboy.zip", filter=lambda n: "dmg" in n and "win" in n) extract("downloads/docboy.zip", "emu/docboy") setDPIScaling("emu/docboy/docboy-sdl.exe") shutil.copyfile(os.path.join(os.path.dirname(__file__), "docboy.ini"), From e31963d099b18552394e57b54871759e4925f0d7 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Sat, 21 Mar 2026 21:26:47 +0100 Subject: [PATCH 09/13] Add ci-docboy to workflows --- .github/workflows/ci-all.yml | 4 ++++ .github/workflows/ci-docboy.yml | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 .github/workflows/ci-docboy.yml diff --git a/.github/workflows/ci-all.yml b/.github/workflows/ci-all.yml index 12e69f7..e9b6a6a 100644 --- a/.github/workflows/ci-all.yml +++ b/.github/workflows/ci-all.yml @@ -76,6 +76,10 @@ jobs: needs_chromedriver: false needs_audio: true extra_requirements: '' + - emulator: DocBoy + needs_chromedriver: false + needs_audio: true + extra_requirements: '' uses: ./.github/workflows/emulator-runner.yml with: emulator: ${{ matrix.emulator }} diff --git a/.github/workflows/ci-docboy.yml b/.github/workflows/ci-docboy.yml new file mode 100644 index 0000000..70a3b1b --- /dev/null +++ b/.github/workflows/ci-docboy.yml @@ -0,0 +1,18 @@ +name: CI - DocBoy + +on: + workflow_dispatch: + +permissions: + contents: write + +jobs: + run: + uses: ./.github/workflows/emulator-runner.yml + with: + emulator: DocBoy + needs_audio: true + + deploy-pages: + needs: run + uses: ./.github/workflows/deploy-pages.yml From f0712262fb11ba6b8df82954501c8df7f76d675a Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Sat, 21 Mar 2026 23:12:14 +0100 Subject: [PATCH 10/13] Add 5th color to dmg_palette (default LCD color) --- emulators/docboy.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emulators/docboy.ini b/emulators/docboy.ini index 17a7a35..26dac09 100644 --- a/emulators/docboy.ini +++ b/emulators/docboy.ini @@ -1 +1 @@ -dmg_palette=FFFF,AD55,52AA,0000 +dmg_palette=FFFF,AD55,52AA,0000,FFFF From 4f7c16360ffee2c62d1ea3dc8d3e1b06a1319156 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Sat, 21 Mar 2026 23:37:48 +0100 Subject: [PATCH 11/13] Add PCM to supported features --- emulators/docboy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emulators/docboy.py b/emulators/docboy.py index 4b37ca4..b16d23f 100644 --- a/emulators/docboy.py +++ b/emulators/docboy.py @@ -7,7 +7,7 @@ class DocBoy(Emulator): def __init__(self): - super().__init__("DocBoy", "https://github.com/Docheinstein/docboy", startup_time=1) + super().__init__("DocBoy", "https://github.com/Docheinstein/docboy", startup_time=1, features=(PCM,)) self.title_check = lambda title: "DocBoy" in title def setup(self): From 3223282577db01a499a50812b41c4f1f439ab904 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Sat, 21 Mar 2026 23:38:36 +0100 Subject: [PATCH 12/13] Remove custom title_check, as the default is fine --- emulators/docboy.py | 1 - 1 file changed, 1 deletion(-) diff --git a/emulators/docboy.py b/emulators/docboy.py index b16d23f..3f1d300 100644 --- a/emulators/docboy.py +++ b/emulators/docboy.py @@ -8,7 +8,6 @@ class DocBoy(Emulator): def __init__(self): super().__init__("DocBoy", "https://github.com/Docheinstein/docboy", startup_time=1, features=(PCM,)) - self.title_check = lambda title: "DocBoy" in title def setup(self): downloadGithubRelease("Docheinstein/docboy", "downloads/docboy.zip", filter=lambda n: "dmg" in n and "win" in n) From e49c24ade5b7abb2a92038fa5a07aee1aed6d522 Mon Sep 17 00:00:00 2001 From: Docheinstein Date: Sat, 21 Mar 2026 23:39:53 +0100 Subject: [PATCH 13/13] Add DocBoy in CGB version too --- emulators/docboy.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/emulators/docboy.py b/emulators/docboy.py index 3f1d300..80f69b2 100644 --- a/emulators/docboy.py +++ b/emulators/docboy.py @@ -10,14 +10,15 @@ def __init__(self): super().__init__("DocBoy", "https://github.com/Docheinstein/docboy", startup_time=1, features=(PCM,)) def setup(self): - downloadGithubRelease("Docheinstein/docboy", "downloads/docboy.zip", filter=lambda n: "dmg" in n and "win" in n) - extract("downloads/docboy.zip", "emu/docboy") - setDPIScaling("emu/docboy/docboy-sdl.exe") - shutil.copyfile(os.path.join(os.path.dirname(__file__), "docboy.ini"), - "emu/docboy/docboy.ini") + for model in ["dmg", "cgb"]: + downloadGithubRelease(f"Docheinstein/docboy", f"downloads/docboy-{model}.zip", filter=lambda n: model in n and "win" in n) + extract(f"downloads/docboy-{model}.zip", f"emu/docboy-{model}") + setDPIScaling(f"emu/docboy-{model}/docboy-sdl.exe") + shutil.copyfile(os.path.join(os.path.dirname(__file__), "docboy.ini"), f"emu/docboy-{model}/docboy.ini") def startProcess(self, rom, *, model, required_features): - if model != DMG: + model = {DMG: "dmg", CGB: "cgb"}.get(model) + if model is None: return None - return subprocess.Popen(["emu/docboy/docboy-sdl.exe", os.path.abspath(rom), "-c", "docboy.ini", "-z", "1"], - cwd="emu/docboy") + return subprocess.Popen([f"emu/docboy-{model}/docboy-sdl.exe", os.path.abspath(rom), "-c", "docboy.ini", "-z", "1"], + cwd=f"emu/docboy-{model}")