analog/v2-analog-rev1/common/main.c
David Kuder d9be2ed9cd Firmware Release 23-01-16-119
New autodetect routines for Apple II+, IIe (Platinum), IIgs (ROM03).
Timing tweaks to improve compatibility on IIgs and IIe.
Corrected text rendering on all supported machines.
Initial Super HiRes support (not recommended to use at this time)
Monochrome DHGR and HGR support activated with IIgs MONOCOLOR or NEWVID registers.
80 Column mode on IIe and IIgs.
2023-01-16 20:36:00 -05:00

108 lines
2.3 KiB
C

#include <stdio.h>
#include <pico/stdlib.h>
#include <pico/multicore.h>
#include "common/abus.h"
#include "common/config.h"
#include "common/modes.h"
#include "pico_hal.h"
#ifdef RASPBERRYPI_PICO_W
#include <pico/cyw43_arch.h>
#endif
volatile uint8_t core1_running = 0;
static void core1_loop() {
for(;;) {
switch(v2mode) {
case MODE_DIAG:
core1_running = 1;
diag_businterface();
core1_running = 0;
break;
case MODE_FS:
core1_running = 1;
fs_businterface();
core1_running = 0;
break;
case MODE_VGACARD:
core1_running = 1;
vga_businterface();
core1_running = 0;
break;
case MODE_APPLICARD:
core1_running = 1;
z80_businterface();
core1_running = 0;
break;
case MODE_SERIAL:
core1_running = 1;
serial_businterface();
core1_running = 0;
break;
case MODE_PARALLEL:
core1_running = 1;
parallel_businterface();
core1_running = 0;
break;
}
}
}
static void core0_loop() {
for(;;) {
switch(v2mode) {
case MODE_REBOOT:
flash_reboot();
break;
case MODE_DIAG:
diagmain();
break;
case MODE_FS:
fsmain();
break;
case MODE_VGACARD:
vgamain();
break;
case MODE_APPLICARD:
z80main();
break;
case MODE_SERIAL:
serialmain();
break;
case MODE_PARALLEL:
parallelmain();
break;
default:
v2mode = MODE_VGACARD;
}
while(core1_running) {
sleep_ms(5);
};
}
}
int main() {
// Adjust system clock for better dividing into other clocks
set_sys_clock_khz(CONFIG_SYSCLOCK*1000, true);
abus_init();
// Sensible defaults if there is no config / fs
default_config();
multicore_launch_core1(core1_loop);
// Try mounting the LittleFS, or format if it isn't there.
if(pico_mount(0) == LFS_ERR_OK) {
read_config();
} else if(pico_mount(1) == LFS_ERR_OK) {
read_config();
}
core0_loop();
return 0;
}