mirror of
https://github.com/cc65/cc65.git
synced 2025-01-11 11:30:13 +00:00
Reduce flicker by waiting for horizontal retrace before switching ROM and
CHARGEN. Can be disabled by setting USEWSYNC to 0.
This commit is contained in:
parent
387f6e9b21
commit
5a1dcbbe4c
@ -5,6 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
DEBUG = 1
|
DEBUG = 1
|
||||||
|
USEWSYNC= 1
|
||||||
CHKBUF = 1 ; check if bounce buffering is needed (bounce buffering is always done if set to 0)
|
CHKBUF = 1 ; check if bounce buffering is needed (bounce buffering is always done if set to 0)
|
||||||
|
|
||||||
.if .defined(__ATARIXL__)
|
.if .defined(__ATARIXL__)
|
||||||
@ -24,7 +25,22 @@ CHKBUF = 1 ; check if bounce buffering is needed (bounce buffering is always don
|
|||||||
BUFSZ = 128 ; bounce buffer size
|
BUFSZ = 128 ; bounce buffer size
|
||||||
BUFSZ_SIO = 256
|
BUFSZ_SIO = 256
|
||||||
|
|
||||||
|
.macro wsync
|
||||||
|
.if USEWSYNC
|
||||||
|
sta WSYNC
|
||||||
|
.endif
|
||||||
|
.endmacro
|
||||||
|
|
||||||
.macro disable_rom
|
.macro disable_rom
|
||||||
|
lda PORTB
|
||||||
|
and #$fe
|
||||||
|
wsync
|
||||||
|
sta PORTB
|
||||||
|
lda #>__CHARGEN_START__
|
||||||
|
sta CHBAS
|
||||||
|
sta CHBASE
|
||||||
|
.endmacro
|
||||||
|
.macro disable_rom_quick
|
||||||
lda PORTB
|
lda PORTB
|
||||||
and #$fe
|
and #$fe
|
||||||
sta PORTB
|
sta PORTB
|
||||||
@ -32,7 +48,25 @@ BUFSZ_SIO = 256
|
|||||||
sta CHBAS
|
sta CHBAS
|
||||||
sta CHBASE
|
sta CHBASE
|
||||||
.endmacro
|
.endmacro
|
||||||
|
.macro disable_rom_val val
|
||||||
|
lda val
|
||||||
|
wsync
|
||||||
|
sta PORTB
|
||||||
|
lda #>__CHARGEN_START__
|
||||||
|
sta CHBAS
|
||||||
|
sta CHBASE
|
||||||
|
.endmacro
|
||||||
|
|
||||||
.macro enable_rom
|
.macro enable_rom
|
||||||
|
lda PORTB
|
||||||
|
ora #1
|
||||||
|
wsync
|
||||||
|
sta PORTB
|
||||||
|
lda #$E0
|
||||||
|
sta CHBAS
|
||||||
|
sta CHBASE
|
||||||
|
.endmacro
|
||||||
|
.macro enable_rom_quick
|
||||||
lda PORTB
|
lda PORTB
|
||||||
ora #1
|
ora #1
|
||||||
sta PORTB
|
sta PORTB
|
||||||
@ -48,9 +82,9 @@ BUFSZ_SIO = 256
|
|||||||
sram_init:
|
sram_init:
|
||||||
|
|
||||||
; disable all interrupts
|
; disable all interrupts
|
||||||
sei
|
|
||||||
ldx #0
|
ldx #0
|
||||||
stx NMIEN ; disable NMI
|
stx NMIEN ; disable NMI
|
||||||
|
sei
|
||||||
|
|
||||||
; disable ROMs
|
; disable ROMs
|
||||||
disable_rom
|
disable_rom
|
||||||
@ -72,9 +106,9 @@ sram_init:
|
|||||||
sta $fffb
|
sta $fffb
|
||||||
|
|
||||||
; enable interrupts
|
; enable interrupts
|
||||||
|
cli
|
||||||
lda #$40
|
lda #$40
|
||||||
sta NMIEN
|
sta NMIEN
|
||||||
cli
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -104,14 +138,14 @@ bounce_buffer: .res BUFSZ_SIO
|
|||||||
.macro int_wrap orgvec
|
.macro int_wrap orgvec
|
||||||
.local ret
|
.local ret
|
||||||
pha
|
pha
|
||||||
enable_rom
|
enable_rom_quick
|
||||||
lda #>ret
|
lda #>ret
|
||||||
pha
|
pha
|
||||||
lda #<ret
|
lda #<ret
|
||||||
pha
|
pha
|
||||||
php
|
php
|
||||||
jmp (orgvec)
|
jmp (orgvec)
|
||||||
ret: disable_rom
|
ret: disable_rom_quick
|
||||||
pla
|
pla
|
||||||
rti
|
rti
|
||||||
.endmacro
|
.endmacro
|
||||||
@ -209,26 +243,6 @@ CIO_filename2:
|
|||||||
jmp CIO_fn_cont
|
jmp CIO_fn_cont
|
||||||
|
|
||||||
|
|
||||||
; enable ROM, call CIO, disable ROM
|
|
||||||
|
|
||||||
CIO_call_a:
|
|
||||||
lda CIO_a
|
|
||||||
|
|
||||||
CIOV_call:
|
|
||||||
pha
|
|
||||||
lda PORTB
|
|
||||||
sta cur_CIOV_PORTB
|
|
||||||
enable_rom
|
|
||||||
pla
|
|
||||||
jsr CIOV_org
|
|
||||||
php
|
|
||||||
pha
|
|
||||||
lda cur_CIOV_PORTB
|
|
||||||
sta PORTB
|
|
||||||
pla
|
|
||||||
plp
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
; CIO handler
|
; CIO handler
|
||||||
; We have buffer pointer and length entries in the IOCB, but their
|
; We have buffer pointer and length entries in the IOCB, but their
|
||||||
@ -264,6 +278,28 @@ CIO_handler:
|
|||||||
bcs CIO_call_a ; other commands: assume no buffer
|
bcs CIO_call_a ; other commands: assume no buffer
|
||||||
; not reached
|
; not reached
|
||||||
|
|
||||||
|
; enable ROM, call CIO, disable ROM
|
||||||
|
|
||||||
|
CIO_call_a:
|
||||||
|
lda CIO_a
|
||||||
|
|
||||||
|
CIOV_call:
|
||||||
|
pha
|
||||||
|
lda PORTB
|
||||||
|
sta cur_CIOV_PORTB
|
||||||
|
enable_rom
|
||||||
|
pla
|
||||||
|
jsr CIOV_org
|
||||||
|
php
|
||||||
|
pha
|
||||||
|
disable_rom_val cur_CIOV_PORTB
|
||||||
|
; lda cur_CIOV_PORTB
|
||||||
|
; sta PORTB
|
||||||
|
pla
|
||||||
|
plp
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
CIO_write_jmp:
|
CIO_write_jmp:
|
||||||
jmp CIO_write
|
jmp CIO_write
|
||||||
|
|
||||||
@ -859,8 +895,9 @@ SIO_call:
|
|||||||
jsr SIOV_org
|
jsr SIOV_org
|
||||||
php
|
php
|
||||||
pha
|
pha
|
||||||
lda cur_SIOV_PORTB
|
disable_rom_val cur_SIOV_PORTB
|
||||||
sta PORTB
|
; lda cur_SIOV_PORTB
|
||||||
|
; sta PORTB
|
||||||
pla
|
pla
|
||||||
plp
|
plp
|
||||||
rts
|
rts
|
||||||
@ -933,7 +970,7 @@ SIO_write:
|
|||||||
bcs sio_write_len_ok
|
bcs sio_write_len_ok
|
||||||
|
|
||||||
lda #DERROR ; don't know a better status code for this
|
lda #DERROR ; don't know a better status code for this
|
||||||
bne SIO_err
|
jmp SIO_err
|
||||||
|
|
||||||
sio_write_len_ok:
|
sio_write_len_ok:
|
||||||
lda DBUFLO
|
lda DBUFLO
|
||||||
@ -1080,8 +1117,9 @@ KEYBDV_handler:
|
|||||||
pha
|
pha
|
||||||
rts ; call keyboard handler
|
rts ; call keyboard handler
|
||||||
kret: pha
|
kret: pha
|
||||||
lda cur_KEYBDV_PORTB
|
disable_rom_val cur_KEYBDV_PORTB
|
||||||
sta PORTB
|
; lda cur_KEYBDV_PORTB
|
||||||
|
; sta PORTB
|
||||||
pla
|
pla
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -1097,8 +1135,9 @@ SETVBV_handler:
|
|||||||
jsr SETVBV_org
|
jsr SETVBV_org
|
||||||
php
|
php
|
||||||
pha
|
pha
|
||||||
lda cur_SETVBV_PORTB
|
disable_rom_val cur_SETVBV_PORTB
|
||||||
sta PORTB
|
; lda cur_SETVBV_PORTB
|
||||||
|
; sta PORTB
|
||||||
pla
|
pla
|
||||||
plp
|
plp
|
||||||
rts
|
rts
|
||||||
|
Loading…
x
Reference in New Issue
Block a user