1
0
mirror of https://github.com/cc65/cc65.git synced 2025-03-13 15:32:09 +00:00

Improved tv timing detection for the c64.

This commit is contained in:
Marco van den Heuvel 2018-03-08 16:06:33 -08:00
parent 7e6942953c
commit 22d4b0d497
3 changed files with 46 additions and 3 deletions

View File

@ -11,6 +11,8 @@
.enum TV
NTSC
PAL
NTSC_OLD
PAL_N
OTHER
.endenum

View File

@ -150,7 +150,9 @@ struct cbm_dirent {
#define TV_NTSC 0
#define TV_PAL 1
#define TV_OTHER 2
#define TV_NTSC_OLD 2
#define TV_PAL_N 3
#define TV_OTHER 4
unsigned char get_tv (void);
/* Return the video mode the machine is using. */

View File

@ -3,6 +3,11 @@
;
; unsigned char get_tv (void);
; /* Return the video mode the machine is using */
;
; Changed to actually detect the mode instead of using a flag
; Marco van den Heuvel, 2018-03-08
;
; The detection goes wrong on accelerated machines for now.
;
.include "c64.inc"
@ -13,8 +18,42 @@
.proc _get_tv
lda PALFLAG
ldx #0
php
sei
timing_loop_0:
lda VIC_HLINE
timing_loop_1:
cmp VIC_HLINE
beq timing_loop_1
bmi timing_loop_0
and #$03
cmp #$01
bne check_ntsc
lda #TV::NTSC_OLD ; NTSC OLD constant
bne detected
check_ntsc:
cmp #$03
bcc ntsc
; check for PAL and PAL-N
ldx #$00
lda #$10
timing_loop_2:
inx
cmp VIC_HLINE
bne timing_loop_2
lda #TV::PAL ; PAL constant
cpx #$70
bcc detected
lda #TV::PAL_N ; PAL-N constant
detected:
ldx #$00
plp
rts
ntsc:
lda #TV::NTSC ; NTSC constant
beq detected
.endproc