📄 cm-941.asm
字号:
ANDI FlgSet_12Hr,2
JZ LightColone
JMP FlashColone
ExtinguishClockHr: ;adjust clock_hr
LDS Dummy, 0 ;E_HR
LCP 1, Dummy
LCP 2, Dummy
ANDI FlgSet_12Hr,2
JZ LightColone
JMP FlashColone
LightC_Clk: ;Dly clock
MRW Dummy, SData1
LCT 4, Dummy
MRW Dummy, SData2
LCT 3, Dummy
LDA SData4
STA TempR2
LDA SData3
STA TempR1
CALL Set12hr
MRW Dummy, TempR1
LCT 2, Dummy
MRW Dummy, TempR2
LCB 1, Dummy
LDS TempR0, 0
LCP 6, DisplayR
ANDI KeyDoneFlg, 8
JNZ ExtinguishColone ;enter mainmode1 at first
ANDI FlgSet_12Hr,2
JZ LightColone
JMP FlashColone
;--------------------------
DlyClock: ;MainMode= 0
LDS Dummy, 0
LCP 9, Dummy
LCP 8, Dummy
LCP 5, Dummy
LDA Pendulum1
LCP 0, Pendulum2 ;DLY Pendulum Icon
ANDI AlmFlg, 1
STA Dummy
LDS TempR0, 0
LCP 0AH, Dummy ;DLY ALM Icon
LDA Hr_L
STA TempR1
LDA Hr_H
STA TempR2
CALL Set12hr
MRW Dummy, Min_L
LCT 4, Dummy
MRW Dummy, Min_H
LCT 3, Dummy
MRW Dummy, TempR1
LCT 2, Dummy
MRW Dummy, TempR2
LCB 1, Dummy ;DLY CLOCK
LDS Dummy, 0
LCP 6, DisplayR ;DLY AM/PM ICON
FlashColone:
LDA R_2Hz
JZ ExtinguishColone ;R_2Hz =1 ,Colone extinguish
LightColone: ;Dly colone Icon
LDS Dummy, 1
LDS TempR0, 0
LCP 7, Dummy
RTS
ExtinguishColone:
LDS Dummy, 0
LCP 7, Dummy
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MeasureFat:
LDA M_FatFlg
JZ Exit_MeasureFat ;Measure Fat? No,exit
SUBI M_FatFlg, 1
JZ FatDelay5s ;First, delay5s
SUBI M_FatFlg, 2 ;Then, check PortA.4 lo
JZ CheckFatLo ;The last, After check PortA.4 hi , Count time to Measure fat
SUBI M_FatFlg, 3
JZ CheckFatHi
SUBI M_FatFlg, 4
JZ TestFat
Exit_MeasureFat:
NOP
NOP
RTS
;;;;;;;;
FatDelay5s:
LDS TempR0, 2
SUB MaxM_FatTm
JC Exit_MeasureFat ;not reach 5s ,exit
LDS M_FatFlg, 2
RTS
CheckFatLo:
IPA Dummy
JB3 Exit_MeasureFat
LDS M_FatFlg, 3
RTS
CheckFatHi:
IPA Dummy
JB3 $+2
RTS
LDS M_FatFlg, 4
LDS FatTest1, 0
LDS FatTest2, 0
LDS FatTest3, 0
TM2X 001000011B ;(001)8*4/32.768=0.9765625ms
RTS
;;;;;;;
TestFat:
IPA Dummy
JB3 Exit_MeasureFat
LDS M_FatFlg, 5 ;Stop Counting
LDA FatTest1
STA s1
LDA FatTest2
STA s2
LDA FatTest3
STA s3
call Hex_Dex
MRW Dummy, s1
LCT 0DH, Dummy
MRW Dummy, s2
LCT 0CH, Dummy
MRW Dummy, s3
LCT 0BH, Dummy
LDS TempR0, 01H ;Subtract 0A1H
SUB* FatTest1
LDS TempR0, 7 ;dec the min time
SBC* FatTest2
LDS TempR0, 0
SBC* FatTest3
MAF Dummy
CALL CheckFatError
LDA R_Error
JZ TestFat1
Re_MeasureFat:
LDS M_FatFlg, 2
LDS R_Error, 0
RTS
TestFat1:
CALL CompareZ
LDA FatTest1
ADD* FatTest1
LDA FatTest2
ADC* FatTest2
LDA FatTest3
ADC* FatTest3
MVU FatTest3
MVH FatTest2
MVL FatTest1
LDL FatTest3, @HL
LDH* FatTest4, @HL
LDL FatTest1, @HL
LDH FatTest2, @HL
LDA FatTest1
STA s5
LDA FatTest2
STA s6
LDA FatTest3
STA s7
LDA FatTest4
STA s8
MRW Dummy, s5
LCT 11H, Dummy
MRW Dummy, s6
LCT 10H, Dummy
MRW Dummy, s7
LCT 0FH, Dummy
MRW Dummy, s8
LCT 0EH, Dummy
LDA TestFatCnt
JNZ Re_MeasureFat
CALL Fatcal
LDS KeySound, 0FH
ALM 80H
LDA R_Error
JNZ InactiveM_Fat1
;;;;;;;;;;;;;;;;;;;;;
CheckFat:
ANDI OptionR, 8
JZ CheckFatwomen
checkFatman:
LDS TempR0,3
SUB Age2
JC MenUnder30
MenOver30:
LDS TempR0, 7
SUB P_FAT2
LDS TempR0, 1
SBC P_FAT3
JNC Thinest
LDS TempR0, 4
SUB P_FAT2
LDS TempR0, 2
SBC P_FAT3
JNC Thin
LDS TempR0, 6
SUB P_FAT2
LDS TempR0, 2
SBC P_FAT3
JNC Fat
JMP Fatest
MenUnder30:
LDS TempR0, 4
SUB P_FAT2
LDS TempR0, 1
SBC P_FAT3
JNC Thinest
LDS TempR0, 1
SUB P_FAT2
LDS TempR0, 2
SBC P_FAT3
JNC Thin
LDS TempR0, 6
SUB P_FAT2
LDS TempR0, 2
SBC P_FAT3
JNC Fat
JMP Fatest
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckFatwomen:
LDS TempR0, 3
SUB Age2
JNC WomenUnder30
WomenOver30:
LDS TempR0, 2
SUB P_FAT3
JNC Thinest
LDS TempR0, 8
SUB P_FAT2
LDS TempR0,2
SBC P_FAT3
JNC Thin
LDS TempR0, 1
SUB P_FAT2
LDS TempR0, 3
SBC P_FAT3
JNC Fat
Fatest:
LDS FatLevel, 8
JMP InactiveM_Fat
Fat:
LDS FatLevel, 4
JMP InactiveM_Fat
Thin:
LDS FatLevel, 2
JMP InactiveM_Fat
Thinest:
LDS FatLevel, 1
JMP InactiveM_Fat
WomenUnder30:
LDS TempR0, 7
SUB P_FAT2
LDS TempR0, 1
SBC P_FAT3
JNC Thinest
LDS TempR0, 5
SUB P_FAT2
LDS TempR0, 2
SBC P_FAT3
JNC Thin
LDS TempR0, 1
SUB P_FAT2
LDS TempR0, 3
SBC P_FAT3
JNC Fat
JMP Fatest
InactiveM_Fat:
LDS Mode1, 0
InactiveM_Fat1:
LDS M_FatFlg, 0
LDS PortA, 2
OPA PortA
RF 4H
ORG 800H
;---------------------------------------------
;Input: TempR1(store the low index address of the Operated data)
;Output:No
;-----------------------------------------------
AddSecMin:
INC* @HL
DAA* @HL
JNZ Exit_AddSecMin
INC* TempR1
MVL TempR1
INC* @HL
LDS TempR0, 6
SUB @HL
JNZ Exit_AddSecMin
LDS TempR0, 0
STA @HL
Exit_AddSecMin:
RTS
;--------------------------------------------------
;Input: TempR1(store the low index address of the Operated data)
;Output:No
;-------------------------------------------------
AddHour:
INC* @HL
DAA* @HL
JNZ AddHour1
INC* TempR1
MVL TempR1
INC* @HL
RTS
AddHour1:
INC* TempR1
LDS TempR0, 4
SUB @HL
MVL TempR1
LDS TempR0, 2
SBC @HL
JNZ Exit_AddHour
LDS TempR0, 0
STA @HL
DEC* TempR1
MVL TempR1
LDS TempR0, 0
STA @HL
Exit_AddHour:
RTS
;------------------------------------------------
;---------------------------------------------
;Input: TempR1(store the low index address of the Operated data)
;Output:No
;-----------------------------------------------
SubSecMin:
DEC* @HL
DAS* @HL
JC Exit_SubSecMin
INC* TempR1
MVL TempR1
DEC* @HL
JC Exit_SubSecMin
LDS TempR0, 5
STA @HL
Exit_SubSecMin:
RTS
;--------------------------------------------------
;Input: TempR1(store the low index address of the Operated data)
;Output:No
;-------------------------------------------------
SubHour:
DEC* @HL
DAS* @HL
JC Exit_SubHour
INC* TempR1
MVL TempR1
DEC* @HL
JC Exit_SubHour
LDS TempR0, 2
STA @HL
DEC* TempR1
MVL TempR1
LDS TempR0, 3
STA @HL
Exit_SubHour:
RTS
;------------------------------------------------
Set12hr
LDS DisplayR, 0
ANDI FlgSet_12Hr,1
JNZ Exit_Set12hr
LDS TempR0, 2
SUB TempR1
DAS
STA TempR3
LDS TempR0, 1
SBC TempR2
DAS
STA TempR4
JNC DisplayAM
;DisplayPM:
LDS DisplayR, 2
LDA TempR4
STA TempR2
LDA TempR3
STA TempR1
OR TempR2
JNZ Exit_Set12hr
LDS TempR1, 2
LDS TempR2, 1
RTS
DisplayAM:
LDS DisplayR, 1
LDA TempR1
OR TempR2
JNZ Exit_Set12hr
LDS TempR1, 2
LDS TempR2, 1
Exit_Set12hr:
RTS
;;;;;;;;;;;;;;;;;;;;;
CheckFatError:
ANDI Dummy, 8 ;CF
JC CheckFatError1
LDS R_Error, 1
RTS
CheckFatError1:
LDS TempR0, 1
SUB FatTest1
LDS TempR0, 5
SBC FatTest2
LDS TempR0, 0
SBC FatTest3
JNC Exit_CheckFatError
LDS R_Error, 1
Exit_CheckFatError:
RTS
;;;;;;;;;;;;;;;;;;;;;
CompareZ:
LDA FatTest1
SUB FatTest1_1
STA Result1
LDA FatTest2
SBC FatTest2_1
STA Result2
LDA FatTest3
SBC FatTest3_1
STA Result3
JC OneGeTwo
LDA FatTest1_1
SUB FatTest1
STA Result1
LDA FatTest2_1
SBC FatTest2
STA Result2
LDA FatTest3_1
SBC FatTest3
STA Result3
OneGeTwo:
LDS TempR0, 2
SUB Result1
LDS TempR0, 0
SBC Result2
LDS TempR0, 0
SBC Result3
JC $+3
DEC* TestFatCnt
JMP $+2
LDS TestFatCnt, 3
LDA FatTest1
STA FatTest1_1
LDA FatTest2
STA FatTest2_1
LDA FatTest3
STA FatTest3_1
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckBMIFlow:
LDS TempR0, 1
SUB BMI2
LDS TempR0, 5
SBC BMI3
JNC CheckBMIFlow1
LDS R_Error, 1
RTS
CheckBMIFlow1:
LDS TempR0, 0
SUB BMI1
LDS TempR0, 5
SBC BMI2
LDS TempR0, 0
SBC BMI3
JC $+2
LDS R_Error, 1
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckFatFlow:
LDS TempR0, 1
SUB P_FAT2
LDS TempR0, 6
SBC P_FAT3
JNC CheckFatFlow1
LDS R_Error, 1
RTS
CheckFatFlow1:
LDS TempR0, 0
SUB P_FAT1
LDS TempR0, 5
SBC P_FAT2
LDS TempR0, 0
SBC P_FAT3
JC $+2
LDS R_Error, 1
RTS
;CALC OPRATION SUBROUTINE
;-----------------------------------------------------
;Fucion:Add /Sub / Mul / Div Operation
;input:R_A0,R_A1,R_A2,R_A3,R_A4,R_A5,R_A6 R_AP
; R_B0,R_B1,R_B2,R_B3,R_B4,R_B5,R_B6 R_BP
;output:R_W0,R_W1,R_W2,R_W3,R_W4,R_W5,R_W6,R_W7 R_WP
;----------------------------------------------------
F_Add:
;
Stepadd1:
CALL ClearW
;------
Stepadd2:
LDA R_A6
JNZ Stepadd2_1
INC* R_AP
CALL LeftA
JMP Stepadd2
Stepadd2_1:
LDA R_B6
JNZ Stepadd3
INC* R_BP
CALL LeftB
JMP Stepadd2_1
;------
Stepadd3:
LDA R_AP
SUB R_BP
JNC Stepadd3_2
STA TempR0
Stepadd3_1:
LDA TempR0
JZ Stepadd4
CALL RightB
DEC* R_BP
DEC* TempR0
JMP Stepadd3_1
Stepadd3_2:
LDA R_BP
SUB R_AP
STA TempR0
Stepadd3_2_1:
LDA TempR0
JZ Stepadd4
CALL RightA
DEC* R_AP
DEC* TempR0
JMP Stepadd3_2_1
;-------
Stepadd4:
CALL CopyAtoW
CALL WaddB
;--------
Stepadd5:
LDA R_W7
JZ Stepadd6
LDA R_WP
JNZ Stepadd6
LDS R_Error, 1
RTS
;-----
Stepadd6:
LDA R_W0
JNZ Stepadd7
LDA R_WP
JZ Stepadd7
CALL RightW
DEC* R_WP
JMP Stepadd6
Stepadd7:
CALL CopyWtoA
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
F_Sub:
;---------
Stepsub1:
CALL ClearW
;-------
Stepsub2:
LDA R_A6
JNZ Stepsub2_1
INC* R_AP
CALL LeftA
JMP Stepsub2
Stepsub2_1:
LDA R_B6
JNZ Stepsub3
INC* R_BP
CALL LeftB
JMP Stepsub2_1
Stepsub3:
LDA R_AP
SUB R_BP
JNC Stepsub3_2
STA TempR0
Stepsub3_1:
LDA TempR0
JZ Stepsub4
CALL RightB
DEC* R_BP
DEC* TempR0
JMP Stepsub3_1
Stepsub3_2:
LDA R_BP
SUB R_AP
STA TempR0
Stepsub3_2_1:
LDA TempR0
JZ Stepsub4
CALL RightA
DEC* R_AP
DEC* TempR0
JMP Stepsub3_2_1
;---------------
Stepsub4:
CALL CopyAtoW
CALL WsubB
;-------------
Stepsub5:
LDA R_W7
JZ Stepsub6
LDA R_WP
JNZ Stepsub6
LDS R_Error, 1
RTS
Stepsub6:
LDA R_W0
JNZ Stepsub7
LDA R_WP
JZ Stepsub7
CALL RightW
DEC* R_WP
JMP Stepsub6
Stepsub7:
CALL CopyWtoA
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
F_Mul:
Stepmul1:
CALL ClearW ;The first clear w & flg
Stepmul2:
LDA R_A6
JNZ Stepmul2_1
INC* R_AP
CALL LeftA
JMP Stepmul2
Stepmul2_1:
LDA R_B6
JNZ Stepmul3
INC* R_BP
CALL LeftB
JMP Stepmul2_1 ;the second data shift the high bit
Stepmul3:
LDA R_BP
ADD R_AP
STA R_WP ;R_AP +R_BP ---R_WP
Stepmul4:
LDA R_B0
JZ Stepmul7_1
Stepmul5:
LDS TempR0, 0AH
SUB R_B0
JZ Stepmul10 ;Mul Over
Stepmul6:
LDA R_WP
JNZ Stepmul7
LDA R_W1
JZ Stepmul7
LDS R_Error, 1
RTS
Stepmul7:
LDA R_B0
JZ Stepmul7_1
CALL WaddA
DEC* R_B0
JMP Stepmul7
Stepmul7_1:
DEC* R_BP
CALL Right_B
DEC* R_WP
CALL RightW
Stepmul8:
LDA R_WP
JNZ Stepmul9
LDA R_W7
JZ Stepmul9
LDS R_Error, 1
RTS
Stepmul9:
JMP Stepmul4
Stepmul10:
LDA R_WP
JZ Stepmul10_1
LDA R_W0
JNZ Stepmul10_1
DEC* R_WP
CALL RightW
JMP Stepmul10
Stepmul10_1:
CALL CopyWtoA
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
F_Div:
StepDiv1:
LDA R_B0
OR R_B1
OR R_B2
OR R_B3
OR R_B4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -