]> git.sur5r.net Git - cc65/blobdiff - libsrc/c64/get_tv.s
Improved tv timing detection for the c64.
[cc65] / libsrc / c64 / get_tv.s
index 4f46b8d64fbd0e2391be7c130d6ec2e1f64735b7..8c73f6fa48cebe3ddba30e29ae8e06a5dc4dddfd 100644 (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"
 
 .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