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