📄 main.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : MAIN.ASM *
; ***************************************************************************
pw 128
case off
externs on
include st2202.def
include st2202.mac
include Data.def
include Bios.h
include Graphics.h
include Graph.def
include KeyDef.def
include DataBank.def
public Main_Bug
public MainU_Bug
public WriteFlashByte_Bug
public SetMode5_bug
Minu1 equ 60 ;; Auto. power off time for alarm sound.
EventNo equ 9 ;; Event numbers.
;=================================================================================
; copy of bios.asm
;
;=================================================================================
DS0 .SECTION
FunKTab_bug:
db caltalogkey ;;0/1
db timekey ;;2/3
db newenchkey ;;4/5
db JiSuanKey ;;6/7
db libKey ;;8/9
db PowerKey ;;10/11
db chinesekey ;netkey ;;
db yingyingkey ;CardKey ;;
db HelpKey ;;
db NullKey ;;
EventTab_bug:
dw Catalogevent ;0;总目录 0
dw Catalogevent ;1;总目录 1
dw clockEvent ;2; 时间事件处理向量表 2
dw CardEvent ;3; 名片簿事件处理向量表 14
dw newEnChEvent ;4; 英翻中事件处理向量表。 4
dw DicChEnEvent ;5; 中翻英事件处理向量表。 5
dw CalculatorEvent ;6; 计算机事件处理向量表。 6
dw StudyEvent ;7; 学习事件处理向量表。 7
dw LibEvent ;8; 资料事件处理向量表 8
dw OtherEvent ;9; Other事件处理向量表 9
dw 0 ;10;power key 占去了
dw 0 ;11;
dw CH_Dic_Event ;12;
dw CH_Idiom_Event ;13;
dw YYZDEVent ;14;
dw YYZDEVent ;15;
dw NetEvent ;16; 12
dw GameEvent ;17; Game事件处理向量表 13
dw CardEvent ;18; 名片簿事件处理向量表 14
dw RemarkEvent ;19; 备忘事件处理向量表 15
dw AlarmEvent ;20; 闹铃事件处理向量表 16
dw fu_lu_event ;21; 17
dw card_bak_Event ;22; 18
dw alarm_bak_event ;23; 19
MenuEventTab_bug:
dw MenuEvent ;24; 目录事件处理向量表。20
dw HelpEvent ;25; 帮助(求助)事件处理向量表。21
dw AlarmViewEvent ;26; 测试Mode事件处理向量表。22
dw DelDataEvent ;27; Delete data mode23
dw ChangeEvent ;28; 换算事件处理向量表。 24
dw CH_Dic_Event ;29; 25
dw CH_Idiom_Event ;30; 26
;;;;;//////////////////////////////////////////////////////////
;;=======================================================
;; Event mask table.
;;=======================================================
CEFlagTab_bug:
db 11111110b
db 11111101b
db 11111011b
db 11110111b
db 11101111b
db 11011111b
db 10111111b
db 01111111b
;;=======================================================
;; Extera mode index look-up table.
;;=======================================================
SubExModeMulTab_bug:
db 0*(EventNo*2+2)
db 1*(EventNo*2+2)
db 2*(EventNo*2+2)
db 3*(EventNo*2+2)
db 4*(EventNo*2+2)
db 5*(EventNo*2+2)
db 6*(EventNo*2+2)
db 7*(EventNo*2+2)
;=================================================================================
; copy of bios.asm
;
;=================================================================================
ps0a .section
bankno equ updatesc_bank
;///////////// Main Loop Start /////////////////////
;
Main_Bug:
cld ;; Clear decimal mode.
bbs7 <sysf,MainU_Bug
jsr UpdateScreen_bug
bra MainU_Bug
Main0_Bug:
wai ;; CPU sleeping now.
nop
nop
nop
nop
nop
nop
bbr2 <sf1,?POWER_OK
lda #icon_battery&0ffh
trb icon_battery>>8
LDA <PC
AND #02H
BNE ?POWER_OK
lda #icon_battery&0ffh
tsb icon_battery>>8
?POWER_OK:
MainU_Bug:
LDA <PFC ; J.A. 2003-6-23
AND #11000000B ; J.A. 2003-6-23
CMP #11000000B ; J.A. 2003-6-23
BEQ ?SKIP_SET ; J.A. 2003-6-23
SMB6 <portc_bak
lda <portc_bak
sta <pc ; J.A. 2003-6-23
?SKIP_SET: ; J.A. 2003-6-23
RMB2 <SysF ; J.A.: Yes, do not forget to have some break.
bbr4 <sf1,?1
rmb4 <sf1 ;; 星期与日期同步
jsr LJSR
dw ClockBank
dw bios_GetWeek-1
?1:
bbr6 <sf1,?2
rmb6 <sf1
jsr LJSR
dw BiosBank
dw SysMin-1 ;;每分钟检测alarm 及提醒
?2:
cld ;; Clear decimal mode.
sei ;; Disable interrupt.
ldx #0ffh ;; Reset stack pointer.
txs ;;
cli ;; Enable all interrupt.
bbr7 <SysF,?main02 ;; Branch if not power off event.
jmp PowerOffPrc_xx ;; Branch power process.
?main02:
bbr6 <SysF,?main03 ;; Branch not power off process.
jmp EntPowOff_xx ;; Entry power off process.
;;================================================
;;点亮或灭掉SHIFT图标:
?main03:
lda #>DS0Bank ;; Select data bank #2
sta <DRRh
lda #<DS0Bank ;; Select data bank #2
sta <DRRl
lda event_kill
and <eflag
sta <eflag
bbr3 <EFlag,main2 ;; Branch if not Key down event.
lda <KeyNo
cmp #ShiftKey
bne ?IsNotShiftKey
lda IconShift>>8
eor #(0ffh.and.IconShift)
sta IconShift>>8
jsr update_all_icon_bug
?IsNotShiftKey:
bbr3 <EFlag,?main1
ldx <Mode
cpx #ShowBatLowMode ;; Show low battry mode ?
beq ?main1 ;; Branch if show low battry mde.
ldx #0ffh
?main05:
inx
lda FunKTab_bug,x
bmi ?main1 ;; Branch if end of table.
cmp <KeyNo
bne ?main05
cpx #5
bne ?0
jmp EntPowOff_xx ;; Entry power off process.
?0: phx
jsr LJSR
dw testbank
dw LowBatDetect-1
plx
jmp ExMode_Bug ;; Mode exchange功能键处理!
;==================================
?main1:
bbr7 <ScanFF,main2 ;; Branch if not on ScanF mode.
rmb3 <EFlag ;; Clear KeyDown event flag.
jmp CharInput_Bug ;; Char input from keyboard.
main2: bbr5 <SysF,main3 ;; Branch if cursor off.
bbr2 <sf1,main3 ;; Branch if not 0.5 SEC event.
rmb2 <sf1
jsr CurFlash_Bug ;; Cursor flash.
main3: lda <EFlag ;; Get Event occur flag.
beq to_Main0 ;; No any event occur.
and event_kill
beq to_Main0 ;; No any event occur.
main_fun_bug:
ldx #7
main32:
asl
bcs main33_Bug ;; Event active.
dex
bpl main32
to_Main0:
jmp Main0_Bug
main33_Bug:
lda CEFlagTab_bug,x
and <EFlag ;; Clear event flag.
sta <EFlag
?1:
Main4:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lda <Mode
cmp #90h
bne ?IsNormalGame
lda #<NData
sta <INDL
lda #>NData
sta <INDH
bra ?Main4x
?IsNormalGame:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lda <Mode
bpl ?main45 ;; It's normal mode.
and #7fh
asl
clc
adc #MenuEventTab_bug-EventTab_bug ;; It's menu function select mode.
bra ?main47
?main45:
asl ;; Mode *= 2.
?main47:
tay
lda EventTab_bug,y
sta <INDL
lda EventTab_bug+1,y
sta <INDH
?Main4x:
txa
inc
sec
rol
ldy <ExtraMode
ldx <Mode
bpl ?main48
ldy #0
?main48:
adc SubExModeMulTab_bug,y
tay
lda (<IND),y ;; Get high order.
pha
dey
lda (<IND),y ;; Get lowh order.
pha
ldy <ExtraMode ;; Index to bank index.
lda SubExModeMulTab_bug,y
tay
lda <Mode
bpl ?main5
ldy #0
?main5:
iny
lda (<IND),y ;; Get program bank.
pha
dey
lda (<IND),y ;; Get program bank.
jmp LongGo
;;======================================================
;; Mode change.
;;======================================================
ExMode_Bug:
; PUTSIOX
cpx #8 ;; 'Help' mode ?
beq EntHelp ;; Entry help mode.
txa
asl
tax
lda <Mode
; PUTSIOX
bpl ?ExMode_0
txa
cmp <ModeSave
bne ?SetMode
inc
bra ?SetMode
?ExMode_0:
txa
cmp <Mode
bne ?SetMode
inc
;;======================================================
;; Set mode.
;;======================================================
?SetMode:
sta <Mode
lda #0ffh
sta event_kill ;;让所有事件有效!
stz <ExtraMode ;; Clear extra mode.
lda #NullHelp-HelpTable
sta <HelpOffset ;; Preset null help.
;; PreClear ZData area.
SetMode2:
jsr InitAll_Bug ;; Initial all register.
SetMode3:
lKeyTone
SetMode5_bug:
lda #10000000b ;; Set mode entry event flag.
sta <EFlag ;; Clear all event flag.
lda #0ffh
sta event_kill
jmp main_fun_bug
;;======================================================
;; Entry help display mode.
;;======================================================
EntHelp:
rmb3 <EFlag ;; Clear key down event.
lda <HelpOffset
cmp #NullHelp-HelpTable
bne ?ehl5
jmp MainU_Bug ;; Branch if null help.
?ehl5:
lda #HelpMode
cmp <Mode
beq ExitHelp
pha
lkeytone
bbs4 <soundflag,$
pla
;SetFixModeSave:
ldx <Mode
stx <SaveHelp
;SetFixMode:
sta <Mode ;; Set mode register。
jsr Inia5_bug ;; Inital register。
jmp SetMode5_bug
;;======================================================
;; Exit help mode.
;;======================================================
ExitHelp:
lKeyTone ;; Key tone out.
rmb3 <EFlag ;; Clear key down event.
lda <SaveHelp
stz <SaveHelp
sta <Mode
;;======================================================
;; Entry power off process.
;;======================================================
EntPowOff_xx:
LPOWEROFF_BUG
;;======================================================
;; Power off process.
;;======================================================
PowerOffPrc_xx:
lda AlarmFlag2
and #00100000b
beq ?popc1 ;; Branch if alarm sound off.
lda #<-Minu1 ;; Set one minute auto power off for alarm sound.
sta PowerT
lda #>-Minu1
sta PowerT+1
bra ?2popc3
?popc1:
lda #>DS0Bank ;; Select data bank #2
sta <DRRh
lda #<DS0Bank ;; Select data bank #2
sta <DRRl
ldx #5
lda <KeyNo
cmp FunKTab_bug,x
bne pwoend ;; No!
?2popc3:
sei
jsr LJSR
dw BiosBank
dw clear_lcd_all-1
lda #00000010b
sta <SYS ;;OSC作主频
;;使能OSC
;;使能OSCX
;;OSCX heavy
;;256 warm-up cycles
;;wai后进入wai-0模式
;;irr 使能
nop ;;低电压检测不使能.
nop
nop
nop
lda #0
?1: inc
nop
nop
bne ?1
lda #00010010b
sta <SYS ;;OSC作主频
cli
jsr LJSR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -