Skip to content

Commit

Permalink
Fix: wrong video mode in SuperCIC pair mode
Browse files Browse the repository at this point in the history
In pair mode, CIC data lines are supposed to be outputs from the POV of the MCU.
During operation they could be switched back to inputs by the SysTick handler,
resetting the video mode/region back to NTSC regardless of settings.
  • Loading branch information
mrehkopf committed Feb 17, 2023
1 parent 91accaf commit fffe499
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/cic.c
Expand Up @@ -43,27 +43,29 @@ enum cicstates get_cic_state() {
} else return CIC_FAIL;
}

void cic_preinit() {
GPIO_MODE_IN(SNES_CIC_D0_REG, SNES_CIC_D0_BIT);
GPIO_MODE_IN(SNES_CIC_D1_REG, SNES_CIC_D1_BIT);
}

void cic_init(int allow_pairmode) {
GPIO_MODE_OUT(SNES_CIC_PAIR_REG, SNES_CIC_PAIR_BIT);
OUT_BIT(SNES_CIC_PAIR_REG, SNES_CIC_PAIR_BIT, !allow_pairmode);
GPIO_MODE_IN(SNES_CIC_D0_REG, SNES_CIC_D0_BIT);
GPIO_MODE_IN(SNES_CIC_D1_REG, SNES_CIC_D1_BIT);
}

/* prepare GPIOs for pair mode + set initial modes */
void cic_pair(int init_vmode, int init_d4) {
cic_videomode(init_vmode);
cic_d4(init_d4);

GPIO_MODE_OUT(SNES_CIC_D0_REG, SNES_CIC_D0_BIT);
GPIO_MODE_OUT(SNES_CIC_D1_REG, SNES_CIC_D1_BIT);
}

void cic_videomode(int value) {
OUT_BIT(SNES_CIC_D0_REG, SNES_CIC_D0_BIT, value);
GPIO_MODE_OUT(SNES_CIC_D0_REG, SNES_CIC_D0_BIT);
}

void cic_d4(int value) {
OUT_BIT(SNES_CIC_D1_REG, SNES_CIC_D1_BIT, value);
GPIO_MODE_OUT(SNES_CIC_D1_REG, SNES_CIC_D1_BIT);
}

1 change: 1 addition & 0 deletions src/cic.h
Expand Up @@ -15,6 +15,7 @@ void print_cic_state(void);
char *get_cic_statename(enum cicstates state);
char *get_cic_statefriendlyname(enum cicstates state);
enum cicstates get_cic_state(void);
void cic_preinit(void);
void cic_init(int allow_pairmode);

void cic_pair(int init_vmode, int init_d4);
Expand Down
2 changes: 2 additions & 0 deletions src/main.c
Expand Up @@ -120,6 +120,8 @@ int main(void) {
printf("PCONP=%lx\n", LPC_SC->PCONP);
#endif
file_init();

cic_preinit();
cic_init(0);

fpga_init();
Expand Down

0 comments on commit fffe499

Please sign in to comment.