📄 main.asm
字号:
;;==============================================================================
;; Progarm For K2
;; Version: 0.1a
;; Author :Wu Wen Hui
;; Date :2002/11/23
;;==============================================================================
program_start:
;;==============================================================================
;;------PortCDType--------
lda #%00000000
sta p_portCD_config ;;all set to be IO porrt
;-----------------------------------------------------------------------
lda #%00000000 ;;0: input 1:output
sta p_portA_dir_ctrl
lda #%00000000 ;;
sta p_portA_config ;;$06
lda #%11111111
sta p_portA
;;------------------------
lda #%11111111 ;;1: output
sta p_portC_dir_ctrl
lda #%00000000 ;;0: buffer when it is output
sta p_portC_config
;;------------------------
lda #%00111111
sta p_portD_dir_ctrl
lda #%00000000
sta p_portD_config
;;------------------------
lda #%00000000
sta p_portC
lda #%00000000
sta p_portD
;;-------------------------
ldx #1
jsr F_set_bank_int
;;=============================================================================
main:
MainLoop:
jsr F_ScanKeyPad
MainLoopB:
jsr F_HalfSecondProgram
lda R_Mode
cmp #M_SLEEP_MODE
beq F_EnterPowerOff
;; jmp main
;;==============================================================================
;;Sleep Produsce
;;Programming to turn into 'Halt Mode' (Lcd display, but CPU stop)
;;==============================================================================
F_EnterToSleep:
;;-----------------------------------------------------------------------------
;;Reset portA
lda R_KeyState
and #D_KstMask
bne MainLoop
lda R_MelodyStatus
and #D_MelodyEnable
bne MainLoop
lda #%00000000 ;;0: input 1:output
sta p_portA_dir_ctrl
lda #%00000000 ;;0: pull low 1:pull high
sta p_portA_config ;;$06
lda #%11111111
sta p_portA
ldx #0
stx P_PortA_Strobe_Pullhigh ;;$05
lda #D_3ANormal
sta p_keyscan_ctrl ;;$3a
;;-----------------------------------------------------------------------------
lda #0 ;;clear wakeup status
sta P_18H_WakeUpCtrl
lda #%00000011 ;;enable wakeup source
sta P_18H_WakeUpCtrl ;;suppose TBLEN and KEYEN is enabled
lda p_portA ;;latch PortA data
lda #$07
sta P_04H_CPU_CLK_Ctrl ;;Stop CPU clock
nop
nop
nop
jmp reset
;;==============================================================================
F_EnterPowerOff:
lda R_KeyState
and #D_KstDebounce
bne MainLoop
jsr F_TurnOffLcdDisp
lda R_MelodyStatus
and #D_MelodyEnable
bne MainLoop
lda #FFH
sta R_OffTime
;------------------------------------
lda #D_3ANormal
sta p_keyscan_ctrl
lda #0
sta P_PortA_Strobe_Pullhigh ;;PortA normal input
lda #%11111110
sta p_portA_dir_ctrl
lda #%00000000 ;;0: pull low 1:pull high
sta p_portA_config
lda #%00000001
sta p_portA
nop
nop
nop
nop
lda p_portA
lda #0
sta P_18H_WakeUpCtrl
;; lda #%00000011
lda #%00000001 ;;just key wakeup
sta P_18H_WakeUpCtrl
;;--------------------------wwhp------------------------------
;; lda #(LCD_DUTY16+LCD_BIAS5+LCD_ALL_OFF)
;; sta P_24H_LCD_option
;; lda #0
;; sta P_25H_pump_control
;; lda #C32K_CTRL_EN
;; sta P_0EH_Xcal32KCtrl
;;------------------------------------------------------------
;; lda #$55
;; sta $3031
lda #%00000111
sta P_04H_CPU_CLK_Ctrl
nop
nop
nop
jmp reset
;;==============================================================================
;; x: which bank will go
;; y: which program will run
;;==============================================================================
;;F_run_bank_program:
;; lda R_BankSwitch00_Save
;; pha
;; jsr F_set_bank
;;same_as_run_bank_program:
;; lda #>(R_Mode_exit_to_main_loop-1)
;; pha
;; lda #<(R_Mode_exit_to_main_loop-1)
;; pha
;; lda $BFFF
;; sta R_TableAddHigh
;; lda $BFFE
;; sta R_TableAddLow
;; tya
;; clc
;; rol a
;; tay
;; iny
;; lda (R_TableAddLow),y
;; pha
;; dey
;; lda (R_TableAddLow),y
;; pha
;; rts
;;R_Mode_exit_to_main_loop:
;; pla
;; tax
;; sei
;; jsr F_set_bank_int
;; cli
;; rts
;;=============================================================================
;;Initial_System_B:
;; lda #0
;; sta P_BankSwitch00
;; sta R_BankSwitch00_Save
;; jsr F_set_cpu_speed_and_io
;; cli
;; ;; ldx #MAIN_BANK_NUM
;; ;; jsr F_set_bank_int
;; jmp program_start_b
;;==============================================================================
;;==============================================================================
F_set_bank:
F_SetBank:
F_set_bank_int:
sei
stx R_BankSwitch00_Save
stx P_BankSwitch00
cli
rts
;;==============================================================================
F_div_10:
F_Div10:
div_10:
ldx #$ff
sec
?_div_10:
inx
sbc #10
bcs ?_div_10
adc #10
rts
;;==============================================================================
F_div_08:
ldx #$ff
sec
?_div_08:
inx
sbc #8
bcs ?_div_08
adc #8
rts
;;=============================================================================
;;=============================================================================
F_KeyDecode:
rts
;;=============================================================================
F_HalfSecondProgram:
rts
;;=============================================================================
;;=============================================================================
;;=============================================================================
F_BeepSleep:
beep_and_sleep:
F_Sleep:
pha
txa
pha
lda R_Flag
and #D_FLAGTONE
bne ?exit
lda R_Mode
cmp #M_SLEEP_MODE
beq ?exit
jsr F_PlayKeyTone
lda #0
sta R_OffTime
?exit:
pla
tax
pla
rts
F_BeepSleep2:
pha
txa
pha
lda R_Flag
and #D_FLAGTONE
bne ?exit
lda R_Mode
cmp #M_SLEEP_MODE
beq ?exit
jsr F_PlayKeyTone2
lda #0
sta R_OffTime
?exit:
pla
tax
pla
rts
;;=============================================================================
;;=============================================================================
;;=============================================================================
;;=============================================================================
F_ToSleepModeProcess:
rts
;;=============================================================================
F_ToPowerOnProcess:
jsr F_SetLcdToDisp
rts
;;=============================================================================
F_CheckAutoOff:
rts
;;=============================================================================
F_CheckIfNeedAutoSave:
rts
;;=============================================================================
F_InitAllAlarmDate:
rts
;;=============================================================================
;;=============================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -