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