Revert "Added defines for various CD structre values to replace magic numbers in code."

Was causing buggy SENS output
This reverts commit c054352b86.
This commit is contained in:
OldBoredEE 2023-02-17 21:33:35 +08:00
commit 207eaff65f
4 changed files with 33 additions and 45 deletions

19
i2s.c
View file

@ -27,10 +27,6 @@ extern volatile bool hasData;
extern int *logical_track_to_sector;
extern bool *is_data_track;
extern mutex_t mechacon_mutex;
extern uint8_t current_sens;
extern void set_sens_output(uint8_t sens_output);
extern void set_sens_level(uint8_t sens_output, bool new_level);
char SCExData[][44] = {
@ -119,7 +115,7 @@ void i2s_data_thread() {
logical_track_to_sector = malloc(sizeof(int)*(num_logical_tracks+2));
is_data_track = malloc(sizeof(bool)*(num_logical_tracks+2));
logical_track_to_sector[0] = 0;
logical_track_to_sector[1] = CD_LEADIN_LENGTH;
logical_track_to_sector[1] = 4500;
f_gets(buf, 128, &fil);
while (1) {
@ -149,7 +145,7 @@ void i2s_data_thread() {
int ss = atoi(strtok(NULL, ":"));
int ff = atoi(strtok(NULL, ":"));
if (logical_track != 1) {
logical_track_to_sector[logical_track] = mm*60*75 + ss*75 + ff + CD_TRACK1_START;
logical_track_to_sector[logical_track] = mm*60*75 + ss*75 + ff + 4650;
}
printf("cue: %d %d %d %d\n", logical_track, mm, ss, ff);
}
@ -159,7 +155,7 @@ void i2s_data_thread() {
if (FR_OK != fr && FR_EXIST != fr)
panic("f_open(%s) error: (%d)\n", FRESULT_str(fr), fr);
logical_track_to_sector[num_logical_tracks+1] = f_size(&fil)/2352 + CD_TRACK1_START;
logical_track_to_sector[num_logical_tracks+1] = f_size(&fil)/2352 + 4650;
is_data_track[num_logical_tracks+1] = 0;
is_data_track[0] = 0;
@ -186,8 +182,7 @@ void i2s_data_thread() {
latched >>= 8;
latched |= c << 16;
}
set_sens_output(latched >> 20);
set_sens_level(current_sens, SENS_data[current_sens]);
gpio_put(SENS, SENS_data[latched >> 20]);
mutex_exit(&mechacon_mutex);
}
@ -242,7 +237,7 @@ abort_psnee:
}
}
int cacheHit = -1;
int sector_to_search = sector_t < CD_TRACK1_START ? (sector_t % SECTOR_CACHE) + CD_TRACK1_START : sector_t;
int sector_to_search = sector_t < 4650 ? (sector_t % SECTOR_CACHE) + 4650 : sector_t;
for (int i=0; i<SECTOR_CACHE; i++) {
if (cachedSectors[i] == sector_to_search) {
cacheHit = i;
@ -251,7 +246,7 @@ abort_psnee:
}
if (cacheHit == -1) {
uint64_t seek_bytes = (sector_to_search-CD_TRACK1_START)*2352LL;
uint64_t seek_bytes = (sector_to_search-4650)*2352LL;
if (seek_bytes >= 0) {
fr = f_lseek(&fil, seek_bytes);
if (FR_OK != fr) {
@ -268,7 +263,7 @@ abort_psnee:
roundRobinCacheIndex = (roundRobinCacheIndex + 1) % SECTOR_CACHE;
}
if (sector_t >= CD_TRACK1_START) {
if (sector_t >= 4650) {
for (int i=0; i<CD_SAMPLES*2; i++) {
uint32_t i2s_data;
if (is_data_track[current_logical_track]) {

26
main.c
View file

@ -42,7 +42,6 @@ int *logical_track_to_sector;
bool *is_data_track;
volatile int current_logical_track = 0;
volatile int mode = 1;
volatile uint8_t current_sens = 0;
bool SENS_data[16] = {
0,0,0,0,0,
@ -134,18 +133,6 @@ void initialize() {
pio_enable_sm_mask_in_sync(pio1, (1u << SCOR_SM) | (1u << MECHACON_SM));
}
void set_sens_output(uint8_t sens_output)
{
current_sens = sens_output;
}
void set_sens_level(uint8_t sens_output, bool new_level)
{
SENS_data[sens_output] = new_level;
if (sens_output == current_sens) {
gpio_put(SENS, new_level);
}
}
int main() {
stdio_init_all();
@ -156,15 +143,14 @@ int main() {
uint64_t subq_delay_time = 0;
while (true) {
gpio_put(LMTSW, sector > CD_LIMIT_SW);
gpio_put(LMTSW, sector > 3000);
if (mutex_try_enter(&mechacon_mutex,0)) {
while(!pio_sm_is_rx_fifo_empty(pio1, MECHACON_SM)) {
uint c = reverseBits(pio_sm_get_blocking(pio1, MECHACON_SM),8);
latched >>= 8;
latched |= c << 16;
}
set_sens_output(latched >> 20);
set_sens_level(current_sens, SENS_data[current_sens]);
gpio_put(SENS, SENS_data[latched >> 20]);
mutex_exit(&mechacon_mutex);
}
@ -239,7 +225,7 @@ int main() {
if ((track - original_track) >= count_track) {
original_track = track;
set_sens_level(SENS_COUT, !SENS_data[SENS_COUT]);
SENS_data[SENS_COUT] = !SENS_data[SENS_COUT];
}
}
} else if (sled_move_direction == SLED_MOVE_REVERSE) {
@ -250,11 +236,11 @@ int main() {
sector_for_track_update = sector;
if ((original_track - track) >= count_track) {
original_track = track;
set_sens_level(SENS_COUT, !SENS_data[SENS_COUT]);
SENS_data[SENS_COUT] = !SENS_data[SENS_COUT];
}
}
} else if (SENS_data[SENS_GFS]) {
if (sector < CD_TRACK1_START && (time_us_64() - subq_start_time) > 13333) {
if (sector < 4650 && (time_us_64() - subq_start_time) > 13333) {
subq_start_time = time_us_64();
start_subq();
sector++;
@ -277,7 +263,7 @@ int main() {
}
}
if (subq_delay && (sector >= CD_TRACK1_START && (time_us_64() - subq_delay_time) > 3333)) {
if (subq_delay && (sector >= 4650 && (time_us_64() - subq_delay_time) > 3333)) {
subq_delay = 0;
start_subq();
}

26
subq.c
View file

@ -32,15 +32,29 @@ void printf_subq(uint8_t *subqdata) {
static inline void send_subq(uint8_t *subqdata) {
subq_program_init(pio1, SUBQ_SM, subq_offset, SQSO, SQCK);
pio_sm_set_enabled(pio1, SUBQ_SM, true);
pio_sm_put_blocking(pio1, SUBQ_SM, (subqdata[3] << 24) | (subqdata[2] << 16) | (subqdata[1] << 8) | subqdata[0]);
pio_sm_put_blocking(pio1, SUBQ_SM, (subqdata[7] << 24) | (subqdata[6] << 16) | (subqdata[5] << 8) | subqdata[4]);
pio_sm_put_blocking(pio1, SUBQ_SM, (subqdata[11] << 24) | (subqdata[10] << 16) | (subqdata[9] << 8) | subqdata[8]);
uint sub1 = (reverseBits(subqdata[0],8) << 24) |
(reverseBits(subqdata[1],8) << 16) |
(reverseBits(subqdata[2],8) << 8) |
(reverseBits(subqdata[3],8));
uint sub2 = (reverseBits(subqdata[4],8) << 24) |
(reverseBits(subqdata[5],8) << 16) |
(reverseBits(subqdata[6],8) << 8) |
(reverseBits(subqdata[7],8));
uint sub3 = (reverseBits(subqdata[8],8) << 24) |
(reverseBits(subqdata[9],8) << 16) |
(reverseBits(subqdata[10],8) << 8) |
(reverseBits(subqdata[11],8));
pio_sm_put_blocking(pio1, SUBQ_SM, reverseBits(sub1,32));
pio_sm_put_blocking(pio1, SUBQ_SM, reverseBits(sub2,32));
pio_sm_put_blocking(pio1, SUBQ_SM, reverseBits(sub3,32));
pio_sm_put_blocking(pio1, SCOR_SM, 1);
}
void start_subq() {
if (sector < CD_LEADIN_LENGTH) {
if (sector < 4500) {
int subq_entry = sector%(3+num_logical_tracks);
if (subq_entry == 0) {
@ -58,7 +72,7 @@ void start_subq() {
tracksubq[8] = 0x00;
tracksubq[9] = 0x00;
} else if (subq_entry == 2) {
int sector_lead_out = logical_track_to_sector[num_logical_tracks+1] - CD_LEADIN_LENGTH;
int sector_lead_out = logical_track_to_sector[num_logical_tracks+1] - 4500;
tracksubq[0] = hasData ? 0x61 : 0x21;
tracksubq[1] = 0x00;
tracksubq[2] = 0xA2;
@ -71,7 +85,7 @@ void start_subq() {
if (logical_track == 1) {
sector_track = 150;
} else {
sector_track = logical_track_to_sector[logical_track] - CD_LEADIN_LENGTH;
sector_track = logical_track_to_sector[logical_track] - 4500;
}
tracksubq[0] = is_data_track[logical_track] ? 0x41 : 0x01;
tracksubq[1] = 0x00;

View file

@ -62,11 +62,4 @@
#define PSNEE_SECTOR_LIMIT 4500
#define SECTOR_CACHE 50
//
// CD structure stuff
#define CD_LEADIN_LENGTH 4500
#define CD_PREGAP 150
#define CD_TRACK1_START (CD_LEADIN_LENGTH+CD_PREGAP)
#define CD_LIMIT_SW 3000
#endif