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

📄 cs5405e.asm

📁 又一个语音LCD GAME
💻 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 + -