FLOATING TO HEX
;ENTER: @R0: high BYTE(2B)
;EXIT: @R0: high BYTE(2B)
;!!!!!!!! THE NUMBER SHOULD BE NORMALIZED
SFTH: inc r0
inc r0
MOV A,@R0
CPL A
INC A
dec R0
dec r0
ADD A,#16
JZ SFT4
jnc sft5
MOV b,A
SFT3: MOV A,@R0
CLR C
RRC A
MOV @R0,A
INC R0
MOV A,@R0
RRC A
MOV @R0,A
dec r0
DJNZ b,SFT3
CLR A
sft4: RET
SFT5: inc a
jnz sft7
mov a,@r0
jnz sft8
inc r0
mov a,@r0
jz sft6
dec r0
sft8:
mov b,#10
mov a,@r0
div ab
mov @r0,a
inc r0
mov a,@r0
anl a,#0f0h
orl a,b
swap a
mov b,#10
div ab
swap a
xch a,@r0
anl a,#0fh
swap a
orl a,b
swap a
mov b,#10
div ab
orl a,@r0
mov @r0,a
clr c
mov a,@r0
rlc a
mov @r0,a
dec r0
mov a,@r0
rlc a
mov @r0,a
inc r0
mov a,@r0
add a,total+2
mov total+2,a
dec r0
mov a,@r0
addc a,total+1
mov total+1,a
clr a
addc a,total
mov total,a
mov cn_s_h,#0
mov cn_s_l,#0
sft7: clr A
MOV @R0,A
inc R0
MOV @R0,a
sft6: dec r0
RET
;-----------------------------------
;FLOATING MULTIPLICATION RESULT 2B
;the float number(x) is arranged in interal ram as flow
;x addr is adx then
;high byte in (adx),low byte in (adx+1),power byte in (adx+2)
;ENTER: @R0 2ND MULTIPLIER POWER BYTE
; R5--R7 stored one 1st MULTIPLIER (use scop to copy)
;EXIT: PRODUCT POWER STORED IN R5--R7(2 BETY R5:POWER BYTE,R6:HIGH BYTE)
;
SFM2: inc R0
LCALL SM2U
INC R0
INC R0
MOV A,@R0
ADD A,R7
MOV R7,A
RET
;-----------------------------------
;2 BETY MULTIPLICATION (R7R6*R5R4)
;R6R5*@R1+-=(R6z+zR5)*(@R1+z*z@R1-)
; =(R6@R1+zz)+(zR6@R1-z)+(zR5@R1+z)+(zzR5@R1-)
;ENTER: @R0 1ST MULTIPLIER LOW BETY, @R1 2ND MULTIPLIER
;use area 1 as work area;R5--R7 stored one 1st MULTIPLIER (use scop to copy)
;EXIT: PRODUCT STORED IN R3--R7(R7:POWER BYTE,R3:HIGH BYTE R7:0FH)
SM2U: MOV A,R6
MOV B,@R0
MUL AB
MOV R4,A ;4
MOV R3,B ;3
MOV A,R6
DEC R0
MOV B,@R0
MUL AB
ADD A,R3 ;3 +
MOV R3,A
MOV A,B
ADDC A,#00H ;2
MOV R2,A ;2
MOV A,R4
MOV R6,A ;4 OK
MOV R4,#0 ;1
JNC SM21
INC R4
SM21: MOV A,R5
INC R0
MOV B,@R0
MUL AB
ADD A,R3 ;3 + OK
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A ;2+
JNC SM22
INC R4 ;1
SM22: MOV A,R5
DEC R0
MOV B,@R0
MUL AB
ADD A,R2 ;2 + OK
XCH A,R4
ADDC A,B ; 1
XCH A,R3
MOV R5,A
RET
;-----------------------------------
;FLOATING NUMBER NORMALIZATION
;ENTER:@R0:high BETY
;EXIT: @R0:high BETY
SBAG: MOV b,#16
MOV A,@R0
SBA1: JB ACC.7,SBA2
CLR C
INC R0
MOV A,@R0
RLC A
MOV @R0,A
DEC R0
MOV A,@R0
RLC A
MOV @R0,A
DJNZ b,SBA1
SBA2: MOV A,b
ADD A,#0F0H
INC R0
INC R0
ADD A,@R0
MOV @R0,A
dec r0
dec r0
RET
;----------------------
;BINERY NUMBER TO FLOATING
;ENTER: @R0:high BETY
;EXIT: @R0:high BETY
SBTF: INC R0
inc r0
MOV @R0,#16
dec r0
dec r0
LCALL SBAG
RET
;FLOATING NUMBER NORMALIZATION 4BETY
;ENTER:@R0:VALID NUMBER HIGH BYTE
;EXIT: @R0:high BETY
SBEG: MOV A,@R0
MOV b,#32
SBE1: JB ACC.7,SBE2
CLR C
INC R0
INC R0
INC R0
MOV A,@R0
RLC A
MOV @R0,A
DEC R0
MOV A,@R0
RLC A
MOV @R0,A
DEC R0
MOV A,@R0
RLC A
MOV @R0,A
DEC R0
MOV A,@R0
RLC A
MOV @R0,A
DJNZ b,SBE1
SBE2: mov a,r0
add a,#4
mov r0,a
MOV A,b
ADD A,#0E0H
ADD A,@R0
MOV @R0,A
dec R0
dec R0
dec R0
dec R0
RET
;---------------------
;4 BETY TO 2BETY
;ENTER @R0 high BETY
;EXIT @R0 high BETY
SBFG: inc r0
inc r0
MOV A,@R0
JNB ACC.7,SBF1
DEC R0
MOV A,@R0
ADD A,#1
MOV @R0,A
DEC R0
MOV A,@R0
ADDC A,#0
JNC SBF2
RRC A
MOV @R0,A
INC R0
MOV A,@R0
RRC A
MOV @R0,A
INC R0
INC R0
INC @R0
MOV A,R0
ADD A,#0FCH ;r0-4
MOV R0,A
MOV A,@R0
SJMP SBF2
SBF1: DEC R0
DEC R0
MOV A,@R0
SBF2: INC R0
INC R0
MOV @R0,A
DEC R0
MOV A,@R0
INC R0
INC R0
MOV @R0,A
dec R0
RET
;HEX NUMBER DIVISION 2B/1B
;1ST DIVISOR/2ND DIVISOR
;ENTER:THE FIRST DIVISOR POWER 2B IN R4,R5
; (@R0) 2ND DIVISOR POWER
;EXIT: QUOTIENT STORED IN R6--R7(R6:HIGH BYTE)
;
SHDI: MOV A,@R0
mov b,#8
shdi7: jb acc.7,shdi6
rl a
djnz b,shdi7
shdi6: cpl a
inc a
mov r3,a
mov r7,#16
shdi8: clr c
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
jb acc.7,shdi9
djnz r7,shdi8
shdi9: mov a,r7
clr c
subb a,b
mov b,a
mov r7,#0
mov r6,#0
mov a,r4
CLR C
SHDI3: JNC SHDI5
add A,R3
MOV R4,A
SETB C
SJMP SHDI4
SHDI5: ADD A,R3
JNC SHDI4
MOV R4,A
;
SHDI4: mov a,r7
rlc a
mov r7,a
MOV A,R6
RLC A
MOV R6,A
clr c
MOV A,R5
RLC A
MOV R5,A
mov a,r4
rlc a
mov r4,a
DJNZ b,SHDI3
RET
;==================================
; WRITE A BYTE FROM ACC TO 25045
outb: MOV CONT,#8
outb1: CLR SCK
RLC A
MOV SDI,C
SETB SCK
DJNZ CONT,outb1
clr sdi
RET
; READ A BYTE FROM 25045 TO ACC
inbyt: MOV CONT,#8
ibytr: SETB SCK
CLR SCK
MOV C,SO
RLC A
DJNZ CONT,ibytr
RET
wren_cmd:
clr sck
CLR CS
MOV A,#WREN
LCALL outb
clr sck
SETB CS
ret
wrdi_cmd:
clr sck
CLR CS
MOV A,#WRDI
LCALL outb
clr sck
SETB CS
ret
;READ STATE REGIST
READSR: clr sck
CLR CS
MOV A,#RDSR
LCALL outb
LCALL inbyt
clr sck
SETB CS
RET
;WRITE STATE REGIST
WRITESR:clr sck
CLR CS
MOV A,#WRSR
LCALL outb
MOV A,#d60n
LCALL outb
clr sck
SETB CS
lcall wip_poll
RET
WATCHDOG:
CLR CS
SETB CS
RET
WRITEBYTE: ;R2:ADDR,ACC:DATA
push acc
clr sck
CLR CS
MOV A,#cwr
; mov acc.3,c
LCALL outb
MOV A,R2
LCALL outb
POP ACC
LCALL outb
clr sck
SETB CS
lcall wip_poll
RET
READBYTE: ;R2:ADDR,ACC:DATA
clr sck
CLR CS
MOV A,#crd
; mov acc.3,c
LCALL outb
MOV A,R2
LCALL outb
LCALL inbyt
clr sck
SETB CS
RET
rpage:
;r2:page begin addr ,r0:RAM addr,r3:bytes c:A8
clr sck
CLR CS
MOV A,#crd
; mov acc.3,c
LCALL outb
MOV A,R2
LCALL outb
rpage1: LCALL inbyt
mov @r0,a
inc r0
djnz r3,rpage1
clr sck
SETB CS
ret
wip_poll:
mov b,#max_poll
wip_poll1:
lcall readsr
jnb acc.0,wip_poll2
djnz b,wip_poll1
wip_poll2:
ret
;
en_pas: mov r2,#xpass
mov r0,#6
mov r3,#2
setb c
lcall rpage
mov led_pa,#chr_p
mov r0,#led_tx
mov @r0,#0ffh
inc r0
mov r2,#4
en_p18: mov @r0,#7fh ;-
inc r0
djnz r2,en_p18
mov cour_l,#2
mov flashc,time_l
mov cntmp,#5
mov r4,#0
mov r5,#0
en_p07: jnb btime_out,$
clr btime_out
lcall keyb
jnz en_p07
en_p0a: lcall en_p00
cjne a,#fd_key,en_p0b
ret
en_p0b: lcall compas
jnz en_p03
ret
en_p03: mov r4,#0
mov r5,#0
djnz cntmp,en_p0a
mov a,#0ffh
ret
en_p00: mov btmp,time_h
en_p08: mov a,time_h
clr c
subb a,btmp
add a,#220
jnc en_p09
mov a,#0ffh
ret
en_p09:
; lcall prosse
jnb btime_out,en_p01
clr btime_out
lcall keyb
jz en_p01
cjne a,#ri_key,en_p02
MOV A,cour_l
ADD A,#led_pa
MOV R0,A
MOV A,@R0
setb ACC.0
MOV @R0,A
mov a,cour_l
inc a
mov cour_l,a
cjne a,#6,en_p01
mov cour_l,#2
ret
en_p01: lcall flashp
jnc en_p08
MOV A,cour_l
ADD A,#led_pa
MOV R0,A
MOV A,@R0
CPL ACC.0
MOV @R0,A
ljmp en_p08
en_p02: cjne a,#up_key,en_p04
mov a,cour_l
clr c
rrc a
JNC en_p022
add a,#3
mov r1,a
MOV A,@R1
ADD A,#1
DA A
XCHD A,@R1
SJMP en_p021
en_p022:
add a,#3
mov r1,a
MOV A,@R1
ADD A,#10H
DA A
MOV @R1,A
en_p021:
mov a,cour_l
add a,#led_pa
mov r0,a
mov @r0,#chr_bar ;|
mov r1,#60
en_p020:
jnb btime_out,$
clr btime_out
lcall watchdog
djnz r1,en_p020
mov @r0,#7fh
sjmp en_p01
en_p04: cjne a,#e_key,en_p05
mov a,cour_l
cjne a,#5,en_p041
ret
en_p041:
add a,#led_pa
mov r0,a
mov @r0,#chr_?
mov r1,#60
sjmp en_p020
en_p05: cjne a,#fr_key,en_p06
mov r7,#11h
mov r6,#11h
lcall wren_cmd
mov r2,#xpass
mov a,r6
lcall writebyte
lcall wren_cmd
mov r2,#xpass+1
mov a,r7
lcall writebyte
mov cour_l,#2
mov r4,#0
mov r5,#0
ljmp en_p01
en_p06: cjne a,#fd_key,en_p01
ret
compas: mov a,r4
cjne a,06,compas1
mov a,r5
cjne a,07,compas1
clr a
ret
compas1:
mov a,#0ffh
ret
chn_pas:
mov led_pa,#chr_p
mov r0,#led_tx
mov @r0,#chr_?
inc r0
mov r2,#4
ch_p08: mov @r0,#7fh ;-
inc r0
djnz r2,ch_p08
mov cour_l,#2
mov flashc,time_l
mov r4,#0
mov r5,#0
ch_p07: jnb btime_out,$
clr btime_out
lcall keyb
jnz ch_p07
lcall en_p00
mov ledtmp,led_pa
mov a,r4
push acc
mov a,r5
push acc
lcall yesno
mov r6,a
pop acc
mov r5,a
pop acc
mov r4,a
mov a,r6
cjne a,#e_key,ch_p01
lcall wren_cmd
mov r2,#xpass
mov a,r4
lcall writebyte
lcall wren_cmd
mov r2,#xpass+1
mov a,r5
lcall writebyte
ch_p01: mov cour_l,#0
mov led_tx,#0ffh
ret