📄 dicchess.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : DICCHESS.ASM *
; ***************************************************************************
chip W65C02S
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 fivedot.def
include bios.h
include graphics.h
;;=====================================================
;; >>> Constant define <<<
;; ---------------
;;=====================================================
;; >>> Data RAM define <<<
;; ---------------
;;=====================================================
;; Event vector table.
DS0 .SECTION ;; Data ROM location 10000h(Bank#2)
public Valuetran
;;=====================================================
BWboardHline:
db 53,1
db 11111111b,11111111b,11111111b,11111111b,11111111b,11111111b,11111000b
BWboardVline:
db 1,48
db 11111111b,11111111b,11111111b,11111111b,11111111b,11111111b
fivehl:
db 59,1
db 11111111b,11111111b,11111111b,11111111b,11111111b,11111111b,11111111b,11100000b
fivehs:
db 56,1
db 11111111b,11111111b,11111111b,11111111b,11111111b,11111111b,11111111b
fivevl:
db 1,47
db 11111111b,11111111b,11111111b,11111111b,11111111b,11111111b
fivevs:
db 1,45
db 11111111b,11111111b,11111111b,11111111b,11111111b,11111000b
movechess:
DB 7,7
DB 00111000B
DB 10001010B
DB 11101101B
DB 11011011B
DB 10101000B
DB 10001110B
DB 00000000B
;;db 5,5
;;db 11011100b,01000001b,00011101b,10000000b
cpuchess:
db 7,7 ;1
db 00111000b,11111011b,01111111b,11111111b,11101111b
db 10001110b,00000000b
;;db 5,5
;;db 01110111b,11111111b,11110111b,00000000b
cpuchessb:
db 8,8 ;1
db 00111000b,01111100b,11011110b,11111111b,11111110b
db 01111100b,00111000b,00010000b
;;db 6,6
;;db 01110011b,11101111b,11111110b,01110000b,10000000b
mechess:
db 7,7 ;0
db 00111000b,10001010b,10001100b,00011000b,00101000b
db 10001110b,00000000b
;;db 5,5
;;db 01110100b,01100011b,00010111b,00000000b
mechessb:
db 8,8 ;0
db 00111000b,01000100b,10100010b,10000011b,10000010b
db 01000100b,00111000b,00010000b
;;db 6,6
;;db 01110010b,00101000b,11100010b,01110000b,10000000b
cross:
db 7,8
db 00010000b,00100000b,01000111b,11110001b,00000010b
db 00000100b,00001000b
;;db 5,6
;;db 00100001b,00111110b,01000010b,00010000b
crossb:
db 8,8
db 00010000b,00010000b,00010000b,11111111b,00010000b
db 00010000b,00010000b,00010000b
;;db 6,6
;;db 00100000b,10001111b,11001000b,00100000b,10000000b
BWUPborder:
db 74,6
db 11111111b,11111111b,11111111b,11111111b,11111111b
db 11111111b,11111111b,11111111b,11111111b,11100000b
db 00000000b,00000000b,00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b,00011011b,11111111b
db 11111111b,11111111b,11111111b,11111111b,11111111b
db 11111111b,11111111b,11110110b,10000010b,00000010b
db 00000010b,00000010b,00000010b,00000010b,00000010b
db 00000010b,00000101b,10100000b,10000000b,10000000b
db 10000000b,10000000b,10000000b,10000000b,10000000b
db 10000001b,01101000b,00100000b,00100000b,00100000b
db 00100000b,00100000b,00100000b,00100000b,00100000b
db 01010000b
BWDownBorder:
db 74,6
db 10100000b,10000000b,10000000b,10000000b,10000000b
db 10000000b,10000000b,10000000b,10000001b,01101000b
db 00100000b,00100000b,00100000b,00100000b,00100000b
db 00100000b,00100000b,00100000b,01011010b,00001000b
db 00001000b,00001000b,00001000b,00001000b,00001000b
db 00001000b,00001000b,00010110b,11111111b,11111111b
db 11111111b,11111111b,11111111b,11111111b,11111111b
db 11111111b,11111101b,10000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b,00000000b,00000000b
db 00000000b,01111111b,11111111b,11111111b,11111111b
db 11111111b,11111111b,11111111b,11111111b,11111111b
db 11110000b
;;=========
upborder:
db 79,8
db 11111111b,11111111b,11111111b,11111111b,11111111b
db 11111111b,11111111b,11111111b,11111111b,11111110b
db 00000000b,00000000b,00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b,00000000b,00000011b
db 11111111b,11111111b,11111111b,11111111b,11111111b
db 11111111b,11111111b,11111111b,11111111b,11111000b
db 10000000b,10000000b,10000000b,10000000b,10000000b
db 10000000b,10000000b,10000000b,10000000b,10000001b
db 00000001b,00000001b,00000001b,00000001b,00000001b
db 00000001b,00000001b,00000001b,00000001b,00000010b
db 00000010b,00000010b,00000010b,00000010b,00000010b
db 00000010b,00000010b,00000010b,00000010b,00000100b
db 00000100b,00000100b,00000100b,00000100b,00000100b
db 00000100b,00000100b,00000100b,00000100b,00001000b
db 00001000b,00001000b,00001000b,00001000b,00001000b
db 00001000b,00001000b,00001000b,00001000b
downborder:
db 79,8
db 00010000b,00010000b,00010000b,00010000b,00010000b
db 00010000b,00010000b,00010000b,00010000b,00010000b
db 00100000b,00100000b,00100000b,00100000b,00100000b
db 00100000b,00100000b,00100000b,00100000b,00100000b
db 01000000b,01000000b,01000000b,01000000b,01000000b
db 01000000b,01000000b,01000000b,01000000b,01000000b
db 10000000b,10000000b,10000000b,10000000b,10000000b
db 10000000b,10000000b,10000000b,10000000b,10001111b
db 11111111b,11111111b,11111111b,11111111b,11111111b
db 11111111b,11111111b,11111111b,11111111b,11100000b
db 00000000b,00000000b,00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b,00000000b,00111111b
db 11111111b,11111111b,11111111b,11111111b,11111111b
db 11111111b,11111111b,11111111b,11111111b,10000000b
db 00000000b,00000000b,00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b,00000000b
leftborder:
db 8,64
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
fileftborder:
db 8,79
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
db 10111111b
db 10100000b
db 10100000b
db 10100000b
db 10100000b
rightborder:
db 7,64
;;db 5,64
db 00001010b,00010100b,00101111b,11010000b,10100001b
db 01000010b,10000101b,00001010b,00010100b,00101111b
db 11010000b,10100001b,01000010b,10000101b,00001010b
db 00010100b,00101111b,11010000b,10100001b,01000010b
db 10000101b,00001010b,00010100b,00101111b,11010000b
db 10100001b,01000010b,10000101b,00001010b,00010100b
db 00101111b,11010000b,10100001b,01000010b,10000101b
db 00001010b,00010100b,00101111b,11010000b,10100001b
db 01000010b,10000101b,00001010b,00010100b,00101111b
db 11010000b,10100001b,01000010b,10000101b,00001010b
db 00010100b,00101111b,11010000b,10100001b,01000010b
db 10000101b
firightborder:
db 7,79
;;db 5,64
db 00001010b,00010100b,00101111b,11010000b,10100001b
db 01000010b,10000101b,00001010b,00010100b,00101111b
db 11010000b,10100001b,01000010b,10000101b,00001010b
db 00010100b,00101111b,11010000b,10100001b,01000010b
db 10000101b,00001010b,00010100b,00101111b,11010000b
db 10100001b,01000010b,10000101b,00001010b,00010100b
db 00101111b,11010000b,10100001b,01000010b,10000101b
db 00001010b,00010100b,00101111b,11010000b,10100001b
db 01000010b,10000101b,00001010b,00010100b,00101111b
db 11010000b,10100001b,01000010b,10000101b,00001010b
db 00010100b,00101111b,11010000b,10100001b,01000010b
db 10000101b,00001010b,00010100b,00101111b,11010000b
db 10100001b,01000010b,10000101b,00001010b,00010100b
db 00101111b,11010000b,10100001b,01000010b,10000000b
upleft:
;;db 6,6
db 6,8
db 11111110b,00001011b,11101000b,10100010b,10001010b,00101000b
downleft:
;;db 6,6
db 6,8
db 10100010b,10001010b,00101000b,10111110b,00001111b,11000000b
upright:
;;db 5,6
db 5,8
db 11111000b,01111010b,01010010b,10010100b,10100101b
downright:
;;db 5,6
db 5,8
db 00101001b,01001010b,01011110b,10000111b,11100000b
valuetran:
db 00000001b,00000010b,00000100b,00001000b,00010000b,00100000b,01000000b,10000000b
dlocate:
db 0
xlocate:
db 8,16,24,32,40,48,56,64,72
;;db 6,12,18,24,30,36,42,48,54
clearbugstring:
db 8,8
db 0,0,0,0,0,0,0,0
MatchValue:
DB 90H,255
DB 91H,60
DB 92H,60
DB 93H,33
DB 94H,8
DB 80H,255
DB 81H,60
DB 82H,22
DB 83H,8
DB 84H,7
DB 70H,255
DB 71H,33
DB 72H,20
DB 73H,8
DB 60H,255
DB 61H,45
DB 62H,22
DB 63H,9
DB 50H,255
DB 51H,45
DB 52H,9
DB 40H,60
DB 41H,21
DB 42H,7
DB 30H,22
DB 31H,7
DB 20H,8 ;;8
DB 21H,2 ;;3
DB 10H,2
DB 11H,1
DB 54H,255
DB 55H,32
DB 56H,5
DB 44H,33
DB 45H,5
DB 46H,3
DB 34H,6
DB 35H,4
DB 24H,3
DB 25H,2
DB 14H,1
DB 15H,1
StepPrompt:
db '步数',0 ;;步数
WinPrompt:
db '你赢了!',0 ;;你赢了
LostPrompt:
db '机器赢了!',0 ;;你输了
EquPrompt:
db '平局',0 ;;又平手
EmptyPrompt:
db ' ',0
;;EmptyPrompt1:
;; db ' ',0
NoMove:
db '停步',0 ;;停步
NoMoveMask:
db ' ',0
;;=====================================================
PS0b .SECTION ;; Program ROM location 4000h
BankNo equ gamebank
;;=====================================================
public GameEvent
public delay250ms
public FiveStart
public BwStart
public FiveKeyIn
public BwKeyIn
public FiveTimer
public BWTimer
;;[S]-----------------------------------------------[S]
;; Draw Black-White Chess Board
;;[S]-----------------------------------------------[S]
drawBWboard:
lda #3
sta <ox
stz <oy ;
loprintimage BWUpBorder ; PrnImage(3,3,BWUpBorder);
lda #70
sta <oy
loprintimage BWDownBorder ; PrnImage(3,70,BWDownBorder);
lda #3
sta <ox
lda #6
sta <oy
loprintimage LeftBorder ; PrnImage(3,6,LeftBorder);
lda #72-2
sta <ox
loprintimage RightBorder ; PrnImage(3,70,LeftBorder);
stz <Locate_Y ; Locate_Y = 0;
?3: stz <Locate_X ; Locate_X = 0;
ldx <Locate_Y ; X = Locate_Y;
clc ;
lda dlocate,x ; A = dlocate[x];
adc #6 ; A += 6;
sta <oy ; oy = A;
?2: ldx <Locate_X ; x = Locate_X;
lda xlocate,x ; A = xlocate[X];
sta <ox ; ox = A;
jsr Get_Locate_Value ; Get_Locate_Value();
bbs1 <Locate_Value,?ShowCrossB
bbs0 <Locate_Value,?ShowCpuChess
?ShowMeChess:
loprintimage MeChessB
bra ?1
?ShowCpuChess:
loprintimage CpuChessB
bra ?1
?ShowCrossB:
loprintimage CrossB
?1: inc <locate_X
bbr3 <Locate_X,?2
inc <Locate_Y
bbr3 <Locate_Y,?3
rts
;;[S]-----------------------------------------------[S]
;; Draw Five-Point Chess Board
;;[S]-----------------------------------------------[S]
drawFIboard:
jsr clearbugshi
clc
lda <DispCenterY
;;adc #6 ;;zjw 2001,11,20
adc #8
cmp #16
bcc ?1
dea
?1: sta <Locate_Y
?nexty: lda <DispCenterX
adc #8
cmp #16
bcc ?3
dea
?3: sta <Locate_X
?nextx: lda <Locate_X
ina
sec
sbc <DispCenterX
bcc ?NextDot1
tax
lda DLocate,x
sta <ox
lda <Locate_Y
ina
sec
sbc <DispCenterY
bcc ?NextDot2
tax
lda Dlocate,x
sta <oy
jsr Get_Locate_Value
sec
lda <Locate_X
sbc <DispCenterX
cmp #8
beq ?4
bbs1 <Locate_Value,?ShowCross1
bbs0 <Locate_Value,?ShowCpu1
?ShowMe1:
loprintimage MeChessb
bra ?NextDot
?ShowCpu1:
loprintimage CpuChessb
bra ?NextDot
?ShowCross1:
loprintimage Crossb
?NextDot:
dec <Locate_X
bpl ?nextx
?NextDot1:
dec <Locate_Y
bpl ?nexty
?NextDot2:
bra ?showborder
?4:
bbs1 <Locate_Value,?ShowCross
bbs0 <Locate_Value,?ShowCpu
?ShowMe:
loprintimage MeChess
bra ?NextDot
?ShowCpu:
loprintimage CpuChess
bra ?NextDot
?ShowCross:
loprintimage Cross
bra ?NextDot
?showborder:
lda <DispCenterX
bne ?NotLeft
jsr ShowLeft
lda <DispCenterY
bne ?notUpLeft
jsr ShowUp
jsr ShowUpLeft
rts
?notUpLeft:
;;cmp #10
cmp #8 ;;zjw
bne ?NotDownLeft
jsr ShowDown
jsr ShowDownLeft
?NotDownLeft:
rts
?NotLeft:
cmp #8
bne ?NotRight
jsr ShowRight
lda <DispCenterY
bne ?notUpRight
jsr ShowUp
jsr ShowUpRight
rts
?notUpRight:
;;cmp #10
cmp #8 ;;zjw
bne ?NotDownRight
jsr ShowDown
jsr ShowDownRight
?NotDownRight:
rts
?NotRight:
lda <DispCenterY
bne ?NotUp
jsr ShowUp
rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -