📄 catalog.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : CATALOG.ASM *
; ***************************************************************************
;--<< Program imformation >>--
;[D]--------------------------------------------------------------[D]
; Programming Status : Okay.
; Item Number : DrCard (Electric-dictionary)
; Development Company : MICON Electronic Co., Ltd.
; Development Date : 1998,DEC.(Final version 2000,APR,20th)
; Design by : Vincent Ho
; Micro-controller unit : ST2100 (Sitronix)
; Crystal oscillation : 32768 Hz
; RC oscillation : 2M Hz
; Instruction cycle : 122 uS (Slow)
; 2 uS (Fast)
; Symbol description :
; ========= : Address & bank.
; [D]---[D] : Define.
; [T]---[T] : Table.
; [V]---[V] : Vector.
; [I]---[I] : Interrupt.
; [S]---[S] : Subroutine.
; [P]---[P] : Procedure.
;[D]--------------------------------------------------------------[D]
chip W65C02S ; Define chip : ST2100 base on 65c02.
pw 128 ; .LST's page width = 128 character.
case off ; Don't care Upper-case or lower-case.
externs on ; Make all labels public.
include ST2202.MAC
include ST2202.def ; Include ST2100 I/O define,
include DATA.def ; Data RAM define,
include KEYDEF.def ; Key define,
include GRAPH.def ; Graph RAM define.
include BIOS.h ; BIOS's head.
include GRAPHICS.h ; GRAPHICS's haed.
public DrawLine
public ShowAnim_Mend
public FreshLcd
;=====================================================
include fulu1.def
StartX equ CData+15
StartY equ CData+16
EndX equ CData+17
EndY equ CData+18
temp_numl equ CData+20
temp_numh equ CData+21
temp_leftl equ CData+22
temp_lefth equ CData+23
temp_left equ CData+24
temp_right equ CData+25
temp_bit_num equ CData+26
temp_rightl_bak equ CData+27
temp_righth_bak equ CData+28
temp_leftl_bak equ CData+29
temp_lefth_bak equ CData+30
open_flag_addr equ 8005h
;========================================================
public Catalogevent
PUBLIC TLoad_catalog0
public tempy_catalog
public catalog_esckey_program
public ban_duan_all_icon
public ban_duan_if_left_icon
public ban_duan_yan_yu_end_begin
public ban_duan_bu_gui_end_begin
public ban_duan_name_end_begin
Item_mode equ 285h
tempy_catalog equ 0fffh ;;此变量应为不被破坏之变量
init_mode equ 0 ;4
fu_lu_mode equ 17
dirmode equ 0
;========================================================
ds0 .SECTION ; Program ROM location 4000h
Catalogevent:
dw CatalogBank
dw THSec-1
dw TSec-1
dw TMin-1
dw TKeyDown-1
dw TKeyUp-1
dw TTimer-1
dw TUnLoad-1
dw tload_0_catalog-1
dw HelpRet-1
;;总目录帮助
catalog_help:
db '按上下左右键移动黑块.',0dh
db '[输入]键进入该功能.',0
event_table:
;db 21,20,9,13,18,14,11,17,15
; db 15,Card_bakMode,16
; db 7,13,1
; db 8,9,12
db 17+4,Card_bakMode,24+4
db 7,12+4,8
db 19+4,13+4,9
MenuLibData .SECTION ; Data ROM location 10000h(Bank#2)
OPENNING:
include opening.asm
include mainmenu.asm
;[P]=========================================[P]
PS0b .SECTION ; Program ROM location 4000h
BankNo equ CatalogBank
;================================================
;[E]-------------------------------[E]
THSec:
jmp jmp_to_lmainU
TUnLoad:
TKeyUp:
TSec:
TMin:
ExitNoUpdate:
TTimer:
jmp jmp_to_lmainU
HelpRet:
lda HelpRtPrc+1
pha
lda HelpRtPrc
pha
rts
tload_0_catalog:
STZ <SYSF
STZ <StartX
STZ <StartY
lda #NullHelp-HelpTable
sta <HelpOffset ;; Preset null help.
;;;yiadd 2-10-31
lsetscreen 0
lda power_flag
and #01h ;;=1是开机
bne ?_zxzx
jmp _DonotSpecial
?_zxzx:
and #0feh
sta power_flag
LDA <PC
AND #02H
BNE ?POWER_OK
jmp lvd_turn_off
?POWER_OK:
JSR LJSR
DW CardBank
DW RESET_SP104-1
JSR LJSR
DW CardBank
DW SP140_Sleep-1
lda #>flashbank
sta <drrh
lda #<flashbank
sta <drrl
lda #<open_flag_addr
sta <indl
lda #>open_flag_addr
sta <indh
lda (<ind)
beq ?_donghua
cmp #0ffh
beq ?_donghua
cmp #1
beq ?_time
lda #0 ;#4
sta tempy_catalog
lda #NewEnChMode
sta <mode
lda #80h
sta <Eflag
jmp jmp_to_lmain
?_time:
stz tempy_catalog
lda #2
sta <mode
lda #80h
sta <Eflag
jmp jmp_to_lmain
?_donghua:
lda #>MenuLibDataBank
sta <drrh
lda #<MenuLibDataBank
sta <drrl
lda #<OPENNING
sta <INSL
lda #>OPENNING
sta <INSH
jsr ShowAnim_Mend
jsr FreshLcd
bbs3 <EFlag,_DonotSpecial
;jsr LJSR
;dw ps1_Bank
;dw ShowAnim-1
;lcls
;jsr show_one_screen ;;显示第一屏
WAI ; by J.A.
NOP
WAI ; by J.A.
NOP
;jsr delay2s by J.A.
;jsr OpenScrSplit
; rmb1 <Eflag
;?_DelayOneSecond:
; bbs1 <Eflag,?_DelayOneSecondOK
; bbs3 <EFlag,?_DonotSpecial
; bra ?_DelayOneSecond
;?_DelayOneSecondOK:
; rmb1 <Eflag
;?_zzz: bbs3 <EFlag,?_DonotSpecial
; bbr1 <EFlag,?_zzz
; jsr move_scr_up_down
; rmb1 <Eflag
;?_xx: bbs3 <EFlag,?_DonotSpecial
; bbr1 <Eflag,?_xx
; rmb0 <Eflag
;?_xxx: bbs3 <EFlag,?_DonotSpecial
; bbr0 <Eflag,?_xxx
; rmb0 <Eflag
?_DonotSpecial:
_DonotSpecial:
;;yiadd
lda <keyno
cmp #PowerKey
bne _not_powerK
turn_off:
LPOWEROFF_BUG
_not_powerK:
lda #init_mode
sta tempy_catalog
TLoad_catalog0:
lda #fu_lu_mode
sta Item_mode
TLoad_catalog:
; ;startuart
; LDA #80H
; STA <INSL
; LDA #09H
; STA <INSH
;?HERE:
; LDA #$FF
; STA (<INSL)
; PUTSIO <INSH
; PUTSIO <INSL
;
; bbr3 <EFlag,$ ;; Branch if not Key down event.
; RMB3 <EFlag
;
; LDA #0
; STA (<INSL)
;
; CLC
; LDA <INSL
; ADC #20
; STA <INSL
; LDA <INSH
; ADC #0
; STA <INSH
;
; BRA ?HERE
JSR LJSR
DW CardBank
DW RESET_SP104-1
JSR LJSR
DW CardBank
DW SP140_Sleep-1
LSetScreen 0
jsr get_help
jsr show_screen
jmp jmp_to_lmainu
catalogkeytable:
db enterkey
db leftkey
db rightkey
db upkey
db downkey
db nullkey
catalogkeyprogram:
dw goto_enterkey-1
dw goto_leftkey-1
dw goto_rightkey-1
dw goto_upkey-1
dw goto_downkey-1
TKeyDown:
lread_key_again
lkeytone
lda <keyno
cmp #80h
bne ?xxxx
JMP jmp_lmainU
?xxxx:
cmp #TKey
bne ?0
inc <StartX
lda <StartX
cmp #5
bcc ?1
lda #>TestTLoad-1
pha
lda #<TestTLoad-1
pha
lda #>TestBank
pha
lda #<TestBank
jmp longgo
?0:
;?0: CMP #YKey
; bne ?2
; stz <StartX
;
; inc <StartY
; lda <StartY
; cmp #5
; bcc ?1
;
; jmp senddatatopc
;?2 stz <StartY
; stz <StartX
?1:
lda <keyno
cmp #esckey
beq esc_to_mulu
bra not_input_mima_status
;bbr0 <mima_flag,not_input_mima_status
;bra is_input_mima_status
esc_to_mulu:
jmp TLoad_catalog
not_input_mima_status:
ldy #0ffh
TKeyDown_loop:
iny
lda catalogkeytable,y
bmi end_TKeyDown
cmp <KeyNo
bne TKeyDown_loop
tya
asl
tay
lda catalogkeyprogram+1,y
pha
lda catalogkeyprogram,y
pha
rts
end_TKeyDown:
jmp jmp_to_lmainu
goto_enterkey:
ldy tempy_catalog
;cpy #7 ;;娱乐要加密码
;beq to_happy
goto_enterkey_second:
lda event_table,y
sta Item_Mode
sta <mode
lda #80h
sta <Eflag
jmp jmp_to_lmain
goto_upkey:
jsr lblock_mode
lda tempy_catalog
CMP #0
BEQ goto_upkey00
CMP #2
BEQ goto_upkey02
CMP #1
BEQ goto_upkey01
sec
lda tempy_catalog
sbC #3
goto_upkey_end:
STA tempy_catalog
jsr lblock_mode
bra goto_leftkey_end
goto_upkey02:
LDA #7
bra goto_upkey_end
goto_upkey01:
LDA #6
bra goto_upkey_end
goto_upkey00:
LDA #8
bra goto_upkey_end
;lda tempy_catalog
;cmp #3
;bcc goto_leftkey_end
;jsr lblock_mode
;lda tempy_catalog
;sec
;sbc #3
;sta tempy_catalog
;jsr lblock_mode
;bra goto_leftkey_end
goto_downkey:
jsr lblock_mode
lda tempy_catalog
CMP #6
BEQ goto_downkey06
CMP #7
BEQ goto_downkey07
CMP #8
BEQ goto_downkey08
CLC
lda tempy_catalog
ADC #3
goto_downkey_end:
STA tempy_catalog
jsr lblock_mode
bra goto_leftkey_end
goto_downkey06:
LDA #1
bra goto_downkey_end
goto_downkey07:
LDA #2
bra goto_downkey_end
goto_downkey08:
LDA #0
bra goto_downkey_end
;lda tempy_catalog
;cmp #6
;bcs goto_leftkey_end
;jsr lblock_mode
;lda tempy_catalog
;clc
;adc #3
;sta tempy_catalog
;jsr lblock_mode
;bra goto_leftkey_end
goto_leftkey:
jsr lblock_mode
lda tempy_catalog
beq goto_leftkey00
dec tempy_catalog
jsr lblock_mode
goto_leftkey_end:
jmp jmp_to_lmainu
goto_leftkey00:
lda #8
jmp goto_downkey_end
goto_rightkey:
jsr lblock_mode
lda tempy_catalog
cmp #8
beq goto_rightkey08
inc tempy_catalog
jsr lblock_mode
bra goto_leftkey_end
goto_rightkey08:
lda #0
jmp goto_downkey_end
show_screen:
jsr show_mulu
jsr lblock_mode
rts
ox_table:
db 3,55,108,3,55,108,3,55,108
oy_table:
db 4,4,4,31,31,31,57,57,57
lblock_mode:
ldy tempy_catalog
lda ox_table,y
sta <ox
lda oy_table,y
sta <oy
lblockinvert 49,18 ;32,16
rts
catalog_esckey_program:
jsr ljsr
dw biosbank
dw InitAll-1
lda #DirMode
sta <Mode
lda #08h ;; Set mode entry event flag.
sta <EFlag ;; Clear all event flag.
lda #0ffh
sta event_kill
ldy tempy_catalog
lda event_table,y
sta Item_Mode
jmp tload_catalog
get_help:
lda <DRRH ;;帮助
sta DRR_RTH
lda <DRRL ;;帮助
sta DRR_RTL
lda #Ds0Help
sta <HelpOffset
lda #<tload_0_catalog-1
sta HelpRtPrc
lda #>tload_0_catalog-1
sta HelpRtPrc+1
lda #>catalog_help
sta helptextph
lda #<catalog_help
sta helptextpl
rts
incins:
inc <INSL
bne ?_1
inc <INSH
?_1:
rts
incind:
inc <INDL
bne ?_0
inc <INDH
?_0:
rts
decind:
sec
lda <indl
sbc #1
sta <indl
lda <indh
adc #0
sta <indh
rts
decins:
sec
lda <insl
sbc #1
sta <insl
lda <insh
adc #0
sta <insh
rts
show_one_screen:
lda #<lcd_start_add
sta <INDL
lda #>lcd_start_add
sta <INDH
?_2:
lda (<INS)
sta (<IND)
jsr incind
jsr incins
?_1: lda <INDL
cmp #0c0h ;#0adh
bne ?_2
lda <INDH
cmp #0fh
bne ?_2
rts
;Special display ^|
;
;move_scr_up_down:
; lda #<Two
; sta <StartX
; lda #>Two
; sta <StartY
; stz <temp_numl
; stz <temp_numh
;?_0:
; stz <OY
; bbr3 <Eflag,?_1
; rts
;?_1:
; lda <OY
; asl
; tay
; lda draw_16,y
; sta <INDL
; lda draw_16+1,y
; sta <INDH
; lda draw_16+2,y
; sta <INSL
; lda draw_16+3,y
; sta <INSH
; ldy #0
;?_2:
; lda (<INS),y
; sta (<IND),y
; iny
; cpy #20
; bcc ?_2
; inc <OY
; lda <OY
; cmp #60-1 ;#47+14
; bcc ?_1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -