Add files via upload
authorKay Savetz <kevin@savetz.com>
Tue, 30 Mar 2021 22:06:32 +0000 (15:06 -0700)
committerGitHub <noreply@github.com>
Tue, 30 Mar 2021 22:06:32 +0000 (15:06 -0700)
14 files changed:
abmove.src [new file with mode: 0644]
abnew.src [new file with mode: 0644]
amain.src [new file with mode: 0644]
boardraw.src [new file with mode: 0644]
chess.src [new file with mode: 0644]
chess.xfd [new file with mode: 0644]
eval2.src [new file with mode: 0644]
evalnew.src [new file with mode: 0644]
evaluate.src [new file with mode: 0644]
evgen.src [new file with mode: 0644]
main.src [new file with mode: 0644]
mkmove.src [new file with mode: 0644]
movgen.src [new file with mode: 0644]
nmovgen.src [new file with mode: 0644]

diff --git a/abmove.src b/abmove.src
new file mode 100644 (file)
index 0000000..be84e21
--- /dev/null
@@ -0,0 +1,124 @@
+10 MOVE
+20       LDA LEVEL
+30       CMP SEEK
+40       BNE NEXTPLY
+50       LDA COMPTYPE
+60       BNE OTHER
+70       JMP EVALNEW
+80 OTHER JMP EVALNEW
+90 NEXTPLY LDA TYPE
+0100     EOR #$80
+0110     STA TYPE
+0120     JSR MOVGEN
+0130 MLOOP JSR STKCPY
+0140     CPX #$FF
+0150     BNE MVPIECE
+0160     JSR PULLXY
+0170     JMP MDONE
+0180 MVPIECE LDA BOARD,Y
+0190     PHA 
+0200     LDA BOARD,X
+0210     STA BOARD,Y
+0220     LDA #$00
+0230     STA BOARD,X
+0240     PLA 
+0250     LDY LEVEL
+0260     STA STORE,Y
+0270     INC LEVEL
+0280     LDA TYPE
+0281     EOR COMPTYPE
+0282     EOR #$80
+0290     LDY LEVEL
+0300     STA SCOREH,Y
+0310     STA SCOREL,Y
+0320     JSR MOVE
+0330     DEC LEVEL
+0340     LDY LEVEL
+0350     LDA SCOREH,Y
+0360     CMP NSCORE+1
+0370     BCC GREATER
+0380     BNE LESSER
+0390     LDA SCOREL,Y
+0400     CMP NSCORE
+0410     BCC GREATER
+0420 LESSER LDX #$FF
+0430     JMP TEST
+0440 GREATER LDX #$01
+0450 TEST LDA TYPE
+0460     CMP COMPTYPE
+0470     BEQ MAX
+0510     TXA 
+0520     BPL MNEXT
+0530     BMI FILL
+0540 MAX TXA 
+0550     BMI MNEXT
+0560 FILL LDA NSCORE
+0570     STA SCOREL,Y
+0580     LDA NSCORE+1
+0590     STA SCOREH,Y
+0600     LDA LEVEL
+0610     BNE MNEXT
+0620     JSR STKCPY
+0630     STX BEST
+0640     STY BEST+1
+0650 MNEXT JSR PULLXY
+0660     LDA BOARD,Y ; RESTORE BOARD
+0670     STA BOARD,X
+0680     LDX LEVEL
+0690     LDA STORE,X
+0700     STA BOARD,Y
+0710     JSR ALPHABETA
+0720     BCS MDONE
+0730     JMP MLOOP
+0740 MDONE LDY LEVEL
+0750     LDA SCOREL,Y
+0760     STA NSCORE
+0770     LDA SCOREH,Y
+0780     STA NSCORE+1
+0790     LDA TYPE
+0800     EOR #$80
+0810     STA TYPE
+0820     RTS 
+0830 STKCPY
+0840     LDY #$01
+0850     LDA (STKPTR),Y
+0860     TAX 
+0870     DEY 
+0880     LDA (STKPTR),Y
+0890     TAY 
+0900     RTS 
+0910 PULLXY
+0920     JSR STKCPY
+0930     INC STKPTR
+0940     INC STKPTR
+0950     BNE PLEXIT
+0960     INC STKPTR+1
+0970 PLEXIT RTS 
+0980 ALPHABETA
+0990     LDY LEVEL
+1000     BEQ NOPRUNE
+1010     LDX #$00
+1020     LDA SCOREH,Y
+1030     CMP SCOREH-1,Y
+1040     BCC ABBIG
+1050     BNE ABSMALL
+1060     LDA SCOREL,Y
+1070     CMP SCOREL-1,Y
+1080     BCC ABBIG
+1090 ABSMALL LDX #$FF
+1100 ABBIG
+1110     LDA TYPE
+1120     CMP COMPTYPE
+1130     BNE ABSKIP
+1140     TXA 
+1150     BMI PRUNE
+1160     BPL NOPRUNE
+1170 ABSKIP TXA 
+1180     BPL PRUNE
+1190 NOPRUNE CLC 
+1200     RTS 
+1210 PRUNE JSR PULLXY
+1220     CPX #$FF
+1230     BNE PRUNE
+1240     SEC 
+1250     RTS 
diff --git a/abnew.src b/abnew.src
new file mode 100644 (file)
index 0000000..0d29f3d
--- /dev/null
+++ b/abnew.src
@@ -0,0 +1,175 @@
+10 MOVE
+20       LDA LEVEL
+30       AND #$01
+40       CLC 
+50       ROR A
+60       ROR A
+70       EOR COMPTYPE
+80       STA TYPE
+90       LDA #$00
+0100     STA PEXTRA
+0110     LDA LEVEL
+0120     CMP SEEK
+0130     BCC NEXTPLY
+0140     CMP SEEK2
+0150     BCS TERMINAL
+0160     JMP PLYEXTRA
+0170 TERMINAL LDA COMPTYPE
+0180     BNE OTHER
+0190     JMP EVAL2
+0200 OTHER JMP EVAL2
+0210 PLYEXTRA LDA #$FF
+0220     STA PEXTRA
+0230 NEXTPLY JSR MOVGEN
+0240     JSR STKCPY
+0250     CPX #$FF    ; NO LEGAL MOVES
+0260     BNE MLOOP
+0270     JSR PULLXY
+0275     INC LEVEL
+0280     JSR TERMINAL
+0285     DEC LEVEL
+0290     RTS 
+0300 MLOOP JSR STKCPY
+0310     CPX #$FF    ; NO MOVES LEFT
+0320     BNE MVPIECE
+0330     JSR PULLXY
+0340     LDA ALPHA+1
+0350     STA NSCORE+1
+0360     LDA ALPHA
+0370     STA NSCORE
+0380     RTS 
+0390 MVPIECE JSR MAKEMOVE
+0400 ; SAVE ALPHA AND BETA
+0410     LDA ALPHA
+0420     JSR PUSHRT
+0430     LDA ALPHA+1
+0440     JSR PUSHRT
+0450     LDA BETA
+0460     JSR PUSHRT
+0470     LDA BETA+1
+0480     JSR PUSHRT
+0490 ; ALPHA = - BETA;BETA = - ALPHA
+0500     LDA #$00
+0510     SEC 
+0520     SBC ALPHA
+0530     PHA 
+0540     LDA #$80
+0550     SBC ALPHA+1
+0560     PHA 
+0570     LDA #$00
+0580     SEC 
+0590     SBC BETA
+0600     STA ALPHA
+0610     LDA #$80
+0620     SBC BETA+1
+0630     STA ALPHA+1
+0640     PLA 
+0650     STA BETA+1
+0660     PLA 
+0670     STA BETA
+0680 ; CALL PROCEDURE RECURSIVELY
+0690     INC LEVEL
+0700     JSR BOARDRAW
+0710     JSR $F6E2
+0720     JSR MOVE
+0730     DEC LEVEL
+0740     JSR PULLXY
+0750     JSR TAKEMOVE ; RESTORE BOARD
+0760 ; RESTORE ALPHA AND BETA
+0770     JSR PULLRT
+0780     STA BETA+1
+0790     JSR PULLRT
+0800     STA BETA
+0810     JSR PULLRT
+0820     STA ALPHA+1
+0830     JSR PULLRT
+0840     STA ALPHA
+0850 ; NEGATE EVALUATION SCORE
+0860     LDA #$00
+0870     SEC 
+0880     SBC NSCORE
+0890     STA NSCORE
+0900     LDA #$80
+0910     SBC NSCORE+1
+0920     STA NSCORE+1
+0930 ; ALPHA=MAX ( ALPHA,-NSCORE)
+0940     LDA NSCORE+1 ; CHECK FOR NEW
+0950     CMP ALPHA+1
+0960     BCC NOSWITCH
+0970     BEQ TRY2
+0980     JMP SWITCH
+0990 TRY2 LDA NSCORE
+1000     CMP ALPHA
+1010     BCC NOSWITCH
+1020 SWITCH LDA NSCORE
+1030     STA ALPHA
+1040     LDA NSCORE+1
+1050     STA ALPHA+1
+1060     LDA LEVEL
+1070     BNE NOSWITCH
+1080     LDA LASTMOVE
+1090     STA BEST
+1100     LDA LASTMOVE+1
+1110     STA BEST+1
+1115     JSR SHOWMOVE
+1120 NOSWITCH LDA ALPHA+1
+1130     CMP BETA+1
+1140     BCC NOPRUNE
+1150     BNE PRUNE
+1160     LDA ALPHA
+1170     CMP BETA
+1180     BCC NOPRUNE
+1190 PRUNE JSR PULLXY
+1200     CPX #$FF
+1210     BNE PRUNE
+1220     LDA #$7F
+1230     STA NSCORE+1
+1240     LDA #$FF
+1250     STA NSCORE
+1260     RTS 
+1270 NOPRUNE JMP MLOOP
+1280 STKCPY
+1290     LDY #$01
+1300     LDA (STKPTR),Y
+1310     TAX 
+1320     DEY 
+1330     LDA (STKPTR),Y
+1340     TAY 
+1350     RTS 
+1360 PULLXY
+1370     JSR STKCPY
+1380     INC STKPTR
+1390     INC STKPTR
+1400     BNE PLEXIT
+1410     INC STKPTR+1
+1420 PLEXIT RTS 
+1430 MAKEMOVE
+1440     LDA BOARD,Y
+1450     PHA 
+1460     LDA BOARD,X
+1470     STA BOARD,Y
+1480     LDA #$00
+1490     STA BOARD,X
+1500     PLA 
+1510     LDY LEVEL
+1520     STA STORE,Y
+1530     RTS 
+1540 TAKEMOVE
+1550     STX LASTMOVE
+1560     STY LASTMOVE+1
+1570     LDA BOARD,Y
+1580     STA BOARD,X
+1590     LDX LEVEL
+1600     LDA STORE,X
+1610     STA BOARD,Y
+1620     RTS 
+1630 PUSHRT
+1640     LDY RTSTKPTR
+1650     STA RTSTACK,Y
+1660     INC RTSTKPTR
+1670     RTS 
+1680 PULLRT
+1690     DEC RTSTKPTR
+1700     LDY RTSTKPTR
+1710     LDA RTSTACK,Y
+1720     RTS 
diff --git a/amain.src b/amain.src
new file mode 100644 (file)
index 0000000..340e48a
--- /dev/null
+++ b/amain.src
@@ -0,0 +1,130 @@
+10       .OPT NO LIST
+20       *=  $4000
+30 BOARD =   $6000
+40 BOARD2 =  $6100
+50 PEXTRA =  $C0
+60 CSTKPTR = $C1
+70 COUNT =   $C2
+80 TYPE  =   $C3
+90 BLOK  =   $C4
+0100 TEMP =  $C5
+0110 TEMP2 = $C6
+0120 CAPTFLAG = $C7
+0130 GOFLAG = $C8
+0140 PRINTFLAG = $C9
+0150 RTSTKPTR = $CA
+0160 STKPTR = $80
+0170 NSCORE = $82
+0180 BEST =  $84
+0190 LEVEL = $86
+0200 SEEK =  $87
+0210 SEEK2 = $88
+0220 COMPTYPE = $89
+0230 ALPHA = $8A
+0240 BETA =  $8C
+0250 LASTMOVE = $8E
+0260 CSTACK = $0480
+0270 SCOREL = $0580
+0280 SCOREH = $0590
+0290 STORE = $05A0
+0300 RTSTACK = $0600
+0310     .INCLUDE #D:SYSEQU.M65
+0320     .INCLUDE #D:IOMAC.LIB
+0330 START
+0340     JSR SETUP
+0350     LDA #$00
+0360     STA COMPTYPE
+0370     STA TYPE
+0380     LDA #$00
+0390     STA PRINTFLAG
+0400     BEQ NEXTMOVE
+0410      OPEN  1,OPOUT,0,"P:"
+0420 NEXTMOVE LDA #$00
+0430     STA LEVEL
+0440     LDA #$00
+0450     STA STKPTR
+0460     STA RTSTKPTR
+0470     LDA #$80
+0480     STA STKPTR+1
+0490     LDA #$01
+0500     STA SEEK
+0510     LDA #$01
+0520     STA SEEK2
+0530     LDA #$01
+0540     STA ALPHA
+0550     LDA #$00
+0560     STA ALPHA+1
+0570     LDA #$FF
+0580     STA BETA
+0590     LDA #$7F
+0600     STA BETA+1
+0610     JSR MOVE
+0620     LDX BEST
+0630     LDY BEST+1
+0640     LDA BOARD,Y
+0650     AND #$0F
+0660     CMP #$06
+0670     BEQ GAMEOVER
+0680     LDA BOARD,X
+0690     STA BOARD,Y
+0700     LDA #$00
+0710     STA BOARD,X
+0720     JSR SHOWMOVE
+0730     JSR BOARDRAW
+0740     LDA COMPTYPE
+0750     EOR #$80
+0760     STA COMPTYPE
+0770     STA TYPE
+0780     BNE NOTWHITE
+0790     LDA PRINTFLAG
+0800     BEQ NOTWHITE
+0810     LDA #13     ; CARRAGE RETURN
+0820     STA TEMP2
+0830     JSR OUTPRINT
+0840 NOTWHITE JMP NEXTMOVE
+0850 GAMEOVER RTS 
+0860     .INCLUDE #D:MOVGEN.SRC
+0870     .INCLUDE #D:ABNEW.SRC
+0880     .INCLUDE #D:EVAL2.SRC
+0890     .INCLUDE #D:BOARDRAW.SRC
+0900     .INCLUDE #D:EVGEN.SRC
+0910 SHOWMOVE
+0920     LDA #$05
+0930     STA $55
+0940     LDA #20
+0950     STA $54
+0960     LDA BEST
+0970     JSR OUTPUT
+0980     LDA #$2D    ; INSERT DASH
+0990     JSR OUTCHAR
+1000     LDA BEST+1
+1010     JSR OUTPUT
+1020     LDA #$20    ; SPACE
+1030     JSR OUTCHAR
+1040     RTS 
+1050 OUTPUT
+1060     SEC 
+1070     SBC #$15
+1080     LDX #$00
+1090 OUTLOOP INX 
+1100     SEC 
+1110     SBC #$0A
+1120     BPL OUTLOOP
+1130     CLC 
+1140     ADC #$4B
+1150     STX TEMP
+1160     JSR OUTCHAR
+1170     LDA #$09
+1180     SEC 
+1190     SBC TEMP
+1200     CLC 
+1210     ADC #$30
+1220     JSR OUTCHAR
+1230     RTS 
+1240 OUTCHAR
+1250     STA TEMP2
+1260     JSR $F6A4
+1270     LDA PRINTFLAG
+1280     BEQ OUTCEXIT
+1290 OUTPRINT  BPUT  1,TEMP2,1
+1300 OUTCEXIT RTS 
diff --git a/boardraw.src b/boardraw.src
new file mode 100644 (file)
index 0000000..604d29d
--- /dev/null
@@ -0,0 +1,29 @@
+05 BOARDRAW
+10       LDX #$00
+15       STX $54
+16       STX $55
+20 BD2LOOP LDA #$0A
+22       STA TEMP2
+30 BDLOOP LDA BOARD,X
+40       PHA 
+50       AND #$07
+60       TAY 
+70       LDA PICS,Y
+80       STA TEMP
+90       PLA 
+0100     AND #$80
+0110     ORA TEMP
+0120     STX TEMP
+0130     JSR $F6A4
+0140     LDX TEMP
+0141     INX 
+0150     DEC TEMP2
+0160     BNE BDLOOP
+0170     LDA #$00
+0180     STA $55
+0190     INC $54
+0200     CPX #$78
+0210     BNE BD2LOOP
+0220     RTS 
+0230 PICS
+0240     .BYTE " PNBRQK "
diff --git a/chess.src b/chess.src
new file mode 100644 (file)
index 0000000..dc8d3e2
--- /dev/null
+++ b/chess.src
@@ -0,0 +1,182 @@
+10       .OPT NO LIST
+20       *=  $4000
+30 BOARD =   $6000
+40 MOVTAB =  $C0
+50 COUNT =   $C2
+60 TYPE  =   $C3
+70 BLOK  =   $C4
+80 TEMP  =   $C5
+90 CAPTFLAG = $C6
+0100 GOFLAG = $C7
+0110 START
+0120     LDA #$00
+0130     STA TYPE
+0140     JSR SETUP
+0150 MAINLOOP JSR MOVGEN
+0160     RTS 
+0170 DIRDATA
+0180     .BYTE -1,-9,1,9,-10,-8,10,8,11,7,19,17,-7,-11,-17,-19,-9,-18,9,18
+0190 DIRIND
+0200     .BYTE 0,8,4,0,0,0
+0210 DIST
+0220     .BYTE 0,8,4,4,8,8
+0230 GODATA
+0240     .BYTE 0,0,1,1,1,0
+0250 SETUP LDY #$80
+0260 SETLOOP LDA BDATA-1,Y
+0270     STA BOARD-1,Y
+0280     DEY 
+0290     BNE SETLOOP
+0300     RTS 
+0310 BDATA
+0320     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0330     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0340     .BYTE $FF,$84,$82,$83,$85,$86,$83,$82,$84
+0350     .BYTE $FF,$81,$81,$81,$81,$81,$81,$81,$81
+0360     .BYTE $FF,0,0,0,0,0,0,0,0
+0370     .BYTE $FF,0,0,0,0,0,0,0,0
+0380     .BYTE $FF,0,0,0,0,0,0,0,0
+0390     .BYTE $FF,0,0,0,0,0,0,0,0
+0400     .BYTE $FF,$01,$01,$01,$01,$01,$01,$01,$01
+0410     .BYTE $FF,$04,$02,$03,$05,$06,$03,$02,$04
+0420     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0430     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0440 MOVGEN
+0450     LDA #$00
+0460     STA MOVTAB
+0470     LDA #$50
+0480     STA MOVTAB+1
+0490     LDA #$12
+0500     STA BLOK
+0510 GENLOOP TAX 
+0520     LDA BOARD,X
+0530     CMP #$00
+0540     BEQ ENDGEN
+0550     CMP #$FF
+0560     BEQ ENDGEN
+0570     AND #$80
+0580     CMP TYPE
+0590     BNE ENDGEN
+0600     LDA BOARD,X
+0610     AND #$07
+0620     CMP #$01
+0630     BNE NOTPAWN
+0640     JMP PAWNSUB
+0650 NOTPAWN TAX 
+0660     DEX 
+0670     LDA DIST,X
+0680     STA COUNT
+0690     LDA GODATA,X
+0700     STA GOFLAG
+0710     LDA DIRIND,X
+0720     TAX 
+0730 GEN2LOOP LDA BLOK
+0740 SLIDE CLC 
+0750     ADC DIRDATA,X
+0760     TAY 
+0770     LDA BOARD,Y
+0780     STA CAPTFLAG
+0785     BEQ MVFOUND
+0790     CMP #$FF
+0800     BEQ END2GEN
+0810     AND #$80
+0820     CMP TYPE
+0830     BEQ END2GEN
+0840 MVFOUND STY TEMP
+0850     LDY #$00
+0860     LDA BLOK
+0870     STA (MOVTAB),Y
+0880     INY 
+0890     LDA TEMP
+0900     STA (MOVTAB),Y
+0910     INC MOVTAB
+0920     INC MOVTAB
+0940     LDA CAPTFLAG
+0950     BNE END2GEN ; STOP-PIECE CAPTURED
+0960     LDA GOFLAG
+0970     BEQ END2GEN ; STOP-PIECE MOVES 1
+0975     LDA TEMP
+0980     JMP SLIDE
+0990 END2GEN INX     ; TRY NEXT DIRECTION
+1000     DEC COUNT
+1010     BNE GEN2LOOP
+1020 ENDGEN INC BLOK
+1030     LDA BLOK
+1040     CMP #$59
+1050     BEQ EXITGEN
+1060     JMP GENLOOP
+1070 EXITGEN RTS 
+1080 PDATA
+1090     .BYTE -9,-8,-10,-18,9,8,10,18
+1100 PLEFT
+1110     .BYTE $49,$1C
+1120 PRIGHT
+1130     .BYTE $51,$24
+1140 PAWNSUB
+1150     LDY #$00
+1160     LDA BOARD,X
+1170     AND #$80
+1180     BEQ PAWN2
+1190     LDY #$04
+1200 PAWN2 LDA BLOK
+1210     CLC 
+1220     ADC PDATA,Y
+1230     TAX 
+1240     LDA BOARD,X
+1250     BNE PAWN3
+1260     JSR PSAVE
+1270 PAWN3 INY 
+1280     LDA PDATA,Y
+1290     CLC 
+1300     ADC BLOK
+1310     TAX 
+1320     LDA BOARD,X
+1330     BEQ PAWN4
+1340     CMP #$FF
+1350     BEQ PAWN4
+1360     AND #$80
+1370     CMP TYPE
+1380     BEQ PAWN4
+1390     JSR PSAVE   ; CAN ATTACK
+1400 PAWN4 INY 
+1410     LDA PDATA,Y
+1420     CLC 
+1430     ADC BLOK
+1440     TAX 
+1450     LDA BOARD,X
+1460     BEQ PAWN5
+1470     CMP #$FF
+1480     BEQ PAWN5
+1490     AND #$80
+1500     CMP TYPE
+1510     BEQ PAWN5
+1520     JSR PSAVE
+1530 PAWN5 INY       ; TEST MOVE 2
+1540     LDX #$00
+1550     LDA TYPE
+1560     BPL PSKIP
+1570     INX 
+1580 PSKIP LDA BLOK
+1590     CMP PLEFT,X
+1600     BCC PEXIT
+1610     CMP PRIGHT,X
+1620     BCS PEXIT
+1630     CLC 
+1640     ADC PDATA,Y
+1650     TAX 
+1660     LDA BOARD,X
+1670     BNE PEXIT
+1680     JSR PSAVE
+1690 PEXIT JMP ENDGEN
+1700 PSAVE
+1710     STY TEMP
+1720     LDA BLOK
+1730     LDY #$00
+1740     STA (MOVTAB),Y
+1750     INY 
+1760     TXA 
+1770     STA (MOVTAB),Y
+1780     INC MOVTAB
+1790     INC MOVTAB
+1800 PS2 LDY TEMP
+1810     RTS 
diff --git a/chess.xfd b/chess.xfd
new file mode 100644 (file)
index 0000000..d63ca31
Binary files /dev/null and b/chess.xfd differ
diff --git a/eval2.src b/eval2.src
new file mode 100644 (file)
index 0000000..ee87b3c
--- /dev/null
+++ b/eval2.src
@@ -0,0 +1,89 @@
+10 EVAL2
+20       LDA NSTSCORE
+30       STA NSCORE
+40       LDA NSTSCORE+1
+50       STA NSCORE+1
+60       LDX #$15
+70 NEVLOOP LDA BOARD,X
+80       BEQ NEVSKIP
+90       CMP #$FF
+0100     BEQ NEVSKIP
+0110     JSR NFIXSCORE
+0120     LDA BOARD3,X
+0130     BEQ NEVSKIP
+0140     STA TEMP
+0150     LDA BOARD,X
+0160     AND #$80
+0170     JSR NSMFIX
+0180 NEVSKIP INX 
+0190     CPX #$6F
+0200     BNE NEVLOOP
+0210     RTS 
+0220 NSTSCORE .WORD $4000
+0230 NPOINTS
+0240     .WORD 0     ; ATTK BONUS
+0250     .WORD 100   ; PAWN
+0260     .WORD 300   ; KNIGHT
+0270     .WORD 350   ; BISHOP
+0280     .WORD 500   ; ROOK
+0290     .WORD 900   ; QUEEN
+0300     .WORD 5000  ; KING
+0310 NSMFIX
+0320     CMP TYPE
+0330     BNE NSMSUB
+0340     LDA TEMP
+0350     CLC 
+0360     ADC NSCORE
+0370     STA NSCORE
+0380     BCC NSMEXIT
+0390     INC NSCORE+1
+0400     JMP NSMEXIT
+0410 NSMSUB LDA NSCORE
+0420     SEC 
+0430     SBC TEMP
+0440     STA NSCORE
+0450     BCS NSMEXIT
+0460     DEC NSCORE+1
+0470 NSMEXIT RTS 
+0480 NFIXSCORE
+0490     PHA 
+0500     AND #$80
+0510     CMP TYPE
+0520     BEQ NEVADD
+0530     PLA 
+0540     AND #$7F
+0550     ASL A
+0560     TAY 
+0570     LDA NSCORE
+0580     SEC 
+0590     SBC NPOINTS,Y
+0600     STA NSCORE
+0610     LDA NSCORE+1
+0620     SBC NPOINTS+1,Y
+0630     STA NSCORE+1
+0640     RTS 
+0650 NEVADD PLA 
+0660     AND #$0F
+0670     ASL A
+0680     TAY 
+0690     LDA NSCORE
+0700     CLC 
+0710     ADC NPOINTS,Y
+0720     STA NSCORE
+0730     LDA NSCORE+1
+0740     ADC NPOINTS+1,Y
+0750     STA NSCORE+1
+0760     RTS 
+0770 BOARD3
+0780     .BYTE 0,0,0,0,0,0,0,0,0,0
+0790     .BYTE 0,0,0,0,0,0,0,0,0,0
+0800     .BYTE 0,0,0,0,0,0,0,0,0,0
+0810     .BYTE 0,0,0,0,0,0,0,0,0,0
+0820     .BYTE 0,0,1,1,1,1,1,1,0,0
+0830     .BYTE 0,0,1,1,4,4,1,1,0,0
+0840     .BYTE 0,0,1,1,4,4,1,1,0,0
+0850     .BYTE 0,0,1,1,1,1,1,1,0,0
+0860     .BYTE 0,0,0,0,0,0,0,0,0,0
+0870     .BYTE 0,0,0,0,0,0,0,0,0,0
+0880     .BYTE 0,0,0,0,0,0,0,0,0,0
+0890     .BYTE 0,0,0,0,0,0,0,0,0,0
diff --git a/evalnew.src b/evalnew.src
new file mode 100644 (file)
index 0000000..7001462
--- /dev/null
@@ -0,0 +1,157 @@
+20 EVALNEW
+30       LDA NSTSCORE
+40       STA NSCORE
+50       LDA NSTSCORE+1
+60       STA NSCORE+1
+70       JSR POSITRON
+80       LDX #$15
+90 NEVLOOP LDA BOARD,X
+0100     BEQ NEVSKIP
+0110     CMP #$FF
+0120     BEQ NEVSKIP
+0130     JSR NFIXSCORE
+0140     LDA BOARD3,X
+0150     BEQ NEVSKIP
+0160     STA TEMP
+0170     LDA BOARD,X
+0180     AND #$80
+0190     JSR NSMFIX
+0200 NEVSKIP LDA BOARD2,X
+0210     BPL NEV2SKIP
+0220     LDA BOARD,X
+0230     TAY 
+0240     AND #$80
+0250     CMP TYPE
+0260     BNE NEV2SKIP
+0270     TYA 
+0280     CLC 
+0290     ADC #$0C
+0300     EOR #$80
+0310     JSR NFIXSCORE
+0320 NEV2SKIP INX 
+0330     CPX #$6F
+0340     BNE NEVLOOP
+0350     RTS 
+0360 NSTSCORE .WORD $4000
+0370 NPOINTS
+0380     .WORD 0     ; ATTK BONUS
+0390     .WORD 100   ; PAWN
+0400     .WORD 300   ; KNIGHT
+0410     .WORD 350   ; BISHOP
+0420     .WORD 500   ; ROOK
+0430     .WORD 900   ; QUEEN
+0440     .WORD 5000  ; KING
+0450     .WORD 1     ; P MOBILITY
+0460     .WORD 4     ; N MOBILITY
+0470     .WORD 3     ; B MOBILITY
+0480     .WORD 1     ; R MOBILITY
+0490     .WORD 1     ; Q MOBILITY
+0500     .WORD 0     ; K MOBILITY
+0510     .WORD 100   ; P HANGING
+0520     .WORD 300   ; N HANGING
+0530     .WORD 350   ; B HANGING
+0540     .WORD 500   ; R HANGING
+0550     .WORD 900   ; Q HANGING
+0560     .WORD 5000  ; K HANGING
+0570 POSITRON JSR EVGEN
+0580     LDX #$6F
+0590     LDA #$00
+0600 PZCLEAR STA BOARD2,X
+0610     DEX 
+0620     BPL PZCLEAR
+0630 PZLOOP JSR PULLXY
+0640     CPX #$FF
+0650     BEQ PZEXIT
+0660     LDA BOARD,Y
+0670     BEQ PZLOOP
+0680 PZCHECK LDA BOARD,X ; FIND
+0690     AND #$80    ; HANGING PIECES
+0700     STA TEMP
+0710     LDA BOARD,Y
+0720     AND #$80
+0730     CMP TEMP
+0740     BEQ PZUP    ; PIECE GUARDED
+0750     LDA BOARD,X
+0760     AND #$7F
+0770     STA TEMP
+0780     LDA BOARD,Y
+0790     AND #$7F
+0800     SEC 
+0810     SBC TEMP
+0820     BMI PZDOWN
+0830     LDA BOARD2,Y ; PIECE ATTACKD
+0840     SEC         ; BY WEAKER
+0850     SBC #$0F    ; PIECE
+0860     STA BOARD2,Y
+0870     JMP PZLOOP
+0880 PZDOWN TYA 
+0890     TAX 
+0900     DEC BOARD2,X ; PUNISH HANGIN
+0910     LDA BOARD,X ; AWARD ATTACK
+0920     AND #$80
+0930     JSR NFIXSCORE
+0940     JMP PZLOOP
+0950 PZUP TYA 
+0960     TAX 
+0970     INC BOARD2,X
+0980     JMP PZLOOP
+0990 PZEXIT RTS 
+1000 NSMFIX
+1010     CMP COMPTYPE
+1020     BNE NSMSUB
+1030     LDA TEMP
+1040     CLC 
+1050     ADC NSCORE
+1060     STA NSCORE
+1070     BCC NSMEXIT
+1080     INC NSCORE+1
+1090     JMP NSMEXIT
+1100 NSMSUB LDA NSCORE
+1110     SEC 
+1120     SBC TEMP
+1130     STA NSCORE
+1140     BCS NSMEXIT
+1150     DEC NSCORE+1
+1160 NSMEXIT RTS 
+1170 NFIXSCORE
+1180     PHA 
+1190     AND #$80
+1200     CMP COMPTYPE
+1210     BEQ NEVADD
+1220     PLA 
+1230     AND #$7F
+1240     ASL A
+1250     TAY 
+1260     LDA NSCORE
+1270     SEC 
+1280     SBC NPOINTS,Y
+1290     STA NSCORE
+1300     LDA NSCORE+1
+1310     SBC NPOINTS+1,Y
+1320     STA NSCORE+1
+1330     RTS 
+1340 NEVADD PLA 
+1350     AND #$0F
+1360     ASL A
+1370     TAY 
+1380     LDA NSCORE
+1390     CLC 
+1400     ADC NPOINTS,Y
+1410     STA NSCORE
+1420     LDA NSCORE+1
+1430     ADC NPOINTS+1,Y
+1440     STA NSCORE+1
+1450     RTS 
+1460 BOARD3
+1470     .BYTE 0,0,0,0,0,0,0,0,0,0
+1480     .BYTE 0,0,0,0,0,0,0,0,0,0
+1490     .BYTE 0,0,0,0,0,0,0,0,0,0
+1500     .BYTE 0,0,0,0,0,0,0,0,0,0
+1510     .BYTE 0,0,1,1,1,1,1,1,0,0
+1520     .BYTE 0,0,1,1,4,4,1,1,0,0
+1530     .BYTE 0,0,1,1,4,4,1,1,0,0
+1540     .BYTE 0,0,1,1,1,1,1,1,0,0
+1550     .BYTE 0,0,0,0,0,0,0,0,0,0
+1560     .BYTE 0,0,0,0,0,0,0,0,0,0
+1570     .BYTE 0,0,0,0,0,0,0,0,0,0
+1580     .BYTE 0,0,0,0,0,0,0,0,0,0
diff --git a/evaluate.src b/evaluate.src
new file mode 100644 (file)
index 0000000..fa3a049
--- /dev/null
@@ -0,0 +1,126 @@
+20 EVALUATE
+30       LDA STSCORE
+40       STA NSCORE
+50       LDA STSCORE+1
+60       STA NSCORE+1
+70       JSR POSEVAL
+80       LDX #$15
+90 EVLOOP LDA BOARD,X
+0100     BEQ EVSKIP
+0110     CMP #$FF
+0120     BEQ EVSKIP
+0130     JSR FIXSCORE
+0140 EVSKIP LDA BOARD2,X
+0150     BPL EV2SKIP
+0160     LDA BOARD,X
+0170     TAY 
+0180     AND #$80
+0190     CMP TYPE
+0200     BNE EV2SKIP
+0210     TYA 
+0220     CLC 
+0230     ADC #$0C
+0240     EOR #$80
+0250     JSR FIXSCORE
+0260 EV2SKIP INX 
+0270     CPX #$6F
+0280     BNE EVLOOP
+0290     RTS 
+0300 STSCORE .WORD $4000
+0310 POINTS
+0320     .WORD 0     ; ATTK BONUS
+0330     .WORD 100   ; PAWN
+0340     .WORD 300   ; KNIGHT
+0350     .WORD 350   ; BISHOP
+0360     .WORD 500   ; ROOK
+0370     .WORD 900   ; QUEEN
+0380     .WORD 5000  ; KING
+0390     .WORD 1     ; P MOBILITY
+0400     .WORD 2     ; N MOBILITY
+0410     .WORD 3     ; B MOBILITY
+0420     .WORD 1     ; R MOBILITY
+0430     .WORD 1     ; Q MOBILITY
+0440     .WORD 0     ; K MOBILITY
+0450     .WORD 100   ; P HANGING
+0460     .WORD 300   ; N HANGING
+0470     .WORD 350   ; B HANGING
+0480     .WORD 500   ; R HANGING
+0490     .WORD 900   ; Q HANGING
+0500     .WORD 5000  ; K HANGING
+0510 POSEVAL JSR EVGEN
+0520     LDX #$6F
+0530     LDA #$00
+0540 EPCLEAR STA BOARD2,X
+0550     DEX 
+0560     BPL EPCLEAR
+0570 EPLOOP JSR PULLXY
+0580     CPX #$FF
+0590     BEQ EPZEXIT
+0600     LDA BOARD,Y
+0610     BNE EPCHECK
+0620     LDA BOARD,X
+0630     CLC         ; AWARD MOBILITY
+0640     ADC #$06
+0650     JSR FIXSCORE
+0660     JMP EPLOOP
+0670 EPCHECK LDA BOARD,X ; FIND
+0680     AND #$80    ; HANGING PIECES
+0690     STA TEMP
+0700     LDA BOARD,Y
+0710     AND #$80
+0720     CMP TEMP
+0730     BEQ EPUP    ; PIECE GUARDED
+0740     LDA BOARD,X
+0750     AND #$7F
+0760     STA TEMP
+0770     LDA BOARD,Y
+0780     AND #$7F
+0790     SEC 
+0800     SBC TEMP
+0810     BMI EPDOWN
+0820     LDA BOARD2,Y ; PIECE ATTACKD
+0830     SEC         ; BY WEAKER
+0840     SBC #$0F    ; PIECE
+0850     STA BOARD2,Y
+0860     JMP EPLOOP
+0870 EPDOWN TYA 
+0880     TAX 
+0890     DEC BOARD2,X ; PUNISH HANGIN
+0900     LDA BOARD,X ; AWARD ATTACK
+0910     AND #$80
+0920     JSR FIXSCORE
+0930     JMP EPLOOP
+0940 EPUP TYA 
+0950     TAX 
+0960     INC BOARD2,X
+0970     JMP EPLOOP
+0980 EPZEXIT RTS 
+0990 FIXSCORE
+1000     PHA 
+1010     AND #$80
+1020     CMP COMPTYPE
+1030     BEQ EVADD
+1040     PLA 
+1050     AND #$7F
+1060     ASL A
+1070     TAY 
+1080     LDA NSCORE
+1090     SEC 
+1100     SBC POINTS,Y
+1110     STA NSCORE
+1120     LDA NSCORE+1
+1130     SBC POINTS+1,Y
+1140     STA NSCORE+1
+1150     RTS 
+1160 EVADD PLA 
+1170     AND #$0F
+1180     ASL A
+1190     TAY 
+1200     LDA NSCORE
+1210     CLC 
+1220     ADC POINTS,Y
+1230     STA NSCORE
+1240     LDA NSCORE+1
+1250     ADC POINTS+1,Y
+1260     STA NSCORE+1
+1270     RTS 
diff --git a/evgen.src b/evgen.src
new file mode 100644 (file)
index 0000000..961d9f1
--- /dev/null
+++ b/evgen.src
@@ -0,0 +1,121 @@
+10       .OPT NO LIST
+20 EVDIR
+30       .BYTE -1,-10,1,10,-11,-9,11,9
+40       .BYTE 12,8,21,19,-12,-8,-21,-19
+50 EVIND
+60       .BYTE 0,8,4,0,0,0
+70 EVDIS
+80       .BYTE 0,8,4,4,8,8
+90 EVGO
+0100     .BYTE 0,0,1,1,1,0
+0110 EVGEN
+0120     LDA #$15
+0130     STA BLOK
+0140     LDA #$FF
+0150     JSR PUSHA
+0160     JSR PUSHA
+0170 EVGLOOP LDX BLOK
+0180     LDA BOARD,X
+0190     BEQ EVGEND
+0200     CMP #$FF
+0210     BEQ EVGEND
+0220     AND #$07
+0230     CMP #$01
+0240     BNE EVGSKIP
+0250     JMP EVPSUB
+0260 EVGSKIP TAX 
+0270     DEX 
+0280     LDA EVDIS,X
+0290     STA COUNT
+0300     LDA EVGO,X
+0310     STA GOFLAG
+0320     LDA EVIND,X
+0330     TAX 
+0340 EVG2LOOP LDA BLOK
+0350 EVSLIDE CLC 
+0360     ADC EVDIR,X
+0370     TAY 
+0380     LDA BOARD,Y
+0390     STA CAPTFLAG
+0400     BEQ EVMVFND
+0410     CMP #$FF
+0420     BEQ EVG2END
+0430 EVMVFND LDA BLOK
+0440     JSR PUSHA
+0450     TYA 
+0460     JSR PUSHA
+0470     LDA CAPTFLAG
+0480     BNE EVG2END ; STOP-PIECE CAPTURED
+0490     LDA GOFLAG
+0500     BEQ EVG2END ; STOP-PIECE MOVES 1
+0510     LDA TEMP
+0520     JMP EVSLIDE
+0530 EVG2END INX     ; TRY NEXT DIRECTION
+0540     DEC COUNT
+0550     BNE EVG2LOOP
+0560 EVGEND INC BLOK
+0570     LDA BLOK
+0580     CMP #$63
+0590     BNE EVGLOOP
+0600     RTS 
+0610 EPDATA
+0620     .BYTE -10,-9,-11,-20,10,9,11,20
+0630 EPLEFT
+0640     .BYTE 81,31
+0650 EPRIGHT
+0660     .BYTE 89,39
+0670 EVPSUB
+0680     LDY #$00
+0690     STY GOFLAG
+0700     LDA BOARD,X
+0710     AND #$80
+0720     BEQ EVPAWN2
+0730     LDY #$04
+0740 EVPAWN2 LDA BLOK
+0750     CLC 
+0760     ADC EPDATA,Y
+0770     TAX 
+0780     LDA BOARD,X
+0790     BNE EVPAWN3
+0800     JSR PSAVE
+0810     INC GOFLAG
+0820 EVPAWN3 INY 
+0830     LDA EPDATA,Y
+0840     CLC 
+0850     ADC BLOK
+0860     TAX 
+0870     LDA BOARD,X
+0880     BEQ EVPAWN4
+0890     CMP #$FF
+0900     BEQ EVPAWN4
+0910     JSR PSAVE   ; CAN ATTACK
+0920 EVPAWN4 INY 
+0930     LDA EPDATA,Y
+0940     CLC 
+0950     ADC BLOK
+0960     TAX 
+0970     LDA BOARD,X
+0980     BEQ EVPAWN5
+0990     CMP #$FF
+1000     BEQ EVPAWN5
+1010     JSR PSAVE
+1020 EVPAWN5 INY     ; TEST MOVE 2
+1030     LDA GOFLAG
+1040     BNE EPEXIT
+1050     LDX #$00
+1060     LDA TYPE
+1070     BPL EPSKIP
+1080     INX 
+1090 EPSKIP CMP EPLEFT,X
+1100     BCC EPEXIT
+1110     CMP EPRIGHT,X
+1120     BCS EPEXIT
+1130     CLC 
+1140     ADC EPDATA,Y
+1150     TAX 
+1160     LDA BOARD,X
+1170     BNE EPEXIT
+1180     LDA GOFLAG
+1190     BNE EPEXIT
+1200     JSR PSAVE
+1210 EPEXIT JMP EVGEND
diff --git a/main.src b/main.src
new file mode 100644 (file)
index 0000000..a4d4a22
--- /dev/null
+++ b/main.src
@@ -0,0 +1,141 @@
+10       .OPT NO LIST
+20       *=  $4000
+30 BOARD =   $6000
+40 BOARD2 =  $6100
+50 PEXTRA =  $C0
+60 CSTKPTR = $C1
+70 COUNT =   $C2
+80 TYPE  =   $C3
+90 BLOK  =   $C4
+0100 TEMP =  $C5
+0110 TEMP2 = $C6
+0120 CAPTFLAG = $C7
+0130 GOFLAG = $C8
+0140 PRINTFLAG = $C9
+0150 RTSTKPTR = $CA
+0160 STKPTR = $80
+0170 NSCORE = $82
+0180 BEST =  $84
+0190 LEVEL = $86
+0200 SEEK =  $87
+0210 SEEK2 = $88
+0220 COMPTYPE = $89
+0230 ALPHA = $8A
+0240 BETA =  $8C
+0250 LASTMOVE = $8E
+0260 CAPTCONT = $90
+0270 VIEWFLAG = $91
+0280 CSTACK = $0480
+0290 SCOREL = $0580
+0300 SCOREH = $0590
+0310 STORE = $05A0
+0320 BESTSTART = $05B0
+0330 BESTEND = $05C0
+0340 KILLSTART = $05D0
+0350 KILLEND = $05E0
+0360 RTSTACK = $0600
+0370     .INCLUDE #D:SYSEQU.M65
+0380     .INCLUDE #D:IOMAC.LIB
+0390 START
+0400     LDA #$00
+0410     STA VIEWFLAG
+0420     JSR SETUP
+0430     LDA #$00
+0440     STA COMPTYPE
+0450     STA TYPE
+0460     LDA #$00
+0470     STA PRINTFLAG
+0480     BEQ NEXTMOVE
+0490      OPEN  1,OPOUT,0,"P:"
+0500 NEXTMOVE LDA #$00
+0510     STA LEVEL
+0520     LDA #$00
+0530     STA STKPTR
+0540     STA RTSTKPTR
+0550     LDA #$80
+0560     STA STKPTR+1
+0570     LDA #$03
+0580     STA SEEK
+0590     LDA #$0F
+0600     STA SEEK2
+0610     LDA #$01
+0620     STA ALPHA
+0630     LDA #$00
+0640     STA ALPHA+1
+0650     LDA #$FF
+0660     STA BETA
+0670     LDA #$7F
+0680     STA BETA+1
+0690     JSR MOVE
+0700     LDX BESTSTART
+0710     LDY BESTEND
+0720     LDA BOARD,Y
+0730     AND #$0F
+0740     CMP #$06
+0750     BEQ GAMEOVER
+0760     LDA BOARD,X
+0770     STA BOARD,Y
+0780     LDA #$00
+0790     STA BOARD,X
+0800     JSR SHOWMOVE
+0810     JSR BOARDRAW
+0820     LDA COMPTYPE
+0830     EOR #$80
+0840     STA COMPTYPE
+0850     STA TYPE
+0860     BNE NOTWHITE
+0870     LDA PRINTFLAG
+0880     BEQ NOTWHITE
+0890     LDA #13     ; CARRAGE RETURN
+0900     STA TEMP2
+0910     JSR OUTPRINT
+0920 NOTWHITE JMP NEXTMOVE
+0930 GAMEOVER RTS 
+0940     .INCLUDE #D:MOVGEN.SRC
+0950     .INCLUDE #D:MKMOVE.SRC
+0960     .INCLUDE #D:EVAL2.SRC
+0970     .INCLUDE #D:BOARDRAW.SRC
+0980 SHOWMOVE
+0990     LDA #33
+1000     STA $55
+1010     LDA LEVEL
+1020     TAX 
+1030     CLC 
+1040     ADC #$05
+1050     STA $54
+1060     LDA BESTSTART,X
+1070     JSR OUTPUT
+1080     LDA #$2D    ; INSERT DASH
+1090     JSR OUTCHAR
+1100     LDX LEVEL
+1110     LDA BESTEND,X
+1120     JSR OUTPUT
+1130     LDA #$20    ; SPACE
+1140     JSR OUTCHAR
+1150     RTS 
+1160 OUTPUT
+1170     SEC 
+1180     SBC #$15
+1190     LDX #$00
+1200 OUTLOOP INX 
+1210     SEC 
+1220     SBC #$0A
+1230     BPL OUTLOOP
+1240     CLC 
+1250     ADC #$4B
+1260     STX TEMP
+1270     JSR OUTCHAR
+1280     LDA #$09
+1290     SEC 
+1300     SBC TEMP
+1310     CLC 
+1320     ADC #$30
+1330     JSR OUTCHAR
+1340     RTS 
+1350 OUTCHAR
+1360     STA TEMP2
+1370     JSR $F6A4
+1380     LDA PRINTFLAG
+1390     BEQ OUTCEXIT
+1400 OUTPRINT  BPUT  1,TEMP2,1
+1410 OUTCEXIT RTS 
diff --git a/mkmove.src b/mkmove.src
new file mode 100644 (file)
index 0000000..41a5810
--- /dev/null
@@ -0,0 +1,208 @@
+10 MOVE
+20       LDA LEVEL
+30       AND #$01
+40       CLC 
+50       ROR A
+60       ROR A
+70       EOR COMPTYPE
+80       STA TYPE
+90       LDA #$00
+0100     STA PEXTRA
+0110     LDA LEVEL
+0120     CMP SEEK
+0130     BCC NEXTPLY
+0140     CMP SEEK2
+0150     BCS TERMINAL
+0160 ; WAS PIECE CAPTURED LAST TURN?
+0170     LDA CAPTCONT
+0180     BNE PLYEXTRA
+0190 ; ASSIGN TERMINAL EVALUATION
+0200 TERMINAL LDA COMPTYPE
+0210     BNE OTHER
+0220     JMP EVAL2
+0230 OTHER JMP EVAL2
+0240 PLYEXTRA LDA #$FF
+0250     STA PEXTRA
+0260     JSR TERMINAL
+0270     LDA NSCORE
+0280     STA ALPHA
+0290     LDA NSCORE+1
+0300     STA ALPHA+1
+0310 NEXTPLY JSR MOVGEN
+0320     JSR STKCPY
+0330     CPX #$FF    ; NO LEGAL MOVES
+0340     BNE MLOOP
+0350     JSR PULLXY
+0360     JSR TERMINAL
+0370     RTS 
+0380 MLOOP JSR STKCPY
+0390     CPX #$FF    ; NO MOVES LEFT
+0400     BNE MVPIECE
+0410     JSR PULLXY
+0420     LDA ALPHA+1
+0430     STA NSCORE+1
+0440     LDA ALPHA
+0450     STA NSCORE
+0460     RTS 
+0470 MVPIECE JSR MAKEMOVE
+0480 ; SAVE ALPHA AND BETA
+0490     LDA ALPHA
+0500     JSR PUSHRT
+0510     LDA ALPHA+1
+0520     JSR PUSHRT
+0530     LDA BETA
+0540     JSR PUSHRT
+0550     LDA BETA+1
+0560     JSR PUSHRT
+0570 ; ALPHA = - BETA;BETA = - ALPHA
+0580     LDA #$00
+0590     SEC 
+0600     SBC ALPHA
+0610     PHA 
+0620     LDA #$80
+0630     SBC ALPHA+1
+0640     PHA 
+0650     LDA #$00
+0660     SEC 
+0670     SBC BETA
+0680     STA ALPHA
+0690     LDA #$80
+0700     SBC BETA+1
+0710     STA ALPHA+1
+0720     PLA 
+0730     STA BETA+1
+0740     PLA 
+0750     STA BETA
+0760 ; CALL PROCEDURE RECURSIVELY
+0770     INC LEVEL
+0780     LDA VIEWFLAG
+0790     BEQ VIEWSKIP
+0800     JSR BOARDRAW
+0810     JSR $F6E2
+0820 VIEWSKIP JSR MOVE
+0830     DEC LEVEL
+0840     JSR PULLXY
+0850     JSR TAKEMOVE ; RESTORE BOARD
+0860 ; RESTORE ALPHA AND BETA
+0870     JSR PULLRT
+0880     STA BETA+1
+0890     JSR PULLRT
+0900     STA BETA
+0910     JSR PULLRT
+0920     STA ALPHA+1
+0930     JSR PULLRT
+0940     STA ALPHA
+0950 ; NEGATE EVALUATION SCORE
+0960     LDA #$00
+0970     SEC 
+0980     SBC NSCORE
+0990     STA NSCORE
+1000     LDA #$80
+1010     SBC NSCORE+1
+1020     STA NSCORE+1
+1030 ; ALPHA=MAX ( ALPHA,-NSCORE)
+1040     LDA NSCORE+1 ; CHECK FOR NEW
+1050     CMP ALPHA+1
+1060     BCC NOSWITCH
+1070     BEQ TRY2
+1080     JMP SWITCH
+1090 TRY2 LDA NSCORE
+1100     CMP ALPHA
+1110     BCC NOSWITCH
+1120 SWITCH LDA NSCORE
+1130     STA ALPHA
+1140     LDA NSCORE+1
+1150     STA ALPHA+1
+1160     LDX LEVEL
+1170     LDA LASTMOVE
+1180     STA BESTSTART,X
+1190     LDA LASTMOVE+1
+1200     STA BESTEND,X
+1210     JSR SHOWMOVE
+1220 NOSWITCH LDA ALPHA+1
+1230     CMP BETA+1
+1240     BCC NOPRUNE
+1250     BNE PRUNE
+1260     LDA ALPHA
+1270     CMP BETA
+1280     BCC NOPRUNE
+1290 PRUNE JSR PULLXY
+1300     CPX #$FF
+1310     BNE PRUNE
+1320     LDA #$7F
+1330     STA NSCORE+1
+1340     LDA #$FF
+1350     STA NSCORE
+1360     LDX LASTMOVE+1
+1370     LDA BOARD,X
+1380     BNE KHUSKIP
+1390     LDY LEVEL
+1400     LDA LASTMOVE
+1410     STA KILLSTART,Y
+1420     TXA 
+1430     STA KILLEND,Y
+1440 KHUSKIP RTS 
+1450 NOPRUNE JMP MLOOP
+1460 STKCPY
+1470     LDY #$01
+1480     LDA (STKPTR),Y
+1490     TAX 
+1500     DEY 
+1510     LDA (STKPTR),Y
+1520     TAY 
+1530     RTS 
+1540 PULLXY
+1550     JSR STKCPY
+1560     INC STKPTR
+1570     INC STKPTR
+1580     BNE PLEXIT
+1590     INC STKPTR+1
+1600 PLEXIT RTS 
+1610 MAKEMOVE
+1620     STX LASTMOVE
+1630     STY LASTMOVE+1
+1640     LDA BOARD,Y
+1650     PHA 
+1660     AND #$0F
+1670     CMP #$06
+1680     BEQ KINGCAPT
+1690     LDA BOARD,X
+1700     STA BOARD,Y
+1710     LDA #$00
+1720     STA BOARD,X
+1730     PLA 
+1740     LDY LEVEL
+1750     STA STORE,Y
+1760     STA CAPTCONT
+1770     RTS 
+1780 KINGCAPT
+1790     PLA         ; REMOVE GARBAGE
+1800     PLA 
+1810     PLA 
+1820 KCPRUNE JSR PULLXY
+1830     CPX #$FF
+1840     BNE KCPRUNE
+1850     LDA #$6F
+1860     STA NSCORE+1
+1870     LDA #$FF
+1880     STA NSCORE
+1890     RTS         ; TERMINATE NODE
+1900 TAKEMOVE
+1910     STX LASTMOVE
+1920     STY LASTMOVE+1
+1930     LDA BOARD,Y
+1940     STA BOARD,X
+1950     LDX LEVEL
+1960     LDA STORE,X
+1970     STA BOARD,Y
+1980     RTS 
+1990 PUSHRT
+2000     LDY RTSTKPTR
+2010     STA RTSTACK,Y
+2020     INC RTSTKPTR
+2030     RTS 
+2040 PULLRT
+2050     DEC RTSTKPTR
+2060     LDY RTSTKPTR
+2070     LDA RTSTACK,Y
+2080     RTS 
diff --git a/movgen.src b/movgen.src
new file mode 100644 (file)
index 0000000..8c2d28f
--- /dev/null
@@ -0,0 +1,265 @@
+10 DIRDATA
+20       .BYTE -1,-10,1,10,-11,-9,11,9
+30       .BYTE 12,8,21,19,-12,-8,-21,-19
+40 DIRIND
+50       .BYTE 0,8,4,0,0,0
+60 DIST
+70       .BYTE 0,8,4,4,8,8
+80 GODATA
+90       .BYTE 0,0,1,1,1,0
+0100 SETUP LDY #$80
+0110 SETLOOP LDA BDATA-1,Y
+0120     STA BOARD-1,Y
+0130     DEY 
+0140     BNE SETLOOP
+0150     RTS 
+0160 BDATA
+0170     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0180     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0190     .BYTE $FF,$84,$82,$83,$85,$86,$83,$82,$84,$FF
+0200     .BYTE $FF,$81,$81,$81,$81,$81,$81,$81,$81,$FF
+0210     .BYTE $FF,0,0,0,0,0,0,0,0,$FF
+0220     .BYTE $FF,0,0,0,0,0,0,0,0,$FF
+0230     .BYTE $FF,0,0,0,0,0,0,0,0,$FF
+0240     .BYTE $FF,0,0,0,0,0,0,0,0,$FF
+0250     .BYTE $FF,$01,$01,$01,$01,$01,$01,$01,$01,$FF
+0260     .BYTE $FF,$04,$02,$03,$05,$06,$03,$02,$04,$FF
+0270     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0280     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0290 MOVGEN
+0300     LDA #$15
+0310     STA BLOK
+0320     LDA #$00
+0330     STA CSTKPTR
+0340     LDA #$FF
+0350     JSR SUREPUSH
+0360     JSR SUREPUSH
+0370 GENLOOP LDX BLOK
+0380     LDA BOARD,X
+0390     BEQ ENDGEN
+0400     CMP #$FF
+0410     BEQ ENDGEN
+0420     AND #$80
+0430     CMP TYPE
+0440     BNE ENDGEN
+0450     LDA BOARD,X
+0460     AND #$07
+0470     CMP #$01
+0480     BNE NOTPAWN
+0490     JMP PAWNSUB
+0500 NOTPAWN TAX 
+0510     DEX 
+0520     LDA DIST,X
+0530     STA COUNT
+0540     LDA GODATA,X
+0550     STA GOFLAG
+0560     LDA DIRIND,X
+0570     TAX 
+0580 GEN2LOOP LDA BLOK
+0590 SLIDE CLC 
+0600     ADC DIRDATA,X
+0610     TAY 
+0620     LDA BOARD,Y
+0630     BEQ MVFOUND
+0640     CMP #$FF
+0650     BEQ END2GEN
+0660     AND #$80
+0670     CMP TYPE
+0680     BEQ END2GEN
+0690     LDA BLOK
+0700     JSR CPA
+0710     TYA 
+0720     JSR CPA
+0730     JMP END2GEN
+0740 MVFOUND LDA BLOK
+0750     JSR PUSHA
+0760     TYA 
+0770     JSR PUSHA
+0780     LDA GOFLAG
+0790     BEQ END2GEN ; STOP-PIECE MOVES 1
+0800     TYA 
+0810     JMP SLIDE
+0820 END2GEN INX     ; TRY NEXT DIRECTION
+0830     DEC COUNT
+0840     BNE GEN2LOOP
+0850 ENDGEN INC BLOK
+0860     LDA BLOK
+0870     CMP #$63
+0880     BNE GENLOOP
+0890     LDA PEXTRA
+0900     BNE MGSPEC
+0910 ; SEARCH FOR KILLER
+0920     LDX LEVEL
+0930     LDY #$00
+0940 KILLSEARCH LDA (STKPTR),Y
+0950     INY 
+0960     CMP #$FF
+0970     BEQ KSABORT
+0980     CMP KILLEND,X
+0990     BNE KSNEXT
+1000     LDA (STKPTR),Y
+1010     CMP KILLSTART,X
+1020     BNE KSNEXT
+1030 ; SWAP KILLER AND TOP MOVE
+1040     STY TEMP1
+1050     LDY #$01
+1060     LDA (STKPTR),Y
+1070     LDY TEMP1
+1080     STA (STKPTR),Y
+1090     DEY 
+1100     STY TEMP1
+1110     LDY #$00
+1120     LDA (STKPTR),Y
+1130     LDY TEMP1
+1140     STA (STKPTR),Y
+1150     LDX LEVEL
+1160     LDY #$01
+1170     LDA KILLSTART,X
+1180     STA (STKPTR),Y
+1190     LDA KILLEND,X
+1200     DEY 
+1210     STA (STKPTR),Y
+1211     JMP KSABORT
+1212 KSNEXT INY 
+1213     JMP KILLSEARCH
+1219 ; PUT CAPTURES ON TOP OF STACK
+1220 KSABORT LDY #$00
+1230 MGCAPT CPY CSTKPTR
+1240     BEQ MGQUIT
+1250     LDA CSTACK,Y
+1260     JSR SUREPUSH
+1270     INY 
+1280     JMP MGCAPT
+1290 MGQUIT RTS 
+1300 MGSPEC LDY #$00
+1310 MGSCAPT CPY CSTKPTR
+1320     BEQ MGQUIT
+1330     LDA CSTACK,Y
+1340     STA TEMP
+1350     LDA CSTACK+1,Y
+1360     CMP LASTMOVE+1
+1370     BNE MGSCONT
+1380     PHA 
+1390     LDA TEMP
+1400     JSR SUREPUSH
+1410     PLA 
+1420     JSR SUREPUSH
+1430 MGSCONT INY 
+1440     INY 
+1450     JMP MGSCAPT
+1460 PDATA
+1470     .BYTE -10,-9,-11,-20,10,9,11,20
+1480 PLEFT
+1490     .BYTE 81,31
+1500 PRIGHT
+1510     .BYTE 89,39
+1520 PAWNSUB
+1530     LDY #$00
+1540     STY GOFLAG
+1550     LDA BOARD,X
+1560     AND #$80
+1570     BEQ PAWN2
+1580     LDY #$04
+1590 PAWN2 LDA BLOK
+1600     CLC 
+1610     ADC PDATA,Y
+1620     TAX 
+1630     LDA BOARD,X
+1640     BNE PAWN3
+1650     JSR PSAVE
+1660     INC GOFLAG
+1670 PAWN3 INY 
+1680     LDA PDATA,Y
+1690     CLC 
+1700     ADC BLOK
+1710     TAX 
+1720     LDA BOARD,X
+1730     BEQ PAWN4
+1740     CMP #$FF
+1750     BEQ PAWN4
+1760     AND #$80
+1770     CMP TYPE
+1780     BEQ PAWN4
+1790     LDA BLOK    ; CAN ATTACK
+1800     JSR CPA
+1810     TXA 
+1820     JSR CPA
+1830 PAWN4 INY 
+1840     LDA PDATA,Y
+1850     CLC 
+1860     ADC BLOK
+1870     TAX 
+1880     LDA BOARD,X
+1890     BEQ PAWN5
+1900     CMP #$FF
+1910     BEQ PAWN5
+1920     AND #$80
+1930     CMP TYPE
+1940     BEQ PAWN5
+1950     LDA BLOK
+1960     JSR CPA
+1970     TXA 
+1980     JSR CPA
+1990 PAWN5 LDA GOFLAG
+2000     BEQ PEXIT
+2010     INY         ; TEST MOVE 2
+2020     LDX #$00
+2030     LDA TYPE
+2040     BPL PSKIP
+2050     INX 
+2060 PSKIP LDA BLOK
+2070     CMP PLEFT,X
+2080     BCC PEXIT
+2090     CMP PRIGHT,X
+2100     BCS PEXIT
+2110     CLC 
+2120     ADC PDATA,Y
+2130     TAX 
+2140     LDA BOARD,X
+2150     BNE PEXIT
+2160     JSR PSAVE
+2170 PEXIT JMP ENDGEN
+2180 PSAVE
+2190     LDA BLOK
+2200     JSR PUSHA
+2210     TXA 
+2220     JSR PUSHA
+2230     RTS 
+2240 PUSHA
+2250     BIT PEXTRA
+2260     BMI NOPUSH  ; EXCLUDE CAPTURES
+2270 SUREPUSH STY TEMP
+2280     PHA 
+2290     LDY #$00
+2300     LDA STKPTR
+2310     BNE PASKIP
+2320     DEC STKPTR+1
+2330 PASKIP DEC STKPTR
+2340     PLA 
+2350     STA (STKPTR),Y
+2360     LDY TEMP
+2370 NOPUSH RTS 
+2380 CPA
+2390     STY TEMP
+2400     LDY CSTKPTR
+2410     STA CSTACK,Y
+2420     INC CSTKPTR
+2430     TAY 
+2440     LDA BOARD,Y
+2450     AND #$80
+2460     CMP TYPE
+2470     BEQ CPACONT
+2480     LDA BOARD,Y
+2490     AND #$0F
+2500     CMP #$06
+2510     BEQ MGENABORT
+2520 CPACONT LDY TEMP
+2530     RTS 
+2540 MGENABORT
+2550     LDA BLOK
+2560     JSR SUREPUSH
+2570     TYA 
+2580     JSR SUREPUSH
+2590     PLA 
+2600     PLA 
+2610     RTS 
diff --git a/nmovgen.src b/nmovgen.src
new file mode 100644 (file)
index 0000000..5820c1f
--- /dev/null
@@ -0,0 +1,193 @@
+10 DIRDATA
+20       .BYTE -1,-10,1,10,-11,-9,11,9
+30       .BYTE 12,8,21,19,-12,-8,-21,-19
+40 DIRIND
+50       .BYTE 0,8,4,0,0,0
+60 DIST
+70       .BYTE 0,8,4,4,8,8
+80 GODATA
+90       .BYTE 0,0,1,1,1,0
+0100 SETUP LDY #$80
+0110 SETLOOP LDA BDATA-1,Y
+0120     STA BOARD-1,Y
+0130     DEY 
+0140     BNE SETLOOP
+0150     RTS 
+0160 BDATA
+0170     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0180     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0190     .BYTE $FF,$84,$82,$83,$85,$86,$83,$82,$84,$FF
+0200     .BYTE $FF,$81,$81,$81,$81,$81,$81,$81,$81,$FF
+0210     .BYTE $FF,0,0,0,0,0,0,0,0,$FF
+0220     .BYTE $FF,0,0,0,0,0,0,0,0,$FF
+0230     .BYTE $FF,0,0,0,0,0,0,0,0,$FF
+0240     .BYTE $FF,0,0,0,0,0,0,0,0,$FF
+0250     .BYTE $FF,$01,$01,$01,$01,$01,$01,$01,$01,$FF
+0260     .BYTE $FF,$04,$02,$03,$05,$06,$03,$02,$04,$FF
+0270     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0280     .BYTE $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
+0290 MOVGEN
+0300     LDA #$15
+0310     STA BLOK
+0311     LDA #$00
+0312     STA CSTKPTR
+0320     LDA #$FF
+0330     JSR PUSHA
+0340     JSR PUSHA
+0350 GENLOOP LDX BLOK
+0360     LDA BOARD,X
+0370     BEQ ENDGEN
+0380     CMP #$FF
+0390     BEQ ENDGEN
+0400     AND #$80
+0410     CMP TYPE
+0420     BNE ENDGEN
+0430     LDA BOARD,X
+0440     AND #$07
+0450     CMP #$01
+0460     BNE NOTPAWN
+0470     JMP PAWNSUB
+0480 NOTPAWN TAX 
+0490     DEX 
+0500     LDA DIST,X
+0510     STA COUNT
+0520     LDA GODATA,X
+0530     STA GOFLAG
+0540     LDA DIRIND,X
+0550     TAX 
+0560 GEN2LOOP LDA BLOK
+0570 SLIDE CLC 
+0580     ADC DIRDATA,X
+0590     TAY 
+0600     LDA BOARD,Y
+0610     BEQ MVFOUND
+0620     CMP #$FF
+0630     BEQ END2GEN
+0640     AND #$80
+0650     CMP TYPE
+0660     BEQ END2GEN
+0670     LDA BLOK
+0680     JSR CPA
+0690     TYA 
+0700     JSR CPA
+0710     JMP END2GEN
+0720 MVFOUND LDA BLOK
+0730     JSR PUSHA
+0740     TYA 
+0750     JSR PUSHA
+0760     LDA GOFLAG
+0770     BEQ END2GEN ; STOP-PIECE MOVES 1
+0780     LDA TEMP
+0790     JMP SLIDE
+0800 END2GEN INX     ; TRY NEXT DIRECTION
+0810     DEC COUNT
+0820     BNE GEN2LOOP
+0830 ENDGEN INC BLOK
+0840     LDA BLOK
+0850     CMP #$63
+0860     BNE GENLOOP
+0870     LDY #$00
+0880 MGCAPT CPY CSTKPTR
+0890     BEQ MGQUIT
+0900     LDA CSTACK,Y
+0910     JSR PUSHA
+0920     INY 
+0930     JMP MGCAPT
+0940 MGQUIT RTS 
+0950 PDATA
+0960     .BYTE -10,-9,-11,-20,10,9,11,20
+0970 PLEFT
+0980     .BYTE 81,31
+0990 PRIGHT
+1000     .BYTE 89,39
+1010 PAWNSUB
+1020     LDY #$00
+1030     STY GOFLAG
+1040     LDA BOARD,X
+1050     AND #$80
+1060     BEQ PAWN2
+1070     LDY #$04
+1080 PAWN2 LDA BLOK
+1090     CLC 
+1100     ADC PDATA,Y
+1110     TAX 
+1120     LDA BOARD,X
+1130     BNE PAWN3
+1140     JSR PSAVE
+1150     INC GOFLAG
+1160 PAWN3 INY 
+1170     LDA PDATA,Y
+1180     CLC 
+1190     ADC BLOK
+1200     TAX 
+1210     LDA BOARD,X
+1220     BEQ PAWN4
+1230     CMP #$FF
+1240     BEQ PAWN4
+1250     AND #$80
+1260     CMP TYPE
+1270     BEQ PAWN4
+1280     LDA BLOK    ; CAN ATTACK
+1290     JSR CPA
+1300     TXA 
+1310     JSR CPA
+1320 PAWN4 INY 
+1330     LDA PDATA,Y
+1340     CLC 
+1350     ADC BLOK
+1360     TAX 
+1370     LDA BOARD,X
+1380     BEQ PAWN5
+1390     CMP #$FF
+1400     BEQ PAWN5
+1410     AND #$80
+1420     CMP TYPE
+1430     BEQ PAWN5
+1440     LDA BLOK
+1450     JSR CPA
+1460     TXA 
+1470     JSR CPA
+1480 PAWN5 LDA GOFLAG
+1490     BEQ PEXIT
+1500     INY         ; TEST MOVE 2
+1510     LDX #$00
+1520     LDA TYPE
+1530     BPL PSKIP
+1540     INX 
+1550 PSKIP LDA BLOK
+1560     CMP PLEFT,X
+1570     BCC PEXIT
+1580     CMP PRIGHT,X
+1590     BCS PEXIT
+1600     CLC 
+1610     ADC PDATA,Y
+1620     TAX 
+1630     LDA BOARD,X
+1640     BNE PEXIT
+1650     JSR PSAVE
+1660 PEXIT JMP ENDGEN
+1670 PSAVE
+1680     LDA BLOK
+1690     JSR PUSHA
+1700     TXA 
+1710     JSR PUSHA
+1720     RTS 
+1730 PUSHA
+1740     STY TEMP
+1750     PHA 
+1760     LDY #$00
+1770     LDA STKPTR
+1780     BNE PASKIP
+1790     DEC STKPTR+1
+1800 PASKIP DEC STKPTR
+1810     PLA 
+1820     STA (STKPTR),Y
+1830     LDY TEMP
+1840     RTS 
+1850 CPA
+1860     STY TEMP
+1870     LDY CSTKPTR
+1880     STA CSTACK,Y
+1890     INC CSTKPTR
+1900     LDY TEMP
+1910     RTS