====== 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!" 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 ; --------------------------------------------------------------------------- ; 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