⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bios.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        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 + -