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

📄 snake_code.asm

📁 贪食蛇汇编代码,6502内核环境下开发,调用时去掉一些头文件,在环境里定义ram的起始地址就可以编译
💻 ASM
字号:
;;==================================================
		chip	W65C02S					; Define chip :	ST2024C	base on	65c02.
		pw		128						; .LST's page width	= 128 characters.
		case	on						; Don't	care Upper-case	or lower-case.
		externs	on						; Make all labels public.

;;==================================================
		.include ST2203U.DEF
		.include CONSTANT.inc
		.include RAM_ext.inc
		.include macro.inc
;;==================================================
		.include Main.inc
		.include ST7636R.inc
;;==================================================
.Global		G_SNAKE
C_UP		EQU	9
C_DOWN		EQU	8
C_LEFT		EQU	12
C_RIGHT		EQU	4
C_LEVEL1	EQU	255
C_LEVEL2	EQU	60
C_LEVEL3	EQU	10
C_PIC_BANK	EQU	4
C_MAX_X		EQU	15
C_MAX_Y		EQU	15

PS1_6000			.SECTION

G_SNAKE:
	JSR	G_SNAKE_INI
	JSR	G_DISPLAY_DATA
	JSR	G_DISPLAY_TARGET
G_SNAKE_LOOP:
	INC	G_RANDOM
	INC	G_TIME
	LDA	G_TIME
	CMP	#150
	BNE	G_SNAKE_LOOP
G_SNAKE_LOOP1:
;	INC	G_TIME
;	LDA	G_TIME	
;	BCC	G_SNAKE_LOOP1
	
	JSR	G_SCAN_MATRIX
	JSR	G_KEY_FUNCTION
	JSR	G_AUTO_GO
	
	JSR	G_DETECT_USB
	
	LDA	#C_SNAKE_FG
	BIT	G_FLAG
	BEQ	G_SNAKE_RTN
	
	JMP	G_SNAKE_LOOP
G_SNAKE_RTN:
	RTS
;---------------------------------------
G_SNAKE_INI:
	JSR	G_CLEAR_SNAKE_DATA
	STZ	G_INTERVAL
	STZ	G_TIME
	LDA	#1
	STA	G_ORIENTAION
	LDA	#1
	STA	G_SNAKE_DATA+3
	LDA	#2
	STA	G_SNAKE_DATA+2
	LDA	#3
	STA	G_SNAKE_DATA+1
	LDA	#4
	STA	G_SNAKE_DATA+0
	LDA	#4
	STA	G_TARGET_X
	LDA	#0
	STA	G_TARGET_Y
	LDA	#3
	STA	G_HEAD_X
	LDA	#0
	STA	G_HEAD_Y
	STZ	G_TAIL_X
	STZ	G_TAIL_Y
	LDA	#4
	STA	G_LENGTH
	STZ	G_SCORE
	STZ	G_LEVEL
	STZ	G_CURSOR_X+1
	STZ	G_CURSOR_Y+1
	RTS
G_CLEAR_SNAKE_DATA:
	PHX
	LDX	#0
G_CLEAR_DATA_LOOP:	
	STZ	G_SNAKE_DATA,X
	INX
	CPX	#225
	BCC	G_CLEAR_DATA_LOOP
	PLX
	RTS
;--------------------------------------------
G_SCAN_MATRIX:
	PHA
	PHX
	PHY
	LDA	G_STATE
	BEQ	G_START_SCAN
	JMP	G_SCAN_KEY_RTN
G_START_SCAN:	
        LDX    G_LINE_COUNT
        INC    G_LINE_COUNT        
        CPX    #5H
        BCC    G_READ_INPUT 
        STZ    G_LINE_COUNT     
G_READ_INPUT:
	JSR	820H
	DW	00H								;#Bank No
	DW	G_READ_PORT-1
        LDA    #11111001B
        TSB    <PB      ;set all output 
        LDA    G_SET_OUTPUT,X
        TRB    <PB      ;clear next output pin  
        LDA    G_SCAN_NEW
        EOR    G_SCAN_OLD,X
        BNE    G_KEY_CHANGE   ;key status change
        STZ    G_SCAN_TIME,X
        JMP    G_SCAN_KEY_RTN 	
G_KEY_CHANGE:
        INC    G_SCAN_TIME,X
        LDY    G_SCAN_TIME,X
        CPY    #g_deb_time
        BCC    G_SCAN_KEY_RTN ;scan_time,x<deb_time               
        STZ    G_SCAN_TIME,X
        TAY
        EOR    G_SCAN_OLD,X  ;just nor the bit changed,
        STA    G_SCAN_OLD,X
        TYA
        BIT    G_SCAN_OLD,X  ;1: means 0->1(release key);0: means 1->0(press key) 
        BNE    G_SCAN_KEY_RTN ;reture if release key            
	LDY    #FCH
G_GET_ROW:
        INY
        LSR    A
        BCC    G_GET_ROW
        JSR    G_METHOD1
        LDA	<R_KeyNameUser
	CMP	#C_MAX_VALUE
	BCS	G_SCAN_KEY_RTN
        ;JSR	G_GET_INPUT_STATE
        ;BCS	G_SCAN_KEY_RTN
        SMB7	<R_Key_Flag
G_SCAN_KEY_RTN:
	PLY
	PLX
	PLA
	RTS	
G_SET_OUTPUT:
	DB	08H,10H,20H,40H,80H,01H
G_METHOD1:
        CLC
        TYA
        ADC    G_METHOD_ADJUST1,X
        STA    <R_KeyNameUser
        RTS               
G_METHOD_ADJUST1:
        DB     0*g_col,1*g_col,2*g_col,3*g_col
        DB     4*g_col,5*g_col,6*g_col,7*g_col
;--------------------------------------------------        
G_GET_INPUT_STATE:
	STZ	G_IN_PARA
	LDX	#0H
	LDY	#0H
G_DETECT_NEXT_ROW:	
	LDA	#00001000B
G_DETECT_NEXT_COL:
	BIT	G_SCAN_OLD,X
	BNE	G_TEST_NEXT_BIT
	INY
G_TEST_NEXT_BIT:
	ASL	A
	PHA
	INC	G_IN_PARA
	LDA	G_IN_PARA
	CMP	#4H
	BCC	G_COULD_NEXT_BIT
	PLA
	BRA	G_RESET_PARA
G_COULD_NEXT_BIT:
	PLA
	BRA	G_DETECT_NEXT_COL
G_RESET_PARA:		
	STZ	G_IN_PARA
	INX
	CPX	#6H
	BCC	G_DETECT_NEXT_ROW
	CPY	#2H
	RTS
;----------------------------------------------	
G_KEY_FUNCTION:
	PHA
	LDA	#80H
	BIT	R_Key_Flag
	BEQ	G_KEY_FUNCTION_RTN
	LDA	#80H
	TRB	R_Key_Flag
	STZ	G_INTERVAL
	INC	G_RANDOM
	LDA	R_KeyNameUser
	CMP	#C_UP
	BEQ	G_PRESS_UP
	CMP	#C_DOWN
	BEQ	G_PRESS_DOWN
	CMP	#C_LEFT
	BEQ	G_PRESS_LEFT
	CMP	#C_RIGHT
	BEQ	G_PRESS_RIGHT
;	LDA	#C_SNAKE_FG
;	TRB	G_FLAG
G_KEY_FUNCTION_RTN:
	PLA
	RTS
G_PRESS_UP:
	LDA	G_ORIENTAION
	CMP	#4
	BEQ	G_KEY_FUNCTION_RTN
	LDA	#3
	STA	G_ORIENTAION
	DEC	G_HEAD_Y
	JMP	G_DEAL_SNAKE_DATA
G_PRESS_DOWN:
	LDA	G_ORIENTAION
	CMP	#3
	BEQ	G_KEY_FUNCTION_RTN
	LDA	#4
	STA	G_ORIENTAION
	INC	G_HEAD_Y
	JMP	G_DEAL_SNAKE_DATA
G_PRESS_LEFT:
	LDA	G_ORIENTAION
	CMP	#1
	BEQ	G_KEY_FUNCTION_RTN
	LDA	#2
	STA	G_ORIENTAION
	DEC	G_HEAD_X
	JMP	G_DEAL_SNAKE_DATA
G_PRESS_RIGHT:
	LDA	G_ORIENTAION
	CMP	#2
	BEQ	G_KEY_FUNCTION_RTN
	LDA	#1
	STA	G_ORIENTAION
	INC	G_HEAD_X
	JMP	G_DEAL_SNAKE_DATA
G_DEAL_SNAKE_DATA:
	JSR	G_CHECK_SNAKE
	JMP	G_KEY_FUNCTION_RTN
;-----------------------------------------
;IN : G_RE_VALUE
;OUT :G_RE_VALUE
;0:NORMAL
;1:EAT
;2:DEAD
G_CHECK_SNAKE:
	PHA
	PHX
	PHY
	STZ	G_RE_VALUE
	LDA	G_HEAD_X
	CMP	#C_MAX_X
	BCS	G_SNAKE_DEAD
	LDA	G_HEAD_Y
	CMP	#C_MAX_Y
	BCS	G_SNAKE_DEAD
	LDA	G_HEAD_X
	STA	G_CURSOR_X
	LDA	G_HEAD_Y
	STA	G_CURSOR_Y
	JSR	G_XY_TO_DATA
	JSR	G_CHECK_PSELF
	LDA	G_RE_VALUE
	CMP	#2
	BEQ	G_SNAKE_DEAD
	JSR	G_CHECK_EAT
	LDA	G_RE_VALUE
	CMP	#1
	BEQ	G_SNAKE_EAT
	BRA	G_SNAKE_NORMAL
G_CHECK_SNAKE_RTN:
	PLY
	PLX
	PLA	
	RTS
G_SNAKE_DEAD:
	LDA	#2
	STA	G_RE_VALUE
	LDA	#C_SNAKE_FG
	;TRB	G_FLAG	
	JMP	G_CHECK_SNAKE_RTN
G_SNAKE_EAT:
	LDA	#1
	STA	G_RE_VALUE
	INC	G_SCORE
	INC	G_LENGTH
	JSR	G_CYCLE_DATA
	LDA	G_HEAD_X
	STA	G_CURSOR_X
	LDA	G_HEAD_Y
	STA	G_CURSOR_Y
	JSR	G_XY_TO_DATA
	LDA	G_IN_PARA
	STA	G_SNAKE_DATA+0
	JSR	G_DISPLAY_DATA0
	JSR	G_RANDOM_TARGET
	JMP	G_CHECK_SNAKE_RTN
G_SNAKE_NORMAL:
	LDA	#0
	STA	G_RE_VALUE
	JSR	G_CYCLE_DATA
	JSR	G_CLEAR_TAIL
	LDA	G_HEAD_X
	STA	G_CURSOR_X
	LDA	G_HEAD_Y
	STA	G_CURSOR_Y
	JSR	G_XY_TO_DATA
	LDA	G_IN_PARA
	STA	G_SNAKE_DATA+0
	JSR	G_DISPLAY_DATA0
	JMP	G_CHECK_SNAKE_RTN		
;-----------------------------------------
G_DISPLAY_DATA:
	PHA
	PHX
	PHY
	LDX	#0
G_DISPLAY_DATA_LOOP:
	LDA	G_SNAKE_DATA,X
	STA	G_IN_PARA
	JSR	G_DATA_XY
	JSR	G_XY_MUL_16
	JSR	G_SET_BANK
	JSR	G_DATA_TEMPHL
	JSR	G_DMA_BLOCK
	INX
	CPX	G_LENGTH
	BCC	G_DISPLAY_DATA_LOOP
	PLY
	PLX
	PLA
	RTS
;-----------------------------------------	
G_DISPLAY_DATA0:
	PHA
	PHX
	PHY
	LDX	#0
	LDA	G_SNAKE_DATA,X
	STA	G_IN_PARA
	JSR	G_DATA_XY
	JSR	G_XY_MUL_16
	JSR	G_SET_BANK
	JSR	G_DATA_TEMPHL
	JSR	G_DMA_BLOCK
	PLY
	PLX
	PLA
	RTS	
;-----------------------------------------
G_CYCLE_DATA:
	PHA
	PHX
	PHY
	LDX	G_LENGTH
	LDY	G_LENGTH
	DEY
G_CYCLE_LOOP:
	LDA	G_SNAKE_DATA,Y
	STA	G_SNAKE_DATA,X
	DEY
	DEX
	CPX	#0
	BNE	G_CYCLE_LOOP
	PLY
	PLX
	PLA
	RTS
;-----------------------------------------
G_AUTO_GO:
	PHA
	PHX
	PHY
	INC	G_INTERVAL
	LDA	G_INTERVAL
	CMP	#C_LEVEL1
	BCC	G_AUTO_GO_RTN
	STZ	G_INTERVAL
	LDA	G_ORIENTAION
	CMP	#1
	BEQ	G_AUTO_RIGHT
	CMP	#2
	BEQ	G_AUTO_LEFT
	CMP	#3
	BEQ	G_AUTO_UP
	CMP	#4
	BEQ	G_AUTO_DOWN
G_AUTO_GO_RTN:	
	PLY
	PLX
	PLA
	RTS
G_AUTO_RIGHT:
	INC	G_HEAD_X
	BRA	G_AUTO_CHECK_SNAKE
G_AUTO_LEFT:
	DEC	G_HEAD_X
	BRA	G_AUTO_CHECK_SNAKE
G_AUTO_UP:
	DEC	G_HEAD_Y
	BRA	G_AUTO_CHECK_SNAKE
G_AUTO_DOWN:
	INC	G_HEAD_Y
	BRA	G_AUTO_CHECK_SNAKE
G_AUTO_CHECK_SNAKE:
	JSR	G_CHECK_SNAKE
	JMP	G_AUTO_GO_RTN	
;-----------------------------------------
;IN: G_CURSOR_X,G_CURSOR_Y
;OUT; G_IN_PARA
G_XY_TO_DATA:
	PHA
	PHX
	PHY
	LDA	G_CURSOR_Y
	ASL	A
	ASL	A
	ASL	A
	ASL	A
	SEC
	SBC	G_CURSOR_Y
	CLC
	ADC	G_CURSOR_X
	INC	A
	STA	G_IN_PARA
	PLY
	PLX
	PLA
	RTS
;-----------------------------------------
;IN: G_IN_PARA
;OUT:G_CURSOR_X,G_CURSOR_Y
G_Y_0:
	LDA	#0
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_1:
	LDA	#1
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_2:
	LDA	#2
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_3:
	LDA	#3
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_4:
	LDA	#4
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_5:
	LDA	#5
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_6:
	LDA	#6
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_DATA_XY:
	PHA
	LDA	G_IN_PARA
	CMP	#16
	BCC	G_Y_0
	CMP	#31
	BCC	G_Y_1
	CMP	#46
	BCC	G_Y_2
	CMP	#61
	BCC	G_Y_3
	CMP	#76
	BCC	G_Y_4
	CMP	#91
	BCC	G_Y_5
	CMP	#106
	BCC	G_Y_6
	CMP	#121
	BCC	G_Y_7
	CMP	#136
	BCC	G_Y_8
	CMP	#151
	BCC	G_Y_9
	CMP	#166
	BCC	G_Y_10
	CMP	#181
	BCC	G_Y_11
	CMP	#196
	BCC	G_Y_12
	CMP	#211
	BCC	G_Y_13
	CMP	#226
	BCC	G_Y_14
G_DATA_XY_RTN:	
	PLA
	RTS
G_Y_7:
	LDA	#7
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_8:
	LDA	#8
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_9:
	LDA	#9
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_10:
	LDA	#10
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_11:
	LDA	#11
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_12:
	LDA	#12
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_13:
	LDA	#13
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
G_Y_14:
	LDA	#14
	STA	G_CURSOR_Y
	STA	G_IN_PARA+1
	JSR	G_MUL_15_ADD_1
	JMP	G_DATA_XY_RTN
;IN: G_IN_PARA+1	
G_MUL_15_ADD_1:
	LDA	G_IN_PARA+1
	ASL	A
	ASL	A
	ASL	A
	ASL	A
	SEC
	SBC	G_IN_PARA+1
	STA	G_IN_PARA+1
	INC	G_IN_PARA+1
	SEC
	LDA	G_IN_PARA
	SBC	G_IN_PARA+1
	STA	G_CURSOR_X	
	RTS		
;-----------------------------------------
G_DMA_BLOCK:
	PHA
	PHX
	PHY
	M_Keep_Drr
	M_Change_ST7636R_CS_Drr
		M_Write_I		036h
.IF	INVERT=1
		M_Write_D		060h
.ELSE
		M_Write_D		000h
.ENDIF
	M_Input	 #2AH						;COM SET
	M_Para	 G_CURSOR_X+1
	M_Para	 G_CURSOR_X
	JSR	 G_CURSORX_ADD_15
	M_Para	 G_CURSOR_X+1
	M_Para	 G_CURSOR_X
	M_Input	 #2BH						;SEG SET
	M_Para	 G_CURSOR_Y+1
	M_Para	 G_CURSOR_Y
	JSR	 G_CURSORY_ADD_15
	M_Para	 G_CURSOR_Y+1
	M_Para	 G_CURSOR_Y
 	M_Input	 #2CH
	SEI
	LDA	<R_TempL
	STA	DMSL
	LDA	<R_TempH
	STA	DMSH
	LDA	<R_Pic_DrrL
	STA	DMRL
	LDA	<R_Pic_DrrH
	STA	DMRH
	LDA	#<C_ST7636_Data_Addr
	STA	DMDL
	LDA	#>C_ST7636_Data_Addr
	STA	DMDH
	LDA	#<C_ST7636_CS_Drr
	STA	DRRL
	LDA	#>C_ST7636_CS_Drr
	STA	DRRH
	LDA	#03H
	STA	DCNTH
	LDA	#00H
	STA	DCNTL
	CLI
	M_Write_I	036h
	M_Write_D	000h
	M_Relase_Drr
	PLY
	PLX
	PLA
	RTS
;-----------------------------------------
G_CURSORX_ADD_15:
	PHA
	CLC
	LDA	G_CURSOR_X
	ADC	#15
	STA	G_CURSOR_X
	STZ	G_CURSOR_X+1
	PLA
	RTS
;-----------------------------------------
G_CURSORY_ADD_15:
	PHA
	CLC
	LDA	G_CURSOR_Y
	ADC	#15
	STA	G_CURSOR_Y
	STZ	G_CURSOR_Y+1
	PLA
	RTS
;-----------------------------------------
G_DATA_TEMPHL:
	PHA
	LDA	#80H
	STA	R_TempH
	STZ	R_TempL
	PLA
	RTS
;-----------------------------------------
G_TARGET_TEMPHL:
	PHA
	LDA	#83H
	STA	R_TempH
	STZ	R_TempL
	PLA
	RTS
;-----------------------------------------
G_BLANK_TEMPHL:
	PHA
	LDA	#86H
	STA	R_TempH
	STZ	R_TempL
	PLA
	RTS
;-----------------------------------------
G_CHECK_PSELF:
	PHA
	PHX
	STZ	G_RE_VALUE
	LDX	#1
	LDA	G_LENGTH
	DEC	A
	DEC	A
	STA	G_IN_PARA+1
G_CHECK_PSELF_LOOP:
	LDA	G_SNAKE_DATA,X
	CMP	G_IN_PARA
	BEQ	G_P_ITSELF
	INX
	CPX	G_IN_PARA+1
	BCC	G_CHECK_PSELF_LOOP
	BRA	G_CHECK_PSELF_RTN
G_P_ITSELF:
	LDA	#2
	STA	G_RE_VALUE
G_CHECK_PSELF_RTN:		
	PLX
	PLA
	RTS
;-----------------------------------------
G_SET_BANK:
	PHA
	LDA	#C_PIC_BANK
	STA	R_Pic_DrrL
	STZ	R_Pic_DrrH
	PLA
	RTS
;-----------------------------------------
G_XY_MUL_16:
	PHA
	LDA	G_CURSOR_X
	ASL	A
	ASL	A
	ASL	A
	ASL	A
	STA	G_CURSOR_X
	LDA	G_CURSOR_Y
	ASL	A
	ASL	A
	ASL	A
	ASL	A
	STA	G_CURSOR_Y
	PLA
	RTS
;-----------------------------------------
G_DISPLAY_TARGET:
	PHA
	LDA	G_TARGET_X
	STA	G_CURSOR_X
	LDA	G_TARGET_Y
	STA	G_CURSOR_Y
	JSR	G_XY_MUL_16
	JSR	G_SET_BANK
	JSR	G_TARGET_TEMPHL
	JSR	G_DMA_BLOCK
	PLA
	RTS
;-----------------------------------------
G_RANDOM_TABLE:
    DB  116,159,192,02,01,18,210,186,163,110,139,08,84,76,124,172
    DB  181,51,153,199,145,168,156,03,217,154,171,197,183,58,135,178
    DB  195,130,175,93,121,29,71,142,67,22,177,48,14,23,10,185
    DB  105,138,108,20,00,52,09,128,34,60,102,107,78,219,152,83
    DB  46,57,166,64,73,12,85,63,45,35,99,202,55,65,68,125
    DB  13,129,16,176,21,134,208,05,44,94,54,90,07,56,80,91
    DB  167,47,115,95,17,88,04,218,144,174,148,30,211,98,189,53
    DB  39,75,69,200,11,100,114,191,96,146,205,32,222,101,74,109
    DB  140,70,06,179,72,106,89,170,126,161,66,198,165,82,31,182
    DB  92,79,81,103,212,203,220,112,25,157,61,162,184,196,26,28
    DB  41,215,15,87,136,150,209,118,104,40,37,86,213,36,141,42
    DB  169,77,19,49,113,133,187,137,190,201,164,59,50,43,221,149
    DB  147,194,180,204,33,122,119,120,62,207,132,143,223,206,224,97
    DB  173,123,158,216,160,155,188,38,127,151,214,111,193,27,24,131
    DB  117,68,180,195,89,67,124,00,90,72,165,145,99,159,119,126
    DB  169,100,194,39,81,120,153,202,11,53,109,198,184,205,105,08
;-----------------------------------------
G_CHECK_EAT:
	PHA
	STZ	G_RE_VALUE
	LDA	G_HEAD_X
	CMP	G_TARGET_X
	BNE	G_CHECK_EAT_RTN
	LDA	G_HEAD_Y
	CMP	G_TARGET_Y
	BNE	G_CHECK_EAT_RTN
	LDA	#1
	STA	G_RE_VALUE
G_CHECK_EAT_RTN:	
	PLA
	RTS
;-----------------------------------------
G_DETECT_USB:
	LDA	<USBCON
	BIT	#02H
	BEQ	G_DETECT_USB_RTN
	LDA	#C_SNAKE_FG
	TRB	G_FLAG
G_DETECT_USB_RTN:
	RTS
;-----------------------------------------
G_CLEAR_TAIL:
	PHA
	PHX
	PHY
	LDA	G_LENGTH
	TAX
	LDA	G_SNAKE_DATA,X
	STA	G_IN_PARA
	STZ	G_SNAKE_DATA,X
	JSR	G_DATA_XY
	JSR	G_XY_MUL_16
	JSR	G_SET_BANK
	JSR	G_BLANK_TEMPHL
	JSR	G_DMA_BLOCK	
	PLY
	PLX
	PLA
	RTS
;-----------------------------------------
G_RANDOM_TARGET:
	PHA
	PHX
G_RANDOM_AGAIN:	
	INC	G_RANDOM
	LDX	G_RANDOM
	LDA	G_RANDOM_TABLE,X
	STA	G_IN_PARA
	JSR	G_CHECK_PSELF
	LDA	G_RE_VALUE
	CMP	#2
	BEQ	G_RANDOM_AGAIN
	LDA	G_IN_PARA
	JSR	G_DATA_XY
	LDA	G_CURSOR_X
	STA	G_TARGET_X
	LDA	G_CURSOR_Y
	STA	G_TARGET_Y
	JSR	G_DISPLAY_TARGET
	PLX
	PLA
	RTS

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -