📄 eeprom.mac
字号:
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 + -