CESTER_TEST(cdlGetLocP, test_instances, int resetDone=resetCDRom();if(!resetDone) { cester_assert_true(resetDone);return;} initializeTime();CDROM_REG0=0;CDROM_REG1=CDL_GETLOCP;uint32_t ackTime=waitCDRomIRQ();uint8_t cause1=ackCDRomCause();uint8_t ctrl1=CDROM_REG0 &~3;struct LocPResult response;uint8_t responseSize=readResponse((uint8_t *)&response);uint8_t ctrl2=CDROM_REG0 &~3;CDROM_REG0=1;uint8_t cause1b=CDROM_REG3_UC;cester_assert_uint_eq(3, cause1);cester_assert_uint_eq(0xe0, cause1b);cester_assert_uint_eq(0x38, ctrl1);cester_assert_uint_eq(0x18, ctrl2);int inPregap=response.index==0;uint32_t relative=MSF2LBA(btoi(response.m), btoi(response.s), btoi(response.f));uint32_t absolute=MSF2LBA(btoi(response.am), btoi(response.as), btoi(response.af));uint32_t onefifty=absolute;if(inPregap) { onefifty=absolute+relative;} else { onefifty=absolute - relative;} cester_assert_uint_eq(1, response.track);cester_assert_uint_ge(onefifty, 150);cester_assert_uint_ge(response.index, 0);cester_assert_uint_le(response.index, 1);cester_assert_uint_ge(absolute, 145);cester_assert_uint_lt(absolute, 155);cester_assert_uint_lt(relative, 5);cester_assert_uint_eq(8, responseSize);cester_assert_uint_ge(ackTime, 500);cester_assert_uint_lt(ackTime, 7000);ramsyscall_printf("Basic getlocP, ack in %ius\n", ackTime);ramsyscall_printf("Full response: track: %02x, index: %02x, relative: %02x:%02x:%02x(%2i), absolute: %02x:%02x:%02x(%2i)\n", response.track, response.index, response.m, response.s, response.f, relative, response.am, response.as, response.af, absolute);) CESTER_TEST(cdlGetLocPafterSeekP