📄 bios.asm
字号:
nop
nop
nop
nop
nop
nop
nop
nop
nop
stz <irrl
STZ <IENAL
STZ <IENAb
STZ <IENAH
STZ <IREQL
STZ <IREQH
jsr reset_init
jsr WarmInit ;; Warm initial.
jsr InitAll ;; Initial all register.
sei
lda #00010010b
sta <SYS ;;OSC作主频
lda #00100000b
trb AlarmFlag2
jsr if_normal_time
bcc ?_normal_time
jsr reset_all_ram_in_bios
lda #default_contrast
sta <contrast
lda #00110000b
sta <IENAb
sta <IENA
?_normal_time:
sei
jsr clear_lcd_all
;;=====================================================
;;=====================================================
lda <sf1
and #fch
sta <sf1
jsr if_press_left ;;系统升级
bcc ?2
jmp System_UpGrade_from_bios_yh_flash_512
?2:
;;=====================================================
jsr if_press_vkey
bcc ?4
jmp display_version ;;
;;=====================================================
?4:
jsr if_press_right ;;进入Flash程式中测试!
bcc ?5
jmp flash_test_program
?5:
;;=====================================================
lda #00110000b
sta <IENAb
sta <IENAl
lda #80h
sta <btsr
cli
lda #10000000b
sta event_kill
reset_ok:
jsr set_to_ds0bank
lda bios_to_deldata_normal+3
pha
lda bios_to_deldata_normal+2
pha
lda bios_to_deldata_normal+1
pha
lda bios_to_deldata_normal+0
jmp longgo
;;======================================================
;; Cool start up.
;;======================================================
CoolStartUp:
jsr reset_all_ram_in_bios
jmp warm_up_start
reset_all_ram_in_bios:
;; Clear all data RAM(ZDara).
;; Clear 80h .. ffh
lda <sf1
and #03h
pha
ldx #80h
init3: stz <0,x
inx
bne init3
pla
sta <sf1
;; Clear 100h ..0fffh (AData)
ldx #<stack_last_ram
?1:
stz 100h,x
dex
bpl ?1
lda #02h
sta <INdH
stz <INdL
?nit38: lda #0
?nit4: sta (<Indl)
inc <INdL
bne ?to_cmp
inc <INdH
?to_cmp:
lda <indl
cmp #<cal_fixram
bne ?nit38
lda <INdH
cmp #>cal_fixram
bcc ?nit38
;;========================================
;; Set local time area on Taiwan & H.K. & China.
lda #13h
sta LocalTime
;; PreSet clock to : 02/01/01 00:00:00
;; smb2 <SF0 ;;2002年4月23日 删除 蒋
inc <Year ;; Month = 1.
inc <Year
inc <Year
inc <Month ;; Month = 1.
inc <Day ;; Day = 1.
jsr GetDays ;; Get days of month.
jsr CheckLeapYear ;; Leap year ?
;;;; jsr GetWeek
;; PreSet Day's counter on 2001 1/1
inc AD2KYear ;; Year = 1.
inc AD2KYear ;; Year = 1.
inc AD2KMonth ;; Month = 1.
inc AD2KDay ;; Day = 1.
lda #12h
sta <Hour
smb1 <SysOpt
lda #>flash_prg_bank+6
sta <drrh
lda #<flash_prg_bank+6
sta <drrl
lda 8000h
cmp #85h
bne ?skip_call_flash_prg
lda 8004h
cmp #48h
bne ?skip_call_flash_prg
jsr set_to_ds0bank
jsr bios_call_ext
dw ds0_ChkSCData
jsr CheckSchedule_in_bios
jsr bios_call_ext
dw ds0_check_secret
jsr bios_call_ext
dw ds0_GetWeek
jsr bios_call_ext
dw ds0_select_ic
?skip_call_flash_prg:
jsr set_to_ds0bank
smb7 <sf1
rts
warm_up_start:
jsr InitIO ;; Initial All I/O state.
jsr warmInit ;; Warm initial.
jsr bios_call_ext
dw ds0_warm_up_start_last
jsr set_to_ds0bank
;;=====================================================
;; PreSet clock mode.
EntClkMode:
jsr InitAll ;; Initial all register.
EntClkMode1:
lda #CataMode
sta <Mode ;; PreSet Clock mode.
stz <ExtraMode ;; Clear extra mode.
jmp SetMode5
;;======================================================
;; lmain返回作了调整!
;;======================================================
;Main_5000:
; cld
; jsr UpdateScreen_5000 ;; Update the screen.
; bra mainu
;MainU_5000:
; cld
; jsr update_all_icon_5000
; bra mainu
Main_yh:
cld
jsr UpdateScreen ;; Update the screen.
bra mainu
MainU_yh:
cld
jsr update_all_icon
bra mainu
Main:
cld ;; Clear decimal mode.
bbs7 <sysf,mainu
;; lUpdateScreen ;; Update the screen.
jsr bios_call_ext
dw ds0_updatescreen
bra mainu
Main0:
wai ;; CPU sleeping now.
nop
nop
nop
nop
nop
nop
MainU:
bbr4 <sf1,?1
rmb4 <sf1 ;; 星期与日期同步
jsr bios_call_ext
dw ds0_GetWeek
?1:
bbr6 <sf1,?2
rmb6 <sf1
jsr SysMin ;;每分钟检测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 ;; Branch power process.
main02:
bbr6 <SysF,main03 ;; Branch not power off process.
jmp EntPowOff ;; 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 bios_call_ext
dw ds0_lupdate_all_icon
;;================================================
lda <KeyNo
IsNotShiftKey:
cmp #MaxKey+1
bcs main1 ;; Branch if over max. key code.
ldx <Mode
cpx #ShowBatLowMode ;; Show low battry mode ?
beq main1 ;; Branch if show low battry mde.
; cmp #PowerKey ;; 'Power key' ?
; bne main04 ;; Branch not power off process.
; jmp EntPowOff ;; Entry power off process.
main04: ldx #0ffh
main05: inx
lda FunKTab,x
bmi main1 ;; Branch if end of table.
cmp <KeyNo
bne main05
cpx #5
bne ?0
jmp EntPowOff ;; Entry power off process.
?0: phx
jsr bios_call_ext
dw ds0_LowBatDetect
plx
jmp ExMode ;; Mode exchange功能键处理!
main1: bbr7 <ScanFF,main2 ;; Branch if not on ScanF mode.
rmb3 <EFlag ;; Clear KeyDown event flag.
jmp CharInput ;; Char input from keyboard.
main2: bbr5 <SysF,main3 ;; Branch if cursor off.
;; bbr0 <EFlag,main3 ;; Branch if not 0.5 SEC event.
bbr2 <sf1,main3 ;; Branch if not 0.5 SEC event.
rmb2 <sf1
jsr CurFlash ;; 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:
ldx #7
main32:
asl
bcs main33 ;; Event active.
dex
bpl main32
to_Main0:
jmp Main0
main33:
lda CEFlagTab,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-EventTab ;; It's menu function select mode.
bra ?main47
?main45:
asl ;; Mode *= 2.
?main47:
tay
lda EventTab,y
sta <INDL
lda EventTab+1,y
sta <INDH
?Main4x:
txa
inc
sec
rol
ldy <ExtraMode
ldx <Mode
bpl ?main48
ldy #0
?main48:
adc SubExModeMulTab,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,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:
cpx #8 ;; 'Help' mode ?
beq EntHelp ;; Entry help mode.
txa
asl
tax
lda <Mode
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 ;; Initial all register.
SetMode3:
lKeyTone
SetMode5:
lda #10000000b ;; Set mode entry event flag.
sta <EFlag ;; Clear all event flag.
lda #0ffh
sta event_kill
jmp main_fun
;;======================================================
;; Entry help display mode.
;;======================================================
EntHelp:
rmb3 <EFlag ;; Clear key down event.
lda <HelpOffset
cmp #NullHelp-HelpTable
bne ehl5
jmp MainU ;; Branch if null help.
ehl5:
lda #HelpMode
cmp <Mode
beq ExitHelp
pha
lkeytone
bbs4 <soundflag,$
pla
SetFixModeSave:
ldx <Mode
stx <SaveHelp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -