Compare commits

..

No commits in common. "update-umac" and "main" have entirely different histories.

7 changed files with 37 additions and 72 deletions

View file

@ -37,8 +37,6 @@ jobs:
./fetch-rom-dsk.sh
./fruitjam-build.sh -m 4096
./fruitjam-build.sh -m 4096 -v
./fruitjam-build.sh -m 4096 -o
./fruitjam-build.sh -m 4096 -v -o
./fruitjam-build.sh -m 400
./fruitjam-build.sh -m 400 -v
./fruitjam-build.sh -m 400 -o

View file

@ -179,7 +179,7 @@ if (USE_AUDIO)
add_subdirectory(external/pico-extras/src/rp2_common/pico_audio_i2s)
add_subdirectory(external/pico-extras/src/common/pico_audio)
add_subdirectory(external/pico-extras/src/common/pico_util_buffer)
add_compile_definitions(ENABLE_AUDIO=1 PICO_AUDIO_I2S_PIO=1 PICO_AUDIO_I2S_DMA_IRQ=0 PICO_AUDIO_I2S_DATA_PIN=24 PICO_AUDIO_I2S_CLOCK_PIN_BASE=26 PICO_AUDIO_I2S_MONO_INPUT=1)
add_compile_definitions(ENABLE_AUDIO=1 PICO_AUDIO_I2S_CLOCK_PINS_SWAPPED=1 PICO_AUDIO_I2S_PIO=1 PICO_AUDIO_I2S_DMA_IRQ=0 PICO_AUDIO_I2S_DATA_PIN=24 PICO_AUDIO_I2S_CLOCK_PIN_BASE=25 PICO_AUDIO_I2S_MONO_INPUT=1 PICO_AUDIO_I2S_SWAP_CLOCK=1)
set(EXTRA_AUDIO_LIB pico_util_buffer pico_audio pico_audio_i2s hardware_i2c)
endif()

2
external/umac vendored

@ -1 +1 @@
Subproject commit c265fb4e1eaaaed15776ac97f5b16a56cf5c454d
Subproject commit 431e905354e975cd942eb4c1c5ea5a39237691ab

View file

@ -2,11 +2,12 @@
set -xe
if ! [ -f rom.bin ]; then
curl -L 'https://archive.org/download/mac_rom_archive_-_as_of_8-19-2011/mac_rom_archive_-_as_of_8-19-2011.zip/4D1F8172%20-%20MacPlus%20v3.ROM' > rom.bin
curl -L 'https://ia902205.us.archive.org/view_archive.php?archive=/18/items/mac_rom_archive_-_as_of_8-19-2011/mac_rom_archive_-_as_of_8-19-2011.zip&file=4D1F8172%20-%20MacPlus%20v3.ROM' > rom.bin
fi
if ! [ -f umac0ro.img ]; then
curl -L 'https://archive.org/download/mac_MacOS_6.0.8/MacOS_6.0.8_System_Startup.img' > 'umac0ro.img'
if ! [ -f os.7z ]; then
curl -L 'https://archive.org/download/apple-mac-os-system-3.2-finder-5.3-system-tools-1.0-512-ke-jun-1986-3.5-800k.-7z/Apple%20Mac%20OS%20%28System%203.2%20Finder%205.3%29%20%28System%20Tools%201.0%20Mac%20128%2C%20512K%29%20%28Jun%201986%29%20%283.5-400k%29.7z' > 'os.7z'
fi
7z x -so 'os.7z' 'Apple Mac OS (System 3.2 Finder 5.3) (System Tools 1.0 Mac 128, 512K) (Jun 1986) (3.5-400k)/System Installation.img' > umac0ro.img
fi
sha256sum -c roms.sha256sum

View file

@ -1,2 +0,0 @@
dd908e2b65772a6b1f0c859c24e9a0d3dcde17b1c6a24f4abd8955846d7895e7 *rom.bin
464ff9b8a55b0a8fe10d394b411f9c753fcd9d477c0d2f1118ce9927b19bee54 *umac0ro.img

View file

@ -30,12 +30,8 @@ static void __no_inline_not_in_flash_func(set_qmi_timing)() {
#define RP2350_PSRAM_MIN_DESELECT_FS (50000000)
#endif
#ifndef RP2350_PSRAM_RX_DELAY_FS
#define RP2350_PSRAM_RX_DELAY_FS (3333333)
#endif
#ifndef RP2350_PSRAM_MAX_SCK_HZ
#define RP2350_PSRAM_MAX_SCK_HZ (133000000)
#define RP2350_PSRAM_MAX_SCK_HZ (109000000)
#endif
#define SEC_TO_FS 1000000000000000ll
@ -53,7 +49,6 @@ static void __no_inline_not_in_flash_func(set_psram_timing)(void) {
// Get the clock femto seconds per cycle.
uint32_t fsPerCycle = SEC_TO_FS / sysHz;
uint32_t fsPerHalfCycle = fsPerCycle / 2;
// the maxSelect value is defined in units of 64 clock cycles
// So maxFS / (64 * fsPerCycle) = maxSelect = RP2350_PSRAM_MAX_SELECT_FS64/fsPerCycle
@ -65,18 +60,11 @@ static void __no_inline_not_in_flash_func(set_psram_timing)(void) {
volatile uint8_t minDeselect = (RP2350_PSRAM_MIN_DESELECT_FS + fsPerCycle - 1) / fsPerCycle;
// RX delay (RP2350 datasheet 12.14.3.1) delay between between rising edge of SCK and
// the start of RX sampling. Expressed in 0.5 system clock cycles. Smallest value
// >= 3.3ns.
volatile uint8_t rxDelay = (RP2350_PSRAM_RX_DELAY_FS + fsPerHalfCycle - 1) / fsPerHalfCycle;
printf("syshz=%u\n", sysHz);
printf("Max Select: %d, Min Deselect: %d, RX delay: %d, clock divider: %d\n", maxSelect, minDeselect, rxDelay, clockDivider);
printf("PSRAM clock rate %.1fMHz\n", (float)sysHz / clockDivider / 1e6);
printf("Max Select: %d, Min Deselect: %d, clock divider: %d\n", maxSelect, minDeselect, clockDivider);
qmi_hw->m[1].timing = QMI_M1_TIMING_PAGEBREAK_VALUE_1024 << QMI_M1_TIMING_PAGEBREAK_LSB | // Break between pages.
3 << QMI_M1_TIMING_SELECT_HOLD_LSB | // Delay releasing CS for 3 extra system cycles.
rxDelay << QMI_M1_TIMING_RXDELAY_LSB | // Delay between SCK and RX sampling
1 << QMI_M1_TIMING_COOLDOWN_LSB | 1 << QMI_M1_TIMING_RXDELAY_LSB |
maxSelect << QMI_M1_TIMING_MAX_SELECT_LSB | minDeselect << QMI_M1_TIMING_MIN_DESELECT_LSB |
clockDivider << QMI_M1_TIMING_CLKDIV_LSB;
@ -154,6 +142,10 @@ void overclock(enum clk_sys_speed clk_sys_div, uint32_t bit_clk_khz) {
stdio_init_all();
set_psram_timing();
#define SHOW_CLK(i) printf("clk_get_hz(%s) -> %u\n", #i, clock_get_hz(i));
SHOW_CLK(clk_gpout0);
SHOW_CLK(clk_gpout1);
SHOW_CLK(clk_gpout2);
SHOW_CLK(clk_gpout3);
SHOW_CLK(clk_ref);
SHOW_CLK(clk_sys);
SHOW_CLK(clk_peri);

View file

@ -403,25 +403,14 @@ static void __no_inline_not_in_flash_func(setup_psram)(void) {
}
// RESETEN, RESET and quad enable
for (uint8_t i = 0; i < 4; i++) {
for (uint8_t i = 0; i < 3; i++) {
qmi_hw->direct_csr |= QMI_DIRECT_CSR_ASSERT_CS1N_BITS;
switch (i) {
case 0:
// RESETEN
if (i == 0) {
qmi_hw->direct_tx = 0x66;
break;
case 1:
// RESET
} else if (i == 1) {
qmi_hw->direct_tx = 0x99;
break;
case 2:
// Quad enable
} else {
qmi_hw->direct_tx = 0x35;
break;
case 3:
// Toggle wrap boundary mode
qmi_hw->direct_tx = 0xc0;
break;
}
while ((qmi_hw->direct_csr & QMI_DIRECT_CSR_BUSY_BITS) != 0) {
}
@ -491,41 +480,28 @@ static void __no_inline_not_in_flash_func(setup_psram)(void) {
int main()
{
setup_psram();
#if OVERCLOCK
#if defined(OVERCLOCK) && OVERCLOCK+0
overclock(CLK_SYS_264MHZ, 252000);
#endif
// set_sys_clock_khz(250*1000, true);
setup_psram();
stdio_init_all();
printf("psram size %u\n", _psram_size);
#ifndef RAM_TEST
#define RAM_TEST (0)
#endif
#if RAM_TEST
for(int pass=0; pass<10; pass++) {
uint8_t acc = 1;
for(int i=0; i < _psram_size; i++) {
umac_ram[i] = acc;
acc = acc * 13 + 21;
}
acc = 1;
for(int i=0; i < _psram_size; i++) {
uint8_t ri = umac_ram[i];
if(ri != acc) {
panic("[%08x] Stored %02x read %02x", i, acc, ri);
}
acc = acc * 13 + 21;
}
printf("ram test pass %d OK\n", pass);
}
#endif
io_init();
#define SHOW_CLK(i) printf("clk_get_hz(%s) -> %u\n", #i, clock_get_hz(i));
SHOW_CLK(clk_gpout0);
SHOW_CLK(clk_gpout1);
SHOW_CLK(clk_gpout2);
SHOW_CLK(clk_gpout3);
SHOW_CLK(clk_ref);
SHOW_CLK(clk_sys);
SHOW_CLK(clk_peri);
SHOW_CLK(clk_hstx);
SHOW_CLK(clk_usb);
SHOW_CLK(clk_adc);
#if ENABLE_AUDIO
audio_setup();
#endif