CD-ROM Controller With a Disc
Times reads, seeks, speed changes, Stop, MotorOn and Init on the CD-ROM controller with a disc in the drive.
| Machine | SCPH-5501 |
|---|---|
| Program | cddisc |
Overview
The program drives the CD-ROM controller the same way as the no-disc test: interrupts are polled with HINTMSK 0 and CPU interrupts off, and root counter 2 counts system clock cycles from each command write. One second is 33868800 cycles.1 It waits for a disc to be put in, reads its ID and table of contents, then times ReadN at single and double speed, SeekL across the disc, a speed change, Stop, MotorOn and Init.1
See also:
Results
Disc
After the lid closed, GetID answered error 80h nineteen times before the drive was ready. GetID then answered INT3 42h and INT5 4Ah 80h 20h 00h 00h 00h 00h 00h. The commands 50h to 56h each answered INT5 43h 40h, and GetID answered the same before and after them.1
GetTN answered tracks 1 to 1. GetTD for the lead-out answered 26:30, which is sector 119100.1
Read Timing
Sectors arrive once every 1/75 second at single speed and once every 1/150 second at double speed. At single speed the INT1 interrupts came 428816 to 469344 cycles apart. At double speed they came 198016 to 252320 cycles apart.1
| Speed | First INT1 | INT2 of the Pause that follows |
|---|---|---|
| Single | 11325319 | 3678046 |
| Single, second time | 14234903 | 4128860 |
| Double | 3295459 | 2016059 |
| Double, second time | 5637527 | 2006829 |
In the second double speed read, one gap between sectors was 2472768 cycles where the others were near 225000.1 A ReadN from sector 118100, a thousand sectors before the lead-out, gave no INT1 at either speed, and GetlocL answered error 80h.1
Seek Timing
SeekL answers INT3 within about 0.002 seconds and INT2 when the head arrives. The INT2 times varied widely and did not grow steadily with distance.1
| From | To | Single speed | Double speed |
|---|---|---|---|
| 1000 | 1001 | 1568045 | 1338361 |
| 1000 | 1016 | 11944584 | 2247613 |
| 1000 | 2024 | 6703239 | 3663037 |
| 16 | 14839 | 10467549 | 10470189 |
| 16 | 59308 | 22669049 | 20911357 |
| 16 | 118600 | none | 19638893 |
| 118600 | 16 | 25610925 | 20483469 |
At single speed, seeks from sector 16 to 74131 and beyond gave no INT2 within the limit, and GetlocP then reported the head well short of the target. At double speed only the seek to 103777 gave no INT2.1
Speed and Spin
| Action | Time |
|---|---|
| Single to double speed, then ReadN: first INT1 | 5850138 |
| Double to single speed, then ReadN: first INT1 | 28432907 |
| Stop: INT2 | 12902006 |
| MotorOn after Stop: INT2 | 63162554 |
| Init: INT2 | 4459785 |
MotorOn after Stop took 63162554 cycles to INT2, which is 1.86 seconds. Changing from double to single speed delayed the first sector by 0.84 seconds, and changing from single to double by 0.17 seconds.1
Runs
Run 5501a-card-i on 30 September 2026
Raw output: 00RUN.txt · 01DID.txt · 02DRD.txt · 03DSK.txt · 04DSP.txt
00RUN.txt:
===== 00 RUN | BIOS 19951204 System ROM Version 3.0 11/18/96 A
4 tests
A chain program, linked at 80010000
Saved on the card in slot 2, from image 1
COP0 at start: BPC 00000000 BDA 00000000 TAR 80108CF0 DCIC 00000000 BadVaddr 00000480 BDAM 00000000
BPCM 00000000 SR 00000000 Cause 00000020 EPC 801098A4 PRId 00000002
01DID.txt:
===== 01 DID CD DISC ID UNLOCK | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
The disc: GetID, the Secret Unlock 50h-56h, GetID again, GetTN, GetTD.
Switches (Test 21h, bit1 door open, bit0 head at POS0): int3 02 @24912. Getstat: int3 10 @33234. Mode 20. HINTMSK was 1F.
Put the disc in and close the lid now.
Waited 582 tenths of a second for the disc. Getstat 02.
GetID stopped answering error 80h after 19 tries.
GetID before the unlock: int3 42 @24245 int5 4A 80 20 00 00 00 00 00 @44357
Unlock replies: 50: int5 43 40 @32379 51: int5 43 40 @108161 52: int5 43 40 @41446 53: int5 43 40 @63059 54: int5 43 40 @52017 55: int5 43 40 @64783 56: int5 43 40 @33290
GetID after the unlock: int3 42 @40012 int5 4A 80 20 00 00 00 00 00 @60092
GetTN: int3 42 01 01 @55089
GetTD 0 (the lead-out): int3 02 26 30 @61699
Last track 1. The disc ends at sector 119100.
Done.
02DRD.txt:
===== 02 DRD CD READ TIMES | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
ReadN timing: the first INT1 and the gaps between them, single and double speed.
Switches (Test 21h, bit1 door open, bit0 head at POS0): int3 00 @21786. Getstat: int3 02 @39332. Mode 20. HINTMSK was 1F.
Single speed, mode 00, from sector 16: ReadN int3 02 @39527
INT1 at: 11325319 11767719 12219143 12663511 13116055 13574007 14022631 14481559 14926791 15377495 15837319 16276071 16728023 17186039 17631271 18082343 18537703 18992839 19459911 19888727 20340679 20792775 21256535 21697927 (24)
GetlocL: int3 00 02 39 02 00 00 08 00 @54913
Pause: int3 22 @32334 int2 02 @3678046
Single speed again, mode 00, from sector 16: ReadN int3 02 @40343
INT1 at: 14234903 14684983 15130791 15584231 16048007 16489111 16947511 17384951 17843431 18295399 18742055 19193927 19651927 20104279 20571399 21000615 21451271 21911255 22355575 22807687 23266215 23714231 24159511 24628855 (24)
GetlocL: int3 00 02 39 02 00 00 08 00 @43292
Pause: int3 22 @102589 int2 02 @4128860
Double speed, mode 80, from sector 16: ReadN int3 02 @45235
INT1 at: 3295459 3494915 3723027 3969155 4168227 4396355 4636899 4857155 5072499 5316387 5522323 5751411 5991075 6212243 6426611 6669171 6904227 7110131 7330851 7582259 7788195 8011971 8242675 8461539 (24)
GetlocL: int3 00 02 39 02 00 00 08 00 @43388
Pause: int3 22 @48571 int2 02 @2016059
Double speed again, mode 80, from sector 16: ReadN int3 02 @25559
INT1 at: 5637527 5877159 6084103 6304263 6556583 6755655 6975895 7199543 7430791 7671495 7882519 8102663 8335495 8564903 8783767 9005783 9253079 11725847 11929831 12154935 12405383 12603399 12832951 13072423 (24)
GetlocL: int3 00 02 39 02 00 00 08 00 @43388
Pause: int3 22 @23357 int2 02 @2006829
Single speed near the end, mode 00, from sector 118100: ReadN int3 02 @35108
INT1 at: (0)
GetlocL: int5 43 80 @36519
Pause: int5 43 ..(2) @237708 none
Double speed near the end, mode 80, from sector 118100: ReadN int3 42 @43123
INT1 at: (0)
GetlocL: int5 43 80 @36662
Pause: int5 43 ..(2) @25329 none
Mode 80 put back to 20: int3 42 @64584
Done.
03DSK.txt:
===== 03 DSK CD SEEK TIMES | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
SeekL times: from one sector to another, single and double speed.
Switches (Test 21h, bit1 door open, bit0 head at POS0): int3 00 @32017. Getstat: int3 42 @40290. Mode 20. HINTMSK was 1F.
Single speed, from the start outward:
16 to 14839: int3 02 @29101 int2 02 @10467549 GetlocP int3 01 01 03 17 64 03 19 64 @61263
16 to 29662: int3 02 @23149 int2 02 @18615293 GetlocP int3 01 01 06 35 38 06 37 38 @68091
16 to 44485: int3 02 @28189 int2 02 @17937213 GetlocP int3 01 01 09 53 09 09 55 09 @41867
16 to 59308: int3 02 @29337 int2 02 @22669049 GetlocP int3 01 01 13 10 58 13 12 58 @41868
16 to 74131: int3 02 @25833 none GetlocP int3 01 01 06 49 36 06 51 36 @32504
16 to 88954: int3 02 @24922 none GetlocP int3 01 01 08 40 00 08 42 00 @34812
16 to 103777: int3 02 @26361 none GetlocP int3 01 01 08 04 31 08 06 31 @62268
16 to 118600: int3 02 @29149 none GetlocP int3 01 01 07 47 19 07 49 19 @36681
Single speed, short seeks near the start:
1000 to 1001: int3 02 @30685 int2 02 @1568045 GetlocP int3 01 01 00 13 26 00 15 26 @41909
1000 to 1004: int3 02 @31688 int2 02 @2909352 GetlocP int3 01 01 00 13 29 00 15 29 @56411
1000 to 1016: int3 02 @36488 int2 02 @11944584 GetlocP int3 01 01 00 13 41 00 15 41 @41862
1000 to 1064: int3 02 @23530 int2 02 @11057994 GetlocP int3 01 01 00 14 14 00 16 14 @54010
1000 to 1256: int3 02 @41725 int2 02 @4789501 GetlocP int3 01 01 00 16 57 00 18 57 @63179
1000 to 2024: int3 02 @45559 int2 02 @6703239 GetlocP int3 01 01 00 26 74 00 28 74 @41870
Single speed, from the end inward:
118600 to 88954: int3 42 @35197 int2 02 @11911165 GetlocP int3 01 01 19 46 04 19 48 04 @41867
118600 to 59308: int3 02 @31501 int2 02 @16305869 GetlocP int3 01 01 13 10 58 13 12 58 @61259
118600 to 29662: int3 02 @39321 int2 02 @28089337 GetlocP int3 01 01 06 35 37 06 37 37 @53484
118600 to 16: int3 02 @25837 int2 02 @25610925 GetlocP int3 01 01 00 00 18 00 02 18 @41871
Double speed, from the start outward:
16 to 14839: int3 02 @25165 int2 02 @10470189 GetlocP int3 01 01 03 17 64 03 19 64 @41963
16 to 29662: int3 02 @24727 int2 02 @67163719 GetlocP int3 01 01 06 35 37 06 37 37 @60827
16 to 44485: int3 02 @32269 int2 02 @34496557 GetlocP int3 01 01 09 53 10 09 55 10 @68330
16 to 59308: int3 02 @30541 int2 02 @20911357 GetlocP int3 01 01 13 10 58 13 12 58 @61392
16 to 74131: int3 02 @25261 int2 02 @52867901 GetlocP int3 01 01 16 28 31 16 30 31 @61355
16 to 88954: int3 02 @30631 int2 02 @39016279 GetlocP int3 01 01 19 46 06 19 48 06 @64230
16 to 103777: int3 02 @38653 none GetlocP int3 01 01 23 05 07 23 07 07 @134251
16 to 118600: int3 02 @26509 int2 02 @19638893 GetlocP int3 01 01 26 21 25 26 23 25 @64906
Double speed, short seeks near the start:
1000 to 1001: int3 02 @27609 int2 02 @1338361 GetlocP int3 01 01 00 13 26 00 15 26 @51615
1000 to 1004: int3 02 @22186 int2 02 @2015754 GetlocP int3 01 01 00 13 29 00 15 29 @60827
1000 to 1016: int3 02 @29965 int2 02 @2247613 GetlocP int3 01 01 00 13 42 00 15 42 @41966
1000 to 1064: int3 02 @23289 int2 02 @6524505 GetlocP int3 01 01 00 14 14 00 16 14 @41962
1000 to 1256: int3 02 @23293 int2 02 @6794317 GetlocP int3 01 01 00 16 56 00 18 56 @61344
1000 to 2024: int3 02 @23341 int2 02 @3663037 GetlocP int3 01 01 00 26 74 00 28 74 @61358
Double speed, from the end inward:
118600 to 88954: int3 02 @55981 int2 02 @13896989 GetlocP int3 01 01 19 46 04 19 48 04 @41957
118600 to 59308: int3 02 @67469 int2 02 @12791133 GetlocP int3 01 01 13 10 59 13 12 59 @42000
118600 to 29662: int3 02 @63757 int2 02 @13460125 GetlocP int3 01 01 06 35 39 06 37 39 @41963
118600 to 16: int3 02 @59629 int2 02 @20483469 GetlocP int3 01 01 00 00 16 00 02 16 @61359
Mode 80 put back to 20: int3 02 @57960
Done.
04DSP.txt:
===== 04 DSP CD SPEED AND SPIN | BIOS 19951204 System ROM Version 3.0 11/18/96 A
BadVaddr as the group starts: 00000480
Speed change, Stop then MotorOn, and Init, each timed.
Switches (Test 21h, bit1 door open, bit0 head at POS0): int3 00 @39745. Getstat: int3 02 @29871. Mode 20. HINTMSK was 1F.
Single to double speed, then ReadN at once: INT3 int3 02 @32714, first INT1 int1 22 @5850138
Double to single speed, then ReadN at once: INT3 int3 02 @23019, first INT1 int1 22 @28432907
Stop: int3 02 @54438 int2 00 @12902006
MotorOn after it: int3 00 @51818 int2 02 @63162554
Init: int3 02 @83721 int2 02 @4459785
Done.