From daf87fa5d216951c7f2a2a0436e2b25251f7d178 Mon Sep 17 00:00:00 2001 From: Cole Landers Date: Sat, 31 Jan 2026 01:24:39 -0600 Subject: [PATCH] Removing test programs, finished all chip8 related quirks --- programs/1-chip8-logo.ch8 | Bin 260 -> 0 bytes programs/2-ibm-logo.ch8 | Bin 132 -> 0 bytes programs/4-flags.ch8 | Bin 1041 -> 0 bytes programs/5-quirks.ch8 | Bin 3232 -> 0 bytes programs/6-keypad.ch8 | Bin 913 -> 0 bytes programs/7-beep.ch8 | Bin 110 -> 0 bytes programs/Airplane.ch8 | Bin 356 -> 0 bytes programs/Nim [Carmelo Cortez, 1978].ch8 | Bin 182 -> 0 bytes programs/RPS.ch8 | Bin 2017 -> 0 bytes programs/br8kout.ch8 | Bin 199 -> 0 bytes programs/corax.ch8 | Bin 761 -> 0 bytes programs/flightrunner.ch8 | Bin 295 -> 0 bytes programs/octojam1title.ch8 | Bin 426 -> 0 bytes programs/outlaw.ch8 | Bin 512 -> 0 bytes programs/snake.ch8 | Bin 1438 -> 0 bytes programs/test.ch8 | Bin 30 -> 0 bytes src/chip8.rs | 7 +++++++ src/chip8/cpu.rs | 4 ++++ src/main.rs | 3 ++- 19 files changed, 13 insertions(+), 1 deletion(-) delete mode 100644 programs/1-chip8-logo.ch8 delete mode 100644 programs/2-ibm-logo.ch8 delete mode 100644 programs/4-flags.ch8 delete mode 100644 programs/5-quirks.ch8 delete mode 100644 programs/6-keypad.ch8 delete mode 100644 programs/7-beep.ch8 delete mode 100644 programs/Airplane.ch8 delete mode 100644 programs/Nim [Carmelo Cortez, 1978].ch8 delete mode 100644 programs/RPS.ch8 delete mode 100644 programs/br8kout.ch8 delete mode 100644 programs/corax.ch8 delete mode 100644 programs/flightrunner.ch8 delete mode 100644 programs/octojam1title.ch8 delete mode 100644 programs/outlaw.ch8 delete mode 100644 programs/snake.ch8 delete mode 100644 programs/test.ch8 diff --git a/programs/1-chip8-logo.ch8 b/programs/1-chip8-logo.ch8 deleted file mode 100644 index 19c5cf30f469f86fce62351b46c5a68454d93429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 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 B8T|kN diff --git a/programs/6-keypad.ch8 b/programs/6-keypad.ch8 deleted file mode 100644 index 4d1ecdccdf6968522529fff4a18492cd31032600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 913 zcmZ9IPfQa*6vk(#jkGJmFblR((rkA9(?bu492&ESg%(92hG3gCdKqAw5VRXYz;IAA z5koM+gv02;G-QjrSL1<$2SfJemBbr~aSq%}npVMhAk>)>FU(};_s#p>yqSGkCjq>M zqYH|SKpjWRVB2UGw_i4k*vKh+*nj{WrA}wFJPUsJ9d-->ocGN=?5Kx*jGR z)F{AH%PrjRbc-E%t7EdP;QqBqM?I)v>VQRMNfFMi=l7 z+yB{SuYY7z=La8O4qor?%-;&$?C%hN`s)nDXnIR~I9((44_o3dcyO~-_HnCN!EPkT ziL=;MgYh5d zsop5c7gx@?7lMdUC6Pv7Lv4240NO8J)BXbPUnQyO_?}ilZcor-R1Mfr4XAZi)ZmhK zT!{tO0Cz>)PoL)f_rci_hF(ZL+vA?cL)+$D4>>0~_qeX}P;4j{F`-372re^2sVU{5 zCuB&44k@7?5theA4WjF!s^?LWBhE?LwnUKH9w*WyvbJs8!Xn}m6q#ZbQWT)P{m#?X zj-HPcq9{^|_CknHzGl7KkxxJ#De9^NN5@p))b|Yz`o1uSYX1Z>ak79oD{L%NTA3jEwqCGGR%Xe{o^6k~qmv;v1bSJL^|LI{*%g*% v7RazD8(=m_CJ;ev6&%-J4+^;XHm!}xsR!f(r<15An`#|N$1w~k3h1BDab&GPl(~kLLrL} z>;?=%It=d;7!qxgxEUUR)P9tBv{1+er03B*As->ELJ=_AMpElU_X#aY E02O^Dc>n+a diff --git a/programs/Airplane.ch8 b/programs/Airplane.ch8 deleted file mode 100644 index cac880477e824b0948ed65d195c4cc44896577d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356 zcmc~|$Y#l5%w@=9QdUz|NH9ob{2=;){iB2dgOG@lld?iBBT$s%!9ry&F9spI#Ys0N zRx;k0=+7wh#ZyA)iP9z^IUh!)93Lj7Dj#O04j&e!X+Eq$))H3$le;T{}>+lu;nmjF$i%buzirI{_o8o z%mMN@!vm0*Fozc-!@C5g4-#379TzGXJ0F1j3A8Qb?jweGDU!(yi^DEE7IPRo2Gj=j3rE$9U0y={P^GSK%k)GonZN@6$=^|0Amq% A0ssI2 diff --git a/programs/Nim [Carmelo Cortez, 1978].ch8 b/programs/Nim [Carmelo Cortez, 1978].ch8 deleted file mode 100644 index 680c96a31b577f21eb375e8b19aa54a770cc22b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmc~(&Sg?c`orbJFC>x0*tb+EsduR#gHTfjGyF zl7O<4G7El+{$#gg5VD$aK`5ZTq3uF@sy~BJKrKset1W|2R4$7UPv2FgBp@yEOM>CS z;(&j~$pYC7pHe?)Ufx>F`VmZi0+I~x7A;C(NEE#wx@dU<#|2TL35(VM`2s-xMlgRt ZcW39y+nbEE)Ry&ib#=Xa*YQT<9ROQ-MuPwV diff --git a/programs/RPS.ch8 b/programs/RPS.ch8 deleted file mode 100644 index 3ea42d4eeb79ee26cfe187f4faebe0c7088aaa63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2017 zcmbu9Z)_8F7{{OAUAuO-nHG?=r(4?q$yz00h?B{RZHAI@BdiPuF;OTcvX+@;FiBxk zdox2yaer7wMvQ?9)Gi|ie4)M=3r%=2-hkC;%#4mEnlK}|4OmziZO`X-cVmr&SALWB z^LzgOp69NqrN>?S<%v@#cDg~);jPFov)shQ!*0V=7vq@ywV>cO) z`D|t;t@=Hz!iU*;)mFaQnsJXDz8VG~HUe$AOav}x0Mhr{*N1Kc{4gy^H~YZQXEK$Q z+w-|RfOuHM%H;2VW@!UE`^X^MO$0y|!`bRgCXL5yKv))l>AQ*5pMlqIFE1_b}nROw69x^xon z0Rl8JpZ#!t&l*dKp25MMs*J7(1z>kjf#{8;X3|N#dO-#~3XL??f>UjmWoT{D%{%2v zvE2ls8o=k2&t`D}TC2~oYH|B3V@kc~@d^UNbTC;cCRB^Vske*D{0nzcURC4?hr?d) zZm$RXQ#Bk@Dd*(_hYncezf6>{XeJ>drl(`c*f$pe zq~SZgpN}F(r05dl2emJ^Jy!z|YT9{d`OnDL*M&~KgRHF$(OnHX)SskbDuT6mv{gq~b88ay=#ph@;;_o0$Z7jtdO~%W<%l;(V#$uzMMSHPQIms!r zIc1&!xrF0Nj3$tM{rx^_bH&9RwNw3C+*qu{wR#yQ-%g#OMyF8U0WbyA#;Iw5F*vg2 zNFBf&OxD$12e<;AwL&Mr5d75GI0;~bdZA;b)`Y_8n8K_JSK{$8tm^)2)v7tP9qv`` zVSMf1of;Z!2H4#=xpb)wpkqa0snP|ryk79aF@Q?}*BbZ&XE=FsBMbt}4$cigBS6ZR zvcU=fmSLHKo3&%dK`+jaumAXQiE_;0E~gwC7`R7yW?(?sbFO<3Cwr`DbY$eW#}-7c z51)=Kn!V9zROzO=q{tm-f%%V6FVrt4i+H3TO@4oWe_eO~4OxJSivp>*Autuw0_$8S z=$yL*y>p4B2c&bWof{u;tSOxZ)wQK4u+S@MAyH`+WmB$FwpE z&8@6LTX1!tbRwd}$F(>mjZ@l!rE0u}SaWV-z3bZHW~_6r7u~Ei=knAr{4zJg8_>)0 z&!Cs^%h1d6F0{+hOZb)OWq6m%15!c=k^q@Fns_T%O!*%EfD)@UUybG?=nH7Rkmh4R zssg?<@oDhY!1EKIBqBkUvWoD1=u^(8E2BVjJ#(#fCC1)>rrB;S_3=gv9vP6_vmAI7z8Q%S4w_^~RoX7GHXjiUW mj$F1wmh4GJPln9@8UG<_64)OsRI*Os1d_%|$x4%jwgLe9phWTj diff --git a/programs/corax.ch8 b/programs/corax.ch8 deleted file mode 100644 index 9fc874c917a5a6957c4affe5ac285211abb749b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 761 zcmY+?KZw&%7y$6sn)b9Elu|?#G~D3OF1ZLnyd?@Yt4sHsnxucAV>u8sE(r%6T-=WO zB430%IN=}%-f$3y8ywuvo1TM%pmG)L;!wZuHIdwsy!^iJeeZi8Y1Hfz`(>9K@0jT6 z!|O0RNqYC-4?fHN>YzR>IW4yh2PX;q{E|Ryv>`f8hE+JsBzo9_7^MzJxpZwQSKv68 z@uDNMo>ky;Zm(q)%3daM;}zBJHTqWvH-;tHU%Jg!%MhE4Vwk;y`jt8{%MfWy+9$Lf zw8&|BEPQ0;XOZubyLGP>Zdh&V3u}rh4~ z-Xwf_Zr4%fo1tU1T4$p+IGsJU*@iaj!t~5}$>7ZyWoww7PmS{EW>a@-e&@G?lPfj#wF^yMUuo*7 z_cLXvRn&@9rJxwm71ZSfsot_%Wqwo6^gD|DL)^uU~Co?!( zC0hnRXjBNf(5Mio!0--aLZ3me1IV03ObINB3_YxOHa32_vk-_U0&!#G7e{8L`#uag z4mJ)9?+!30GJ@RWz|bw?z}O|~zyze3yF{B7G;K9vWq8-Hp(0uj;)vY&8Qv{!s`;PC!0?WN zV!+7E%+AhU_y7O%!_Ca>3=9om05LWp0b%@uf`Wtx2M~M+3#gTukwL+LoqztnKR*~4 zY-q&gWG4>-7M32|0T^Hfn$QgUHn-{Ih_ zq9GYDMQo}6r>QE8%&eS7$1E5anb>%&zx=ZR8fsRb9m>F<@$Lq5bu9yfNV%h9vLnQ? aK$7DC{{zMc;xl9~a2$|$z;S>PDgyxVYI6Jl diff --git a/programs/outlaw.ch8 b/programs/outlaw.ch8 deleted file mode 100644 index 71eff287e8df12b216020da8fc93d2687ea8b055..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmWgMVqsw|EiHZj-i;eSDkNlh7#IqE6r|TABvfd;k+74IsGB)+W|U3ZVFX*njDdko zp6{6*8=IVnxkQZxLJgd)lJoz6Ljv1_c?|C|8539^EX-s|-~f`$-4CicyDn6*E{eXr zkm23!h1HCnOjZ9qnX4GR7&Do@}V=|KiQ!;aF zL+SsPf)bz^R~;GNU3Dz|@61&4-ZonYC zM0m@+J0Kqm&&y-Y<;r2mFiz)6W5@*hl;Oc5rUaQp&I|I3A`=)Aoa2PlUUs)sw k)M0v~M(Kq;gYX*V1RyzMQM4t4Qk^G*Qj9T!(jnm|04yWDwEzGB diff --git a/programs/snake.ch8 b/programs/snake.ch8 deleted file mode 100644 index 5f83c16807965ce1f250774f2ba9bfbb37141c38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1438 zcmeHF-)mD>9RHr1n>L10uZ7-p(p|$KmzK1c3e(Pq=47l2Z7_vV@bRSiF_uJg(;{d) z-AO^#Z8FZ@roLRGh5DA274{$_dzr%rjgGaYPp2=V1Bo~3gNowyd-c!QzF)rI^F806 zpY!GDn;ib9|Mmu$5RQ-@GtN1aLI^22vZuJk>%#IfgrtkO5)0EpoxoLozJAL zSZo{`josZ$CV&6*sUMWY@4M}>Pd@nf+dv@D)7x|H*SfR)@X@^3_b2rRLAI)< z7W%2AhR&9JC<+QefpcmhT-3ece#u(^NaoRVCMa}oU!}4P` zkQ>YoMAqG4%3o4b-6dZtP*PF{N`&EGph_raDmA5fsO(QFp_9*U>3@{FlO*&RS`W&B zq#8Pd*2D6FB%(m;Ns=s*q_RYkzC|~wF1b^*0Mp?jOu2>lv|Bt9>7=0yHD%}L6iMTZ X8 diff --git a/src/chip8.rs b/src/chip8.rs index 5390acb..23bc07b 100644 --- a/src/chip8.rs +++ b/src/chip8.rs @@ -18,6 +18,7 @@ static CYCLES_PER_FRAME: u32 = 10; struct Chip8State { // Flags eti_600_flag: bool, + vblank_waiting: bool, // Memory mem: [u8; MEMORY_LIMIT as usize], @@ -50,6 +51,7 @@ pub struct Chip8Quirks { pub fn run>(chip8_executable_filepath: S, quirks: &Chip8Quirks, debug_mode: bool) { let mut state = Chip8State { eti_600_flag: false, + vblank_waiting: false, mem: [0; 4096], stack: [0; 16], r_v: [0; 16], @@ -122,6 +124,7 @@ fn start(state: &mut Chip8State, quirks: &Chip8Quirks, debug_mode: bool) { input::handle_input(state, &mut rl); + state.vblank_waiting = false; for _ in 0..CYCLES_PER_FRAME { let instruction_bytes = memory::read_n_bytes(&state.mem, state.mem.len(), state.r_pc as usize, 2); @@ -134,6 +137,10 @@ fn start(state: &mut Chip8State, quirks: &Chip8Quirks, debug_mode: bool) { } cpu::execute_instruction(state, instruction, &quirks); + + if state.vblank_waiting { + break; + } } // move to timers.rs diff --git a/src/chip8/cpu.rs b/src/chip8/cpu.rs index 25c7671..5082321 100644 --- a/src/chip8/cpu.rs +++ b/src/chip8/cpu.rs @@ -128,6 +128,10 @@ pub fn execute_instruction(state: &mut Chip8State, instruction: u16, quirks: &Ch } else { gpu::draw(state, x, y, &bytes, n); } + + if quirks.display_wait { + state.vblank_waiting = true; + } } (0xE, _, _, 0xE) => { let key_index = state.r_v[x as usize]; diff --git a/src/main.rs b/src/main.rs index e7967b7..8eab264 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,7 +22,8 @@ fn main() { || args.quirks.contains(&String::from("chip8")), memory: args.quirks.contains(&String::from("memory")) || args.quirks.contains(&String::from("chip8")), - display_wait: args.quirks.contains(&String::from("displaywait")), + display_wait: args.quirks.contains(&String::from("displaywait")) + || args.quirks.contains(&String::from("chip8")), clipping: args.quirks.contains(&String::from("clipping")) || args.quirks.contains(&String::from("chip8")), shifting: args.quirks.contains(&String::from("shifting")),