Difference between revisions of "Test ROMs"

From GbdevWiki
Jump to: navigation, search
(Blargg's tests)
 
(25 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 +
__FORCETOC__
 +
 
A [[Test ROMs|test ROM]] is a program designed specifically to test whether the platform that the program is running on is working correctly. A test ROM can be used to test the accuracy of an emulator, as well as compare the behavior of different hardware revisions.
 
A [[Test ROMs|test ROM]] is a program designed specifically to test whether the platform that the program is running on is working correctly. A test ROM can be used to test the accuracy of an emulator, as well as compare the behavior of different hardware revisions.
  
 
== Blargg's tests ==
 
== Blargg's tests ==
Blargg's tests are available at: http://blargg.parodius.com/gb-tests/
+
Blargg's tests are available at:  
 +
 
 +
* <strike>http://blargg.parodius.com/gb-tests/</strike> Old location. Dead ever since Parodius went down!
 +
* <strike>http://blargg.8bitalley.com/parodius/gb-tests/</strike> Another old location.
 +
* http://gbdev.gg8.se/files/roms/blargg-gb-tests/ Mirror.
  
 
All tests were executed in each emulator's DMG mode, except the CGB sound test, which was executed in both DMG and CGB modes.  
 
All tests were executed in each emulator's DMG mode, except the CGB sound test, which was executed in both DMG and CGB modes.  
  
 +
=== Real hardware (using a GB flash card) ===
 +
Contributions are welcome !
 
{| border="1" class="toptable"
 
{| border="1" class="toptable"
 
|-
 
|-
!Test / Emulator !![[BGB]] <span class="smaller">v.1.12/1.3 dev</span>!![[Gambatte]] <span class="smaller">v0.4.1</span>!! [[KiGB]] <span class="smaller">v2.05</span>!![[MESS]] <span class="smaller">0.140 (Oct 31 2010)</span>!![[no$gmb]] <span class="smaller">v2.5b</span> !![[VisualBoy Advance|VBA]]<span class="smaller">-M 1.8.0 SVN956</span>
+
!Test / Emulator!!Game Boy (DMG)!!Game Boy Pocket (MGB)!!Game Boy Color (GBC)!!Game Boy Advance (Regular and SP)!! 3DS Virtual Console
 
|-
 
|-
| CGB sound <span class="smaller">(in CGB mode)</span>
+
| CGB sound <span class="smaller">(in corresponding mode)</span>
| <!-- BGB --> <span class="failed">Failed</span> 14/16 <pre>01:02 02:ok 03:03
+
| <span class="failed">Failed</span> 5/12 <pre>01:ok 02:ok 03:ok
 +
04:ok 05:ok 06:ok
 +
07:ok 08:01 09:01
 +
10:01 11:04 12:02</pre>
 +
| <span class="failed">Failed</span> The screen goes blank except for a horizontal line during the first test.
 +
| <span class="passed">Passed</span>
 +
| <span class="failed">Failed</span> 2/12 <pre>01:ok 02:ok 03:ok
 +
04:ok 05:ok 06:ok
 +
07:ok 08:ok 09:01
 +
10:ok 11:ok 12:02</pre>
 +
| <span class="failed">Failed</span> 11/12 <pre>01:02 02:02 03:02
 
04:02 05:02 06:01
 
04:02 05:02 06:01
07:05 08:ok 09:01
+
07:02 08:01 09:01
10:01 11:03 12:02</pre>
+
10:ok 11:02 12:02</pre>
| <!-- Gamb --> <span class="passed">Passed?</span> Runs the 12 tests with OK, then proceeds to apparently running many more tests forever.
+
|-
| <!-- KiGB --> <span class="failed">Failed</span> 16/16 <pre>01:02 02:05 03:03
+
| CPU instructions
 +
| <span class="passed">Passed</span>
 +
| <span class="failed">Failed</span> The screen goes blank except for a horizontal line during the first test.
 +
| <span class="passed">Passed</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="failed">Failed</span> 5/11 <pre> 01:05 02:02 03:01
 +
04:ok 05:ok 06:ok
 +
07:ok 08:01 09:ok
 +
10:ok 11:01</pre>
 +
|-
 +
| DMG sound <span class="smaller">(v2)</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="failed">Failed</span> The screen goes blank except for a horizontal line during the first test.
 +
| <span class="failed">Failed</span> The screen blacks out during the first test
 +
| <span class="failed">Failed</span> The screen blacks out during the first test
 +
| <span class="failed">Failed</span> 12/12 <pre>01:02 02:02 03:02
 +
04:02 05:02 06:01
 +
07:02 08:01 09:01
 +
10:01 11:02 12:02</pre>
 +
|-
 +
| Instruction timing
 +
| <span class="passed">Passed</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="passed">Passed</span>
 +
|-
 +
| Memory timing <span class="smaller">(v2)</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="failed">Failed</span> 3/3 <pre>01:01 02:01 03:01</pre>
 +
|-
 +
| OAM bug <span class="smaller">(v2)</span>
 +
| <span class="passed">Passed</span>
 +
| <span class="failed">Failed</span> The screen goes blank during the first test.
 +
| <span class="failed">Failed</span> 5/8 <pre>01:ok 02:02 03:ok
 +
04:03 05:02 06:ok
 +
07:01 08:02</pre>
 +
| <span class="failed">Failed</span> 5/8 <pre>01:ok 02:02 03:ok
 +
04:03 05:02 06:ok
 +
07:01 08:02</pre>
 +
| <span class="failed">Failed</span> 6/8 <pre>01:02 02:02 03:ok
 +
04:03 05:02 06:ok
 +
07:01 08:02</pre>
 +
|}
 +
 
 +
Side note for the 3DS VC : it seemingly ran the ROMs in GBC mode, although I cannot confirm this is true. Tests will be conducted using other base ROMs for CIA injection that should enforce DMG mode.
 +
 
 +
=== Emulators running on desktop computers ===
 +
{| border="1" class="toptable"
 +
|-
 +
!Test / Emulator !![[BGB]] <span class="smaller">1.5</span>!![[Gambatte]] <span class="smaller">v0.5.5</span>!! [[KiGB]] <span class="smaller">v2.05</span>!![[MESS]] <span class="smaller">0.140 (Oct 31 2010)</span>!![[no$gmb]] <span class="smaller">v2.5b</span> !![[VisualBoy Advance|VBA]]<span class="smaller">-M 1.8.0 SVN956</span>
 +
|-
 +
| CGB sound <span class="smaller">(in CGB mode)</span>
 +
| <!-- BGB --> <span class="passed">Passed</span>
 +
| <!-- Gamb --> <span class="passed">Passed</span>
 +
| <!-- KiGB --> <span class="failed">Failed</span> 12/12 <pre>01:02 02:05 03:03
 
04:02 05:02 06:01
 
04:02 05:02 06:01
 
07:02 08:01 09:01
 
07:02 08:01 09:01
Line 30: Line 106:
 
|-
 
|-
 
| CGB sound <span class="smaller">(in DMG mode)</span>
 
| CGB sound <span class="smaller">(in DMG mode)</span>
| <!-- BGB --> <span class="failed">Failed</span> <span class="smaller">(A real DMG fails, but with other values.)</span> <pre>01:02 02:ok 03:03
+
| <!-- BGB --> <span class="passed">Passed</span> <span class="smaller">Runs the 12 tests with the data below (which matches the output on a real DMG)</span>.<pre>01:ok 02:ok 03:ok
04:02 05:02 06:01
+
04:ok 05:ok 06:ok
07:05 08:ok 09:01
+
07:ok 08:01 09:01
10:01 11:03 12:02</pre>
+
10:01 11:04 12:02</pre>
| <!-- Gamb --> <span class="passed">Passed?</span> Runs the 12 tests with the data below (which matches the output on a real DMG) and then proceeds to apparently running many more tests forever.<pre>01:ok 02:ok 03:ok
+
| <!-- Gamb --> <span class="passed">Passed</span> <span class="smaller">Runs the 12 tests with the data below (which matches the output on a real DMG)</span>.<pre>01:ok 02:ok 03:ok
 
04:ok 05:ok 06:ok
 
04:ok 05:ok 06:ok
 
07:ok 08:01 09:01
 
07:ok 08:01 09:01
Line 52: Line 128:
 
|-
 
|-
 
| CPU instructions
 
| CPU instructions
| <!-- BGB --> <span class="failed">Failed</span> 3/11 as of 1.12 <span class="smaller">(public)</span><pre>01:06 03:01 11:01</pre>
+
| <!-- BGB --><span class="passed">Passed</span>
<span class="passed">Passed</span> as of 1.3 dev <span class="smaller">(non-public)</span>
+
 
| <!-- Gamb --> <span class="passed">Passed</span>
 
| <!-- Gamb --> <span class="passed">Passed</span>
 
| <!-- KiGB --> <span class="failed">Failed</span> 2/11 <pre>03:01 05:01</pre>
 
| <!-- KiGB --> <span class="failed">Failed</span> 2/11 <pre>03:01 05:01</pre>
Line 62: Line 137:
 
|-
 
|-
 
| DMG sound <span class="smaller">(v2)</span>
 
| DMG sound <span class="smaller">(v2)</span>
| <!-- BGB --> <span class="failed">Failed</span> 11/12<pre>01:02 02:ok 03:03
+
| <!-- BGB --> <span class="passed">Passed</span>
04:02 05:02 06:01
+
| <!-- Gamb --> <span class="passed">Passed</span>
07:05 08:01 09:01
+
10:01 11:03 12:01</pre>
+
| <!-- Gamb --> <span class="passed">Passed?</span> Runs the 12 tests with OK, then proceeds to apparently running many more tests until it finally hangs at "D7".
+
 
| <!-- KiGB --> <span class="failed">Failed</span> 11/12 <pre>01:02 02:05 03:03
 
| <!-- KiGB --> <span class="failed">Failed</span> 11/12 <pre>01:02 02:05 03:03
 
04:02 05:02 06:01
 
04:02 05:02 06:01
Line 81: Line 153:
 
|-
 
|-
 
| Instruction timing
 
| Instruction timing
| <span class="passed">Passed</span>
+
| <!-- BGB --><span class="passed">Passed</span>
 
| <!-- Gamb --> <span class="passed">Passed</span>
 
| <!-- Gamb --> <span class="passed">Passed</span>
 
| <!-- KiGB --> <span class="failed">Test doesn't finish</span>  
 
| <!-- KiGB --> <span class="failed">Test doesn't finish</span>  
Line 89: Line 161:
 
|-
 
|-
 
| Memory timing <span class="smaller">(v2)</span>
 
| Memory timing <span class="smaller">(v2)</span>
| <!-- BGB --><span class="failed">Failed</span> 3/3 as of 1.12 <span class="smaller">(public)</span>
+
| <!-- BGB --><span class="passed">Passed</span>
<pre>01:01 02:01 03:01</pre>
+
<span class="passed">Passed</span> as of 1.3 dev <span class="smaller">(non-public)</span>
+
 
| <!-- Gamb --> <span class="passed">Passed</span>
 
| <!-- Gamb --> <span class="passed">Passed</span>
 
| <!-- KiGB --> <span class="failed">Test doesn't finish</span>  
 
| <!-- KiGB --> <span class="failed">Test doesn't finish</span>  
Line 99: Line 169:
 
|-
 
|-
 
| OAM bug <span class="smaller">(v2)</span>
 
| OAM bug <span class="smaller">(v2)</span>
|  <!-- BGB --> <span class="failed">Failed</span> 6/8 <pre>01:02 02:02 03:ok
+
|  <!-- BGB --> <span class="failed">Failed</span> 5/8 <pre>01:ok 02:02 03:ok
 
04:03 05:02 06:ok
 
04:03 05:02 06:ok
 
07:01 08:02</pre>
 
07:01 08:02</pre>
Line 118: Line 188:
 
04:03 05:02 06:ok
 
04:03 05:02 06:ok
 
07:01 08:02</pre>
 
07:01 08:02</pre>
 +
|-
 +
|}
 +
 +
=== Emulators running in JavaScript ===
 +
{| border="1" class="toptable"
 +
|-
 +
!Test / Emulator !![[GameBoy Online]] <span class="smaller">as of 2015-17-12</span>!![[JSGB by Pedro Ladaria|JSGB<span class="smaller"> by Pedro Ladaria</span>]] <span class="smaller">v0.2</span>!![[jsGB by Imran Nazar|jsGB<span class="smaller"> by Imran Nazar aka Two9A </span>]] <span class="smaller">2010-09-27 GitHub checkin</span>
 +
|-
 +
| CGB sound <span class="smaller">(in CGB mode)</span>
 +
| <!-- GBO --> <span class="failed">Failed</span> 14/16 <pre>01:02 02:07 03:03
 +
04:02 05:02 06:01
 +
07:03 08:ok 09:01
 +
10:ok 11:ok* 12:02</pre>Note: GameBoy Online '''does''' have sound support. *Test #11 passes in the LLE-APU branch.
 +
| <!-- JSGB --> (No GBC support.)
 +
| <!-- jsGB --> (No GBC support.)
 +
|-
 +
| CGB sound <span class="smaller">(in DMG mode)</span>
 +
| <!-- GBO --> (Apparently can't run a GBC only ROM in DMG mode.)
 +
| <!-- JSGB --> <span class="failed">Failed</span> 16/16 <br /> Fails all tests, then proceeds to apparently running many more tests forever, much like Gambatte.  <pre>01:02 02:02 03:02
 +
04:03 05:02 06:02
 +
07:02 08:03 09:02
 +
10:02 11:02 12:03</pre>Note: JSGB doesn't have sound support.
 +
| <!-- jsGB --> <span class="failed">Failed</span> Breaks during the first test. "Unimplemented instruction at $23f4, stopping." (ld sp,hl)<br />Note: JSGB doesn't have sound support.
 +
|-
 +
| CPU instructions
 +
| <!-- GBO --> <span class="passed">Passed</span>
 +
| <!-- JSGB --> <span class="failed">Failed</span>  <pre>01:06 02:05 03:</pre>Note: Throws the following errors: "HALT instruction with interrupts disabled.", "STOP instruction". Test 03 never finishes.
 +
| <!-- jsGB --> <span class="failed">Failed</span> Breaks during the first test. "Unimplemented instruction at $677, stopping." (ld sp,hl)
 +
|-
 +
| DMG sound <span class="smaller">(v2)</span>
 +
| <!-- GBO --> <span class="failed">Failed</span> 11/12 <pre>01:02 02:05 03:03
 +
04:02 05:02 06:01
 +
07:02 08:ok 09:01
 +
10:01 11:03 12:01</pre>Note: GameBoy Online '''does''' have sound support.
 +
| <!-- JSGB --> <span class="failed">Failed</span> 16/16 <br /> Fails all tests, then proceeds to apparently running many more tests forever, much like Gambatte.  <pre>01:02 02:02 03:02
 +
04:03 05:02 06:02
 +
07:02 08:03 09:02
 +
10:02 11:02 12:03</pre>Note: JSGB doesn't have sound support.
 +
| <!-- jsGB --> <span class="failed">Failed</span> Breaks during the first test. "Unimplemented instruction at $23f4, stopping." (ld sp,hl)<br />Note: JSGB doesn't have sound support.
 +
|-
 +
| Instruction timing
 +
| <!-- GBO --> <span class="passed">Passed</span>
 +
| <!-- JSGB --> <span class="failed">Failed</span> #255
 +
| <!-- jsGB --> <span class="failed">Failed</span> Test doesn't finish.
 +
|-
 +
| Memory timing <span class="smaller">(v2)</span>
 +
| <!-- BGB --><span class="failed">Failed</span> 3/3<pre>01:01 02:01 03:01</pre>
 +
| <!-- JSGB --><span class="failed">Failed</span> 3/3<pre>01:01 02:01 03:01</pre>
 +
| <!-- jsGB --> <span class="failed">Failed</span> Test 01 doesn't finish.
 +
|-
 +
| OAM bug <span class="smaller">(v2)</span>
 +
|  <!-- GBO --> <span class="failed">Failed</span> 6/8 <pre>01:03 02:02 03:ok
 +
04:03 05:02 06:ok
 +
07:01 08:02</pre>
 +
| <!-- JSGB --> <span class="failed">Failed</span> (The test never completes.)
 +
| <!-- jsGB --> <span class="failed">Failed</span> Breaks during the first test. "Unimplemented instruction at $23f4, stopping." (ld sp,hl)
 
|-
 
|-
 
|}
 
|}

Latest revision as of 06:22, 2 March 2017


A test ROM is a program designed specifically to test whether the platform that the program is running on is working correctly. A test ROM can be used to test the accuracy of an emulator, as well as compare the behavior of different hardware revisions.

Blargg's tests

Blargg's tests are available at:

All tests were executed in each emulator's DMG mode, except the CGB sound test, which was executed in both DMG and CGB modes.

Real hardware (using a GB flash card)

Contributions are welcome !

Test / Emulator Game Boy (DMG) Game Boy Pocket (MGB) Game Boy Color (GBC) Game Boy Advance (Regular and SP) 3DS Virtual Console
CGB sound (in corresponding mode) Failed 5/12
01:ok 02:ok 03:ok
04:ok 05:ok 06:ok
07:ok 08:01 09:01
10:01 11:04 12:02
Failed The screen goes blank except for a horizontal line during the first test. Passed Failed 2/12
01:ok 02:ok 03:ok
04:ok 05:ok 06:ok
07:ok 08:ok 09:01
10:ok 11:ok 12:02
Failed 11/12
01:02 02:02 03:02
04:02 05:02 06:01
07:02 08:01 09:01
10:ok 11:02 12:02
CPU instructions Passed Failed The screen goes blank except for a horizontal line during the first test. Passed Passed Failed 5/11
 01:05 02:02 03:01
04:ok 05:ok 06:ok
07:ok 08:01 09:ok
10:ok 11:01
DMG sound (v2) Passed Failed The screen goes blank except for a horizontal line during the first test. Failed The screen blacks out during the first test Failed The screen blacks out during the first test Failed 12/12
01:02 02:02 03:02
04:02 05:02 06:01
07:02 08:01 09:01
10:01 11:02 12:02
Instruction timing Passed Passed Passed Passed Passed
Memory timing (v2) Passed Passed Passed Passed Failed 3/3
01:01 02:01 03:01
OAM bug (v2) Passed Failed The screen goes blank during the first test. Failed 5/8
01:ok 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02
Failed 5/8
01:ok 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02
Failed 6/8
01:02 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02

Side note for the 3DS VC : it seemingly ran the ROMs in GBC mode, although I cannot confirm this is true. Tests will be conducted using other base ROMs for CIA injection that should enforce DMG mode.

Emulators running on desktop computers

Test / Emulator BGB 1.5 Gambatte v0.5.5 KiGB v2.05 MESS 0.140 (Oct 31 2010) no$gmb v2.5b VBA-M 1.8.0 SVN956
CGB sound (in CGB mode) Passed Passed Failed 12/12
01:02 02:05 03:03
04:02 05:02 06:01
07:02 08:01 09:01
10:01 11:02 12:02
Failed
01:02 02:02 03:02

Note: Test 04 never completes.

Failed
01:02 02:02 03:02

Note: Test 04 never completes.

Failed 1/12
01:ok 02:ok 03:ok
04:ok 05:ok 06:ok
07:ok 08:ok 09:01
10:ok 11:ok 12:ok
CGB sound (in DMG mode) Passed Runs the 12 tests with the data below (which matches the output on a real DMG).
01:ok 02:ok 03:ok
04:ok 05:ok 06:ok
07:ok 08:01 09:01
10:01 11:04 12:02
Passed Runs the 12 tests with the data below (which matches the output on a real DMG).
01:ok 02:ok 03:ok
04:ok 05:ok 06:ok
07:ok 08:01 09:01
10:01 11:04 12:02
Failed (A real DMG fails, but with other values.)
01:02 02:05 03:03
04:02 05:02 06:01
07:02 08:01 09:01
10:01 11:02 12:02
Failed
01:02 02:02 03:02

Note: Test 04 never completes.

Failed
01:02 02:02 03:02

Note: Test 04 never completes.

Failed (A real DMG fails, but with other values.)
01:ok 02:ok 03:ok
04:ok 05:ok 06:ok
07:ok 08:ok 09:01
10:ok 11:ok 12:ok
CPU instructions Passed Passed Failed 2/11
03:01 05:01
Passed Failed 2/11
03:01 05:01

Note: Warns about inc/dec in OAM.

Passed
DMG sound (v2) Passed Passed Failed 11/12
01:02 02:05 03:03
04:02 05:02 06:01
07:02 08:ok 09:01
10:01 11:02 12:01
Failed
01:02 02:02 03:02

Note: Test 04 never completes.

Failed
01:02 02:02 03:02

Note: Test 04 never completes.

Failed 5/12
01:ok 02:ok 03:ok
04:ok 05:ok 06:ok
07:ok 08:01 09:01
10:01 11:04 12:01
Instruction timing Passed Passed Test doesn't finish Passed Test doesn't finish Passed
Memory timing (v2) Passed Passed Test doesn't finish Failed 1/3
01:ok 02:ok 03:01
Failed 3/3
01:01 02:01 03:01
Failed 1/3
01:ok 02:ok 03:01
OAM bug (v2) Failed 5/8
01:ok 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02
Failed 5/8
01:ok 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02
Failed 6/8
01:02 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02
Failed 5/8
01:ok 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02
Failed 6/8
01:02 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02

Note: Warns about inc/dec in OAM. (Which is appropriate)

Failed 5/8
01:ok 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02

Emulators running in JavaScript

Test / Emulator GameBoy Online as of 2015-17-12 JSGB by Pedro Ladaria v0.2 jsGB by Imran Nazar aka Two9A 2010-09-27 GitHub checkin
CGB sound (in CGB mode) Failed 14/16
01:02 02:07 03:03
04:02 05:02 06:01
07:03 08:ok 09:01
10:ok 11:ok* 12:02
Note: GameBoy Online does have sound support. *Test #11 passes in the LLE-APU branch.
(No GBC support.) (No GBC support.)
CGB sound (in DMG mode) (Apparently can't run a GBC only ROM in DMG mode.) Failed 16/16
Fails all tests, then proceeds to apparently running many more tests forever, much like Gambatte.
01:02 02:02 03:02
04:03 05:02 06:02
07:02 08:03 09:02
10:02 11:02 12:03
Note: JSGB doesn't have sound support.
Failed Breaks during the first test. "Unimplemented instruction at $23f4, stopping." (ld sp,hl)
Note: JSGB doesn't have sound support.
CPU instructions Passed Failed
01:06 02:05 03:
Note: Throws the following errors: "HALT instruction with interrupts disabled.", "STOP instruction". Test 03 never finishes.
Failed Breaks during the first test. "Unimplemented instruction at $677, stopping." (ld sp,hl)
DMG sound (v2) Failed 11/12
01:02 02:05 03:03
04:02 05:02 06:01
07:02 08:ok 09:01
10:01 11:03 12:01
Note: GameBoy Online does have sound support.
Failed 16/16
Fails all tests, then proceeds to apparently running many more tests forever, much like Gambatte.
01:02 02:02 03:02
04:03 05:02 06:02
07:02 08:03 09:02
10:02 11:02 12:03
Note: JSGB doesn't have sound support.
Failed Breaks during the first test. "Unimplemented instruction at $23f4, stopping." (ld sp,hl)
Note: JSGB doesn't have sound support.
Instruction timing Passed Failed #255 Failed Test doesn't finish.
Memory timing (v2) Failed 3/3
01:01 02:01 03:01
Failed 3/3
01:01 02:01 03:01
Failed Test 01 doesn't finish.
OAM bug (v2) Failed 6/8
01:03 02:02 03:ok
04:03 05:02 06:ok
07:01 08:02
Failed (The test never completes.) Failed Breaks during the first test. "Unimplemented instruction at $23f4, stopping." (ld sp,hl)