Nugget
Bare-metal libraries and examples for the original PlayStation
Loading...
Searching...
No Matches
Functions | Variables
race.c File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

 CESTER_TEST (raceGetLocPAndNop, test_instances, int resetDone=resetCDRom();if(!resetDone) { cester_assert_true(resetDone);return;} int seekDone=seekPTo(0x70, 0x19, 0x73);if(!seekDone) { cester_assert_true(seekDone);return;} initializeTime();CDROM_REG0=0;CDROM_REG1=CDL_GETLOCP;CDROM_REG1=CDL_NOP;uint8_t ctrl0=CDROM_REG0 &~3;uint32_t ackTime=waitCDRomIRQ();uint8_t cause1=ackCDRomCause();uint8_t ctrl1=CDROM_REG0 &~3;uint8_t response1[16];uint8_t responseSize1=readResponse(response1);uint8_t ctrl2=CDROM_REG0 &~3;CDROM_REG0=1;uint8_t cause1b=CDROM_REG3_UC;initializeTime();uint32_t timeout=150000;int gotIRQ=waitCDRomIRQWithTimeout(&timeout);cester_assert_uint_eq(3, cause1);cester_assert_uint_eq(0xe0, cause1b);cester_assert_uint_eq(0x98, ctrl0);cester_assert_uint_eq(0x38, ctrl1);cester_assert_uint_eq(0x18, ctrl2);cester_assert_uint_eq(2, response1[0]);cester_assert_uint_eq(1, responseSize1);cester_assert_false(gotIRQ);cester_assert_uint_ge(ackTime, 500);cester_assert_uint_lt(ackTime, 7000);ramsyscall_printf("GetLocP followed by Nop, ack in %ius\n", ackTime);) CESTER_TEST(raceNopAndGetLocP
 
 if (!resetDone)
 
 initializeTime ()
 
 cester_assert_uint_eq (3, cause1)
 
 cester_assert_uint_eq (0xe0, cause1b)
 
 cester_assert_uint_eq (0x98, ctrl0)
 
 cester_assert_uint_eq (0x38, ctrl1)
 
 cester_assert_uint_eq (0x18, ctrl2)
 
 cester_assert_uint_eq (5, response1[0])
 
 cester_assert_uint_eq (0, response1[1])
 
 cester_assert_uint_eq (8, responseSize1)
 
 cester_assert_false (gotIRQ)
 
 cester_assert_uint_ge (ackTime, 500)
 
 cester_assert_uint_lt (ackTime, 7000)
 
 ramsyscall_printf ("Nop followed by GetLocP, ack in %ius\n", ackTime)
 
 CESTER_TEST (raceNopAndGetTD1, test_instance, int resetDone=resetCDRom();if(!resetDone) { cester_assert_true(resetDone);return;} initializeTime();CDROM_REG0=0;CDROM_REG2=1;CDROM_REG1=CDL_NOP;CDROM_REG1=CDL_GETTD;uint8_t ctrl0=CDROM_REG0 &~3;uint32_t ackTime=waitCDRomIRQ();uint8_t cause1=ackCDRomCause();uint8_t ctrl1=CDROM_REG0 &~3;uint8_t response1[16];uint8_t responseSize1=readResponse(response1);uint8_t ctrl2=CDROM_REG0 &~3;CDROM_REG0=1;uint8_t cause1b=CDROM_REG3_UC;initializeTime();uint32_t timeout=150000;int gotIRQ=waitCDRomIRQWithTimeout(&timeout);cester_assert_uint_eq(3, cause1);cester_assert_uint_eq(0xe0, cause1b);cester_assert_uint_eq(2, response1[0]);cester_assert_uint_eq(0, response1[1]);cester_assert_uint_eq(2, response1[2]);cester_assert_uint_eq(3, responseSize1);cester_assert_uint_eq(0x90, ctrl0);cester_assert_uint_eq(0x38, ctrl1);cester_assert_uint_eq(0x18, ctrl2);cester_assert_false(gotIRQ);cester_assert_uint_ge(ackTime, 500);cester_assert_uint_lt(ackTime, 7000);ramsyscall_printf("Nop followed by GetTD1: ack in %ius\n", ackTime);) CESTER_TEST(raceGetTD1AndNop
 
 cester_assert_uint_eq (5, cause1)
 
 cester_assert_uint_eq (3, response1[0])
 
 cester_assert_uint_eq (0x20, response1[1])
 
 cester_assert_uint_eq (2, responseSize1)
 
 cester_assert_uint_eq (0x90, ctrl0)
 
 ramsyscall_printf ("GetTD1 followed by Nop: ack in %ius\n", ackTime)
 
 CESTER_TEST (raceSeekP2to85AckWaitAndNop, test_instance, int resetDone=resetCDRom();if(!resetDone) { cester_assert_true(resetDone);return;} int seekDone=seekPTo(0, 2, 0);if(!seekDone) { cester_assert_true(seekDone);return;} int setLocDone=setLoc(0x85, 0, 0);if(!setLocDone) { cester_assert_true(setLocDone);return;} initializeTime();while(updateTime()< 50000);initializeTime();CDROM_REG0=0;CDROM_REG1=CDL_SEEKP;uint8_t ctrl0=CDROM_REG0 &~3;uint32_t ackTime=waitCDRomIRQ();uint8_t cause1=ackCDRomCause();uint8_t ctrl1=CDROM_REG0 &~3;uint8_t response1[16];uint8_t responseSize1=readResponse(response1);uint8_t ctrl2=CDROM_REG0 &~3;CDROM_REG0=1;uint8_t cause1b=CDROM_REG3_UC;CDROM_REG0=0;CDROM_REG1=CDL_NOP;uint8_t ctrl2b=CDROM_REG0 &~3;initializeTime();uint32_t ackTime2=waitCDRomIRQ();uint8_t cause2=ackCDRomCause();uint8_t ctrl3=CDROM_REG0 &~3;uint8_t response2[16];uint8_t responseSize2=readResponse(response2);uint8_t ctrl4=CDROM_REG0 &~3;CDROM_REG0=1;uint8_t cause2b=CDROM_REG3_UC;initializeTime();uint32_t errorTime=waitCDRomIRQ();uint8_t cause3=ackCDRomCause();uint8_t ctrl5=CDROM_REG0 &~3;uint8_t response3[16];uint8_t responseSize3=readResponse(response3);uint8_t ctrl6=CDROM_REG0 &~3;CDROM_REG0=1;uint8_t cause3b=CDROM_REG3_UC;cester_assert_uint_eq(3, cause1);cester_assert_uint_eq(3, cause2);cester_assert_uint_eq(5, cause3);cester_assert_uint_eq(0xe0, cause1b);cester_assert_uint_eq(0xe0, cause2b);cester_assert_uint_eq(2, response1[0]);cester_assert_uint_eq(1, responseSize1);cester_assert_uint_eq(2, response2[0]);cester_assert_uint_eq(1, responseSize2);cester_assert_uint_eq(6, response3[0]);cester_assert_uint_eq(0x10, response3[1]);cester_assert_uint_eq(2, responseSize3);cester_assert_uint_eq(0x98, ctrl0);cester_assert_uint_eq(0x38, ctrl1);cester_assert_uint_eq(0x18, ctrl2);cester_assert_uint_eq(0x98, ctrl2b);cester_assert_uint_eq(0x38, ctrl3);cester_assert_uint_eq(0x18, ctrl4);cester_assert_uint_eq(0x38, ctrl5);cester_assert_uint_eq(0x18, ctrl6);cester_assert_uint_ge(ackTime, 500);cester_assert_uint_lt(ackTime, 7000);cester_assert_uint_ge(ackTime2, 500);cester_assert_uint_lt(ackTime2, 7000);ramsyscall_printf("SeekP from 00:02:00 to 85:00:00 with Nop in between: ack in %ius, ack2 in %ius, errored in %ius\n", ackTime, ackTime2, errorTime);) CESTER_TEST(raceSeekL2to71WaitAckAndNop
 
 while (updateTime()< 50000)
 
 while (CDROM_REG0 &0x80)
 
 ramsyscall_printf ("Waiting 2s...\n")
 
 ramsyscall_printf ("Done...\n")
 
 cester_assert_uint_eq (3, cause2)
 
 cester_assert_uint_eq (0xe0, cause2b)
 
 cester_assert_uint_eq (2, response1[0])
 
 cester_assert_uint_eq (1, responseSize1)
 
 cester_assert_uint_eq (0x42, response2[0])
 
 cester_assert_uint_eq (1, responseSize2)
 
 cester_assert_uint_eq (0xb8, ctrl0b)
 
 cester_assert_uint_eq (0xb8, ctrl1)
 
 cester_assert_uint_eq (0x98, ctrl2)
 
 cester_assert_uint_eq (0x38, ctrl3)
 
 cester_assert_uint_eq (0x18, ctrl4)
 
 cester_assert_uint_lt (ackTime, 150)
 
 cester_assert_uint_ge (ackTime2, 500)
 
 cester_assert_uint_lt (ackTime2, 7000)
 
 ramsyscall_printf ("SeekL from 00:02:00 to 71:00:00 then stall with Nop: ack in %ius, ack2 in %ius\n", ackTime, ackTime2)
 
 CESTER_TEST (raceNopWaitAndNop, test_instances, int resetDone=resetCDRom();if(!resetDone) { cester_assert_true(resetDone);return;} initializeTime();CDROM_REG0=0;CDROM_REG1=CDL_NOP;uint8_t ctrl0=CDROM_REG0 &~3;while(updateTime()< 50000);uint8_t ctrl0b=CDROM_REG0 &~3;CDROM_REG1=CDL_NOP;initializeTime();uint32_t ackTime=waitCDRomIRQ();uint8_t cause1=ackCDRomCause();uint8_t ctrl1=CDROM_REG0 &~3;uint8_t response1[16];uint8_t responseSize1=readResponse(response1);uint8_t ctrl2=CDROM_REG0 &~3;CDROM_REG0=1;uint8_t cause1b=CDROM_REG3_UC;initializeTime();uint32_t ackTime2=waitCDRomIRQ();uint8_t cause2=ackCDRomCause();uint8_t ctrl3=CDROM_REG0 &~3;uint8_t response2[16];uint8_t responseSize2=readResponse(response2);uint8_t ctrl4=CDROM_REG0 &~3;CDROM_REG0=1;uint8_t cause2b=CDROM_REG3_UC;cester_assert_uint_eq(3, cause1);cester_assert_uint_eq(3, cause2);cester_assert_uint_eq(0xe0, cause1b);cester_assert_uint_eq(0x98, ctrl0);cester_assert_uint_eq(0x38, ctrl0b);cester_assert_uint_eq(0xb8, ctrl1);cester_assert_uint_eq(0x98, ctrl2);cester_assert_uint_eq(0x38, ctrl3);cester_assert_uint_eq(0x18, ctrl4);cester_assert_uint_eq(2, response1[0]);cester_assert_uint_eq(1, responseSize1);cester_assert_uint_eq(2, response2[0]);cester_assert_uint_eq(1, responseSize2);cester_assert_uint_lt(ackTime, 150);ramsyscall_printf("Nop followed by Nop, ack in %ius, ack2 in %ius\n", ackTime, ackTime2);) CESTER_TEST(nopQueue
 
 for (unsigned i=0;i< 4;i++)
 
 ackCDRomCause ()
 
 while (gotIRQ &&++count)
 
 cester_assert_uint_eq (2, count)
 
 ramsyscall_printf ("Nop command queue of %i\n", count)
 
 CESTER_TEST (nopQueueBusy, test_instances, int resetDone=resetCDRom();if(!resetDone) { cester_assert_true(resetDone);return;} uint8_t ctrl[2];CDROM_REG0=0;for(unsigned i=0;i< 2;i++) { initializeTime();CDROM_REG1=CDL_NOP;while(updateTime()< 50000);ctrl[i]=CDROM_REG0 &~3;} for(unsigned i=0;i< 2;i++) { waitCDRomIRQ();ackCDRomCause();uint8_t response[16];readResponse(response);} cester_assert_uint_eq(0x38, ctrl[0]);cester_assert_uint_eq(0xb8, ctrl[1]);) CESTER_TEST(readResponseBeforeAck
 
 waitCDRomIRQ ()
 
 cester_assert_uint_eq (2, response2[0])
 
 CESTER_TEST (ackBeforeReadResponse, test_instances, int resetDone=resetCDRom();if(!resetDone) { cester_assert_true(resetDone);return;} int seekDone=seekPTo(0x70, 0x19, 0x73);if(!seekDone) { cester_assert_true(seekDone);return;} initializeTime();CDROM_REG0=0;CDROM_REG1=CDL_GETLOCP;while(CDROM_REG0 &0x80);CDROM_REG1=CDL_NOP;while(updateTime()< 50000);waitCDRomIRQ();uint8_t cause1=ackCDRomCause();CDROM_REG0=1;uint8_t cause1b=CDROM_REG3_UC;uint8_t response1[16];uint8_t responseSize1=readResponse(response1);waitCDRomIRQ();uint8_t cause2=ackCDRomCause();CDROM_REG0=1;uint8_t cause2b=CDROM_REG3_UC;uint8_t response2[16];uint8_t responseSize2=readResponse(response2);cester_assert_uint_eq(3, cause1);cester_assert_uint_eq(0xe0, cause1b);cester_assert_uint_eq(5, response1[0]);cester_assert_uint_eq(8, responseSize1);cester_assert_uint_eq(3, cause2);cester_assert_uint_eq(0xe0, cause2b);cester_assert_uint_eq(2, response2[0]);cester_assert_uint_eq(1, responseSize2);) CESTER_TEST(mixedReadAndAck1
 

Variables

 test_instances
 
int resetDone = resetCDRom()
 
int seekDone = seekPTo(0x70, 0x19, 0x73)
 
 CDROM_REG0 = 0
 
 CDROM_REG1 = CDL_NOP
 
uint8_t ctrl0 = CDROM_REG0 & ~3
 
uint32_t ackTime = waitCDRomIRQ()
 
uint8_t cause1 = ackCDRomCause()
 
uint8_t ctrl1 = CDROM_REG0 & ~3
 
uint8_t response1 [16]
 
uint8_t responseSize1 = readResponse(response1)
 
uint8_t ctrl2 = CDROM_REG0 & ~3
 
uint8_t cause1b = CDROM_REG3_UC
 
uint32_t timeout = 150000
 
int gotIRQ = waitCDRomIRQWithTimeout(&timeout)
 
 test_instance
 
 CDROM_REG2 = 1
 
int setLocDone = setLoc(0x71, 0, 0)
 
uint8_t ctrl0b = CDROM_REG0 & ~3
 
uint32_t ackTime2 = waitCDRomIRQ()
 
uint8_t cause2 = ackCDRomCause()
 
uint8_t ctrl3 = CDROM_REG0 & ~3
 
uint8_t response2 [16]
 
uint8_t responseSize2 = readResponse(response2)
 
uint8_t ctrl4 = CDROM_REG0 & ~3
 
uint8_t cause2b = CDROM_REG3_UC
 
unsigned count = 0
 
 do
 
uint8_t response [16]
 
uint8_t responseSize = readResponse(response)
 

Function Documentation

◆ ackCDRomCause()

ackCDRomCause ( )

◆ cester_assert_false()

cester_assert_false ( gotIRQ  )

◆ cester_assert_uint_eq() [1/26]

cester_assert_uint_eq ( 0  ,
response1  [1] 
)

◆ cester_assert_uint_eq() [2/26]

cester_assert_uint_eq ( 0x18  ,
ctrl2   
)

◆ cester_assert_uint_eq() [3/26]

cester_assert_uint_eq ( 0x18  ,
ctrl4   
)

◆ cester_assert_uint_eq() [4/26]

cester_assert_uint_eq ( 0x20  ,
response1  [1] 
)

◆ cester_assert_uint_eq() [5/26]

cester_assert_uint_eq ( 0x38  ,
ctrl1   
)

◆ cester_assert_uint_eq() [6/26]

cester_assert_uint_eq ( 0x38  ,
ctrl3   
)

◆ cester_assert_uint_eq() [7/26]

cester_assert_uint_eq ( 0x42  ,
response2  [0] 
)

◆ cester_assert_uint_eq() [8/26]

cester_assert_uint_eq ( 0x90  ,
ctrl0   
)

◆ cester_assert_uint_eq() [9/26]

cester_assert_uint_eq ( 0x98  ,
ctrl0   
)

◆ cester_assert_uint_eq() [10/26]

cester_assert_uint_eq ( 0x98  ,
ctrl2   
)

◆ cester_assert_uint_eq() [11/26]

cester_assert_uint_eq ( 0xb8  ,
ctrl0b   
)

◆ cester_assert_uint_eq() [12/26]

cester_assert_uint_eq ( 0xb8  ,
ctrl1   
)

◆ cester_assert_uint_eq() [13/26]

cester_assert_uint_eq ( 0xe0  ,
cause1b   
)

◆ cester_assert_uint_eq() [14/26]

cester_assert_uint_eq ( 0xe0  ,
cause2b   
)

◆ cester_assert_uint_eq() [15/26]

cester_assert_uint_eq ( 1  ,
responseSize1   
)

◆ cester_assert_uint_eq() [16/26]

cester_assert_uint_eq ( 1  ,
responseSize2   
)

◆ cester_assert_uint_eq() [17/26]

cester_assert_uint_eq ( 2  ,
count   
)

◆ cester_assert_uint_eq() [18/26]

cester_assert_uint_eq ( 2  ,
response1  [0] 
)

◆ cester_assert_uint_eq() [19/26]

cester_assert_uint_eq ( 2  ,
response2  [0] 
)

◆ cester_assert_uint_eq() [20/26]

cester_assert_uint_eq ( 2  ,
responseSize1   
)

◆ cester_assert_uint_eq() [21/26]

cester_assert_uint_eq ( 3  ,
cause1   
)

◆ cester_assert_uint_eq() [22/26]

cester_assert_uint_eq ( 3  ,
cause2   
)

◆ cester_assert_uint_eq() [23/26]

cester_assert_uint_eq ( 3  ,
response1  [0] 
)

◆ cester_assert_uint_eq() [24/26]

cester_assert_uint_eq ( 5  ,
cause1   
)

◆ cester_assert_uint_eq() [25/26]

cester_assert_uint_eq ( 5  ,
response1  [0] 
)

◆ cester_assert_uint_eq() [26/26]

cester_assert_uint_eq ( 8  ,
responseSize1   
)

◆ cester_assert_uint_ge() [1/2]

cester_assert_uint_ge ( ackTime  ,
500   
)

◆ cester_assert_uint_ge() [2/2]

cester_assert_uint_ge ( ackTime2  ,
500   
)

◆ cester_assert_uint_lt() [1/3]

cester_assert_uint_lt ( ackTime  ,
150   
)

◆ cester_assert_uint_lt() [2/3]

cester_assert_uint_lt ( ackTime  ,
7000   
)

◆ cester_assert_uint_lt() [3/3]

cester_assert_uint_lt ( ackTime2  ,
7000   
)

◆ CESTER_TEST() [1/6]

CESTER_TEST ( ackBeforeReadResponse  ,
test_instances  ,
int  resetDone = resetCDRom(); if (!resetDone) { cester_assert_true(resetDone); return; } int seekDone = seekPTo(0x70, 0x19, 0x73); if (!seekDone) { cester_assert_true(seekDone); return; } initializeTime(); CDROM_REG0 = 0; CDROM_REG1 = CDL_GETLOCP; while (CDROM_REG0 & 0x80); CDROM_REG1 = CDL_NOP; while (updateTime() < 50000); waitCDRomIRQ(); uint8_t cause1 = ackCDRomCause(); CDROM_REG0 = 1; uint8_t cause1b = CDROM_REG3_UC; uint8_t response1[16]; uint8_t responseSize1 = readResponse(response1); waitCDRomIRQ(); uint8_t cause2 = ackCDRomCause(); CDROM_REG0 = 1; uint8_t cause2b = CDROM_REG3_UC; uint8_t response2[16]; uint8_t responseSize2 = readResponse(response2); cester_assert_uint_eq(3, cause1); cester_assert_uint_eq(0xe0, cause1b); cester_assert_uint_eq(5, response1[0]); cester_assert_uint_eq(8, responseSize1); cester_assert_uint_eq(3, cause2); cester_assert_uint_eq(0xe0, cause2b); cester_assert_uint_eq(2, response2[0]); cester_assert_uint_eq(1, responseSize2); 
)

◆ CESTER_TEST() [2/6]

CESTER_TEST ( nopQueueBusy  ,
test_instances  ,
int  resetDone = resetCDRom(); if (!resetDone) { cester_assert_true(resetDone); return; } uint8_t ctrl[2]; CDROM_REG0 = 0; for (unsigned i = 0; i < 2; i++) { initializeTime(); CDROM_REG1 = CDL_NOP; while (updateTime() < 50000); ctrl[i] = CDROM_REG0 & ~3; } for (unsigned i = 0; i < 2; i++) { waitCDRomIRQ(); ackCDRomCause(); uint8_t response[16]; readResponse(response); } cester_assert_uint_eq(0x38, ctrl[0]); cester_assert_uint_eq(0xb8, ctrl[1]); 
)

◆ CESTER_TEST() [3/6]

CESTER_TEST ( raceGetLocPAndNop  ,
test_instances  ,
int  resetDone = resetCDRom(); if (!resetDone) { cester_assert_true(resetDone); return; } int seekDone = seekPTo(0x70, 0x19, 0x73); if (!seekDone) { cester_assert_true(seekDone); return; } initializeTime(); CDROM_REG0 = 0; CDROM_REG1 = CDL_GETLOCP; CDROM_REG1 = CDL_NOP; uint8_t ctrl0 = CDROM_REG0 & ~3; uint32_t ackTime = waitCDRomIRQ(); uint8_t cause1 = ackCDRomCause(); uint8_t ctrl1 = CDROM_REG0 & ~3; uint8_t response1[16]; uint8_t responseSize1 = readResponse(response1); uint8_t ctrl2 = CDROM_REG0 & ~3; CDROM_REG0 = 1; uint8_t cause1b = CDROM_REG3_UC; initializeTime(); uint32_t timeout = 150000; int gotIRQ = waitCDRomIRQWithTimeout(&timeout); cester_assert_uint_eq(3, cause1); cester_assert_uint_eq(0xe0, cause1b); cester_assert_uint_eq(0x98, ctrl0); cester_assert_uint_eq(0x38, ctrl1); cester_assert_uint_eq(0x18, ctrl2); cester_assert_uint_eq(2, response1[0]); cester_assert_uint_eq(1, responseSize1); cester_assert_false(gotIRQ); cester_assert_uint_ge(ackTime, 500); cester_assert_uint_lt(ackTime, 7000); ramsyscall_printf("GetLocP followed by Nop, ack in %ius\n", ackTime); 
)

◆ CESTER_TEST() [4/6]

CESTER_TEST ( raceNopAndGetTD1  ,
test_instance  ,
int  resetDone = resetCDRom(); if (!resetDone) { cester_assert_true(resetDone); return; } initializeTime(); CDROM_REG0 = 0; CDROM_REG2 = 1; CDROM_REG1 = CDL_NOP; CDROM_REG1 = CDL_GETTD; uint8_t ctrl0 = CDROM_REG0 & ~3; uint32_t ackTime = waitCDRomIRQ(); uint8_t cause1 = ackCDRomCause(); uint8_t ctrl1 = CDROM_REG0 & ~3; uint8_t response1[16]; uint8_t responseSize1 = readResponse(response1); uint8_t ctrl2 = CDROM_REG0 & ~3; CDROM_REG0 = 1; uint8_t cause1b = CDROM_REG3_UC; initializeTime(); uint32_t timeout = 150000; int gotIRQ = waitCDRomIRQWithTimeout(&timeout); cester_assert_uint_eq(3, cause1); cester_assert_uint_eq(0xe0, cause1b); cester_assert_uint_eq(2, response1[0]); cester_assert_uint_eq(0, response1[1]); cester_assert_uint_eq(2, response1[2]); cester_assert_uint_eq(3, responseSize1); cester_assert_uint_eq(0x90, ctrl0); cester_assert_uint_eq(0x38, ctrl1); cester_assert_uint_eq(0x18, ctrl2); cester_assert_false(gotIRQ); cester_assert_uint_ge(ackTime, 500); cester_assert_uint_lt(ackTime, 7000); ramsyscall_printf("Nop followed by GetTD1: ack in %ius\n", ackTime); 
)

◆ CESTER_TEST() [5/6]

CESTER_TEST ( raceNopWaitAndNop  ,
test_instances  ,
int  resetDone = resetCDRom(); if (!resetDone) { cester_assert_true(resetDone); return; } initializeTime(); CDROM_REG0 = 0; CDROM_REG1 = CDL_NOP; uint8_t ctrl0 = CDROM_REG0 & ~3; while (updateTime() < 50000); uint8_t ctrl0b = CDROM_REG0 & ~3; CDROM_REG1 = CDL_NOP; initializeTime(); uint32_t ackTime = waitCDRomIRQ(); uint8_t cause1 = ackCDRomCause(); uint8_t ctrl1 = CDROM_REG0 & ~3; uint8_t response1[16]; uint8_t responseSize1 = readResponse(response1); uint8_t ctrl2 = CDROM_REG0 & ~3; CDROM_REG0 = 1; uint8_t cause1b = CDROM_REG3_UC; initializeTime(); uint32_t ackTime2 = waitCDRomIRQ(); uint8_t cause2 = ackCDRomCause(); uint8_t ctrl3 = CDROM_REG0 & ~3; uint8_t response2[16]; uint8_t responseSize2 = readResponse(response2); uint8_t ctrl4 = CDROM_REG0 & ~3; CDROM_REG0 = 1; uint8_t cause2b = CDROM_REG3_UC; cester_assert_uint_eq(3, cause1); cester_assert_uint_eq(3, cause2); cester_assert_uint_eq(0xe0, cause1b); cester_assert_uint_eq(0x98, ctrl0); cester_assert_uint_eq(0x38, ctrl0b); cester_assert_uint_eq(0xb8, ctrl1); cester_assert_uint_eq(0x98, ctrl2); cester_assert_uint_eq(0x38, ctrl3); cester_assert_uint_eq(0x18, ctrl4); cester_assert_uint_eq(2, response1[0]); cester_assert_uint_eq(1, responseSize1); cester_assert_uint_eq(2, response2[0]); cester_assert_uint_eq(1, responseSize2);  cester_assert_uint_lt(ackTime, 150);   ramsyscall_printf("Nop followed by Nop, ack in %ius, ack2 in %ius\n", ackTime, ackTime2); 
)

◆ CESTER_TEST() [6/6]

CESTER_TEST ( raceSeekP2to85AckWaitAndNop  ,
test_instance  ,
int  resetDone = resetCDRom(); if (!resetDone) { cester_assert_true(resetDone); return; } int seekDone = seekPTo(0, 2, 0); if (!seekDone) { cester_assert_true(seekDone); return; } int setLocDone = setLoc(0x85, 0, 0); if (!setLocDone) { cester_assert_true(setLocDone); return; } initializeTime();  while (updateTime() < 50000); initializeTime(); CDROM_REG0 = 0; CDROM_REG1 = CDL_SEEKP; uint8_t ctrl0 = CDROM_REG0 & ~3; uint32_t ackTime = waitCDRomIRQ(); uint8_t cause1 = ackCDRomCause(); uint8_t ctrl1 = CDROM_REG0 & ~3; uint8_t response1[16]; uint8_t responseSize1 = readResponse(response1); uint8_t ctrl2 = CDROM_REG0 & ~3; CDROM_REG0 = 1; uint8_t cause1b = CDROM_REG3_UC; CDROM_REG0 = 0; CDROM_REG1 = CDL_NOP; uint8_t ctrl2b = CDROM_REG0 & ~3; initializeTime(); uint32_t ackTime2 = waitCDRomIRQ(); uint8_t cause2 = ackCDRomCause(); uint8_t ctrl3 = CDROM_REG0 & ~3; uint8_t response2[16]; uint8_t responseSize2 = readResponse(response2); uint8_t ctrl4 = CDROM_REG0 & ~3; CDROM_REG0 = 1; uint8_t cause2b = CDROM_REG3_UC; initializeTime(); uint32_t errorTime = waitCDRomIRQ(); uint8_t cause3 = ackCDRomCause(); uint8_t ctrl5 = CDROM_REG0 & ~3; uint8_t response3[16]; uint8_t responseSize3 = readResponse(response3); uint8_t ctrl6 = CDROM_REG0 & ~3; CDROM_REG0 = 1; uint8_t cause3b = CDROM_REG3_UC; cester_assert_uint_eq(3, cause1); cester_assert_uint_eq(3, cause2); cester_assert_uint_eq(5, cause3); cester_assert_uint_eq(0xe0, cause1b); cester_assert_uint_eq(0xe0, cause2b); cester_assert_uint_eq(2, response1[0]); cester_assert_uint_eq(1, responseSize1); cester_assert_uint_eq(2, response2[0]); cester_assert_uint_eq(1, responseSize2); cester_assert_uint_eq(6, response3[0]); cester_assert_uint_eq(0x10, response3[1]); cester_assert_uint_eq(2, responseSize3); cester_assert_uint_eq(0x98, ctrl0); cester_assert_uint_eq(0x38, ctrl1); cester_assert_uint_eq(0x18, ctrl2); cester_assert_uint_eq(0x98, ctrl2b); cester_assert_uint_eq(0x38, ctrl3); cester_assert_uint_eq(0x18, ctrl4); cester_assert_uint_eq(0x38, ctrl5); cester_assert_uint_eq(0x18, ctrl6); cester_assert_uint_ge(ackTime, 500); cester_assert_uint_lt(ackTime, 7000); cester_assert_uint_ge(ackTime2, 500); cester_assert_uint_lt(ackTime2, 7000); ramsyscall_printf("SeekP from 00:02:00 to 85:00:00 with Nop in between: ack in %ius, ack2 in %ius, errored in %ius\n", ackTime, ackTime2, errorTime); 
)

◆ for()

for ( )

◆ if()

if ( !  resetDone)

◆ initializeTime()

initializeTime ( )

◆ ramsyscall_printf() [1/6]

ramsyscall_printf ( "Done...\n"  )

◆ ramsyscall_printf() [2/6]

ramsyscall_printf ( "GetTD1 followed by Nop: ack in %ius\n"  ,
ackTime   
)

◆ ramsyscall_printf() [3/6]

ramsyscall_printf ( "Nop command queue of %i\n"  ,
count   
)

◆ ramsyscall_printf() [4/6]

ramsyscall_printf ( "Nop followed by  GetLocP,
ack in %ius\n"  ,
ackTime   
)

◆ ramsyscall_printf() [5/6]

ramsyscall_printf ( "SeekL from 00:02:00 to 71:00:00 then stall with Nop: ack in %  ius,
ack2 in %ius\n"  ,
ackTime  ,
ackTime2   
)

◆ ramsyscall_printf() [6/6]

ramsyscall_printf ( "Waiting 2s...\n"  )

◆ waitCDRomIRQ()

waitCDRomIRQ ( )

◆ while() [1/3]

while ( CDROM_REG0 &  0x80)

◆ while() [2/3]

while ( gotIRQ &&++  count)

◆ while() [3/3]

while ( )

Variable Documentation

◆ ackTime

uint32_t ackTime = waitCDRomIRQ()

◆ ackTime2

uint32_t ackTime2 = waitCDRomIRQ()

◆ cause1

uint8_t cause1 = ackCDRomCause()

◆ cause1b

uint8_t cause1b = CDROM_REG3_UC

◆ cause2

uint8_t cause2 = ackCDRomCause()

◆ cause2b

uint8_t cause2b = CDROM_REG3_UC

◆ CDROM_REG0

CDROM_REG0 = 0

◆ CDROM_REG1

CDROM_REG1 = CDL_NOP

◆ CDROM_REG2

CDROM_REG2 = 1

◆ count

unsigned count = 0

◆ ctrl0

uint8_t ctrl0 = CDROM_REG0 & ~3

◆ ctrl0b

uint8_t ctrl0b = CDROM_REG0 & ~3

◆ ctrl1

uint8_t ctrl1 = CDROM_REG0 & ~3

◆ ctrl2

uint8_t ctrl2 = CDROM_REG0 & ~3

◆ ctrl3

uint8_t ctrl3 = CDROM_REG0 & ~3

◆ ctrl4

uint8_t ctrl4 = CDROM_REG0 & ~3

◆ do

do
Initial value:
{
initializeTime()

◆ gotIRQ

gotIRQ = waitCDRomIRQWithTimeout(&timeout)

◆ resetDone

int resetDone = resetCDRom()

◆ response

uint8_t response[16]

◆ response1

uint8_t response1[16]

◆ response2

uint8_t response2[16]

◆ responseSize

uint8_t responseSize = readResponse(response)

◆ responseSize1

uint8_t responseSize1 = readResponse(response1)

◆ responseSize2

uint8_t responseSize2 = readResponse(response2)

◆ seekDone

int seekDone = seekPTo(0x70, 0x19, 0x73)

◆ setLocDone

int setLocDone = setLoc(0x71, 0, 0)

◆ test_instance

test_instance

◆ test_instances

test_instances

◆ timeout

unsigned timeout = 150000