From 37ed72bc891ae1885ce1c3343179b2fbbf122414 Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Fri, 20 Sep 2013 00:10:34 +0200 Subject: [PATCH] cleanup and document CHARGEN_RELOC change --- libsrc/atari/romswitch.inc | 73 ++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/libsrc/atari/romswitch.inc b/libsrc/atari/romswitch.inc index 9e229ea63..e1f3433b6 100644 --- a/libsrc/atari/romswitch.inc +++ b/libsrc/atari/romswitch.inc @@ -3,6 +3,19 @@ ; ; Christian Groessler, chris@groessler.org, 19-Sep-2013 ; +; +; Defines which modify the operation of the macros: +; +; CHARGEN_RELOC: If defined, CHBAS and CHBASE are updated when +; enabling or disabling the ROM. +; If the ROM is enabled, $E0 is written to CHBAS +; and CHBASE. +; If the ROM is disabled, the upper byte of +; __CHARGEN_START__ is written to CHBAS and CHBASE. +; USEWSYNC: If defined, the code waits for horizontal retrace +; before switching the ROM and updating CHBAS and +; CHBASE. This define only has effect if CHAGEN_RELOC +; is also defined. .ifdef __ATARIXL__ @@ -10,68 +23,76 @@ USEWSYNC = 1 CHARGEN_RELOC = 1 + +.ifdef CHARGEN_RELOC + +.macro set_chbase val + lda #val + sta CHBAS + sta CHBASE +.endmacro + +.else + +.macro set_chbase val +.endmacro + +.endif ; .ifdef CHARGEN_RELOC + + .if .defined(USEWSYNC) .and .defined(CHARGEN_RELOC) + .macro wsync sta WSYNC .endmacro -.else + +.else ; above + .macro wsync .endmacro + .endif +; "disable ROM" macros + .macro disable_rom lda PORTB and #$fe wsync sta PORTB -.ifdef CHARGEN_RELOC - lda #>__CHARGEN_START__ - sta CHBAS - sta CHBASE -.endif + set_chbase >__CHARGEN_START__ .endmacro + .macro disable_rom_quick lda PORTB and #$fe sta PORTB -.ifdef CHARGEN_RELOC - lda #>__CHARGEN_START__ - sta CHBAS - sta CHBASE -.endif + set_chbase >__CHARGEN_START__ .endmacro + .macro disable_rom_val val lda val wsync sta PORTB -.ifdef CHARGEN_RELOC - lda #>__CHARGEN_START__ - sta CHBAS - sta CHBASE -.endif + set_chbase >__CHARGEN_START__ .endmacro +; "enable ROM" macros + .macro enable_rom lda PORTB ora #1 wsync sta PORTB -.ifdef CHARGEN_RELOC - lda #$E0 - sta CHBAS - sta CHBASE -.endif + set_chbase $E0 .endmacro + .macro enable_rom_quick lda PORTB ora #1 sta PORTB -.ifdef CHARGEN_RELOC - lda #$E0 - sta CHBAS - sta CHBASE -.endif + set_chbase $E0 .endmacro .else ; above __ATARIXL__, below not