⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.mac

📁 calculator code ,use toshibaor nec LSI
💻 MAC
📖 第 1 页 / 共 2 页
字号:
		nop		;V1.34
		nop		;v1.34
		nop		;V1.34
		@DIR_IN
		call	data_in
		ld	d,a	;D8~D15
		call	data_in
		ld	e,a	;D0~D7
		cmp	de,bc		
		j	ne,ee_read_err
		@CS_EQU_0
		nop		;V1.34
		nop		;V1.34
		nop		;v1.34
		@DIR_OUT				;Low level fix
		@ACCES_OFF		;V3.10
		ret
ee_read_err:
		@CS_EQU_0
		ld	a,(EP_TIM)
		j	ne,ee_read_0
		@SEB	(EP_FAIL)
		@ACCES_OFF		;V3.10
		ret

;===============================================================
eeprom_check:	;read the data from EEPROM (00h) and (3fh), and compare with check_code
		;
		ld	(EP_ADDR),EE_TEST1		;check the data in EEPROM register (0000h) 
		call	ee_read
		cmp	bc,(check_code)
		j	ne,eeprom_err
		ld	(EP_ADDR),EE_TEST2		;check the data in EEPROM register(003fh)
		call	ee_read
		cmp	bc,(check_code)
		j	ne,eeprom_err
		clr	cf	;clear cf indicate EEPROM check succeed
		ret
eeprom_err:
		set	cf	;set cf indicate EEPROM check fail
		ret

;====================================================================
ee_to_euro1:
		ld	hl,EURO_RATE1+OFF_MSD
		jp	ee_to_euro
ee_to_euro2:
		ld	hl,EURO_RATE2+OFF_MSD
ee_to_euro:
		ld	w,RATE_L
		mul	w,a
		clr	cf
		add	a,EE_EU1
		ld	(EP_ADDR),a

		jp	ee_to_wkreg
ee_to_tax:
		ld	(EP_ADDR),EE_TAX
		ld	hl,TAXRT+OFF_MSD
		jp	ee_to_wkreg
		
ee_to_tax2:
		ld	(EP_ADDR),EE_TAX2
		ld	hl,TAX2RT+OFF_MSD
		jp	ee_to_wkreg
ee_to_ten:				;
		ld	w,RATE_L	;
		mul	w,a		;
		clr	cf			;
		add	a,EE_EU1	;
		ld	(EP_ADDR),a	;
		call	ten_clear
		ld	hl,TENKEY+1	;TEN_MSD
;====================================================================
;read 8bytes data from EEPROM-->(hl)-->work register buffer
;====================================================================
ee_to_wkreg:	
		@BBC	(EP_FAIL,ee_to_wkreg_ok)
		ret
ee_to_wkreg_ok:
		ld	d,0
		ld	e,RATE_L	;4 word read
ee_to_wkreg0:
		push	de		;backup de register
		call	ee_read		;EPROM-->bc
		pop	de		;popout de register
		ld	wa,bc	;backup bc
		ld	c,d	;pointer for wk buffer-->c
		ld	(hl+c),w	;\
		inc	d		;|wa-->wk buffer
		inc	c
		ld	(hl+c),a	;|increase d point to next buffer
		inc	d		;/
		inc	(EP_ADDR)
		dec	e
		j	ne,ee_to_wkreg0	;finished 8byte read and save into buffer
		;------------adjust wk bufer data is available? digit not over 9, decimal not over 14
		ld	c,0
ee_to_wreg1:
		ld	a,(hl+c)
		ld	w,a		;backup a into w
		and	a,0xf0
		cmp	a,0xa0
		j	lt,ee_to_wreg1_1
		and	w,0x0f		;up nibble cleared to "0"
ee_to_wreg1_1:
		ld	a,w
		and	a,0x0f
		cmp	a,0x0a
		j	lt,ee_to_wreg1_2
		and	w,0x0f
ee_to_wreg1_2:
		ld	(hl+c),w	;update(return) w to wk buffer.	
		inc	c
		cmp	c,OFF_DP
		j	lt,ee_to_wreg1
		;--------adjust the exp, can not over 15. e.g. 0.123456789012
		ld	a,(hl+c)
		cmp	a,14		;exp over 14?
		j	lt,ee_to_wreg2
		ld	(hl+c),0
ee_to_wreg2:
		ret
;==============================================================================
w2_to_eetx2:
		ld	(EP_ADDR),EE_TAX2
		ld	hl,W2_MSD	;the first work buffer address
		jp	wkreg_to_ee
w2_to_eetx:
		ld	(EP_ADDR),EE_TAX
		ld	hl,W2_MSD	;the first work buffer address
		jp	wkreg_to_ee

w2_to_ee:
		ld	w,RATE_L
		mul	w,a
		clr	cf
		add	a,EE_EU1
		ld	(EP_ADDR),a
		ld	hl,W2_MSD	;the first work buffer address
;====================================================================
; write 8byte data into EEPROM
;====================================================================
wkreg_to_ee:
		@BBC	(EP_FAIL,wkreg_to_ee0)
		ret
wkreg_to_ee0:
		call	ee_enable
		ld	e,4		;4 word write
wkreg_to_ee1:
		push	e
		ld	bc,(hl)
		ld	a,b	;exchange b and c
		ld	b,c	;
		ld	c,a	;
		call	ee_write
		inc	(EP_ADDR)
		inc	hl	;point to next two data
		inc	hl	;
		pop	e
		dec	e
		j	ne,wkreg_to_ee1
		call	ee_disable
		ret

;====================================================================
ee_rate_init:
		call	ee_enable
		ld	bc,(check_code)
		ld	(EP_ADDR),EE_TEST1
		call	ee_write
		@BBC	(EP_FAIL,ee_rate_i0a)
		ret
ee_rate_i0a:
		ld	(EP_ADDR),EE_TEST2
		call	ee_write

		ld	(EP_ADDR),EE_EU1
		ld	d,RATE_L
		ld	e,15
		mul	d,e	;e=15 x RATE_L
		ld	hl,ini_rate_tbl
		ld	d,0
ee_rate_i00:
		push	de
		ld	c,d
		ld	de,(hl+c)
		ld	bc,de
		ld	a,c	;\
		ld	c,b	;|exchange b and c
		ld	b,a	;/
		call	ee_write
		inc	(EP_ADDR)
		pop	de
		inc	d	;
		inc	d	;
		dec	e
		j	nz,ee_rate_i00


		ld	(COUNTRY),0	;
		ld	c,(COUNTRY)	;COUNTRY=00 Country code
	;	ld	b,(SYS_FUNC)	;
		ld	(EP_ADDR),EE_COUNTRY
		call	ee_write
		call	ee_disable
		ret
;--------------------------------------------------------V2.04
country_tbl:
		db	0,1,2,3,4,5,6,7,8,9,0,0,10
;=========================================
rate_init_check:	;[0]+[+] to display "r-CC" for hand mode, [C]+[+] for desk mode
		di
		ld	(P9DR),0y10000000	;\'[C]' key out put.

		call	ee_wait_10_nop
		call	ee_wait_10_nop		;V3.12
		call	ee_wait_10_nop		;V3.12
		call	ee_wait_10_nop		;V3.12
		call	ee_wait_10_nop		;v3.12
		
		ld	a,(P1PRD)		;\
		and	a,0y00111111		;|
		cmp	a,0y00001000		;|"C" key?
		j	ne,rate_ini9		;|
		call	ee_wait_10_nop		;/

		ld	a,(P1PRD)		;\
		and	a,0y00111111		;|
		cmp	a,0y00001000		;|
		j	ne,rate_ini9		;/
		;------------------------------------------
		ld	(P9DR),0y00000010	;\'[RATE]'  key out put
		
		call	ee_wait_10_nop
		call	ee_wait_10_nop		;V3.12
		call	ee_wait_10_nop		;V3.12
		call	ee_wait_10_nop		;V3.12
		call	ee_wait_10_nop		;v3.12
		
		ld	a,(P1PRD)		;\
		and	a,0y00111111		;|
		cmp	a,0y00000001		;|
		j	ne,rate_ini9		;|
		call	ee_wait_10_nop		;/

		ld	a,(P1PRD)		;\
		and	a,0y00111111		;|
		cmp	a,0y00000001		;|
		j	ne,rate_ini9		;/
		;------------------------------------------
		@SEB	(RATE_INI)	;V1.30
		ei
		ret
rate_ini9:
		@CLB	(RATE_INI)	;V1.30
		ei
		ret
;================================================V1.34
ee_wait_10_nop: ;10 x 2 =10 cycles 10x0.5us=5us
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	ret
;==============================================================================
country_to_ee:
		@BBS	(EP_FAIL,country_to_ee9)
		ld	bc,(COUNTRY);Country code
		ld	(EP_ADDR),EE_COUNTRY
		call	ee_enable
		call	ee_write
		call	ee_disable
country_to_ee9:
		ret
;==============================================================================
ee_country_read:
		ld	bc,0
		@BBS	(EP_FAIL,ee_country_8)
		ld	(EP_ADDR),EE_COUNTRY
		call	ee_read			;<--country code in register c
		cmp	c,17
		j	lt,ee_country_9
ee_country_8:
		ld	c,0
ee_country_9:
		cmp	b,17
		j	lt,ee_country_10
		ld	b,0
ee_country_10:
		ld	(COUNTRY),bc
		ret
;==============================================================================
;initial value for euro is 1.00, for tax rate is 0.00
;==============================================================================
euro_fix_rate_tbl:
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country1	00,EUr euro
		db	0x00,0x00,0x00,0x00,0x40,0x33,0x99,0x04		;country2	01 bEF belgian Franc
		db	0x00,0x00,0x00,0x00,0x19,0x55,0x83,0x05		;country3	02 dEN Deutche Marks
		db	0x00,0x00,0x00,0x00,0x16,0x63,0x86,0x03		;country4	03 ESP Espania Pesetas
		db	0x00,0x00,0x00,0x00,0x65,0x59,0x57,0x05		;country5	04 FrF French Francs
		db	0x00,0x00,0x00,0x00,0x78,0x75,0x64,0x06		;country6	05 IEP Ireland Pounds
		db	0x00,0x00,0x00,0x00,0x19,0x36,0x27,0x02		;country7	06 ItL Italian Lires
		db	0x00,0x00,0x00,0x00,0x40,0x33,0x99,0x04		;country8	07 LUF Luxembourg Francs
		db	0x00,0x00,0x00,0x00,0x22,0x03,0x71,0x05		;country9	08 nLG Nederland Guiders
		db	0x00,0x00,0x00,0x00,0x13,0x76,0x03,0x04		;country10	09 AtS Austrian Schillings
		db	0x00,0x00,0x00,0x00,0x20,0x04,0x82,0x03		;country11	10 PtE Portuguese Escudos
		db	0x00,0x00,0x00,0x00,0x59,0x45,0x73,0x05		;country12	11 FIN Finnish Markkas
ini_rate_tbl:
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country13	12	CC1
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country14	13	CC2
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country15	14	CC3
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country16	15	CC4
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country17	16	CC5
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country18	17	CC6
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country19	18	CC7
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country20	19	CC8
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country21	20	CC9
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country22	21	CC10
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country23	22	CC11
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country24	23	CC12
		db	0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x05		;country25	24	CC13
		db	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06		;TAX
		db	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06		;TAX2	
check_code:
		db	0x55,0xaa


		end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -