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

📄 test.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 3 页
字号:
; ***************************************************************************
; *     Project : Electronic Dictionary                                     *
; *        Date : 2003.9                                                    *
; *   File Name : TEST.ASM                                                  *
; ***************************************************************************

        pw      128
        case    off
        externs on

        include st2202.MAC
        include st2202.def      ;; Include ST2100 I/O define.
        include Data.def        ;; Data RAM define.
        include Bios.h
        include Graphics.h
        include KeyDef.def
        include Graph.def
        include xyhaddr.h
	include	talkword.def

        public  updatescreen_5000_or
        public  if_update_5000icon_or
        public  ShowState_in_test
        public  sum_init_and_checksum
        public  read_key_again

        public  warm_up_start_last
        public  JIntXInt_in_ds0
        public  srx_int_in_ds0
        public  stx_int_in_ds0
        public  lcd_int_in_ds0
        public  test_all_icon
        public  invert_5000_or
        public  test_check_secret
        public  CheckSum1
        public  CheckSum2
        public  CheckSum3
        public  CheckSum4
        public  drr_max_ram
        public  LowBatDetect
        public  EntPowOff_process
        public  EntPowon_process
;        public  test_main_5000
;        public  test_mainu_5000
        public  test_main_yh
        public  test_mainu_yh
;;=====================================================
;;       >>> Constant define <<<
;;           ---------------

;;=====================================================
;;       >>> Data RAM define <<<
;;           ---------------
TMode   equ     CData+0
;; 0 :
;; 1 : LCD test mode.
;; 2 : Key test mode.

;; 3 : Show : OSC and battery and 五笔 mode
edata	equ	800h

TestMenuI       equ     CData+0
TempCount       equ     CData+4
TempCount1      equ     CData+5
test_menu_mode  equ     CData+6
OSCFreq         equ     CData+9
CheckSum1       equ     CData+11
CheckSum2       equ     CData+12
CheckSum3       equ     CData+13
CheckSum4       equ     CData+14
TestState       equ     CData+15
drr_max_ram     equ     CData+16
test_temp       equ     CData+17
lcd_address_l   equ     CData+18
lcd_address_h   equ     CData+19
lowbat_flag     equ     CData+20

ds0     .SECTION
system_error:
        db      '     系统错误!',0dh,'请记住您刚才所用画面!',0

keytone_ok_string:
        db      '声音OK!',0

LowBatMs_inf:
        db      0dh
        db      '     电量不足',0dh             ;;
        db      '     请换电池!',0           ;;
        public  TestTLoad
        public  lowbatevent
;;=====================================================
;;=====================================================

;;===================================================
SoftTestMenu0:
        db      '1.ROM测试',0dh
SoftTestMenu1:
        db      '2.频率与电压',0dh
SoftTestMenu2:
        db      '3.RAM测试',0dh
        db      '4.LCD测试',0dh
        db      '5.按键测试',0dh
        db      '6.声音测试',0dh
        db      '7.退出测试',0

LcdTest:        db      'LCD测试',0dh
                db      ' 每秒闪一次,共5次',0
lcdtest_finish: db      0dh,0dh,'    LCD测试完毕!',0
lcdtest_icon:   db      0dh,0dh,'    Icon 测试...',0
lcd_screen:     db      0dh,'LCD屏幕所有点测试,LCD逐点点亮后再熄灭2次',0
disp_key_test:
        db      0dh,'     按键测试',0

OSCMsg:
        db      '频率: 0.00 MHz',0dh         ;; 频率
        db      '电池电压:',0                ;; 电池电压:

NorBatMs:
        db      '正常',0               ;; 正常

LowBatMs:
        db      '低压',0       ;; 低压

rom_testing:    db      0dh
                db      '     ROM测试中',0dh
                db      '     请稍等....',0

RomTestMsg:
                db      'Checksum:',0dh
                db      0dh
                db	'Flash:',0dh
                db      'ICRom',0dh
                db      'MKRom:',0

RamTestMsg:     db      'Ram test..',0
ramokmsg:       db      'OK!',0
ramerrormsg:    db      'ERROR!',0
esc_key_in_key_test:
                db      0dh,'     按了ESC键,',0dh
                db          '     退出键测试!',0

;;=====================================================
block_1x1:
                db      1,1
                db      0ffh
LowBatEvent:

JIntXInt_in_ds0:
        jmp     ds0_int_exit
        dw      0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh  ;用于扩展!

srx_int_in_ds0:
        jmp     ds0_int_exit
        dw      0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh  ;用于扩展!

stx_int_in_ds0:
        jmp     ds0_int_exit
        dw      0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh  ;用于扩展!

lcd_int_in_ds0:
        jmp     ds0_int_exit
        dw      0ffffh,0ffffh,0ffffh,0ffffh,0ffffh,0ffffh  ;用于扩展!

ds0_int_exit:
        pla
        sta     <drrl
        pla
        sta     <drrh
        pla
        rti

PS6     .SECTION
BankNo  equ     TestBank

;;[E]-----------------------------------------------[E]
;;       进入此 Mode 事件处理程序.
;;[E]-----------------------------------------------[E]
TestTLoad:
        sei                     ;; Disable all interrupt.
        ldx     #0ffh
        txs                     ;; Set SP to stack's top.
        nop
        cli
        jsr     ljsr
        dw      DelDataBank
        dw      select_ic-1
        lReadOldContrast
        lset_lcd_contrast

        lda     #NullHelp-HelpTable
        sta     <HelpOffset

TestTLoad0:
        LSetScreen_to_ds0 1       ;; Set screen mode #0.

        ldx     #20
ClearCData:
        stz     <CData,x
        dex
        bne     ClearCData

ShowTestMenuX:
        jsr     ShowTestMenu
        stz     <EFlag

WaitTestEvent:
        wai
        nop
        bbs3    <EFlag,NoTHSecEvent
        bbr0    <EFlag,NoTHSecEvent
        rmb0    <EFlag
        lda     <TestState
        beq     WaitTestEvent
        jmp     THSec
NoTHSecEvent:
        bbr3    <EFlag,WaitTestEvent
        jsr     read_key_test
        LKeyTone
        rmb3    <EFlag
        lda     <TestState
        beq     TestMenuSelState
        stz     <TestState
        jmp     TestTLoad0

TestMenuSelState:
        lda     <KeyNo
        cmp     #esckey
        bne     ?xxxxxx
        jmp     ExitTestState
?xxxxxx:
        cmp     #UpKey
        beq     TestIsUpKey
        cmp     #DownKey
        beq     IsTestDownKey
        cmp     #EnterKey
        bne     WaitTestEvent
;;EnterKey
        jmp     EntInitTest
TestIsUpKey:
        lda     <TestMenuI
        beq     WaitTestEvent
        dec     <TestMenuI
        bra     ShowTestMenuX
IsTestDownKey:
        lda     <TestMenuI
        cmp     #6  ;;4
        beq     WaitTestEvent
        inc     <TestMenuI
        bra     ShowTestMenuX

;;Show Test Menu
disp_menu_tab:
        dw      SoftTestMenu0
        dw      SoftTestMenu0
        dw      SoftTestMenu0
        dw      SoftTestMenu0
        dw      SoftTestMenu0
        dw      SoftTestMenu1
        dw      SoftTestMenu2
disp_menu_oy:
        db      0,16,32,48,64,64,64
width_tab_for_blockinvert:
        db      72,96,72,72,80,80,80
ShowTestMenu:
        LSetScreen_to_ds0 1
        stz     <CurX
        stz     <CurY
        lda     <TestMenuI
        asl
        tax
        lda     disp_menu_tab,x
        tay
        lda     disp_menu_tab+1,x
        tax
        LPrint
        jsr	CALL_LUpdateScreen
        stz     <OX
        ldx     <TestMenuI
        lda     disp_menu_oy,x
        sta     <OY
        lda     #16
        sta     <image_hight_temp
        lda     width_tab_for_blockinvert,x
        sta     <image_width
        LBlockInvert
        rts
;;[E]-----------------------------------------------[E]
;;       半秒钟事件处理程序.
;;[E]-----------------------------------------------[E]
THSec:
        lda     <test_menu_mode
        cmp     #1
        beq     ShowState_in_test
        jmp     WaitTestEvent

;;[P]-----------------------------------------------[P]
;;       Show OSC & battery & 五笔。
;;[P]-----------------------------------------------[P]
ShowState_in_test:
;;      jsr     CalOSC
        jsr     ljsr
        dw      biosbank
        dw      CalOSC-1

        ldx     <OSCFreq
        LA2XY
        stx     Textbuffor+8
        sty     Textbuffor+9
        ldx     <OSCFreq+1
        LA2XY
        sty     Textbuffor+6
        cpx     #'0'
        bne     sst5
        ldx     #' '
sst5:   stx     Textbuffor+5
        LSetCur 10,1             ;; Set cursor location(6,2)
        ldx     #>NorBatMs
        ldy     #<NorBatMs
        jsr     lowbat_test
        bcs     ?1
        ldx     #>LowBatMs
        ldy     #<LowBatMs
?1:
        LPrint
        jsr	CALL_LUpdateScreen
        jmp     WaitTestEvent

EntInitTest:
        lda     #1
        sta     <TestState
        lda     <TestMenuI
        sta     <test_menu_mode
        sta     <TMode
        LSetScreen_to_ds0 1    ;; Screen mode.
        lda     <TestMenuI
        asl
        tax
        lda     load_event_for_test+1,x
        pha
        lda     load_event_for_test,x
        pha
        rts
load_event_for_test:
        dw      RomChkSum-1
        dw      EntShowOSC-1
        dw      RamTest-1
        dw      load_for_lcd_test_in_test-1
        dw      load_for_key_test-1
        dw      load_for_sound_test-1
        dw      ExitTestState-1

;;=========================================
load_for_key_test:
        LSetScreen_to_ds0  1
        lprint   disp_key_test
        jsr	CALL_LUpdateScreen
?sleep:
        rmb3     <eflag
        wai
        bbr3     <eflag,?sleep
        lda      <keyno
        cmp      #EscKey
        bne      ?disp_key_what
        LSetScreen_to_ds0 1
        lprint   esc_key_in_key_test
        jsr	CALL_LUpdateScreen
        bbr1     <eflag,$
        rmb1     <eflag
        bbr1     <eflag,$
        jsr      ShowTestMenu
        stz      <TestState
        jmp      WaitTestEvent
?disp_key_what:
        jsr      display_key_in_test
        bra      ?sleep

display_key_in_test:
        lkeytone
        ldx      <keyno
        la2xy
        stx      textbuffor+70
        sty      textbuffor+71
        jsr	CALL_LUpdateScreen
        rts

;;=========================================
load_for_sound_test:

	JSR     LJSR
	DW      CardBank
	DW      RESET_SP104-1

	JSR     LJSR
	DW      CardBank
	DW      SP140_WakeUp-1

	LDA	#$C5
	STA	R_Tts1DataLength
	STZ	R_Tts1DataLength+1
	MOVL_C  VoiceNoL,DIALOG_ADDR

	JSR     LJSR
	DW      CardBank
	DW      PLAY_PHRASE-1

        LKeyTone

        LSetScreen_to_ds0 1
        lsetcur  6,2
        lprint  keytone_ok_string
        jsr	CALL_LUpdateScreen
        bra     ExitWithU

;;=========================================
load_for_lcd_test_in_test:
        LSetCur 6,1
        LPrint  LcdTest
        jsr	CALL_LUpdateScreen

        jsr     half_sec_invert_screen
        jsr     lcd_go_2_times
        jsr     test_all_icon

        LSetScreen_to_ds0 1
        lprint  lcdtest_finish
        jsr	CALL_LUpdateScreen
        bra     ExitWithU
ExitTestState:
        lkeytone
        bbs4    <soundflag,$
        stz     <drrh
        lda     #ds0bank
        sta     <drrl
        lda     bios_to_deldata_tab+3
        pha
        lda     bios_to_deldata_tab+2
        pha
        lda     bios_to_deldata_tab+1
        pha
        lda     bios_to_deldata_tab+0
        jmp     longgo

;;[P]-----------------------------------------------[P]
;;       Entry show OSC frequency and Low battry
;;       and "五笔输入" option.
;;[P]-----------------------------------------------[P]
EntShowOSC:
        LPrint OSCMsg
ExitWithU:
        jsr	CALL_LUpdateScreen
        jmp     WaitTestEvent

RamTest:
        LSetCur 5,1
        LPrint  RamTestMsg
        jsr	CALL_LUpdateScreen
        jsr     RamTesting
        bra     ExitWithU

;;[S]-----------------------------------------------[S]
;;       Calculat the OSC frequency.
;;[S]-----------------------------------------------[S]
;;CalOSC:
        sei                     ;; Disable all interrupt.
        stz     <OSCFreq        ;; Clear OSC frequency.
        stz     <OSCFreq+1

        rmb3    <IREQL          ;; PreClear timer1 interrupt request flag.
        rmb5    <EFlag          ;; PreClear timer1 event flag.

;;      lda     #00011011b      ;; OSCX/32 = 1024 Hz(976.6uS)
        lda     #00011010b      ;; OSCX/64 = 2048 Hz(976.6uS*2)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -