; Begin
	R0L EQU 0x20
	R0H EQU 0x21
	R1L EQU 0x22
	R1H EQU 0x23
	R2L EQU 0x24
	R2H EQU 0x25
	R3L EQU 0x26
	R3H EQU 0x27
	R4L EQU 0x28
	R4H EQU 0x29
	R5L EQU 0x2A
	R5H EQU 0x2B
	ORG 0x0000
	BCF PCLATH,3
	BCF PCLATH,4
	GOTO L0001
	ORG 0x0004
	RETFIE
L0001:
; 1: Define LCD_DREG = PORTB
; 2: Define LCD_DBIT = 4
; 3: Define LCD_RSREG = PORTB
; 4: Define LCD_RSBIT = 1
; 5: Define LCD_EREG = PORTB
; 6: Define LCD_EBIT = 3
; 7: Lcdinit 0
	BCF 0x06,3
	BCF 0x06,1
	BSF STATUS,RP0
	BCF 0x06,3
	BCF 0x06,1
	MOVLW 0x0F
	ANDWF 0x06,F
	BCF STATUS,RP0
	MOVLW 0x64
	MOVWF R0L
	MOVLW 0x00
	MOVWF R0H
	CALL W001
	MOVLW 0x33
	CALL LC02
	MOVLW 0x33
	CALL LC02
	MOVLW 0x33
	CALL LC02
	MOVLW 0x22
	CALL LC02
	MOVLW 0x28
	CALL LC02
	MOVLW 0x0C
	CALL LC02
	MOVLW 0x01
	CALL LC02
; 8: 
; 9: Lcdout "Hello!"
	MOVLW 0x48
	CALL LC01
	MOVLW 0x65
	CALL LC01
	MOVLW 0x6C
	CALL LC01
	MOVLW 0x6C
	CALL LC01
	MOVLW 0x6F
	CALL LC01
	MOVLW 0x21
	CALL LC01
; 10: End
L0002:	GOTO L0002
; End of program
L0003:	GOTO L0003
; Waitms Routine
W001:	MOVF R0L,F
	BTFSC STATUS,Z
	GOTO W002
	CALL W003
	DECF R0L,F
	NOP
	NOP
	NOP
	NOP
	NOP
	GOTO W001
W002:	MOVF R0H,F
	BTFSC STATUS,Z
	RETURN
	CALL W003
	DECF R0H,F
	DECF R0L,F
	GOTO W001
W003:	MOVLW 0x0C
	MOVWF R2H
W004:	DECFSZ R2H,F
	GOTO W004
	NOP
	NOP
	MOVLW 0x12
	MOVWF R1L
W005:	DECFSZ R1L,F
	GOTO W006
	CALL W007
	CALL W007
	NOP
	NOP
	RETURN
W006:	CALL W007
	GOTO W005
W007:	MOVLW 0x0D
	MOVWF R2L
W008:	DECFSZ R2L,F
	GOTO W008
	NOP
	RETURN
; Waitus Routine - Byte Argument
X001:	MOVLW 0x0A
	SUBWF R4L,F
	BTFSS STATUS,C
	RETURN
	GOTO X002
X002:	MOVLW 0x06
	SUBWF R4L,F
	BTFSS STATUS,C
	RETURN
	GOTO X002
; Waitus Routine - Word Argument
Y001:	MOVLW 0x10
	SUBWF R4L,F
	CLRW
	BTFSS STATUS,C
	ADDLW 0x01
	SUBWF R4H,F
	BTFSS STATUS,C
	RETURN
	GOTO Y002
Y002:	MOVLW 0x0A
	SUBWF R4L,F
	CLRW
	BTFSS STATUS,C
	ADDLW 0x01
	SUBWF R4H,F
	BTFSS STATUS,C
	RETURN
	GOTO Y002
; Lcdout Routine
LC01:	MOVWF R4L
	BSF 0x06,1
	MOVLW 0x0F
	ANDWF 0x06,F
	MOVF R4L,W
	ANDLW 0xF0
	IORWF 0x06,F
	BSF 0x06,3
	NOP
	BCF 0x06,3
	SWAPF R4L,F
	MOVLW 0x0F
	ANDWF 0x06,F
	MOVF R4L,W
	ANDLW 0xF0
	IORWF 0x06,F
	BSF 0x06,3
	NOP
	BCF 0x06,3
	MOVLW 0x64
	MOVWF R4L
	CALL X001
	RETURN
; Lcdcmdout Routine
LC02:	MOVWF R4L
	BCF 0x06,1
	MOVLW 0x0F
	ANDWF 0x06,F
	MOVF R4L,W
	ANDLW 0xF0
	IORWF 0x06,F
	BSF 0x06,3
	NOP
	BCF 0x06,3
	SWAPF R4L,F
	MOVLW 0x0F
	ANDWF 0x06,F
	MOVF R4L,W
	ANDLW 0xF0
	IORWF 0x06,F
	BSF 0x06,3
	NOP
	BCF 0x06,3
	MOVLW 0x88
	MOVWF R4L
	MOVLW 0x13
	MOVWF R4H
	CALL Y001
	RETURN
; End of listing
	END
