]> git.sur5r.net Git - cc65/blobdiff - libsrc/atari/romswitch.inc
Fixed bugs; and, improved the efficiency of some pce library functions.
[cc65] / libsrc / atari / romswitch.inc
index 9e229ea63e4cf2d91fbfb83c02cc80ffd5a24c59..ed4cd96d806245a3b2468d3e1e7b2ddabf9d0567 100644 (file)
@@ -3,75 +3,92 @@
 ;
 ; 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 CHARGEN_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   ; above CHARGEN_RELOC, below not
+
+.macro  set_chbase val
+.endmacro
+
+.endif  ; .ifdef CHARGEN_RELOC
+
 
 .if .defined(USEWSYNC) .and .defined(CHARGEN_RELOC)
+
 .macro  wsync
         sta     WSYNC
 .endmacro
-.else
+
+.else   ; above USEWSYNC, below not
+
 .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