From d41afb7999d7b65570c8a8d10173ff5416ee9f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Tue, 5 Jul 2022 16:56:20 +0100 Subject: [PATCH] feat: more instructions --- examples/sdl/src/main.rs | 1 - res/roms/special.gb | Bin 32768 -> 0 bytes src/inst.rs | 66 +++++++++++++++++++++++++++++++++------ 3 files changed, 56 insertions(+), 11 deletions(-) delete mode 100644 res/roms/special.gb diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs index 879ac9f4..584239cb 100644 --- a/examples/sdl/src/main.rs +++ b/examples/sdl/src/main.rs @@ -88,7 +88,6 @@ fn main() { //game_boy.load_rom_file("../../res/roms/firstwhite.gb"); //game_boy.load_rom_file("../../res/roms/opus5.gb"); - //game_boy.load_rom_file("../../res/roms/special.gb"); //game_boy.load_rom_file("../../res/roms/paradius/cpu/01-special.gb"); // PASSED //game_boy.load_rom_file("../../res/roms/paradius/cpu/02-interrupts.gb"); // NO FINISH diff --git a/res/roms/special.gb b/res/roms/special.gb deleted file mode 100644 index ad3e9984f967b77b7ffdf768842ce3c04517d059..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)+iw(A7y$5Zx80$Z?a~4dM`&TnrIv<<L8ETsI4RnIQL)4aOo+xI(8223R;y(T z+qI>M@$w=uCK3`2FB)GYyojYQGo9TnBOD?LkTIcgH`+#5Y&z&DBJTQ~SxVyN5AgC$ z=FIFj=klHNn@isc@IT+|W#Mz*8^+l>SX?y#V-STpsA*XJ+UpRze71LXdiska6BGOP z^v157oxXhJ{fY6rv_FZBU>pjr8QZ`6Q{6v4+|~eQtiEk&qx|dgI{D|M4Q4ZR*bx55 z&zvSm0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ z0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J|1AMqp1c%MZmd?| zT<G)D;G8_|YhUsz)4N~(DG17Zsi|G4T=5(~#p}&s5jlT#a2ROi{78N@e<(lZ_}Pmy z&12=Q?T@wZZ2!2W=1ly|?Ppf3R_dQl&V9daXztUl19M|f9GsKa%U`#Y*Sxs#g^m4% z^Oolf7sGC<Smm;6&0%59E{0skFV$vtnLOm;6g2tfxi&Z#_>}pr&#L%`X4^^m7ti5y zCSPXpCX27N_$kxz`37sD5B~JBzQxO?<@iZ9;}5Zde}GN<2iX^Xie2=F*?B*k#AZVl zoAR>{Ji@N}+0O0k3g2b=XYS>9S>EiDQf)k(Ta;7mkn3kz)X(CD#j(BP7oM_Wwfre7 zr{H98CDNwq!^(}(t|W#-PGQDhySA-Z?G6_sxIhWlGQ*#<Shx%YzTI?it}}en+_8IL zpnESAG_aqWyk709t&#g%zhX;7U1wi!_d-p??Yl0y`_d;{Z^NF5fJbaz3Y`-j{rQni z{`@GGLs-T(iG|-PU*YYWADNJs&X1mw>*f!Q%Qf?3pUPEsm&skr9=F<XwTqJ{<e!}% zHkZFFf~!G(5tb!b%2-;o5iI5WdToDxUGs@4{<g`}7C$=0yG&oJ;;T(9cy73OQuqgx z!CG)6pASxY_US2K%=nn;l|rr@6ARnAyC>1Tw-yRWvJlB@(WNuEg@IFD_~FOp-tK+7 zU+NjGD10`ls%j}bId0i!C)tmcR#n)lzi*&tp%n`)Gz#i#s~_!@cRaZ9p+}+6Ty1Oc z?H{UZB0IWv$Xm8TAp}dao_~I5c76gAR7Yhm=pT_fw`_qz1HeV^4j-Kg!+2OOdk1s% zPs`th^miIwev$uT*>76e(5hdnk|$cF`OeZ?vTr%OK64%1+4{_J8z0DHb~7A`0sjWi zZ^X)Y)|MAnB6YFR)vgtrT)s2Io@|D9rRx0~<s0iF@-+wDpONZOzDIin3;cbF$kSS= z*oAirli+w=WvAh2M$)rV&5C6otyzO3SrHjuCH|zX9nN>)I1g%H=eOAhGQp*We23>8 z$9HdJb_6FQ-oDnR8NYd@+g4g6-{zI%)>^(b<9na9-`%^vP#K7iWpKiH#8I*{*PGm2 z4X#0xn^(Bf@;f8)4Q(Z^u7K|yX2oXM;?isR2R!GZXx!J*vSCBRO1EjnnuD0*TH*Yy z4-69<Fi0d4!8a#SO5hH_G+mWa42%R*^xUh^cu!-z&$thw(P+>v)`<NYW6&SRbG#qG zP|K=;Rg9%^z{;j5I{rxCi~w{U!cr6m>;Tp19W)FTnCQ>a7>kNDq@ye<;q_>vnn+`= zw4Rbgtm=A7v`>p>ih}J8v5T`NMdKo`*l(T{5Lpx^=8EZY$KRr7B@eC_^FQ0GYrt@T zv|&KXFvO16bzR4ClL^Bx5=qRjr*s|X6`Xa@biEf-0@h+T15`16rh+6k?1z2&u`e!F zY-z~Nl`iFSIWPv(Y3wNGi<=tc!v;Y-n7Aj1F{Q|_ig6H8Y$6YCK|VuO8Q@r#N^>}# zp^B-CdNGBH3+7uDbXx@-V)arOl0lq=`gkID>plRKOkKGds*;A|2fVm`5YoC>j~3*` z*hpjCsHBix^ug<zgeJ&^`5DA91Kvl}$E_dn5@P-FAXKsa6#;<fN_#P$Sbrr>>A`q7 zpooPB#^S-l`zQor7>hLGzru)a;szr?N<6CpK;=5l2XAul{KObjM86<Cy7V&^#c5$X z{px#_M;Cts@aJvuF;q6U5A=8M>DisA72iicAJRtiVPC5ef0$kIf%WY58UCBiFHDI~ zGb`PCbAn;$KmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2J tBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JB=Bz&_#K5wPf-8> diff --git a/src/inst.rs b/src/inst.rs index 04a8bd7e..98a88bbb 100644 --- a/src/inst.rs +++ b/src/inst.rs @@ -309,18 +309,18 @@ pub const EXTENDED: [(fn(&mut Cpu), u8, &'static str); 256] = [ (rr_c, 8, "RR C"), (rr_d, 8, "RR D"), (rr_e, 8, "RR E"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), + (rr_h, 8, "RR H"), + (rr_l, 8, "RR L"), + (rr_mhl, 16, "RR [HL]"), + (rr_a, 8, "RR A"), // 0x2 opcodes (sla_b, 8, "SLA B"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), - (noimpl, 4, "! UNIMP !"), + (sla_c, 8, "SLA C"), + (sla_d, 8, "SLA D"), + (sla_e, 8, "SLA E"), + (sla_h, 8, "SLA H"), + (sla_l, 8, "SLA L"), + (sla_mhl, 16, "SLA [HL]"), (sla_a, 8, "SLA A"), (noimpl, 4, "! UNIMP !"), (noimpl, 4, "! UNIMP !"), @@ -2164,10 +2164,56 @@ fn rr_e(cpu: &mut Cpu) { cpu.e = rr(cpu, cpu.e); } +fn rr_h(cpu: &mut Cpu) { + cpu.h = rr(cpu, cpu.h); +} + +fn rr_l(cpu: &mut Cpu) { + cpu.l = rr(cpu, cpu.l); +} + +fn rr_mhl(cpu: &mut Cpu) { + let hl = cpu.hl(); + let byte = cpu.mmu.read(hl); + let result = rr(cpu, byte); + cpu.mmu.write(hl, result); +} + +fn rr_a(cpu: &mut Cpu) { + cpu.l = rr(cpu, cpu.a); +} + fn sla_b(cpu: &mut Cpu) { cpu.b = sla(cpu, cpu.b); } +fn sla_c(cpu: &mut Cpu) { + cpu.c = sla(cpu, cpu.c); +} + +fn sla_d(cpu: &mut Cpu) { + cpu.d = sla(cpu, cpu.d); +} + +fn sla_e(cpu: &mut Cpu) { + cpu.e = sla(cpu, cpu.e); +} + +fn sla_h(cpu: &mut Cpu) { + cpu.h = sla(cpu, cpu.h); +} + +fn sla_l(cpu: &mut Cpu) { + cpu.l = sla(cpu, cpu.l); +} + +fn sla_mhl(cpu: &mut Cpu) { + let hl = cpu.hl(); + let byte = cpu.mmu.read(hl); + let result = sla(cpu, byte); + cpu.mmu.write(hl, result); +} + fn sla_a(cpu: &mut Cpu) { cpu.a = sla(cpu, cpu.a); } -- GitLab