;
; 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__
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