User Tools

Site Tools


base:detect_vic_type

Differences

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

Link to this comparison view

base:detect_vic_type [2015-04-17 04:31] (current)
Line 1: Line 1:
 +====== Detect VIC Model ======
  
 +"​Well...for the definition. As far as I know, there are (at least) 3 different vic types: ​
 +
 +new (with the grey dots if you change the color - 9 lumas)
 +old (without the grey dots - 9 lumas)
 +VERY old (without the grey dots - 5 lumas).
 +
 +This VIC-Check routine checks only for the new/old version, not the very old with less luma steps!"​
 +
 +<​code>​
 +VIC_type no.---luma steps---VICCHECK.prg
 +----------------------------------------
 +
 +PAL    8565R2-4191 ​     9        new vic 
 +PAL    8565R2-3991(22) ​ 9        new vic 
 +PAL    8565R2-0787(22) ​ 9        new vic 
 +
 +PAL    6596R5 ​          ​9 ​       old vic 
 +PAL    6569R3-4685 ​     9        old vic 
 +PAL    6569R3-2983 ​     9        old vic 
 +
 +PAL    6569R1-2283 ​     5        old vic
 +
 +PAL-N  6572R0 ​          ? ​       new vic
 +NTSC   ​6567R8 ​          ? ​       flickers between old/new vic
 +</​code>​
 +
 +<​code>​
 +; ---------------------------------------------------------------------------
 +; VIC-Check 2 written by Crossbow/​Crest (shamelessly disassembled by Groepaz)
 +; ---------------------------------------------------------------------------
 +
 +                 ​JSR ​    $FF81 ; clear screen
 +
 +                 ​SEI ​          ; disable irq
 +
 +                 ; init VIC registers
 +                 ​LDX ​    #$2F
 +
 +loc_813: ​                   ​
 +                 ​LDA ​    ​vicregs,​X
 +                 ​STA ​    ​$D000,​X
 +                 DEX
 +                 ​BNE ​    ​loc_813
 +
 +                 ; clear sprite data at $2800
 +                 TXA
 +
 +loc_81D: ​                   ​
 +                 ​STA ​    ​$2800,​X
 +                 INX
 +                 ​BNE ​    ​loc_81D
 +
 +                 ​LDA ​    #$10
 +                 ​STA ​    $2800
 +
 +                 ; put a black reversed space at start of charline 22
 +                 ​LDA ​    #$A0
 +                 ​STA ​    $770
 +                 ​STA ​    ​$7FB ​     ; sprite pointer
 +                 ​STA ​    $DB70
 +
 +mainloop: ​                   ​
 +
 +                 ; wait for rasterline $e4       
 +                 ​LDA ​    #$E4
 +loc_835: ​                               ​
 +                 ​CMP ​    $D012
 +                 ​BNE ​    ​loc_835
 +
 +                 ; waste some cycles
 +                 ​LDX ​    #3
 +loc_83C:
 +                 DEX
 +                 ​BNE ​    ​loc_83C
 +
 +                 ​LDX ​    #$1C
 +                 ​STX ​    ​$D011 ​    ; $d011=$1c
 +
 +                 ​LDY ​    #$5B
 +                 DEX
 +                 ​STX ​    ​$D011 ​    ; $d011=$1b
 +
 +                 ; 4 cycles more for ntsc
 +                 ​LDA ​    $2A6
 +                 ​BNE ​    ​loc_851
 +
 +                 NOP
 +                 NOP
 +
 +loc_851:
 +                 ​STY ​    ​$D011 ​    ; $d011=$5b (enables ECM)
 +                 ​STX ​    ​$D011 ​    ; $d011=$1b
 +
 +                 ​LDX ​    ​$D01F ​    ; sprite/​background collision (will be either 0 or 8)
 +
 +                 ; display result
 +                 ​LDY ​    #0
 +loc_85C:
 +                 ​LDA ​    ​victype,​x
 +                 ​STA ​    ​$400,​Y
 +                 ​LDA ​    #1
 +                 ​STA ​    ​$D800,​Y
 +                 INX
 +                 INY
 +                 ​CPY ​    #8
 +                 ​BNE ​    ​loc_85C
 +
 +                 ​JMP ​    ​mainloop
 +
 +; ---------------------------------------------------------------------------
 +victype:
 +                 !scr "old vic "
 +                 !scr "new vic "
 +
 +vicregs:
 +                 ​.BYTE ​  ​0,​0,​0,​0,​ 0,​0,​$18,​$E4,​ 0,0,0,0, 0,0,0,0 ; sprite x pos
 +                 ​.BYTE ​  0 ; sprite x msb
 +                 .BYTE $9B ; $d011
 +                 ​.BYTE ​ $E ; $d012
 +                 .BYTE $3E ; $d013 latch x
 +                 .BYTE $6C ; $d014 latch y
 +                 ​.BYTE ​  8 ; $d015 Sprite display Enable
 +                 .BYTE $C8 ; $d016
 +                 ​.BYTE ​  0 ; $d017 Sprites Expand 2x Vertical (Y)
 +                 .BYTE $15 ; $d018 Memory Control Register
 +                 .BYTE $79 ; $d019 Interrupt Request Register (IRR)
 +                 .BYTE $F0 ; $d01a Interrupt Mask Register (IMR)
 +                 .BYTE 0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0,​0
 +</​code>​
base/detect_vic_type.txt ยท Last modified: 2015-04-17 04:31 (external edit)