📄 els.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : ELS.ASM *
; ***************************************************************************
pw 128
case off
externs on
include st2202.def ;; Include ST2100 I/O define.
include Data.def ;; Data RAM define.
include Keydef.def
include graph.def
include bios.h
include graphics.h
; ***************************************************************************
SCORE_POS EQU 4
; ***************************************************************************
;; public els_event
public els_load
public els_keypress
public els_timer
public els_keyup
public els_keydown
public els_min
public els_sec
public els_hsec
;; include els.h
;;InputBuff equ 300h
GameState equ CData+1
Tag equ 700h
TagBack equ 400h
which_game equ 83h
GameStartFlag equ 84h
Row equ 85h
Col equ 86h
InitTypeEnable equ 87h
TimerEnable equ 88h
KeyEnable equ 89h
BigType equ 8ah
SmallType equ 8bh
BlockInvertFlag equ 8ch
position1 equ 8dh
position2 equ 8eh
position3 equ 8fh
position4 equ 90h
CenterPos equ 91h
BPos equ 92h
DelRow equ 93h
DelCol equ 94h
BRow equ 95h
KillFlag equ 96h
DeBug equ 97h
ZjwFlag equ 98h
KeyDownFlag equ 99h
EndGameFlag equ 9ah
Tscore equ 9bh
Hscore equ 9ch
Mscore equ 9dh
Lscore equ 9eh
Pre equ 9fh
ScoreFlag equ 0a0h
ElsSpeed equ 0a1h
ElsPause equ 0a2h
ElsSplitFlag equ 0a3h
ElsLeftContinue equ 0a4h
ElsRightContinue equ 0a5h
;;ElsChangeContinue equ 0a6h
;;=====================================================
public els_HSec
public els_Sec
public els_Min
public els_KeyDown
public els_KeyUp
public els_Timer
public els_KeyPress
public els_load
public els_helpRt
public basicimage
public big7position
public big6position
public big5position
public big4position
public big3position
public big2position
public bigposition
ds0 .SECTION ;;jrd!!!!
els_event:
dw els_bank ;;jrd!!!!
dw els_HSec-1
dw els_Sec-1
dw els_Min-1
dw els_KeyDown-1
dw els_KeyUp-1
dw els_Timer-1
dw els_KeyPress-1
dw els_Load-1
dw els_helpRt-1
ElsHelp:
db '按上,下键选择速度;按Enter开始游戏.',0dh
db '按左,右,下键移动方块;按上键旋转方块;按P键暂停或继续游戏',0
els_pausetable:
db 'PAUSED',0
els_clrpausetab:
db ' ',0
els_endimage:
db 'GAME OVER',0
els_defenimage:
db 'SCORE',0
els_speedimage:
db 'CHOOSE A SPEED:',0
els_speedstr:
db 'SPEED',0
;els_walltable2:
; db '********************',0
WallTable:
db 3,80
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
DB 11110110B
DB 11111111B
DB 01101111B
RandTypeTable:
db 1,4,6,5,4,1,2,3,2,3,4,1,2,3,2,3
db 1,7,2,1,7,2,3,1,1,6,7,2,3,1,1,6
db 1,7,7,2,2,5,1,4,5,4,2,5,1,4,5,4
db 4,1,4,6,7,5,7,5,6,2,7,5,7,5,6,2
db 6,6,1,4,4,6,7,6,3,5,4,6,7,6,3,5
db 1,7,1,5,7,7,2,2,3,2,7,7,2,2,3,2
db 4,2,4,1,2,3,2,3,4,1,2,3,2,3
clear_image_block:
db 15,24
BasicImage:
db 5,5
db 11111101b
db 01110111b
db 01011111b
db 10000000b
BigPosition:
dw 00h
dw Sub_Big1-1
dw Sub_Big2-1
dw Sub_Big3-1
dw Sub_Big4-1
dw Sub_Big5-1
dw Sub_Big6-1
dw Sub_Big7-1
Big2Position:
dw 00h
dw Big2_SmallType1-1
dw Big2_SmallType2-1
dw Big2_SmallType3-1
dw Big2_SmallType4-1
Big3Position:
dw 00h
dw Big3_SmallType1-1
dw Big3_SmallType2-1
dw Big3_SmallType3-1
dw Big3_SmallType4-1
Big4Position:
dw 00h
dw Big4_SmallType1-1
dw Big4_SmallType2-1
dw Big4_SmallType3-1
dw Big4_SmallType4-1
Big5Position:
dw 00h
dw Big5_SmallType1-1
dw Big5_SmallType2-1
dw Big5_SmallType1-1
dw Big5_SmallType2-1
Big6Position:
dw 00h
dw Big6_SmallType1-1
dw Big6_SmallType2-1
dw Big6_SmallType1-1
dw Big6_SmallType2-1
Big7Position:
dw 00h
dw Big7_SmallType1-1
dw Big7_SmallType2-1
dw Big7_SmallType1-1
dw Big7_SmallType2-1
ps0d .section
BankNo equ els_bank
els_helpRt:
bra els_Begin
els_Load:
LDA #1
STA <which_game
;stz <which_game ;;=0-9
els_Begin:
;;stz <ElsChangeContinue
stz <ElsLeftContinue
stz <ElsRightContinue
ldx #25
lsettimer
lda #10
sta <ElsSplitFlag
lda #>ElsHelp
sta <HelpTextPH
lda #<ElsHelp
sta <HelpTextPL
lda #Ds0Help ;;Set Flag
sta <HelpOffset ;;
stz <EndGameFlag
stz <ElsPause ;;clear ElsPause Flag
lsetscreen_to_ds0 0
;; lda #<ds0bank
;; sta <drr
;; lda #>ds0bank
;; sta <DrrH
stz <GameStartFlag
stz <TimerEnable
; stz <oy
; stz <ox
; ldrawtext els_walltable2
; lda #70-6
; sta <oy
; ldrawtext els_walltable2
; lsetscreen 0
stz <oy
lda #6
sta <ox
LoPrintimage WallTable
stz <oy
lda #160-6
sta <ox
LoPrintimage WallTable
lda #20
sta <oy
lda #20
sta <ox
ldrawtext els_speedimage
lda #76
sta <ox
lda #40
sta <oy
lda <which_game
ora #30h
tax
LDrawChar12
lda #<ds0bank
sta <drr
lda #>ds0bank
sta <DrrH
jmp jmplmainu
els_timer:
;;rmb3 <EFlag
lda #80h
sta <btsr
lda #1
cmp <TimerEnable
beq ?12
jmp ?123
?12:
lda <ElsLeftContinue
cmp #2
bne ?NotL2
lkeytone
jsr Sub_BigLeft
jmp ?qweR
?NotL2:
cmp #1
bne ?qweL
inc <ElsLeftContinue
jmp ?qweR
?qweL:
lda <ElsRightContinue
cmp #2
bne ?NotR2
lkeytone
jsr Sub_BigRight
jmp ?qweR
?NotR2:
cmp #1
bne ?qweR
inc <ElsRightContinue
?qweR:
lda <ElsSplitFlag
dec
sta <ElsSplitFlag
cmp <which_game
beq ?1
jmp jmp_LMAINU
?1:
lda #10
sta <ElsSplitFlag
;;******************************************
ldx #25
lsettimer
jsr Sub_BigDown
?123:
jmplmainu:
els_HSec:
els_Sec:
els_Min:
els_KeyPress:
jmp_LMAINU:
LMAINU
els_KeyUp:
;;stz <ElsChangeContinue
stz <ElsLeftContinue
stz <ElsRightContinue
jmp jmp_LMAINU
els_keydown:
lread_key_again
lkeytone
lda #1
cmp <EndGameFlag
bne ?LetsGo
lda <KeyNo
cmp #EscKey
bne ?NotEndEsc
jmp els_Begin
?NotEndEsc:
cmp #EnterKey
bne ?NotEndEnter
jsr Sub_GameInit
jmp jmplmainu
?NotEndEnter:
?LetsGo:
lda #1
cmp <GameStartFlag
beq ?dsfjkdsfl
jmp ?NotGameStart
?dsfjkdsfl:
lda #1h
cmp <KeyEnable
bne ?00034
lda <keyno
;;cmp #CKey
cmp #DownKey
bne ?00030
lda <ElsPause
cmp #1
beq ?pqoduvny
jsr Sub_BigDown
jsr delay_time
smb3 <Eflag
?pqoduvny:
jmp jmplmainu
?00030:
cmp #UpKey
;;cmp #VKey
bne ?00031
lda <ElsPause
cmp #1
beq ?edwsfiou
;;lda #1
;;sta <ElsChangeContinue
jsr Sub_BigChange
?edwsfiou:
jmp jmplmainu
?00031:
cmp #LeftKey
;;cmp #DKey
bne ?00032
lda <ElsPause
cmp #1
beq ?edwsf
lda #1
sta <ElsLeftContinue
jsr Sub_BigLeft
?edwsf:
jmp jmplmainu
?00032:
;;cmp #ShiftKey
cmp #RightKey
bne ?00033
lda <ElsPause
cmp #1
beq ?zijnuhb
lda #1
sta <ElsRightContinue
jsr Sub_BigRight
?zijnuhb:
jmp jmplmainu
?00033:
cmp #EscKey
bne ?00034
jmp els_Begin
?00034:
cmp #PKey
bne ?00035
lda #<ds0bank
sta <drr
lda #>ds0bank
sta <DrrH
inc <ElsPause
lda <ElsPause
cmp #1
bne ?NotToPause
stz <TimerEnable
lda #64
sta <oy
lda #112
sta <ox
ldrawtext els_pausetable
jmp jmplmainu
?NotToPause:
lda <ElsPause
cmp #2
bne ?NotReturnTimer
stz <elsPause
lda #1
sta <TimerEnable
lda #64
sta <oy
lda #112
sta <ox
ldrawtext els_clrpausetab
;;lda #1
;;sta <KeyEnable
?NotReturnTimer:
?00035:
jmp jmplmainu
?NotGameStart:
lda <keyno
cmp #DownKey
bne ?NotDownKeyPress
inc <which_game
lda <which_game
cmp #10
bne ?NotSpeed10
LDA #1
STA <which_game
;stz <which_game
?NotSpeed10:
lda #76
sta <ox
lda #40
sta <oy
lda <which_game
ora #30h
tax
LDrawChar12
jmp jmplmainu
?NotDownKeyPress:
cmp #UpKey
bne ?NotUpKeyPress
dec <which_game
lda <which_game
;cmp #255
bne ?NotSpeed0
lda #9
sta <which_game
?NotSpeed0:
lda #76
sta <ox
lda #40
sta <oy
lda <which_game
ora #30h
tax
LDrawChar12
lda #<ds0bank
sta <drr
lda #>ds0bank
sta <DrrH
jmp jmplmainu
?NotUpKeyPress:
cmp #EscKey
bne ?NotEscKeyPress
;;================================
;;ESC 键退出到 ---> 已下载游戏菜单:
?liu_add_here:
;; lda #<NetMenuSub1
;; sta StrAddrL
;; lda #>NetMenuSub1
;; sta StrAddrH
;; lda #0
;; sta ItemStart
;; sta ItemOffset
;; ldx #15 ;;<Mode
;; stx <ModeSave ;; Save last mode。
;; lda #MenuMode
;; sta <Mode ;; Enter Menu Select Mode
;; smb7 <EFlag
;; jmp jmp_LMAINU
stz <ExtraMode
lda #>Els_Return-1
pha
lda #<Els_Return-1
pha
lda #>GameBank
pha
lda #<GameBank
jmp longgo
?NotEscKeyPress:
cmp #EnterKey
bne ?NotEnterKeyPress
smb0 <GameStartFlag
jsr Sub_GameInit
?NotEnterKeyPress:
jmp jmplmainu
Sub_GameInit:
;;*********************
;; 初始化 Timer 事件
;;*********************
ldx #25
lsettimer
;;jsr count_timer_value
;;**********************
;; 建墙
;;*********************
lsetscreen 0
stz <oy
lda #56
sta <ox
LoPrintimage WallTable
stz <oy
lda #109
sta <ox
LoPrintimage WallTable
;;********************************
;; 初始化参数: Score,InitTypeEnable,Row,Col
;; DownEnable,TimerEnable,KeyEnable
;;********************************
stz <Tscore ;; Score=0
stz <Hscore
stz <Mscore
stz <Lscore
stz <InitTypeEnable ;; InitTypeEnable=0
lda #1
sta <Row ;; Row=14
lda #5H
sta <Col ;; Col=5
lda #1h
sta <TimerEnable ;; TimerEnable=1
sta <KeyEnable ;; KeyEnable=1
stz <KeyDownFlag
stz <EndGameFlag
;;********************************
;; 显示分数
;;*********************************
lda #20
sta <oy
lda #SCORE_POS
; lda #8
sta <ox
ldx #30h
LDrawChar12
lda #SCORE_POS+8
; lda #16
sta <ox
ldx #30h
LDrawChar12
lda #SCORE_POS+16
; lda #24
sta <ox
ldx #30h
LDrawChar12
lda #SCORE_POS+24
; lda #32
sta <ox
ldx #30h
LDrawChar12
lda #SCORE_POS+32
; lda #40
sta <ox
ldx #30h
LDrawChar12
lda #SCORE_POS+40
; lda #48
sta <ox
ldx #30h
LDrawChar12
lda #<ds0bank
sta <drr
lda #>ds0bank
sta <DrrH
lda #4
sta <oy
lda #0
sta <ox
ldrawtext els_defenimage
lda #4
sta <oy
lda #116
sta <ox
ldrawtext els_speedstr
lda #20
sta <oy
lda #132
sta <ox
lda <which_game
ora #30h
tax
LDrawChar12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -