📄 test.asm
字号:
; ***************************************************************************
; * 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 + -