User Tools

Site Tools


base:detect_pal_ntsc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
base:detect_pal_ntsc [2015-04-17 04:31] – external edit 127.0.0.1base:detect_pal_ntsc [2016-12-27 02:39] tww_ctr
Line 62: Line 62:
 EDIT: This check assumes that the machine is not a Drean PAL-N, which has 312 lines and 65 cycles per line. EDIT: This check assumes that the machine is not a Drean PAL-N, which has 312 lines and 65 cycles per line.
  
 +===== Sokrates' variant =====
 +
 +Graham's variant with additional Drean PAL-N detection. First count rasterlines, then count cycles to differ between PAL and PAL-N:
 +
 +<code>
 +    LDX #$00
 +w0  LDA $D012
 +w1  CMP $D012
 +    BEQ w1
 +    BMI w0
 +    AND #$03
 +    CMP #$03
 +    BNE detectionDone ; done for NTSC
 +    TAY
 +countCycles
 +    INX
 +    LDA $D012
 +    BPL countCycles
 +    CPX #$5E  ; VICE values: PAL-N=$6C PAL=$50
 +       ; so choose middle value $5E for check 
 +    BCC isPAL
 +    INY ; is PAL-N
 +isPAL
 +    TYA
 +detectionDone
 +    ...
 +</code>
 +
 +Results in the accumulator:
 + 
 +<code>
 +#$01: 262 rasterlines and 64 cycles per line [NTSC: 6567R56A VIC] (OLD NTSC) 
 +#$02: 263 rasterlines and 65 cycles per line [NTSC: 6567R8 VIC]
 +#$03: 312 rasterlines and 63 cycles per line [PAL: 6569 VIC]
 +#$04: 312 rasterlines and 65 cycles per line [Drean PAL-N: 6572 VIC] 
 +</code>
  
 ===== TLR's more advanced variant ===== ===== TLR's more advanced variant =====
Line 575: Line 611:
 ; eof ; eof
 </code> </code>
 +
 +
 +===== TWW's Variant =====
 +
 +Count's number of cycles on one scan with CIA timer and uses the 2 LSBs from the high byte of the CIA Timer to determine model. This reliably detects PAL, NTSC, NTSC2 and DREAN. routine exits with result in A. Make sure no interrupts occur during the runtime of the routine.
 +
 +<code>
 +    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +    // Detect PAL/NTSC
 +    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +    // 312 rasterlines -> 63 cycles per line PAL        => 312 * 63 = 19656 Cycles / VSYNC  => #>76  %00
 +    // 262 rasterlines -> 64 cycles per line NTSC V1    => 262 * 64 = 16768 Cycles / VSYNC  => #>65  %01
 +    // 263 rasterlines -> 65 cycles per line NTSC V2    => 263 * 65 = 17095 Cycles / VSYNC  => #>66  %10
 +    // 312 rasterlines -> 65 cycles per line PAL DREAN  => 312 * 65 = 20280 Cycles / VSYNC  => #>79  %11
 +
 +DetectC64Model:
 +
 +    // Use CIA #1 Timer B to count cycled in a frame
 +    lda #$ff
 +    sta $dc06
 +    sta $dc07  // Latch #$ffff to Timer B
 +
 +    bit $d011
 +    bpl *-3    // Wait untill Raster > 256
 +    bit $d011
 +    bmi *-3    // Wait untill Raster = 0
 +
 +    ldx #%00011001
 +    stx $dc0f  // Start Timer B (One shot mode (Timer stops automatically when underflow))
 +
 +    bit $d011
 +    bpl *-3    // Wait untill Raster > 256
 +    bit $d011
 +    bmi *-3    // Wait untill Raster = 0
 +
 +    sec
 +    sbc $dc07  // Hibyte number of cycles used
 +    and #%00000011
 +    rts
 +</code>
 +
  
 ===== Older routine ===== ===== Older routine =====
base/detect_pal_ntsc.txt · Last modified: 2020-11-11 01:49 by copyfault