title "MiniPOV"
	LIST	P=16F630, F=INHX8M
#include <p16f630.inc>

	__CONFIG  _INTRC_OSC_NOCLKOUT & _CP_OFF & _MCLRE_OFF & _WDT_OFF 

XTAL		EQU	4000000       ; internal crystal @ 4MHz
IMAGESIZE 	EQU 	0x10

; backup spots in SRAM for registers during interrupt handling
w_bak		equ	0x20
status_bak	equ	0x21
fsr_bak		equ	0x22
counter		equ	0x23
line		equ	0x24
pixout		equ	0x25

	ORG 0x0
	goto Main
	ORG 0x4
	; interrupt handler
	; save status, w, & fsr
	movwf	w_bak
	swapf	STATUS, W
	clrf	STATUS
	movwf	status_bak
	movfw	FSR
	movwf	fsr_bak

	
int_2
	btfss	PIR1, TMR1IF	; check if timer 1 overflowed
	goto	End_IntHandle	; if not, finish up interrupt handling
Timer1
	bcf	PIR1, TMR1IF	; clear timer1 interrupt bit
	movfw	counter
	call	EC; look up the value in the character map
	movwf	line
	clrf	pixout

	btfsc	line, 0
	bsf	pixout, 3

	btfsc	line, 1
	bsf	pixout, 4	

	btfsc	line, 2
	bsf	pixout, 5
	
	btfsc	line, 3
	bsf	pixout, 2	

	btfsc	line, 4
	bsf	pixout, 1

	btfsc	line, 5
	bsf	pixout, 0

	movfw	pixout
	movwf	PORTC		; the pixels are in w

	clrf	pixout
	btfsc	line, 6
	bsf	pixout, 2

	btfsc	line, 7
	bsf	pixout, 5

	movfw	pixout
	movwf	PORTA
		
	incf	counter, 1
	movlw	IMAGESIZE
	subwf	counter, 0
	btfsc	STATUS, Z		; if counter == 10
	clrf	counter		; counter = 0

	movlw	0xAA
	movwf	TMR1L
	movlw	0xF0
	movwf	TMR1H

Timer1_end

End_IntHandle
	movfw	fsr_bak		; restore all the backed up registers
	movwf	FSR
	swapf	status_bak, w
	movwf	STATUS
	swapf	w_bak, 1
	swapf	w_bak, W
	retfie			; return from interrupt

	
Main
	CLRF  PORTA       	; drop all the port A lines low
	MOVLW 0x1         	; set_tris_a(0b000001)
	BSF   0x03,RP0
	MOVWF TRISA
	BCF   0x03,RP0

	CLRF  PORTC
	BSF   0x03,RP0
	CLRF  TRISC			; Port C is all outputs!
	BCF   	0x03,RP0

	; initialize port c with something :P
	movlw	0xA0
	movwf	PORTC

	clrf	counter
	
; enable global interrupts
	BSF	INTCON,GIE
; enable peripheral interrupts
	BSF	INTCON,PEIE
; enable TIMER1 (16bit timer)
	bcf	PIR1, TMR1IF	; clear timer1 interrupt bit first
	bsf	T1CON, TMR1ON	; turn on the timer
	BSF  	0x03,RP0
	bsf	PIE1, TMR1IE	; turn on the interrupt
	BCF   	0x03,RP0
	
; set Timer1 to /8 prescale
	movlw	0xAA
	movwf	TMR1L
	movlw	0xFF
	movwf	TMR1H

MainLoop
	goto	MainLoop

HEART
	addwf	PCL
	retlw	B'00000000';
	retlw	B'00000000';
	retlw	B'11111111';
	retlw	B'10000001';
	retlw	B'10000001';
	retlw	B'10000001';
	retlw	B'11111111';
	retlw	B'00000000';
	retlw	B'00000000';

EC
	addwf	PCL
	retlw	B'00000000';
	retlw	B'11111111';
	retlw	B'10001001';
	retlw	B'10001001';
	retlw	B'10000001';
	retlw	B'00000000';
	retlw	B'00000000';
	retlw	B'00111100';
	retlw	B'01000010';
	retlw	B'10000001';
	retlw	B'10000001';
	retlw	B'01000010';
	retlw	B'00000000';
	retlw	B'00000000';
	retlw	B'00000000';
	retlw	B'00000000';

;.db	B'00000000';


	end
