*KERNEL EXAMPLE - BY DAN PINAL
*    KERNEL CHANGES COLOR MIDSCREEN DURING EACH SCAN LINE
PDATA	EQU	$6000
PMBASE	EQU	$D407
SDLSTL	EQU	$230
HPOSP0	EQU	$D000
PCOLR0	EQU	$2C0
COLPMO	EQU	$D012
COLBAK	EQU	$D01A
WSYNC	EQU	$D40A
VCOUNT	EQU	$D40B
IRQEN	EQU	$D20E
NMIEN	EQU	$D40E
VDSLST	EQU	$200
VVBLKD	EQU	$224
SDMCTL	EQU	$22F
DMACTL	EQU	$D400
GRACTL	EQU	$D01D
SETVBV	EQU	$E45C
XITVBV	EQU	$E462
MISSL0	EQU	PDATA+$300
PLAYR0	EQU	MISSL0+$100
PLAYR1	EQU	PLAYR0+$100
PLAYR2	EQU	PLAYR1+$100
PLAYR3	EQU	PLAYR2+$100
STICK0	EQU	$278
*ZERO PAGE EQUATES
VTEMP0	EQU	$F0
VTEMP1	EQU	$F1
POTMP0	EQU	$F8
POTMP1	EQU	$F9
*
	ORG	$4000
*
INIT
	LDA	#>DLIST
	STA	SDLSTL
	LDA	#<DLIST
	STA	SDLSTL+1
	LDA	#>KERNEL	; SET DISPLAY LIST INTERRUPT
	STA	VDSLST
	LDA	#<KERNEL
	STA	VDSLST+1
	LDY	#>VBLANK	; SET VERTICAL BLANK
	LDX	#<VBLANK
	LDA	#$07		; DEFFERRED
	JSR	SETVBV
	LDA	#<PDATA		; INIT PM GRAPHICS
	STA	PMBASE
	LDA	#$3E
	STA	SDMCTL
	LDA	#03
	STA	GRACTL
	LDA	#<MISSL0	; CLEAR PLAYER/MISSILE RAM
	STA	POTMP1
	LDA	#00
	STA	POTMP0
	TAY
	LDX	#$05		; 5 PAGES
CLEARP
	STA	(POTMP0),Y
	INY
	BNE	CLEARP
	INC	POTMP1
	DEX
	BNE	CLEARP
	LDA	#$0E		; WHITE
	STA	PCOLR0
	LDA	#$80
	STA	PLAYRH
	STA	PLAYRV
* ENABLE INTERRUPTS
	LDA	#$C0
	STA	NMIEN
HERE
	JMP	HERE
*
VBLANK
	LDA	#$C0
	STA	NMIEN		; 'REENABLE DLI (FOR REV. A O.S.)
	LDX	STICK0
	CLC
	LDA	PLAYRH
	ADC	HOFF,X
	CMP	#$30
* CHECK IF PAST RIGHT OR LEFT EDGE
	BCC	NEWV
	CMP	#$D0
	BCS	NEWV
	STA	PLAYRH
	STA	HPOSP0 ;TELL ANTIC
NEWV
	CLC
	LDA	PLAYRV
	ADC	VOFF,X
* CHECK IF PAST TOP OR BOTTOM
	CMP	#$22
	BCC	XVBLANK
	CMP	#$D0
	BCS	XVBLANK
	STA	PLAYRV
	STA	VTEMP0
	LDA	#<PLAYR0
	STA	VTEMP1
	LDY	#$13		; 20 ELEMENTS
PDRAW
	LDA	IMAGE,Y
	STA	(VTEMP0),Y
	DEY
	BPL	PDRAW
XVBLANK
	JMP	XITVBV
;
KERNEL
	PHA			; SAVE REGISTERS
	TXA
	PHA
	TYA
	PHA
	LDY	#$70
DALOOP
	STA	WSYNC		; WAIT TILL BEAM OFFSCREEN
	LDA	#$00		; BLACK
	LDX	#$06		; DELAY TIMER
UNTIL
	CPY	VCOUNT		; STILL ON SCREEN?
	BCC	XKERNEL		; LEAVE IF TOO LOW
	STA	COLBAK		; TURN BACKGROND TO BLACK
HANGON
	DEX			; COUNTDOWN FROM 6 TO 0
	BNE	HANGON		; BEAM MID-LINE YET
	LDX	#$44		; PINK
	STX	COLBAK		; TURN SCREEN PINK
	JMP	DALOOP		; GO GET READY FOR NEXT LINE
XKERNEL
	LDA	#$00		; TURN SCREEN BLACK
	STA	COLBAK
	PLA			; RESTORE THE REGISTERS & LEAVE
	TAY
	PLA
	TAX
	PLA
	RTI
IMAGE	DB	$00,$00,$10,$10,$10,$10,$38,$38
	DB	$38,$38,$7C,$7C,$7C,$FE,$FE,$54
	DB	$54,$00,$00
HOFF	DB	$00,$00,$00,$00,$00,$02,$02,$02
	DB	$00,$FE,$FE,$FE,$00,$00,$00,$00
VOFF	DB	$00,$00,$00,$00,$00,$02,$FE,$00
	DB	$00,$02,$FE,$00,$00,$02,$FE,$00
COLOR	DB	$44,$76,$B8,$3A
DLIST	DB	$80,$41
*	DA	DLIST
	DW	DLIST
PLAYRH	DS	1
PLAYRV	DS	1
