From 7eb8ea3edecb6c3617dffc0a13e2895cf79b67b3 Mon Sep 17 00:00:00 2001 From: David Kuder Date: Sun, 8 Jan 2023 00:35:06 -0500 Subject: [PATCH] VGA mode bugfixes AUX page was being selected due to an errant && where a & should have been. IIe and IIgs registers were being written during read cycles. --- v2-analog-rev1/vga/businterface.c | 6 +++--- v2-analog-rev1/vga/render.c | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/v2-analog-rev1/vga/businterface.c b/v2-analog-rev1/vga/businterface.c index 28a3347..014e487 100644 --- a/v2-analog-rev1/vga/businterface.c +++ b/v2-analog-rev1/vga/businterface.c @@ -21,7 +21,7 @@ static inline void __time_critical_func(shadow_memory)(uint32_t address, uint32_ // Shadow parts of the Apple's memory by observing the bus write cycles if((value & (1u << CONFIG_PIN_APPLEBUS_RW-CONFIG_PIN_APPLEBUS_DATA_BASE)) == 0) { // Mirror Video Memory from MAIN & AUX banks - if(terminal_switches && TERMINAL_AUX_WRITE) { + if(terminal_switches & TERMINAL_AUX_WRITE) { if((address >= 0x400) && (address < 0xC00)) { private_memory[address] = value & 0xff; } else if((address >= 0x2000) && (address < 0x6000)) { @@ -78,11 +78,11 @@ static inline void __time_critical_func(shadow_memory)(uint32_t address, uint32_ terminal_switches |= TERMINAL_80COL; break; case 0x22: - if(terminal_switches & TERMINAL_IIGS_REGS) + if((terminal_switches & TERMINAL_IIGS_REGS) && ((value & (1u << CONFIG_PIN_APPLEBUS_RW-CONFIG_PIN_APPLEBUS_DATA_BASE)) == 0)) terminal_tbcolor = value & 0xff; break; case 0x34: - if(terminal_switches & TERMINAL_IIGS_REGS) + if((terminal_switches & TERMINAL_IIGS_REGS) && ((value & (1u << CONFIG_PIN_APPLEBUS_RW-CONFIG_PIN_APPLEBUS_DATA_BASE)) == 0)) terminal_border = value & 0x0f; break; case 0x50: diff --git a/v2-analog-rev1/vga/render.c b/v2-analog-rev1/vga/render.c index 3f9d347..2d069b6 100644 --- a/v2-analog-rev1/vga/render.c +++ b/v2-analog-rev1/vga/render.c @@ -16,7 +16,9 @@ void render_init() { // Initialize the character generator ROM memcpy(character_rom, default_character_rom, sizeof(character_rom)); soft_switches = 0; - terminal_switches = TERMINAL_TEST; + terminal_switches = TERMINAL_TEST | TERMINAL_IIE_REGS | TERMINAL_IIGS_REGS; + terminal_tbcolor = 0x0f; + terminal_border = 0x00; render_test_init(); }