 TITLE  "LM60 based thermometer"   	  
 List P=PIC16F819, R=DEC	
 INCLUDE "p16f819.inc"

 __CONFIG _CP_OFF & _CCP1_RB2 & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO

;_CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INT_OSC

#define digit1		PORTA,4
#define	digit2		PORTA,7
#define digit3		PORTA,6
#define alarm 		PORTA,3		; alarm pin
#define thresh		0x25		; alarm threschold (in BCD)
#define SCL			2			; I2C clock line setup
#define SDA			1			; I2C data line setup
#define	I2C_port 	PORTA		; I2C port setup	
#define	I2C_conf 	TRISA		; I2C PIC's direction register
#define tableAddr	0xD6
#define	tableSize	0x400 - tableAddr + 1

 CBLOCK 0x70       				; data segment in BANK 0   
 hundreds, tens, units 			; working variables
 n:2, speed, del, temp 
 cnt, dataIO, ACK, mode
 ENDC					

; code segment
 ORG 0     		               	; main code
	bcf		STATUS, RP0			; activate BANK 0
	clrf	PORTA				; initialize PORT A
	clrf	PORTB				; initialize PORT B
	bsf		I2C_port, SCL
	
	bsf    	STATUS, RP0      	; switch to BANK 1	
	movlw	6
	movwf	ADCON1 ^ 0x80		; set all pins on PORTA digital
	movlw	b'00100010'
	movwf	TRISA ^ 0x80		; enable input on some RA pins
	clrf	TRISB ^ 0x80		; enable output on PORTB
	movlw	b'01000000'
	movwf	OSCCON ^ 0x80		; set FOSC = 1 MHz
	bcf		STATUS, RP0			; back to BANK 0

	clrf	hundreds
	clrf	tens
	clrf	units
	clrf	n
	clrf	mode

	movlw	10
	movwf	speed				; temp conversion speed
loop	
	bcf		digit3				; turn off digit3
	movf	hundreds, w
	call	encode7seg			; get next digit
	movwf	PORTB
	bsf		digit1				; turn on digit1
	call	delay

	bcf		digit1				; turn off digit1
	movf	tens, w
	call	encode7seg			; get next digit
	btfsc	hundreds, 4
	 iorlw	b'00010000'			; turn on decimal point
	movwf	PORTB
	bsf		digit2				; turn on digit2
	call	delay

	bcf		digit2				; turn off digit2
	movf	units, w
	call	encode7seg			; get next digit
	movwf	PORTB
	bsf		digit3				; turn on digit3
	call	delay

	decf	speed, f			; check if it is time
	btfss	STATUS, Z			; for a new temp
	 goto	loop				; conversion

	incf	mode, f
	btfsc	mode, 0				; time to do new conversion?
	 call	requestData			; request data for odd values of mode		
	btfss	mode, 0
	 call	getData				; get data for even values of mode
	goto	loop-2


;//////////////// procedures
encode7seg	;	  ecdpgbaf
	andlw	0x0F
	addwf	PCL, f
	retlw	b'11100111'			; code for 0
	retlw	b'01000100'			; code for 1
	retlw	b'10101110'			; code for 2
	retlw	b'01101110'			; code for 3
	retlw	b'01001101'			; code for 4
	retlw	b'01101011'			; code for 5
	retlw	b'11101011'			; code for 6
	retlw	b'01000110'			; code for 7
	retlw	b'11101111'			; code for 8
	retlw	b'01101111'			; code for 9
	retlw	b'00001000'			; code for -
	retlw	0					; blank

requestData	
	bsf		PORTA, 0		
	call	start_I2C			; start communication
	movlw	b'11010000'			; MCP3425 address and write
	movwf	dataIO
	call	write_I2C			; write adress byte
	movlw	b'10000100'			; single conversion request
	movwf	dataIO				; 14-bit, PGA=1
	call	write_I2C			; write configuration byte
	call	stop_I2C			; terminate communication
	bcf		PORTA, 0
	return

getData
	call	start_I2C			; start communication
	movlw	b'11010001'			; MCP3425 address and read
	movwf	dataIO
	call	write_I2C
	clrf	ACK					; setup the ACK signal
	call	read_I2C			; get MSB
	movf	dataIO, w
	movwf	n+1					; save it in n+1
	incf	ACK, f				; setup for NACK signal
	call	read_I2C			; get MSB
	movf	dataIO, w
	movwf	n					; save it in n
	call	stop_I2C			; terminate communication

bin2BCD
	bcf		STATUS, C
	rrf		n+1, f
	rrf		n, f				; downgrade to 12-bit resolution
	movlw	LOW 348				; subtract an offset	
	subwf	n, f
	movlw	HIGH 348
	movwf	temp
	btfss	STATUS, C
	 incf	temp, w
	  subwf	n+1, f
	btfss	n+1, 7
	 goto	$+6

	movlw	0x0A				; display "---" for temperatures below
	movwf	hundreds			; -40C
	movwf	tens
	movwf	units
	return

	movlw	LOW	tableSize		; display "---" for too high temperatures
	subwf	n, w
	movlw	HIGH tableSize
	movwf	temp
	btfss	STATUS, C
	 incf	temp, w
	  subwf	n+1, w
	btfsc	STATUS, C
	 goto	$-13	

	movlw	LOW tableAddr		; compute address of data in flash memory
	addwf	n, f
	movlw	HIGH tableAddr
	btfsc	STATUS, C
	 addlw	1
	addwf	n+1, f

	movf	n, w
	bsf		STATUS,	RP1			; switch to BANK 2
	movf	n+1, w
	movwf	EEADRH ^ 0x100
	movf	n, w
	movwf	EEADR ^ 0x100		; load the address
	bsf		STATUS, RP0			; switch to BANK 3
	bsf		EECON1 ^ 0x180, EEPGD
	bsf		EECON1 ^ 0x180, RD	; load byte from memory
	nop							; time holders 
	nop
	bcf		STATUS, RP0			; back to BANK 2
	movf	EEDATA ^ 0x100, w	; move it to Wreg
	movwf	tens
	movwf	units
	swapf	tens, f	
	movlw	0x0F
	andwf	tens, f
	andwf	units, f
	movf	EEDATH ^ 0x100, w
	movwf	hundreds	
	bcf		STATUS, RP1			; back to BANK 0
	return

delay
	movlw	6
	movwf	del
	movlw	50					; this loop takes 4us*5*50 = 1ms
	addlw	-1					; for PIC @ 1 MHz
	nop
	btfss	STATUS, Z
	 goto 	$-3
	decfsz	del, f
	 goto	$-6
	return

;;;;;;;;;;;;;;;;;;;;;;;implementation of the I2C interface
;       ___        
; DATA:    |_______
;       ______    
; SCK :       |___
start_I2C						; start setup for I2C interface
	movlw	I2C_conf			; setup FSR to point to TRISC
	movwf	FSR
	bsf		INDF, SDA			; pull high SDA and SCL
	bsf		I2C_port, SCL
	nop							; delay slot
	bcf		I2C_port, SDA
	bcf		INDF, SDA			; set data low
	bcf		I2C_port, SDA
	goto	$+1					; wait for slave to detect it
	bcf		I2C_port, SCL		; set clock low
	return
;              ___        
; DATA: ______|   
;           ______    
; SCK : ___|
stop_I2C						; stop setup for I2C interface
	bcf		I2C_port, SCL		; make sure that clock and data
	bcf		I2C_port, SDA
	bcf		INDF, SDA			; lines are low
	goto	$+1
	bsf		I2C_port, SCL		; release clock line
	goto	$+1
	bsf		INDF, SDA			; release data line
	return

write_I2C						; write a byte to the I2C bus
	bcf		I2C_port, SCL		; make sure that clock is low
	bcf		I2C_port, SDA
	movlw	8
	movwf	cnt					; bits counter

w_loop
	bcf		I2C_port, SDA		; preset 0 on data line
	rlf		dataIO, f			; get the rightmost data bit
	btfsc	STATUS, C
	 bsf	INDF, SDA			; set data high
	btfss	STATUS, C
	 bcf	INDF, SDA			; set data low
	bsf		I2C_port, SCL		; raise clock up
	nop
	bcf		I2C_port, SCL		; ... and down
	decfsz	cnt, f
	 goto	w_loop				; repeat this 8 times

	bsf		INDF, SDA			; get ACK from slave		
	goto	$+1					; let slave respond
	bsf		I2C_port, SCL		; clock up
	nop							; slave responds OK (hopefully)
	bcf		I2C_port, SCL		; clock down
	return

read_I2C						; read byte from I2C bus
	bcf		I2C_port, SCL		; make sure that clock is low		
	movlw	8
	movwf	cnt					; bits counter	

r_loop
	bsf		I2C_port, SCL		; clock up
	bcf		STATUS, C
	btfsc	I2C_port, SDA
	 bsf	STATUS, C			; C = data bit
	bcf		I2C_port, SCL		; clock down
	rlf		dataIO, f			; insert it into the data byte
	decfsz	cnt, f
	 goto	r_loop				; repeat this 8 times

	movf	ACK, f				; set Z flag
	bcf		I2C_port, SDA
	btfsc	STATUS, Z
	 bcf	INDF, SDA			; ACK signal
	bsf		I2C_port, SCL		; clock up
	goto	$+1
	goto	$+1
	nop
	bcf		I2C_port, SCL		; clock down
	bsf		INDF, SDA			; release the data line
	return

 ORG tableAddr					; data conversion table
	dw		0x0A40, 0x0A40, 0x0A40, 0x0A40, 0x0A40, 0x0A40, 0x0A40, 0x0A39
	dw		0x0A39, 0x0A39, 0x0A39, 0x0A39, 0x0A39, 0x0A39, 0x0A39, 0x0A39
	dw		0x0A39, 0x0A39, 0x0A39, 0x0A39, 0x0A38, 0x0A38, 0x0A38, 0x0A38
	dw		0x0A38, 0x0A38, 0x0A38, 0x0A38, 0x0A38, 0x0A38, 0x0A38, 0x0A38
	dw		0x0A37, 0x0A37, 0x0A37, 0x0A37, 0x0A37, 0x0A37, 0x0A37, 0x0A37
	dw		0x0A37, 0x0A37, 0x0A37, 0x0A37, 0x0A37, 0x0A36, 0x0A36, 0x0A36
	dw		0x0A36, 0x0A36, 0x0A36, 0x0A36, 0x0A36, 0x0A36, 0x0A36, 0x0A36
	dw		0x0A36, 0x0A35, 0x0A35, 0x0A35, 0x0A35, 0x0A35, 0x0A35, 0x0A35
	dw		0x0A35, 0x0A35, 0x0A35, 0x0A35, 0x0A35, 0x0A35, 0x0A34, 0x0A34
	dw		0x0A34, 0x0A34, 0x0A34, 0x0A34, 0x0A34, 0x0A34, 0x0A34, 0x0A34
	dw		0x0A34, 0x0A34, 0x0A33, 0x0A33, 0x0A33, 0x0A33, 0x0A33, 0x0A33
	dw		0x0A33, 0x0A33, 0x0A33, 0x0A33, 0x0A33, 0x0A33, 0x0A33, 0x0A32
	dw		0x0A32, 0x0A32, 0x0A32, 0x0A32, 0x0A32, 0x0A32, 0x0A32, 0x0A32
	dw		0x0A32, 0x0A32, 0x0A32, 0x0A31, 0x0A31, 0x0A31, 0x0A31, 0x0A31
	dw		0x0A31, 0x0A31, 0x0A31, 0x0A31, 0x0A31, 0x0A31, 0x0A31, 0x0A31
	dw		0x0A30, 0x0A30, 0x0A30, 0x0A30, 0x0A30, 0x0A30, 0x0A30, 0x0A30
	dw		0x0A30, 0x0A30, 0x0A30, 0x0A30, 0x0A29, 0x0A29, 0x0A29, 0x0A29
	dw		0x0A29, 0x0A29, 0x0A29, 0x0A29, 0x0A29, 0x0A29, 0x0A29, 0x0A29
	dw		0x0A29, 0x0A28, 0x0A28, 0x0A28, 0x0A28, 0x0A28, 0x0A28, 0x0A28
	dw		0x0A28, 0x0A28, 0x0A28, 0x0A28, 0x0A28, 0x0A27, 0x0A27, 0x0A27
	dw		0x0A27, 0x0A27, 0x0A27, 0x0A27, 0x0A27, 0x0A27, 0x0A27, 0x0A27
	dw		0x0A27, 0x0A27, 0x0A26, 0x0A26, 0x0A26, 0x0A26, 0x0A26, 0x0A26
	dw		0x0A26, 0x0A26, 0x0A26, 0x0A26, 0x0A26, 0x0A26, 0x0A25, 0x0A25
	dw		0x0A25, 0x0A25, 0x0A25, 0x0A25, 0x0A25, 0x0A25, 0x0A25, 0x0A25
	dw		0x0A25, 0x0A25, 0x0A25, 0x0A24, 0x0A24, 0x0A24, 0x0A24, 0x0A24
	dw		0x0A24, 0x0A24, 0x0A24, 0x0A24, 0x0A24, 0x0A24, 0x0A24, 0x0A23
	dw		0x0A23, 0x0A23, 0x0A23, 0x0A23, 0x0A23, 0x0A23, 0x0A23, 0x0A23
	dw		0x0A23, 0x0A23, 0x0A23, 0x0A23, 0x0A22, 0x0A22, 0x0A22, 0x0A22
	dw		0x0A22, 0x0A22, 0x0A22, 0x0A22, 0x0A22, 0x0A22, 0x0A22, 0x0A22
	dw		0x0A21, 0x0A21, 0x0A21, 0x0A21, 0x0A21, 0x0A21, 0x0A21, 0x0A21
	dw		0x0A21, 0x0A21, 0x0A21, 0x0A21, 0x0A21, 0x0A20, 0x0A20, 0x0A20
	dw		0x0A20, 0x0A20, 0x0A20, 0x0A20, 0x0A20, 0x0A20, 0x0A20, 0x0A20
	dw		0x0A20, 0x0A19, 0x0A19, 0x0A19, 0x0A19, 0x0A19, 0x0A19, 0x0A19
	dw		0x0A19, 0x0A19, 0x0A19, 0x0A19, 0x0A19, 0x0A19, 0x0A18, 0x0A18
	dw		0x0A18, 0x0A18, 0x0A18, 0x0A18, 0x0A18, 0x0A18, 0x0A18, 0x0A18
	dw		0x0A18, 0x0A18, 0x0A17, 0x0A17, 0x0A17, 0x0A17, 0x0A17, 0x0A17
	dw		0x0A17, 0x0A17, 0x0A17, 0x0A17, 0x0A17, 0x0A17, 0x0A17, 0x0A16
	dw		0x0A16, 0x0A16, 0x0A16, 0x0A16, 0x0A16, 0x0A16, 0x0A16, 0x0A16
	dw		0x0A16, 0x0A16, 0x0A16, 0x0A15, 0x0A15, 0x0A15, 0x0A15, 0x0A15
	dw		0x0A15, 0x0A15, 0x0A15, 0x0A15, 0x0A15, 0x0A15, 0x0A15, 0x0A15
	dw		0x0A14, 0x0A14, 0x0A14, 0x0A14, 0x0A14, 0x0A14, 0x0A14, 0x0A14
	dw		0x0A14, 0x0A14, 0x0A14, 0x0A14, 0x0A13, 0x0A13, 0x0A13, 0x0A13
	dw		0x0A13, 0x0A13, 0x0A13, 0x0A13, 0x0A13, 0x0A13, 0x0A13, 0x0A13
	dw		0x0A13, 0x0A12, 0x0A12, 0x0A12, 0x0A12, 0x0A12, 0x0A12, 0x0A12
	dw		0x0A12, 0x0A12, 0x0A12, 0x0A12, 0x0A12, 0x0A11, 0x0A11, 0x0A11
	dw		0x0A11, 0x0A11, 0x0A11, 0x0A11, 0x0A11, 0x0A11, 0x0A11, 0x0A11
	dw		0x0A11, 0x0A11, 0x0A10, 0x0A10, 0x0A10, 0x0A10, 0x0A10, 0x0A10
	dw		0x1A99, 0x1A98, 0x1A97, 0x1A97, 0x1A96, 0x1A95, 0x1A94, 0x1A93
	dw		0x1A93, 0x1A92, 0x1A91, 0x1A90, 0x1A89, 0x1A89, 0x1A88, 0x1A87
	dw		0x1A86, 0x1A85, 0x1A85, 0x1A84, 0x1A83, 0x1A82, 0x1A81, 0x1A81
	dw		0x1A80, 0x1A79, 0x1A78, 0x1A77, 0x1A77, 0x1A76, 0x1A75, 0x1A74
	dw		0x1A73, 0x1A73, 0x1A72, 0x1A71, 0x1A70, 0x1A69, 0x1A69, 0x1A68
	dw		0x1A67, 0x1A66, 0x1A65, 0x1A65, 0x1A64, 0x1A63, 0x1A62, 0x1A61
	dw		0x1A61, 0x1A60, 0x1A59, 0x1A58, 0x1A57, 0x1A57, 0x1A56, 0x1A55
	dw		0x1A54, 0x1A53, 0x1A53, 0x1A52, 0x1A51, 0x1A50, 0x1A49, 0x1A49
	dw		0x1A48, 0x1A47, 0x1A46, 0x1A45, 0x1A45, 0x1A44, 0x1A43, 0x1A42
	dw		0x1A41, 0x1A41, 0x1A40, 0x1A39, 0x1A38, 0x1A37, 0x1A37, 0x1A36
	dw		0x1A35, 0x1A34, 0x1A33, 0x1A33, 0x1A32, 0x1A31, 0x1A30, 0x1A29
	dw		0x1A29, 0x1A28, 0x1A27, 0x1A26, 0x1A25, 0x1A25, 0x1A24, 0x1A23
	dw		0x1A22, 0x1A21, 0x1A21, 0x1A20, 0x1A19, 0x1A18, 0x1A17, 0x1A17
	dw		0x1A16, 0x1A15, 0x1A14, 0x1A13, 0x1A13, 0x1A12, 0x1A11, 0x1A10
	dw		0x1A09, 0x1A09, 0x1A08, 0x1A07, 0x1A06, 0x1A05, 0x1A05, 0x1A04
	dw		0x1A03, 0x1A02, 0x1A01, 0x1A01, 0x1B00, 0x1B01, 0x1B02, 0x1B03
	dw		0x1B03, 0x1B04, 0x1B05, 0x1B06, 0x1B07, 0x1B07, 0x1B08, 0x1B09
	dw		0x1B10, 0x1B11, 0x1B11, 0x1B12, 0x1B13, 0x1B14, 0x1B15, 0x1B15
	dw		0x1B16, 0x1B17, 0x1B18, 0x1B19, 0x1B19, 0x1B20, 0x1B21, 0x1B22
	dw		0x1B23, 0x1B23, 0x1B24, 0x1B25, 0x1B26, 0x1B27, 0x1B27, 0x1B28
	dw		0x1B29, 0x1B30, 0x1B31, 0x1B31, 0x1B32, 0x1B33, 0x1B34, 0x1B35
	dw		0x1B35, 0x1B36, 0x1B37, 0x1B38, 0x1B39, 0x1B39, 0x1B40, 0x1B41
	dw		0x1B42, 0x1B43, 0x1B43, 0x1B44, 0x1B45, 0x1B46, 0x1B47, 0x1B47
	dw		0x1B48, 0x1B49, 0x1B50, 0x1B51, 0x1B51, 0x1B52, 0x1B53, 0x1B54
	dw		0x1B55, 0x1B55, 0x1B56, 0x1B57, 0x1B58, 0x1B59, 0x1B59, 0x1B60
	dw		0x1B61, 0x1B62, 0x1B63, 0x1B63, 0x1B64, 0x1B65, 0x1B66, 0x1B67
	dw		0x1B67, 0x1B68, 0x1B69, 0x1B70, 0x1B71, 0x1B71, 0x1B72, 0x1B73
	dw		0x1B74, 0x1B75, 0x1B75, 0x1B76, 0x1B77, 0x1B78, 0x1B79, 0x1B79
	dw		0x1B80, 0x1B81, 0x1B82, 0x1B83, 0x1B83, 0x1B84, 0x1B85, 0x1B86
	dw		0x1B87, 0x1B87, 0x1B88, 0x1B89, 0x1B90, 0x1B91, 0x1B91, 0x1B92
	dw		0x1B93, 0x1B94, 0x1B95, 0x1B95, 0x1B96, 0x1B97, 0x1B98, 0x1B99
	dw		0x1B99, 0x1100, 0x1101, 0x1102, 0x1103, 0x1103, 0x1104, 0x1105
	dw		0x1106, 0x1107, 0x1107, 0x1108, 0x1109, 0x1110, 0x1111, 0x1111
	dw		0x1112, 0x1113, 0x1114, 0x1115, 0x1115, 0x1116, 0x1117, 0x1118
	dw		0x1119, 0x1119, 0x1120, 0x1121, 0x1122, 0x1123, 0x1123, 0x1124
	dw		0x1125, 0x1126, 0x1127, 0x1127, 0x1128, 0x1129, 0x1130, 0x1131
	dw		0x1131, 0x1132, 0x1133, 0x1134, 0x1135, 0x1135, 0x1136, 0x1137
	dw		0x1138, 0x1139, 0x1139, 0x1140, 0x1141, 0x1142, 0x1143, 0x1143
	dw		0x1144, 0x1145, 0x1146, 0x1147, 0x1147, 0x1148, 0x1149, 0x1150
	dw		0x1151, 0x1151, 0x1152, 0x1153, 0x1154, 0x1155, 0x1155, 0x1156
	dw		0x1157, 0x1158, 0x1159, 0x1159, 0x1160, 0x1161, 0x1162, 0x1163
	dw		0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1167, 0x1168, 0x1169
	dw		0x1170, 0x1171, 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0x1175
	dw		0x1176, 0x1177, 0x1178, 0x1179, 0x1179, 0x1180, 0x1181, 0x1182
	dw		0x1183, 0x1183, 0x1184, 0x1185, 0x1186, 0x1187, 0x1187, 0x1188
	dw		0x1189, 0x1190, 0x1191, 0x1191, 0x1192, 0x1193, 0x1194, 0x1195
	dw		0x1195, 0x1196, 0x1197, 0x1198, 0x1199, 0x1199, 0x1200, 0x1201
	dw		0x1202, 0x1203, 0x1203, 0x1204, 0x1205, 0x1206, 0x1207, 0x1207
	dw		0x1208, 0x1209, 0x1210, 0x1211, 0x1211, 0x1212, 0x1213, 0x1214
	dw		0x1215, 0x1215, 0x1216, 0x1217, 0x1218, 0x1219, 0x1219, 0x1220
	dw		0x1221, 0x1222, 0x1223, 0x1223, 0x1224, 0x1225, 0x1226, 0x1227
	dw		0x1227, 0x1228, 0x1229, 0x1230, 0x1231, 0x1231, 0x1232, 0x1233
	dw		0x1234, 0x1235, 0x1235, 0x1236, 0x1237, 0x1238, 0x1239, 0x1239
	dw		0x1240, 0x1241, 0x1242, 0x1243, 0x1243, 0x1244, 0x1245, 0x1246
	dw		0x1247, 0x1247, 0x1248, 0x1249, 0x1250, 0x1251, 0x1251, 0x1252
	dw		0x1253, 0x1254, 0x1255, 0x1255, 0x1256, 0x1257, 0x1258, 0x1259
	dw		0x1259, 0x1260, 0x1261, 0x1262, 0x1263, 0x1263, 0x1264, 0x1265
	dw		0x1266, 0x1267, 0x1267, 0x1268, 0x1269, 0x1270, 0x1271, 0x1271
	dw		0x1272, 0x1273, 0x1274, 0x1275, 0x1275, 0x1276, 0x1277, 0x1278
	dw		0x1279, 0x1279, 0x1280, 0x1281, 0x1282, 0x1283, 0x1283, 0x1284
	dw		0x1285, 0x1286, 0x1287, 0x1287, 0x1288, 0x1289, 0x1290, 0x1291
	dw		0x1291, 0x1292, 0x1293, 0x1294, 0x1295, 0x1295, 0x1296, 0x1297
	dw		0x1298, 0x1299, 0x1299, 0x1300, 0x1301, 0x1302, 0x1303, 0x1303
	dw		0x1304, 0x1305, 0x1306, 0x1307, 0x1307, 0x1308, 0x1309, 0x1310
	dw		0x1311, 0x1311, 0x1312, 0x1313, 0x1314, 0x1315, 0x1315, 0x1316
	dw		0x1317, 0x1318, 0x1319, 0x1319, 0x1320, 0x1321, 0x1322, 0x1323
	dw		0x1323, 0x1324, 0x1325, 0x1326, 0x1327, 0x1327, 0x1328, 0x1329
	dw		0x1330, 0x1331, 0x1331, 0x1332, 0x1333, 0x1334, 0x1335, 0x1335
	dw		0x1336, 0x1337, 0x1338, 0x1339, 0x1339, 0x1340, 0x1341, 0x1342
	dw		0x1343, 0x1343, 0x1344, 0x1345, 0x1346, 0x1347, 0x1347, 0x1348
	dw		0x1349, 0x1350, 0x1351, 0x1351, 0x1352, 0x1353, 0x1354, 0x1355
	dw		0x1355, 0x1356, 0x1357, 0x1358, 0x1359, 0x1359, 0x1360, 0x1361
	dw		0x1362, 0x1363, 0x1363, 0x1364, 0x1365, 0x1366, 0x1367, 0x1367
	dw		0x1368, 0x1369, 0x1370, 0x1371, 0x1371, 0x1372, 0x1373, 0x1374
	dw		0x1375, 0x1375, 0x1376, 0x1377, 0x1378, 0x1379, 0x1379, 0x1380
	dw		0x1381, 0x1382, 0x1383, 0x1383, 0x1384, 0x1385, 0x1386, 0x1387
	dw		0x1387, 0x1388, 0x1389, 0x1390, 0x1391, 0x1391, 0x1392, 0x1393
	dw		0x1394, 0x1395, 0x1395, 0x1396, 0x1397, 0x1398, 0x1399, 0x1399
	dw		0x1400, 0x1401, 0x1402, 0x1403, 0x1403, 0x1404, 0x1405, 0x1406
	dw		0x1407, 0x1407, 0x1408, 0x1409, 0x1410, 0x1411, 0x1411, 0x1412
	dw		0x1413, 0x1414, 0x1415, 0x1415, 0x1416, 0x1417, 0x1418, 0x1419
	dw		0x1419, 0x1420, 0x1421, 0x1422, 0x1423, 0x1423, 0x1424, 0x1425
	dw		0x1426, 0x1427, 0x1427, 0x1428, 0x1429, 0x1430, 0x1431, 0x1431
	dw		0x1432, 0x1433, 0x1434, 0x1435, 0x1435, 0x1436, 0x1437, 0x1438
	dw		0x1439, 0x1439, 0x1440, 0x1441, 0x1442, 0x1443, 0x1443, 0x1444
	dw		0x1445, 0x1446, 0x1447, 0x1447, 0x1448, 0x1449, 0x1450, 0x1451
	dw		0x1451, 0x1452, 0x1453, 0x1454, 0x1455, 0x1455, 0x1456, 0x1457
	dw		0x1458, 0x1459, 0x1459, 0x1460, 0x1461, 0x1462, 0x1463, 0x1463
	dw		0x1464, 0x1465, 0x1466, 0x1467, 0x1467, 0x1468, 0x1469, 0x1470
	dw		0x1471, 0x1471, 0x1472, 0x1473, 0x1474, 0x1475, 0x1475, 0x1476
	dw		0x1477, 0x1478, 0x1479, 0x1479, 0x1480, 0x1481, 0x1482, 0x1483
	dw		0x1483, 0x1484, 0x1485, 0x1486, 0x1487, 0x1487, 0x1488, 0x1489
	dw		0x1490, 0x1491, 0x1491, 0x1492, 0x1493, 0x1494, 0x1495, 0x1495
	dw		0x1496, 0x1497, 0x1498, 0x1499, 0x1499, 0x1500, 0x1501, 0x1502
	dw		0x1503, 0x1503, 0x1504, 0x1505, 0x1506, 0x1507, 0x1507, 0x1508
	dw		0x1509, 0x1510, 0x1511, 0x1511, 0x1512, 0x1513, 0x1514, 0x1515
	dw		0x1515, 0x1516, 0x1517, 0x1518, 0x1519, 0x1519, 0x1520, 0x1521
	dw		0x1522, 0x1523, 0x1523, 0x1524, 0x1525, 0x1526, 0x1527, 0x1527
	dw		0x1528, 0x1529, 0x1530, 0x1531, 0x1531, 0x1532, 0x1533, 0x1534
	dw		0x1535, 0x1535, 0x1536, 0x1537, 0x1538, 0x1539, 0x1539, 0x1540
	dw		0x1541, 0x1542, 0x1543, 0x1543, 0x1544, 0x1545, 0x1546, 0x1547
	dw		0x1547, 0x1548, 0x1549, 0x1550, 0x1551, 0x1552, 0x1552, 0x1553
	dw		0x1554, 0x1555, 0x1556, 0x1556, 0x1557, 0x1558, 0x1559, 0x1560
	dw		0x1560, 0x1561, 0x1562, 0x1563, 0x1564, 0x1564, 0x1565, 0x1566
	dw		0x1567, 0x1568, 0x1568, 0x1569, 0x1570, 0x1571, 0x1572, 0x1572
	dw		0x1573, 0x1574, 0x1575, 0x1576, 0x1576, 0x1577, 0x1578, 0x1579
	dw		0x1580, 0x1580, 0x1581, 0x1582, 0x1583, 0x1584, 0x1584, 0x1585
	dw		0x1586, 0x1587, 0x1588, 0x1588, 0x1589, 0x1590, 0x1591, 0x1592
	dw		0x1592, 0x1593, 0x1594, 0x1595, 0x1596, 0x1596, 0x1597, 0x1598
	dw		0x1599, 0x1600, 0x1600, 0x1601, 0x1602, 0x1603, 0x1604, 0x1604
	dw		0x1605, 0x1606, 0x1607, 0x1608, 0x1608, 0x1609, 0x1610, 0x1611
	dw		0x1612, 0x1612, 0x1613, 0x1614, 0x1615, 0x1616, 0x1616, 0x1617
	dw		0x1618, 0x1619, 0x1620, 0x1620, 0x1621, 0x1622, 0x1623, 0x1624
	dw		0x1624, 0x1625, 0x1626, 0x1627, 0x1628, 0x1628, 0x1629, 0x1630
	dw		0x1631, 0x1632, 0x1632, 0x1633, 0x1634, 0x1635, 0x1636, 0x1636
	dw		0x1637, 0x1638, 0x1639, 0x1640, 0x1640, 0x1641, 0x1642, 0x1643
	dw		0x1644, 0x1644, 0x1645, 0x1646, 0x1647, 0x1648, 0x1648, 0x1649
	dw		0x1650, 0x1651, 0x1652, 0x1652, 0x1653, 0x1654, 0x1655, 0x1656
	dw		0x1656, 0x1657, 0x1658, 0x1659, 0x1660, 0x1660, 0x1661, 0x1662
	dw		0x1663, 0x1664, 0x1664, 0x1665, 0x1666, 0x1667, 0x1668, 0x1668
	dw		0x1669, 0x1670, 0x1671, 0x1672, 0x1672, 0x1673, 0x1674, 0x1675
	dw		0x1676, 0x1676, 0x1677, 0x1678, 0x1679, 0x1680, 0x1680, 0x1681
	dw		0x1682, 0x1683, 0x1684, 0x1684, 0x1685, 0x1686, 0x1687, 0x1688
	dw		0x1688, 0x1689, 0x1690, 0x1691, 0x1692, 0x1692, 0x1693, 0x1694
	dw		0x1695, 0x1696, 0x1696, 0x1697, 0x1698, 0x1699, 0x1700, 0x1700
	dw		0x1701, 0x1702, 0x1703, 0x1704, 0x1704, 0x1705, 0x1706, 0x1707
	dw		0x1708, 0x1708, 0x1709, 0x1710, 0x1711, 0x1712, 0x1712, 0x1713
	dw		0x1714, 0x1715, 0x1716, 0x1716, 0x1717, 0x1718, 0x1719, 0x1720
	dw		0x1720, 0x1721, 0x1722, 0x1723, 0x1724, 0x1724, 0x1725, 0x1726
	dw		0x1727, 0x1728, 0x1728, 0x1729, 0x1730, 0x1731, 0x1732, 0x1732
	dw		0x1733, 0x1734, 0x1735, 0x1736, 0x1736, 0x1737, 0x1738, 0x1739
	dw		0x1740, 0x1740, 0x1741, 0x1742, 0x1743, 0x1744, 0x1744, 0x1745
	dw		0x1746, 0x1747, 0x1748, 0x1748, 0x1749, 0x1750, 0x1751, 0x1752
	dw		0x1752, 0x1753, 0x1754, 0x1755, 0x1756, 0x1756, 0x1757, 0x1758
	dw		0x1759, 0x1760, 0x1760, 0x1761, 0x1762, 0x1763, 0x1764, 0x1764
	dw		0x1765, 0x1766, 0x1767, 0x1768, 0x1768, 0x1769, 0x1770, 0x1771
	dw		0x1772, 0x1772, 0x1773, 0x1774, 0x1775, 0x1776, 0x1776, 0x1777
	dw		0x1778, 0x1779, 0x1780, 0x1780, 0x1781, 0x1782, 0x1783, 0x1784
	dw		0x1784, 0x1785, 0x1786, 0x1787, 0x1788, 0x1788, 0x1789, 0x1790
	dw		0x1791, 0x1792, 0x1792, 0x1793, 0x1794, 0x1795, 0x1796, 0x1796
	dw		0x1797, 0x1798, 0x1799, 0x1800, 0x1800, 0x1801, 0x1802, 0x1803
	dw		0x1804, 0x1804, 0x1805, 0x1806, 0x1807, 0x1808, 0x1808, 0x1809
	dw		0x1810, 0x1811, 0x1812, 0x1812, 0x1813, 0x1814, 0x1815, 0x1816
	dw		0x1816, 0x1817, 0x1818, 0x1819, 0x1820, 0x1820, 0x1821, 0x1822
	dw		0x1823, 0x1824, 0x1824, 0x1825, 0x1826, 0x1827, 0x1828, 0x1828
	dw		0x1829, 0x1830, 0x1831, 0x1832, 0x1832, 0x1833, 0x1834, 0x1835
	dw		0x1836, 0x1836, 0x1837, 0x1838, 0x1839, 0x1840, 0x1840, 0x1841
	dw		0x1842, 0x1843, 0x1844, 0x1844, 0x1845, 0x1846, 0x1847, 0x1848
	dw		0x1848, 0x1849, 0x1850, 0x1851, 0x1852, 0x1852, 0x1853, 0x1854
	dw		0x1855, 0x1856, 0x1856, 0x1857, 0x1858, 0x1859, 0x1860, 0x1860
	dw		0x1861, 0x1862, 0x1863, 0x1864, 0x1864, 0x1865, 0x1866, 0x1867
	dw		0x1868, 0x1868, 0x1869, 0x1870, 0x1871, 0x1872, 0x1872, 0x1873
	dw		0x1874, 0x1875, 0x1876, 0x1876, 0x1877, 0x1878, 0x1879, 0x1880
	dw		0x1880, 0x1881, 0x1882, 0x1883, 0x1884, 0x1884, 0x1885, 0x1886
	dw		0x1887, 0x1888, 0x1888, 0x1889, 0x1890, 0x1891, 0x1892, 0x1892
	dw		0x1893, 0x1894, 0x1895, 0x1896, 0x1896, 0x1897, 0x1898, 0x1899
	dw		0x1900, 0x1900, 0x1901, 0x1902, 0x1903, 0x1904, 0x1904, 0x1905
	dw		0x1906, 0x1907, 0x1908, 0x1908, 0x1909, 0x1910, 0x1911, 0x1912
	dw		0x1912, 0x1913, 0x1914, 0x1915, 0x1916, 0x1916, 0x1917, 0x1918
	dw		0x1919, 0x1920, 0x1920, 0x1921, 0x1922, 0x1923, 0x1924, 0x1924
	dw		0x1925, 0x1926, 0x1927, 0x1928, 0x1928, 0x1929, 0x1930, 0x1931
	dw		0x1932, 0x1932, 0x1933, 0x1934, 0x1935, 0x1936, 0x1936, 0x1937
	dw		0x1938, 0x1939, 0x1940, 0x1940, 0x1941, 0x1942, 0x1943, 0x1944
	dw		0x1944, 0x1945, 0x1946, 0x1947, 0x1948, 0x1948, 0x1949, 0x1950
	dw		0x1951, 0x1952, 0x1952, 0x1953, 0x1954, 0x1955, 0x1956, 0x1956
	dw		0x1957, 0x1958, 0x1959, 0x1960, 0x1960, 0x1961, 0x1962, 0x1963
	dw		0x1964, 0x1964, 0x1965, 0x1966, 0x1967, 0x1968, 0x1968, 0x1969
	dw		0x1970, 0x1971, 0x1972, 0x1972, 0x1973, 0x1974, 0x1975, 0x1976
	dw		0x1976, 0x1977, 0x1978, 0x1979, 0x1980, 0x1980, 0x1981, 0x1982
	dw		0x1983, 0x1984, 0x1984, 0x1985, 0x1986, 0x1987, 0x1988, 0x1988
	dw		0x1989, 0x1990, 0x1991, 0x1992, 0x1992, 0x1993, 0x1994, 0x1995
	dw		0x1996, 0x1996, 0x1997, 0x1998, 0x1999, 0x1100, 0x1100, 0x1100
	dw		0x1100, 0x1100, 0x1100, 0x1100, 0x1101, 0x1101, 0x1101, 0x1101
	dw		0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101, 0x1101
	dw		0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1102
	dw		0x1102, 0x1102, 0x1102, 0x1102, 0x1102, 0x1103, 0x1103, 0x1103
	dw		0x1103, 0x1103, 0x1103, 0x1103, 0x1103, 0x1103, 0x1103, 0x1103
	dw		0x1103, 0x1104, 0x1104, 0x1104, 0x1104, 0x1104, 0x1104, 0x1104
	dw		0x1104, 0x1104, 0x1104, 0x1104, 0x1104, 0x1104, 0x1105, 0x1105
	dw		0x1105, 0x1105, 0x1105, 0x1105, 0x1105, 0x1105, 0x1105, 0x1105
	dw		0x1105, 0x1105, 0x1106, 0x1106, 0x1106, 0x1106, 0x1106, 0x1106
	dw		0x1106, 0x1106, 0x1106, 0x1106, 0x1106, 0x1106, 0x1106, 0x1107
	dw		0x1107, 0x1107 
 END
