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

📄 dicchess.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	STA	  <Locate_X
?1:	DEC	  <Locate_Y
	BMI	  ?2
	INC	  <Locate_X
	BBS4	  <Locate_X,?2
	JSR	  Get_Locate_Value
	LDA	  <Locate_Value
	AND	  #00000011B
	CMP	  <Judge_Flag
	BNE	  ?2
	INC	  <ContinueNum
	BRA	  ?1
?2:	LDA	  <Cursor_Y
	STA	  <Locate_Y
	LDA	  <Cursor_X
	STA	  <Locate_X
?3:	INC	  <Locate_Y
	BBS4	  <Locate_Y,?4
	DEC	  <Locate_X
	BMI	  ?4
	JSR	  Get_Locate_Value
	LDA	  <Locate_Value
	AND	  #00000011B
	CMP	  <Judge_Flag
	BNE	  ?4
	INC	  <ContinueNum
	BRA	  ?3
?4:	LDA	  <ContinueNum
	CMP	  #4
	BCC	  ?5
?41:	SMB3	  <WinFlagSD
?5:	LDA	  <WinFlag
	CMP	  #0
	BEQ	  ?6
	SMB7	  <WinFlag
	BBS0	<Judge_flag,?7
	rmb6	<WinFlag
	bra	?6
?7:	smb6	<WinFlag
	lda	<Cursor_X
	sta	<BestPositionX
	lda	<Cursor_Y
	sta	<BestPositionY
?6:	RTS

CheckEmpty:
	RMB0	  <EmptyFlag
	STZ	  <Locate_Y
?1:	STZ	  <Locate_X
?2:	JSR	  Get_Locate_Value
	BBS1	  <Locate_Value,?5
	INC	  <Locate_X
	LDA	  <Locate_X
	CMP	  #16
	BCC	  ?2
?3:	INC	  <Locate_Y
	LDA	  <Locate_Y
	CMP	  #16
	BCC	  ?1
?4:	RTS
?5:	SMB0	  <EmptyFlag
	RTS

ChoiceBestPosition:
	BBS5	  <StartFlag,?4
	SMB5	  <StartFlag
	BBS0	  <Seed,?6
	INC	  <Cursor_X
	BBR4	  <Cursor_X,?7
	DEC	  <Cursor_X
?6:	DEC	  <Cursor_X
	BPL	  ?7
	INC	  <Cursor_X
	INC	  <Cursor_X
?7:	LDA	  <Cursor_X
	STA	  <BestPositionX
	BBS1	  <Seed,?8
	INC	  <Cursor_Y
	BBR4	  <Cursor_Y,?9
	DEC	  <Cursor_Y
?8:	DEC	  <Cursor_Y
	BPL	  ?9
	INC	  <Cursor_Y
	INC	  <Cursor_Y
?9:	LDA	  <Cursor_Y
	STA	  <BestPositionY
	RTS
?4:
	STZ	  <BestValue
	STZ	  <Cursor_Y
?1:
	STZ	  <Cursor_X
?2:	LDA	  <Cursor_X
	STA	  <Locate_X
	LDA	  <Cursor_Y
	STA	  <Locate_Y
	JSR	  Get_Locate_Value
	BBR1	  <Locate_Value,?3
	JSR	  Get_Chess_Value
	JSR	  GetBestPosition
?3:	INC	  <Cursor_X
	BBR4	  <Cursor_X,?2
	INC	  <Cursor_Y
	BBR4	  <Cursor_Y,?1
	RTS
Get_Chess_Value:
	STZ	  <CmpValueEnemy	;;clr compare value
	STZ	  <CmpValueCpu
	JSR	  Get_Horizontal_Value
	JSR	  Get_Vertical_Value
	JSR	  Get_SliceDown_Value
	JSR	  Get_SliceUp_Value
	RTS

;;-----------------------------------------------------
;; Get Value Horizontal to 5 chess
;;-----------------------------------------------------
Get_Horizontal_Value:
	JSR	  Clear_Chess_Number
	LDA	  <Cursor_Y
	STA	  <Locate_Y
	SEC
	LDA	  <Cursor_X
?00:	SBC	  #5
?01:	BCS	  ?1
	LDA	  #0
	STA	  <Locate_X
	BRA	  ?2
?1:	STA	  <Locate_X
	JSR	  Get_Locate_Value
	BBR1	  <Locate_Value,?11
	BBR0	  <Locate_Value,?12
	LDA	  #00000010B
	TRB	  <Judge_Flag
	BRA	  ?11
?12:	LDA	  #00000100B
	TRB	  <Judge_Flag
?11:	INC	  <Locate_X
?2:	JSR	  Get_Chess_Number
	INC	  <Locate_X
	BBS4	  <Locate_X,?3		;;if Locate_X >> 16 then exit
?20:	LDA	  <Locate_X
	SEC
	SBC	  <Cursor_X
	BCC	  ?2
	CMP	  #5			;;if Locate_X-Cursor_X<=4
	BCC	  ?2
?211:
	BBS0	  <Judge_Flag,?31	;;jmp if pre-chess is space
	JSR	  Get_Locate_Value
	BBS1	  <Locate_Value,?31	;;jmp if value=space
	BBS0	  <Locate_Value,?21	;;jmp if value=enemy
	BBS5	  <Judge_Flag,?3	;;jmp if enemy finish
	SMB1	  <Judge_Flag		;;set enemy border
	BRA	  ?3
?21:	BBS6	  <Judge_Flag,?3	;;jmp if cpu finish
	SMB2	  <Judge_Flag
?3:	JSR	  Get_Arrange_Value
	RTS
?31:	BBR0	  <Judge_Flag,?3
	BBS5	  <Judge_Flag,?32
	DEC	  <Enemy_Number
	DEC	  <Enemy_Space_Num
?32:	BBS6	  <Judge_Flag,?3
	DEC	  <Cpu_Number
	DEC	  <Cpu_Space_Num
	BRA	  ?3
;;-----------------------------------------------------
;; Get Value Vertical to 5 chess
;;-----------------------------------------------------
Get_Vertical_Value:
	JSR	  Clear_Chess_Number
	LDA	  <Cursor_X
	STA	  <Locate_X
	SEC
	LDA	  <Cursor_Y
?00:	SBC	  #5
?01:	BCS	  ?1
	LDA	  #0
	STA	  <Locate_Y
	BRA	  ?2
?1:	STA	  <Locate_Y
	JSR	  Get_Locate_Value
	BBR1	  <Locate_Value,?11
	BBR0	  <Locate_Value,?12
	LDA	  #00000010B
	TRB	  <Judge_Flag
	BRA	  ?11
?12:	LDA	  #00000100B
	TRB	  <Judge_Flag
?11:	INC	  <Locate_Y
?2:	JSR	  Get_Chess_Number
	INC	  <Locate_Y
	BBS4	  <Locate_Y,?3		;;if Locate_Y >> 16 then exit
?20:	LDA	  <Locate_Y
	SEC
	SBC	  <Cursor_Y
	BCC	  ?2
	CMP	  #5			;;if Locate_X-Cursor_X<=4
	BCC	  ?2

?201:	BBS0	  <Judge_Flag,?31
	JSR	  Get_Locate_Value
	BBS1	  <Locate_Value,?31	;;jmp if value=space
	BBS0	  <Locate_Value,?21	;;jmp if value=enemy
	BBS5	  <Judge_Flag,?3	;;jmp if enemy finish
	SMB1	  <Judge_Flag		;;set enemy border
	BRA	  ?3
?21:	BBS6	  <Judge_Flag,?3	;;jmp if cpu finish
	SMB2	  <Judge_Flag

?3:	JSR	  Get_Arrange_Value
	RTS

?31:	BBR0	  <Judge_Flag,?3
	BBS5	  <Judge_Flag,?32
	DEC	  <Enemy_Number
	DEC	  <Enemy_Space_Num
?32:	BBS6	  <Judge_Flag,?3
	DEC	  <Cpu_Number
	DEC	  <Cpu_Space_Num
	BRA	  ?3
;;-----------------------------------------------------
;; Get Value Slice Down to 5 chess
;;-----------------------------------------------------
Get_SliceDown_Value:
	JSR	  Clear_Chess_Number
	LDX	  <Cursor_X
	LDY	  <Cursor_Y
?1:	DEX
	BMI	  ?3		;;IF
	DEY
	BMI	  ?2
	TXA
	CLC
?111:	ADC	  #5
?112:	CMP	  <Cursor_X
	BEQ	  ?11
	BRA	  ?1
?11:	STX	  <Locate_X
	STY	  <Locate_Y
	JSR	  Get_Locate_Value
	BBR1	  <Locate_Value,?12
	BBR0	  <Locate_Value,?13
	LDA	  #00000010B
	TRB	  <Judge_Flag
	BRA	  ?12
?13:	LDA	  #00000100B
	TRB	  <Judge_Flag
?12:	INC	  <Locate_X
	INC	  <Locate_Y
	BRA	  ?5

?2:	INY
?3:	INX
	STX	  <Locate_X
	STY	  <Locate_Y

?5:	JSR	  Get_Chess_Number
	INC	  <Locate_X
	BBS4	  <Locate_X,?6
?500:	INC	  <Locate_Y
	BBS4	  <Locate_Y,?6
?501:	LDA	  <Locate_X
	SEC
	SBC	  <Cursor_X
	BCC	  ?5
	CMP	  #5
	BCC	  ?5
?502:
	BBS0	  <Judge_Flag,?31
	JSR	  Get_Locate_Value
	BBS1	  <Locate_Value,?31	;;jmp if value=space
	BBS0	  <Locate_Value,?51	;;jmp if value=enemy
	BBS5	  <Judge_Flag,?6	;;jmp if enemy finish
	SMB1	  <Judge_Flag		;;set enemy border
	BRA	  ?6
?51:	BBS6	  <Judge_Flag,?6	;;jmp if cpu finish
	SMB2	  <Judge_Flag

?6:	JSR	  Get_Arrange_Value
	RTS

?31:	BBR0	  <Judge_Flag,?6
	BBS5	  <Judge_Flag,?32
	DEC	  <Enemy_Number
	DEC	  <Enemy_Space_Num
?32:	BBS6	  <Judge_Flag,?6
	DEC	  <Cpu_Number
	DEC	  <Cpu_Space_Num
	BRA	  ?6

;;-----------------------------------------------------
;; Get Value Slice Up to 5 chess
;;-----------------------------------------------------
Get_SliceUp_Value:
	JSR	  Clear_Chess_Number
	LDX	  <Cursor_X
	LDY	  <Cursor_Y
?1:	DEX
	BMI	  ?3
	INY
?111:	CPY	  #15
	BCS	  ?2
?112:	TXA
	CLC
?113:	ADC	  #5
?114:	CMP	  <Cursor_X
	BEQ	  ?11
	BRA	  ?1

?11:	STX	  <Locate_X
	STY	  <Locate_Y
	JSR	  Get_Locate_Value
	BBR1	  <Locate_Value,?12
	BBR0	  <Locate_Value,?13
	LDA	  #00000010B
	TRB	  <Judge_Flag
	BRA	  ?12
?13:	LDA	  #00000100B
	TRB	  <Judge_Flag
?12:	INC	  <Locate_X
	DEC	  <Locate_Y
	BRA	  ?5

?2:	DEY
?3:	INX
?4:	STX	  <Locate_X
	STY	  <Locate_Y

?5:	JSR	  Get_Chess_Number
	INC	  <Locate_X
	BBS4	  <Locate_X,?6
?500:	DEC	  <Locate_Y
	BMI	  ?31
	LDA	  <Locate_X
	SEC
	SBC	  <Cursor_X
	BCC	  ?5
	CMP	  #5
	BCC	  ?5
?501:
	BBS0	  <Judge_Flag,?31
	JSR	  Get_Locate_Value
	BBS1	  <Locate_Value,?31	;;jmp if value=space
	BBS0	  <Locate_Value,?51	;;jmp if value=enemy
	BBS5	  <Judge_Flag,?6	;;jmp if enemy finish
	SMB1	  <Judge_Flag		;;set enemy border
	BRA	  ?6
?51:	BBS6	  <Judge_Flag,?6	;;jmp if cpu finish
	SMB2	  <Judge_Flag

?6:	JSR	  Get_Arrange_Value
	RTS

?31:	BBR0	  <Judge_Flag,?6
	BBS5	  <Judge_Flag,?32
	DEC	  <Enemy_Number
	DEC	  <Enemy_Space_Num
?32:	BBS6	  <Judge_Flag,?6
	DEC	  <Cpu_Number
	DEC	  <Cpu_Space_Num
	BRA	  ?6

;;----------------------------------------------------
;;	 Clear Chess Number
;;----------------------------------------------------
Clear_Chess_Number:
	LDX	  #0
?1:	STZ	  <Enemy_Space_Num,X
	INX
	CPX	  #9
	BNE	  ?1
	LDA	  #00000111B
	TSB	  <Judge_Flag
	RTS
;;-------------------------------------------------------
;;	 Get Chess Number
;;-------------------------------------------------------
Get_Chess_Number:
	LDX	  <Cursor_X
	CPX	  <Locate_X
	BNE	  ?2
	LDX	  <Cursor_Y
	CPX	  <Locate_Y
	BNE	  ?2
	LDX	  #0
?1:	INC	  <Enemy_Keep_Num,X	;;INC enemy_keep_num  cpu_keep_num
	INX				;;    enemy_width_num cpu_width_num
	CPX	  #6			;;    enemy_number    cpu_number
	BNE	  ?1			;;
	LDA	  <Enemy_Keep_Num
	CMP	  #5
	BCC	  ?1_1
	SMB5	  <Judge_Flag
	BRA	  ?1_2
?1_1:	LDA	  <Cpu_Keep_Num
	CMP	  #5
	BCC	  ?1_2
	SMB6	  <Judge_Flag
?1_2:
	SMB7	  <Judge_Flag		;;	set to rightside
	RMB0	  <Judge_Flag		;;clr space_flag
	RTS
?1_3:	JMP	  ?12
?2:	JSR	  Get_Locate_Value	;; GET LOCATE VALUE
	BBR1	  <Locate_Value,?1_3	;; JMP IF NOT SPACE
	BBR0	  <Judge_Flag,?5	;; JMP IF SPACE FLAG IS FALSE
	BBS7	  <Judge_Flag,?4	;; JMP IF RIGHTSIDE
	STZ	  Enemy_Space_Num	;;clear enemy_space_num
	STZ	  Cpu_Space_Num 	;;	cpu_space_num
	STZ	  Enemy_Number		;;	enemy_number
	STZ	  Cpu_Number		;;	cpu_number
	INC	  <Enemy_Width_Num	;;inc enemy_width_num
	INC	  <Cpu_Width_Num	;;inc cpu_width_num
	CLC
	LDA	  #00000110B
	TRB	  <Judge_Flag		;;clear border flag
	RTS
?4:	BBS3	  <Judge_Flag,?41	;;jmp if enemy_length=true
	INC	  <Enemy_Width_Num
?41:	BBS4	  <Judge_Flag,?42	;;jmp if cpu_length=true
	INC	  <Cpu_Width_Num
?42:	BBS5	  <Judge_Flag,?43	;;jmp if Enemy finish
	DEC	  <Enemy_Space_Num	;;dec enemy_space_num
	BPL	  ?421
	INC	  <Enemy_Space_Num
?421:	DEC	  <Enemy_Number 	;;dec enemy_number
	BPL	  ?43
	INC	  <Enemy_Number
?43:	BBS6	  <Judge_Flag,?44	;;jmp if cpu finish
	DEC	  <Cpu_Space_Num	;;dec cpu_space_num
	BPL	  ?431
	INC	  <Cpu_Space_Num
?431:	DEC	  <Cpu_Number		;;dec cpu_number
	BPL	  ?44
	INC	  <Cpu_Number
?44:
	LDA	  #01100000B
	TSB	  <Judge_Flag
	RTS

?5:	BBS5	  <Judge_Flag,?8	;;jmp if enemy_finish
	BBS7	  <Judge_Flag,?51
	BBS1	  <Judge_Flag,?6	;;jmp if enemy_border
?51:	INC	  <Enemy_Space_Num	;;inc enemy_space_num
	INC	  <Enemy_Number 	;;inc enemy_number
	BRA	  ?7
?6:
	LDA	  <Enemy_Number
	CMP	  #2
	BCS	  ?51
	STZ	  <Enemy_Space_Num	;;clear enemy_space_num
	STZ	  <Enemy_Number 	;;clear enemy_number
	RMB1	  <Judge_Flag		;;clear enemy_border
?7:
	LDA	  <Enemy_Keep_Num
	CMP	  #5
	BCS	  ?7_1
	STZ	  <Enemy_Keep_Num	;;enemyu_keep_num
?7_1:	SMB0	  <Judge_Flag		;;set space_flag

?8:	BBS6	  <Judge_Flag,?11_1	;;jmp if cpu_finish
	BBS7	  <Judge_Flag,?81
?8_1:
	BBS2	  <Judge_Flag,?9	;;jmp if cpu_border
?81:
	INC	  <Cpu_Space_Num	;;inc cpu_space
	INC	  <Cpu_Number		;;inc cpu_space
	BRA	  ?10
?9:
	LDA	  <Cpu_Number
	CMP	  #3
	BCS	  ?81
	STZ	  <Cpu_Space_Num	;;clr cpu_space_num
	STZ	  <Cpu_Number		;;clr cpu_number
	RMB2	  <Judge_Flag		;;clear cpu_border
?10:
	LDA	  <Cpu_Keep_Num
	CMP	  #5
	BCS	  ?11
	STZ	  <Cpu_Keep_Num 	;;clr cpu_keep_num
?11:	SMB0	  <Judge_Flag
?11_1:	BBS3	  <Judge_Flag,?11_2	;;jmp if enemy_length is true
	INC	  <Enemy_Width_Num
?11_2:	BBS4	  <Judge_Flag,?11_3	;;jmp if cpu_length is true
	INC	  <Cpu_Width_Num
?11_3:	RTS

?12:	BBS7	  <Judge_Flag,?14	;;IF ENEMY_LEFT_FLAG
	RMB0	  <Judge_Flag
	BBS0	  <Locate_Value,?13	;;jmp if locate_value is enemy
	INC	  <Cpu_Number		;;inc cpu_number
	INC	  <Cpu_Width_Num	;;inc cpu_width_num
	INC	  <Cpu_Keep_Num 	;;inc cpu_keep_num
	LDA	  <Cpu_Keep_Num
	CMP	  #5
	BCC	  ?12_1
	SMB6	  <Judge_Flag
	RTS
?12_1:	STZ	  <Enemy_Number 	;;clr enemy_number
	STZ	  <Enemy_Width_Num	;;clr enemy_width_num
	STZ	  <Enemy_Keep_Num	;;clr enemy_keep_num
	SMB1	  <Judge_Flag		;;set enemy_border
	RTS
?13:
	INC	  <Enemy_Number 	;;inc enemy_number
	INC	  <Enemy_Width_Num	;;inc enemy_width_num
	INC	  <Enemy_Keep_Num	;;inc ememy_keep_num
	LDA	  <Enemy_Keep_Num
	CMP	  #5
	BCC	  ?13_1
	SMB5	  <Judge_Flag
	RTS
?13_1:	STZ	  <Cpu_Number		;;clr cpu_number
	STZ	  <Cpu_Width_Num	;;clr cpu_width_num
	STZ	  <Cpu_Keep_Num 	;;clr cpu_keep_num
	SMB2	  <Judge_Flag		;;set cpu_border
	RTS

?14:	BBS0	  <Locate_Value,?16	;;jmp if value=enemy
	BBS5	  <Judge_Flag,?15	;;jmp if Enemy finish
	SMB5	  <Judge_Flag		;;set enemy_finish
	BBS0	  <Judge_Flag,?15	;;jmp if space flag =false
	SMB1	  <Judge_Flag		;;set enemy_border=true
?15:	SMB3	  <Judge_Flag		;;set enemy_length=true
	RMB0	  <Judge_Flag		;;clr space flag
	BBS6	  <Judge_Flag,?15_1	;;jmp if cpu_finish is true
	INC	  <Cpu_Number		;;inc cpu_number
	INC	  <Cpu_Keep_Num 	;;inc cpu_keep_num
	LDA	  <Cpu_Keep_Num 	;;inc cpu_keep_num
	CMP	  #5
	BCC	  ?15_1 		;;jmp if cpu_keep_num<5
	SMB6	  <Judge_Flag		;;else set cpu_finish
	RTS
?15_1:	BBS4	  <Judge_Flag,?15_2	;;jmp if cpu_length
	INC	  <Cpu_Width_Num
?15_2:	RTS

?16:
	BBS6	  <Judge_Flag,?17	;;jmp if cpu finish
	SMB6	  <Judge_Flag		;; set cpu finish
	BBS0	  <Judge_Flag,?17	;;jmp if space flag =true
	SMB2	  <Judge_Flag		;; set cpu_border
?17:	SMB4	  <Judge_Flag		;;set cpu_length
	RMB0	  <Judge_Flag		;;clr space_flag
	BBS5	  <Judge_Flag,?18	;;jmp if enemy_finish
	INC	  <Enemy_Number 	;;inc Enemy_number
	INC	  <Enemy_Keep_Num	;;inc Enemy_Keep_num
	LDA	  <Enemy_Keep_Num	;;
	CMP	  #5			;;
	BCC	  ?18			;; jmp if Enemy_Keep_Num<5
	SMB5	  <Judge_Flag		;; set Enemy_finish
	RTS
?18:	BBS3	  <Judge_Flag,?19	;;jmp if Enemy_length
	INC	  <Enemy_Width_Num
?19:	RTS
;;========================================
;;	 Get Arrange Value
;;========================================
Get_Arrange_Value:
	LDA	  <Cpu_Keep_Num
	CMP	  #5
	BCC	  ?1			;;jmp if Cpu_keep_num<5
?0:	LDA	  #FFH			;; else set cmpvaluecpu to 255
	STA	  <CmpValueCpu
	RTS
?1:	LDA	  <Enemy_Keep_Num
	CMP	  #5
	BCC	  ?2			;;jmp if enemy_keep_num<5
?11:	LDA	  #FFH			;; else set CmpValueEnemy to 255
	STA	  <CmpValueEnemy
	RTS
?2:	LDA	  <Cpu_Width_Num	;;
	CMP	  #5
	BCC	  ?4_1
?2_1:
	LDA	  <Cpu_Number
	BBR2	  <Judge_Flag,?3	;;jmp if cpu_border is false
	CMP	  #6
	BCS	  ?3			;;jmp if Cpu_Number<6
	SMB2	  <Cpu_Space_Num	;; OR #00000100B TO Cpu_Space_Num
?3:	ASL				;;ASL Cpu_Number 4 times
	ASL
	ASL
	ASL
	ORA	  <Cpu_Space_Num	;; Or Cpu_Number to Cpu_Space_Num
	STA	  <Cpu_Space_Num
	JSR	  GetMatchValue 	;; call GetMatchValue
	CLC
	LDA	  <Cpu_Number
	ADC	  <CmpValueCpu		;;ADDING Cpu_Number to CmpValueCpu
	BCC	  ?4			;;If carry then set to 255
	LDA	  #255
?4:	STA	  <CmpValueCpu
?4_1:	LDA	  <Enemy_Width_Num
	CMP	  #5
	BCC	  ?7
?4_2:
	LDA	  <Enemy_Number
	BBR1	  <Judge_Flag,?5	;;jmp if Enemy_Border is false
	CMP	  #6

⌨️ 快捷键说明

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