📄 cs5405e.asm
字号:
CHIP W65C02S
INCLIST ON
MACLIST ON
;************************
.INCLUDE main.H
.INCLUDE main.mac
.INCLUDE mem.inc
;*************************
.CODE
ORG F200H
;*******************
START:
.INCLUDE main_ini.asm
;-----------------------------------------------
JSR F_LcdAllOn
; LDA #00H
; STA R_TMCnt
cli
CLRB B_KeyLeft
CLRB B_KeyRight
CLRB B_WithKey ;B_NormState
LDA #00H
STA R_TmCnt1Min
STA R_TmCnt1Min+1
CLRB B_Sleep
L_Wait2S:
JSR F_LcdAllOn
JSR F_Checkkey
JSR F_KeyFunction
JSR F_Check2Min
JB B_WithKey,L_ReStart
JNB B_Sleep,L_Wait2S
JMP L_Sleep
; LDA R_TMCnt
; CMP #14
; BCC L_Wait2S
L_ReStart:
JSR F_LcdAllOff
SMB3 COM2_H
SMB4 COM2_L
; LDA #0
; STA R_TMCnt
LDA #0h ;START
JSR PlaySound
L_Wait1SX:
JSR F_UpDataSound
; LDA R_TMCnt
; CMP #32
; BCC L_Wait1SX
jb fSounding,L_Wait1SX
LDA #STACK_PTR ; stack ﹍address
_AToSP
JSR F_ClrRam
JSR F_GameInit
SETB B_WithKey
SMB3 COM2_H
SMB4 COM2_L
; JMP L_Sleep
;loop
; LDA #01h
; JSR PlaySound
;loop2
; JSR F_UpDataSound
; jb fSounding,loop2
; jmp loop
LDA #256-29
STA R_TMCnt
;=============================================================================
MAIN:
INC R_Buffer
INC R_Buffer2
JNB B_AutoFunc,MainRt0
; JNB B_KeyHoldIncEn,MainRt0X
CLRB B_AutoFunc
LDA R_SnowManMov
CMP #1
BEQ MainRt0
LDA #8 ;land from jump
JSR PlaySound
MainRt0X
JSR F_AutoFunc
MainRt0
JSR F_Checkkey
JSR F_KeyFunction
JSR F_UpDataSound
JSR F_Check2Min
JNB B_UpDtCup,MainRt1
INC R_Buffer
JSR UpDtCupRt
MainRt1
JNB B_Sleep,MainRt4
JMP L_Sleep
MainRt4:
JNB B_UpLevel,MainRt5
JSR L_UpLevel
MainRt5
JMP MAIN
;===========================================================
ChkCupRow3
JB B_SnowManLL,ExitChkRow3
JB B_SnowManRR,ExitChkRow3
BBS1 R_SnowManMov,ChkCupRow32
BBS0 R_SnowManMov,ChkCupRow31
ChkCupRow30
BBR0 CupRow3,ExitChkRow3
DEC R_CupCnt
BNE ChkCupRow3C
JMP L_UpLevel
; SETB B_UpLevel
ChkCupRow3C
LDA #1 ;CUP
JSR PlaySound
;LOOP4:
; JSR F_UpDataSound
; jb fSounding,LOOP4
ExitChkRow3
RTS
;----------------------------------------
ChkCupRow31
BBR1 CupRow3,ExitChkRow3
DEC R_CupCnt
BNE ChkCupRow3C
; SETB B_UpLevel
JMP L_UpLevel
RTS
ChkCupRow32
BBR2 CupRow3,ExitChkRow3
DEC R_CupCnt
BNE ChkCupRow3C
JMP L_UpLevel
; SETB B_UpLevel
RTS
;===========================================================
ChkTrunkRow3
JB B_SnowManLL,ExitChkRow3
JB B_SnowManRR,ExitChkRow3
BBS1 R_SnowManMov,ChkTrunkRow32
BBS0 R_SnowManMov,ChkTrunkRow31
ChkTrunkRow30
BBR0 TrunkRow3,ExitChkRow3
SETB B_Lose
RTS
ChkTrunkRow31
BBR1 TrunkRow3,ExitChkRow3
SETB B_Lose
RTS
ChkTrunkRow32
BBR2 TrunkRow3,ExitChkRow3
SETB B_Lose
RTS
;=================================================================
L_GameWin_
JMP L_GameWin
L_UpLevel
CLRB B_UpLevel
; CLRB B_NormState
LDA R_Level
CMP #04h
BCS L_GameWin_
LDA #04H ;uplevel
JSR PlaySound
LDA #1
STA R_SnowManMov
JSR Wait400MS
JSR UpLevelPlay
JSR UpLevelPlay
JSR UpLevelPlay
JSR Wait400MS
CLRB B_UpDtCup
LDA #00H
STA R_TMCnt_1500ms
INC R_Level
JSR LevDatReld
LDA #0H
STA CupRow1
STA CupRow2
STA CupRow3
STA TrunkRow1
STA TrunkRow2
STA TrunkRow3
SETB B_FlashLevelDisp
SETB B_FlashCupDisp
SETB B_FlashTrunkDisp
SETB B_FlashDisp
JSR DispLcdRout
JSR NoKey
RTS
;-------------------------------------
UpDtCupRt
CLRB B_UpDtCup
JSR ChkTrunkRow3
JB B_Lose,L_GameLose
JSR ChkCupRow3
LDA TrunkRow2
STA TrunkRow3
LDA TrunkRow1
STA TrunkRow2
LDA R_Level
CMP #04h
BCS L_GElevel3
JSR GetTrunkTab
JMP UpDtCupRtC
L_GElevel3
JSR GetGE3TrunkTab
UpDtCupRtC
LDA CupRow2
STA CupRow3
LDA CupRow1
STA CupRow2
JSR GetCupTab
SETB B_FlashTrunkDisp
SETB B_FlashCupDisp
SETB B_FlashDisp
JMP DispLcdRout
F_GameInit:
LDA #0H ;no lose life
STA R_Life
LDA #1H ;level 1
STA R_Level
LDA #35
STA LevelTmCnt ;50,40,30,20
LDA #20
STA R_CupCnt
SETB B_FlashLifeDisp
SETB B_FlashLevelDisp
F_GameInit2
; JSR F_LcdAllOff
LDA #0H
STA CupRow1
STA CupRow2
STA CupRow3
STA TrunkRow1
STA TrunkRow2
STA TrunkRow3
LDA #00H
STA R_TMCnt_1500ms
LDA #1 ;1H
STA R_SnowManMov
SETB B_FlashSnowManDisp
SETB B_FlashSnowManDisp
SETB B_FlashLifeDisp
SETB B_FlashLevelDisp
SETB B_FlashTrunkDisp
SETB B_FlashCupDisp
SETB B_FlashDisp
; SETB B_NormState
; SETB B_FlashDisp
; JSR DispLcdRout
RTS
;----------------------------------------------------------------------------------
L_GameLose:
; CLRB B_NormState
CLRB B_Lose
LDA #03H
JSR PlaySound ;LOSE LIFE
LDA R_Life
CMP #3
BEQ L_GameOver
JSR Wait400MS
JSR UpLevelPlay
JSR UpLevelPlay
JSR UpLevelPlay
JSR Wait400MS
INC R_Life
CLRB B_UpDtCup
SETB B_FlashLifeDisp
JSR NoKey
JMP F_GameInit2
L_GameOver:
LDA #6 ;GAME OVER
JSR PlaySound
JMP L_Win
;---------------------------------------------------------------------
L_GameWin:
LDA #5 ;GAME WIN
JSR PlaySound
JSR Wait400MS
L_Win:
JSR UpLevelPlay
jb fSounding,L_Win
JSR UpLevelPlay
JMP L_Sleep
;----------------------------------------------------------------------
L_Sleep:
clrb B_Sleep
LDA #00H
STA IER
EN_KEY_IRQ
JSR F_LcdAllOff
LCD_OFF
PWM_OFF
Fcpu_Fsys
Fext_OFF
STA HALT
NOP
NOP
NOP
Fext_ON
Fcpu_Fsys
LCD_ON
EN_LCD_IRQ
JMP L_ReStart
;-------------------------------------------------------
F_Check2Min:
LDA R_TmCnt1Min+1
CMP #0fH
Bcs L_NextByte
RTS
L_NextByte:
LDA R_TmCnt1Min
CMP #00H
BCS L_To_Sleep
RTS
L_To_Sleep:
SETB B_Sleep
RTS
;---------------------------------------
LevDatReld
LDA #00H
STA R_TMCnt_1500ms
LDA R_Level
CMP #02H
BEQ L_Lev2CupNum
CMP #03H
BEQ L_Lev3CupNum
CMP #04H
BEQ L_Lev4CupNum
L_Lev2CupNum
LDA #25
STA R_CupCnt
LDA #28
STA LevelTmCnt ;50,40,30,20
JMP L_UpLevelC
L_Lev3CupNum
LDA #30
STA R_CupCnt
LDA #24
STA LevelTmCnt ;50,40,30,20
JMP L_UpLevelC
L_Lev4CupNum
LDA #35
STA R_CupCnt
LDA #20
STA LevelTmCnt ;50,40,30,20
L_UpLevelC
RTS
;------------------------------------
UpLevelPlay
JSR F_LcdAllOff ;Lose mode
JSR Wait400MS
SETB B_FlashSnowManDisp
SETB B_FlashLifeDisp
SETB B_FlashLevelDisp
SETB B_FlashTrunkDisp
SETB B_FlashCupDisp
SETB B_FlashDisp
JSR DispLcdRout
JSR Wait400MS
RTS
;------------------------------------
Wait500MS
LDA #00H
STA R_TMCnt_1500ms2
Wait500MS2
JSR F_UpDataSound
LDA R_TMCnt_1500ms2
BEQ Wait500MS2
Wait500MSC:
JSR F_UpDataSound
LDA R_TMCnt_1500ms2
; CMP #16
BNE Wait500MSC
RTS
Wait400MS
LDA #6H
STA R_TMCnt_1500ms2
Wait400MSC:
JSR F_UpDataSound
LDA R_TMCnt_1500ms2
; CMP #16
BNE Wait400MSC
RTS
GetCupTab
INC R_Buffer
LDA #Cup_Move_Tab
STA R_X1
LDA #Cup_Move_Tab/100H
STA R_X1+1
LDA R_Buffer
AND #1FH
ADCW R_X1
LDA (R_X1)
STA CupRow1
; LDA R_Level
; CMP #04h
; BEQ ExitGetCupTab
; LDA CupRow1
; AND #00000111B
; AND TrunkRow1
; BEQ ExitGetCupTab
; LDA #0
; STA CupRow1
;ExitGetCupTab
RTS
Cup_Move_Tab:
DB 04,00
DB 00,01
DB 00,00
DB 02,00
DB 00,01
DB 00,04
DB 00,00
DB 02,01
DB 00,00
DB 00,00,04,00
DB 01,00
DB 02,00
DB 00,00
DB 00,04
DB 02,00
GetTrunkTab
INC R_Buffer2
LDA #Trunk_Move_Tab
STA R_X1
LDA #Trunk_Move_Tab/100H
GetTrunkTabC
STA R_X1+1
LDA R_Buffer2
AND #1FH
ADCW R_X1
LDA (R_X1)
STA TrunkRow1
RTS
Trunk_Move_Tab:
DB 00,02
DB 04,07
DB 03,00
DB 01,02
DB 00,01
DB 04,06
DB 01,00
DB 03,02
DB 00,04
DB 01,06,02,00
DB 04,00
DB 07,03
DB 01,06
DB 00,02
DB 04,01
GetGE3TrunkTab
INC R_Buffer2
LDA #Trunk_Move_Tab2
STA R_X1
LDA #Trunk_Move_Tab2/100H
JMP GetTrunkTabC
Trunk_Move_Tab2:
DB 05,03
DB 07,06
DB 02,01
DB 06,04
DB 01,05
DB 02,07
DB 03,06
DB 02,01
DB 04,03
DB 01,06,07,05
DB 04,02
DB 01,03
DB 05,06
DB 04,02
DB 07,03
;=======================================================
.INCLUDE KEY.ASM
.INCLUDE Sound.asm
.INCLUDE LCD.ASM
;-----------------------------------------------
IRQ:
PHA
LDA IER
AND IFR
STA IFR
BBS4 <IFR,PA_IRQ
BBS2 <IFR,TMR1_IRQ
BBS6 <IFR,LCD_IRQ
JMP extIrq
;**************************************************
PA_IRQ:
CLR_KEY_IRQ_FLAG
JMP extIrq
;*********** LCD Interrupt *********************
LCD_IRQ:
CLR_LCD_IRQ_FLAG
INC R_TMCnt_1500ms2
INC R_TMCnt_1500ms
incw R_TmCnt1Min
JNB B_KeyHold,Do32HzRt
JB B_KeyHoldIncEn,Do32HzRt
INC R_KeyCnt
BNE Do32HzRt
SETB B_KeyHoldIncEn
Do32HzRt
LDA R_TMCnt_1500ms
CMP LevelTmCnt
BCC LCD_IRQ1
SETB B_UpDtCup
LDA #00H
STA R_TMCnt_1500ms
LCD_IRQ1
LDA R_SnowManMov
CMP #1
BEQ RstAutoFuncR
INC R_TMCnt
BNE Do16HzRt
SETB B_AutoFunc
CLRB B_KeyDelay
RstAutoFuncR
LDA #256-29
STA R_TMCnt
Do16HzRt
JB B_Do16Hz,Do16HzRt0
SETB B_Do16Hz
JMP extLCD_IRQ
Do16HzRt0
CLRB B_Do16Hz
JSR DispLcdRout
Do8HzRt
JB B_Do8Hz,Do8HzRt0
SETB B_Do8Hz
JMP extLCD_IRQ
Do8HzRt0
CLRB B_Do8Hz
JNB B_KeyHoldIncEn,Do8HzRt1
JB B_AutoFunc,Do8HzRt1
SETB B_KeyHoldInc
; JMP extLCD_IRQ
;Do8HzRt1X
; LDA #2
; JSR PlaySound
Do8HzRt1
extLCD_IRQ
JMP extIrq
;************************************************
TMR1_IRQ:
CLR_TMR1_IRQ_FLAG
;;*********** Time 1 Interrupt ******************
extIrq:
PLA
RTI
;-----------------------------------------------
;-----------------------------------------------
.ORG FFF8H
DB 08H
DB 00H
.ORG FFFCH
DW START
.ORG FFFEH
DW IRQ
;--------------------------------------------------------
.ENDS
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -