ANTIC #2.07 / OCTOBER 1983 / PAGE 84
Many game players will be familiar with the two-player guessing game in which one player secretly picks several colors and arranges them in a certain order while the other player tries to guess the colors and the order in the fewest number of tries.
I tried to figure out how to make a solitaire version, and the only way I could do it was with a computer. At any rate, my game MAXTER MIND, is the result. I originally wrote it in assembly language, using Synassembler, then translated back to Atari’s Assembler-Editor syntax for the convenience of ANTIC’s readers. The code is reasonably short and simple, a good opportunity for assembly language beginners to examine an interesting program.
The program requires 32K and its run address is $7810. If you want to save it on an AUTORUN.SYS file, go to DOS menu item K and save it as
AUTORUN.SYS,7800,7D3F,,7810
The little face I use as a marker in the game is a redefined character.
The rules of MAXTER MIND are:
On the average, it takes about six or seven turns to solve the puzzle. I have done it in as few as four turns, but luck plays a large role. After playing awhile you will learn how to improve your guesses by analyzing previous turns and their results.
10 ; MAXTER MIND
20 ; BY
30 ; BOB POLIN
40 ; ANTIC MAGAZINE
50 ; ADAPTED FROM
60 ; SYNASSEMBLER VERSION
70 ;**********************
80 ;*G7810 TO RUN PROGRAM*
90 ;**********************
0100 .OPT NOLIST
0110 *=$7800
0120 SC=$7000 SCREEN
0130 PM=$7000 PLAYER-MISSILE
0140 P0=PM+$400 PLAYER0
0150 P1=PM+$500
0160 P2=PM+$600
0170 P3=PM+$700
0180 MISL=PM+$300 MISSILES
0190 PMBASE=$D407
0200 NMIEN=$D40E
0210 CHBASE=$D409
0220 WSYNC=$D40A
0230 RANDOM=$D20A
0240 HPOP0=$D000
0250 HPOSP1=$D001
0260 HPOSP2=$D002
0270 HPOSP3=$D003
0280 HPOSM0=$D004
0290 SIZEP0=$D008
0300 SIZEP2=$D00A
0310 SIZEM=$D00C
0320 COLPM0=$D012
0330 COLPM2=$D014
0340 COLPM3=$D015
0350 COLPF0=$D016
0360 COLPF1=$D017
0370 COLPF2=$D018
0380 COLPF3=$D019
0390 COLBK=$D01A
0400 GRACTL=$D01D
0410 CONSOL=$D01F
0420 RTCLOCK=$14
0430 VDSLST=$200
0440 SDMCTL=$22F
0450 SDLSTL=$230
0460 STICK0=$278
0470 STRIG0=$284
0480 COLOR0=$2C4
0490 COLOR4=$2C8
0500 PCOLR0=$2C0
0510 PCOLR1=$2C1
0520 PCOLR2=$2C2
0530 PCOLR3=$2C3
0540 CH=$2FC
0550 POS=$B4 SCREEN POSITION
0560 ; OF CURRENT ENTRY
0570 CSRPOS=$600 CURSOR POSITION
0580 COUNTER=$601
0590 LINE1=$602
0600 LINE2=$607
0610 LINE3=$60C
0620 LINE4=$611
0630 LINE5=$616
0640 LINE6=$61B
0650 LINE7=$620
0660 LINE8=$625
0670 LINE9=$62A
0680 LINE10=$62F
0690 LINE11=$634
0700 ANSPOS=$639 ANSWER POSITION
0710 ; ON THE SCREEN
0720 TRIGV=$63E TRIGGER VALUE
0730 NUMPCK=$63F NUMBER OF
0740 ; PICK (0-4)
0750 ANSWER=$643
0760 GRNBAR=$648 NO. OF GRN BARS
0770 REDBAR=$649 NO. OF RED BARS
0780 VPOSBAR=$64A VERTICAL POS OF
0790 ; RED OR GRN BAR
0800 STRTPRS=$FE NON 0=START
0810 ; BUTTON PRESSED
0820 TEMP1=$B0 TEMPORARY
0830 TEMP2=$B1 CALCULATION
0840 TEMP3=$B2 REGISTERS
0850 CHSET .BYTE 0,0,0,0,0,0,0,0
0860 .BYTE $7C,$FE,$BA,$EE,$BA,$C6,$7C,0
0870 LDA #0
0880 STA STRTPRS
0890 START LDA #0
0900 STA SDMCTL TURN OFF DMA
0910 LDX #$7F
0920 E STA $600,X CLEAR 1/2 OF
0930 STA SC+300,X PAGE 6 & PART
0940 DEX OF SCREEN
0950 BPL E
0960 LDX #MISL&255 CLEAR PLAYER-
0970 STX TEMP1 MISSILE MEMORY
0980 LDX #MISL/256
0990 STX TEMP2
1000 LDX #5
1010 LDY #0
1020 C STA (TEMP1),Y
1030 DEY
1040 BNE C
1050 INC TEMP2
1060 DEX
1070 BNE C
1080 STA COLOR4 BLACK BKGD
1090 LDA #$2A YELLOW
1100 STA PCOLR3
1110 LDA #$46 RED
1120 STA PCOLR0
1130 LDA #$C4 GREEN
1140 STA PCOLR1
1150 LDA #$CA LIGHT GREEN
1160 STA PCOLR2
1170 LDA #DL&255 STORE ADDRESS
1180 STA SDLSTL OF DISPLAY LIST
1190 LDA #DL/256
1200 STA SDLSTL+1
1210 LDA #DLIR1&255 STORE ADDRESS
1220 STA VDSLST OF DISPLAY LIST
1230 LDA #DLIR1/256 INTERRUPT
1240 STA VDSLST+1 ROUTINE #1
1250 LDA #166
1260 STA VPOSBAR
1270 LDA #192 ENABLE DLI
1280 STA NMIEN
1290 LDA #3 ENABLE PM
1300 STA GRACTL GRAPHICS
1310 STA SIZEM QUAD SIZED MISL
1320 LDA #62 ENABLE DMA &
1330 STA SDMCTL PM GRAPHICS
1340 LDA #1 DRAW FACE
1350 STA SC+405 WITH COLOR 0
1360 STA SC+385 CURSOR
1370 STA COUNTER INITIALIZE CNTR
1380 LDA #$41 COLOR 1
1390 STA SC+406
1400 LDA #$81 COLOR 2
1410 STA SC+407
1420 LDA #$C1 COLOR 3
1430 STA SC+408
1440 LDA #13 DRAW 12 LINES
1450 STA TEMP3 OF FACES
1460 LDA #SC+100&255 BLACK AT THIS
1470 STA TEMP1 POINT
1480 LDA #SC+100/256
1490 STA TEMP2 4 ON EACH LINE
1500 G DEC TEMP3 USING COLORS
1510 BEQ F 0 TO 3
1520 LDY #8
1530 LDX #3
1540 H LDA IM,X
1550 STA (TEMP1),Y
1560 DEY
1570 DEY
1580 DEX
1590 BPL H
1600 LDA TEMP1
1610 CLC
1620 ADC #20 NEXT LINE
1630 STA TEMP1
1640 BCC G
1650 INC TEMP2
1660 BNE G
1670 F LDX #10 PRINT
1680 I LDA MXMND,X "MAXTER MIND"
1690 STA SC+44,X ON TOP OF
1700 DEX SCREEN
1710 BPL I
1720 LDA #12 DRAW 1 FACE
1730 STA TEMP3 ON EACH OF 12
1740 LDY #171 LINES WITH
1750 K LDX #7 PLAYER 3
1760 J LDA PLIM,X
1770 STA P3,Y
1780 DEY
1790 DEX
1800 BPL J
1810 DEC TEMP3
1820 BNE K
1830 LDY #208
1840 LDX #7 DRAW 4
1850 D LDA PLIM,X FACES
1860 STA P0,Y AT BOTTOM
1870 STA P1,Y OF SCREEN
1880 STA P2,Y
1890 STA P3,Y
1900 DEY
1910 DEX
1920 BPL D
1930 LDA #PM/256
1940 STA PMBASE
1950 LDA #128
1960 STA HPOSP3
1970 LDA #136
1980 STA HPOSP1
1990 LDA #144
2000 STA HPOSP2
2010 STA HPOSM0
2020 LDA #1
2030 STA TRIGV
2040 LDA #$FF
2050 STA POS
2060 LDA #4 PICK ANSWER
2070 STA TEMP1
2080 L LDY #4
2090 LDA RANDOM PICK COLORS
2100 AND #7
2110 TAX
2120 LDA COLOR,X
2130 M CMP ANSWER,Y
2140 BEQ L COLOR EXISTS-
2150 ; PICK AGAIN
2160 DEY
2170 BPL M
2180 LDX TEMP1 COLOR DOES NOT
2190 STA ANSWER,X EXIST-STORE IT
2200 DEC TEMP1
2210 BPL L PICK NEXT COLOR
2220 JSR TIMER DELAY
2230 LDA STRTPRS START GAME IF
2240 BNE SRT <> 0
2250 N JSR CKSTRT
2260 LDA RTCLOCK FLASH PURPLE
2270 AND #$F "MAXTER MIND"
2280 ORA #$60
2290 STA COLOR0
2300 BNE N
2310 SRT JSR JOYST SUBROUTINE LOOP
2320 JSR CKSTRT THAT PLAYS THE
2330 JSR MOVE GAME
2340 JSR CLEAR
2350 JSR OPT
2360 JSR TIMER
2370 JMP SRT
2380 CALC LDA #0 CALCULATES THE
2390 STA GRNBAR NUMBER OF
2400 STA REDBAR CORRECT CHOICES
2410 LDX #4 ON EACH LINE
2420 LDY POS
2430 STY TEMP1 CHECK HOW MANY
2440 O LDY TEMP1 GRN BARS
2450 LDA LINE1,Y
2460 CMP ANSWER,X
2470 BNE P
2480 INC GRNBAR
2490 P DEC TEMP1
2500 DEX
2510 BPL O
2520 LDA #30 DELAY BEFORE
2530 STA TEMP1 PRINTING RESULT
2540 Q JSR TIMER
2550 DEC TEMP1
2560 BNE Q
2570 LDY VPOSBAR
2580 LDA GRNBAR PRINT GRN BARS
2590 BEQ R FOR CORRECT
2600 CMP #1 COLOR & POS
2610 BEQ S
2620 CMP #2
2630 BEQ T
2640 CMP #3
2650 BEQ U
2660 CMP #4
2670 BEQ V
2680 LDX #4 GRNBAR=5
2690 W LDA ANSWER,X PRINT CORRECT
2700 STA ANSPOS,X ANSWER
2710 DEX
2720 BPL W
2730 INX BLACKEN
2740 STX COLOR0 "MAXTER MIND"
2750 X JSR CKSTRT
2760 LDA RTCLOCK FLASH TOP OF
2770 STA COLOR4 SCREEN
2780 JMP X
2790 S LDA #$40 1 GRN BAR FOR
2800 BNE Y EACH CHOICE
2810 T LDA #$50 CORRECT IN BOTH
2820 BNE Y COLOR AND
2830 U LDA #$54 POSITION
2840 BNE Y
2850 V LDA #$55
2860 Y STA P2+1,Y
2870 STA P2+2,Y
2880 STA P2+3,Y
2890 R LDA #4 CHECK HOW MANY
2900 STA TEMP2 RED BARS
2910 LDY POS
2920 Z LDX #4
2930 AA LDA LINE1,Y
2940 CMP ANSWER,X
2950 BNE AB
2960 INC REDBAR
2970 AB DEX
2980 BPL AA
2990 DEY
3000 DEC TEMP2
3010 BPL Z
3020 LDY VPOSBAR
3030 LDA REDBAR
3040 SEC
3050 SBC GRNBAR
3060 BEQ AC
3070 CMP #1 1 RED BAR FOR
3080 BEQ AD EACH CHOICE
3090 CMP #2 CORRECT IN
3100 BEQ AE COLOR BUT
3110 CMP #3 INCORRECT IN
3120 BEQ AF POSITION
3130 CMP #4
3140 BEQ BA
3150 LDA #1 USE MISL0 IF
3160 STA MISL+1,Y 5TH RED BAR
3170 STA MISL+2,Y NEEDED
3180 STA MISL+3,Y
3190 BA LDA #$55
3200 AG STA P0+1,Y
3210 STA P0+2,Y
3220 STA P0+3,Y
3230 AC RTS
3240 AD LDA #1
3250 BNE AG
3260 AE LDA #5
3270 BNE AG
3280 AF LDA #$15
3290 BNE AG
3300 OPT LDA CONSOL CHECK IF OPTION
3310 CMP #3 PRESSED=GIVE
3320 BEQ LANE UP
3330 RTS
3340 LANE LDX #4
3350 STX CONSOL CLICK SPEAKER &
3360 AH LDA ANSWER,X PRINT ANSWER
3370 STA ANSPOS,X
3380 DEX
3390 BPL AH
3400 AI JSR CKSTRT
3410 JMP AI
3420 DLIR1 PHA
3430 TXA
3440 PHA
3450 LDA #3 QUAD SIZE
3460 STA SIZEP0
3470 STA SIZEP2
3480 LDA #$62 PURPLE
3490 STA WSYNC WAIT TILL HORIZ
3500 ; BLANK BEFORE
3510 ; CHANGING COLOR
3520 STA COLBK
3530 LDA #152
3540 STA HPOP0
3550 LDA #CHSET/256 CHARACTER SET
3560 STA CHBASE
3570 LDA #DLIR2&255
3580 LDX #DLIR2/256
3590 RESTORE STA VDSLST
3600 STX VDSLST+1 STORE ADDRESS
3610 PLA OF NEXT DLIR &
3620 TAX RESTORE
3630 PLA REGISTERS
3640 RTI
3650 DLIR2 PHA
3660 TXA
3670 PHA
3680 LDA #0 BLACK
3690 STA WSYNC
3700 STA COLBK
3710 LDX #4
3720 AJ LDA ANSPOS,X ANSPOS TO
3730 STA COLPM3,X ANSPOS+4 IS
3740 DEX BLACK (0) TILL
3750 BPL AJ ANSWER PRINTED
3760 LDA #DLIR3&255
3770 LDX #DLIR3/256
3780 BNE RESTORE
3790 DLIR3 PHA
3800 TXA
3810 PHA
3820 LDX #4
3830 AK LDA LINE11,X LINE11 TO LINE1
3840 STA COLPM3,X ARE ALL BLACK
3850 DEX TILL CHOICES
3860 BPL AK ARE ENTERED
3870 LDA #DLIR4&255 ON THEM
3880 LDX #DLIR4/256
3890 JMP RESTORE
3900 DLIR4 PHA
3910 TXA
3920 PHA
3930 LDX #4
3940 AL LDA LINE10,X
3950 STA COLPM3,X
3960 DEX
3970 BPL AL
3980 LDA #DLIR5&255
3990 LDX #DLIR5/256
4000 JMP RESTORE
4010 DLIR5 PHA
4020 TXA
4030 PHA
4040 LDX #4
4050 AM LDA LINE9,X
4060 STA COLPM3,X
4070 DEX
4080 BPL AM
4090 LDA #DLIR6&255
4100 LDX #DLIR6/256
4110 JMP RESTORE
4120 DLIR6 PHA
4130 TXA
4140 PHA
4150 LDX #4
4160 AN LDA LINE8,X
4170 STA COLPM3,X
4180 DEX
4190 BPL AN
4200 LDA #DLIR7&255
4210 LDX #DLIR7/256
4220 JMP RESTORE
4230 DLIR7 PHA
4240 TXA
4250 PHA
4260 LDX #4
4270 AO LDA LINE7,X
4280 STA COLPM3,X
4290 DEX
4300 BPL AO
4310 LDA #DLIR8&255
4320 LDX #DLIR8/256
4330 JMP RESTORE
4340 DLIR8 PHA
4350 TXA
4360 PHA
4370 LDX #4
4380 AP LDA LINE6,X
4390 STA COLPM3,X
4400 DEX
4410 BPL AP
4420 LDA #DLIR9&255
4430 LDX #DLIR9/256
4440 JMP RESTORE
4450 DLIR9 PHA
4460 TXA
4470 PHA
4480 LDX #4
4490 AQ LDA LINE5,X
4500 STA COLPM3,X
4510 DEX
4520 BPL AQ
4530 LDA #DLIR10&255
4540 LDX #DLIR10/256
4550 JMP RESTORE
4560 DLIR10 PHA
4570 TXA
4580 PHA
4590 LDX #4
4600 AR LDA LINE4,X
4610 STA COLPM3,X
4620 DEX
4630 BPL AR
4640 LDA #DLIR11&255
4650 LDX #DLIR11/256
4660 JMP RESTORE
4670 DLIR11 PHA
4680 TXA
4690 PHA
4700 LDX #4
4710 AS LDA LINE3,X
4720 STA COLPM3,X
4730 DEX
4740 BPL AS
4750 LDA #DLIR12&255
4760 LDX #DLIR12/256
4770 JMP RESTORE
4780 DLIR12 PHA
4790 TXA
4800 PHA
4810 LDX #4
4820 AT LDA LINE2,X
4830 STA COLPM3,X
4840 DEX
4850 BPL AT
4860 LDA #DLIR13&255
4870 LDX #DLIR13/256
4880 JMP RESTORE
4890 DLIR13 PHA
4900 TXA
4910 PHA
4920 LDX #4
4930 AU LDA LINE1,X
4940 STA COLPM3,X
4950 DEX
4960 BPL AU
4970 LDA #DLIR14&255
4980 LDX #DLIR14/256
4990 JMP RESTORE
5000 DLIR14 PHA
5010 TXA
5020 PHA
5030 LDA #$62 PURPLE
5040 STA WSYNC
5050 STA COLBK
5060 LDA #$32 RED
5070 STA COLPM0
5080 LDA #$94 BLUE
5090 STA COLPM2
5100 LDA #DLIR15&255
5110 LDX #DLIR15/256
5120 JMP RESTORE
5130 DLIR15 PHA
5140 TXA
5150 PHA
5160 LDA #0
5170 LDX #120
5180 STX HPOP0
5190 STA SIZEP0 NORMAL SIZE
5200 STA SIZEP2
5210 STA WSYNC
5220 STA COLBK
5230 LDA #$66 PURPLE (CURSOR)
5240 STA COLPF0
5250 LDA #$2A YELLOW
5260 STA COLPM3
5270 LDA #DLIR16&255
5280 LDX #DLIR16/256
5290 JMP RESTORE
5300 DLIR16 PHA
5310 TXA
5320 PHA
5330 LDA #$E WHITE
5340 LDX #4 GRAY
5350 STA WSYNC
5360 STA COLPF0
5370 STX COLPF1
5380 LDA #$12 BROWN
5390 STA COLPF2
5400 LDA #$36 RED
5410 STA COLPF3
5420 LDA #DLIR1&255
5430 LDX #DLIR1/256
5440 JMP RESTORE
5450 CKERR LDA #5 CHECK IF 1
5460 STA TEMP3 COLOR USED
5470 LDY POS TWICE ON THE
5480 AV LDA #0 SAME LINE BY
5490 STA TEMP1 COMPARING EACH
5500 LDA #5 COLOR WITH ALL
5510 STA TEMP2 COLORS ON ITS
5520 LDX POS LINE
5530 AW LDA LINE1,Y
5540 CMP LINE1,X
5550 BNE AX
5560 INC TEMP1
5570 AX DEX
5580 DEC TEMP2
5590 BNE AW
5600 LDA TEMP1 SHOULD=1
5610 CMP #2 BECAUSE SAME
5620 BCS ERR COLOR AS ITSELF
5630 DEY
5640 DEC TEMP3
5650 BNE AV
5660 RTS
5670 ERR LDA #4 DISALLOW ENTRY
5680 STA NUMPCK BY BACKSPACING
5690 STA CONSOL AND CLICKING
5700 LDX POS SPEAKER
5710 LDA #0
5720 STA LINE1,X
5730 DEC POS
5740 PLA
5750 PLA
5760 RTS
5770 CKSTRT LDA CONSOL CHECK START
5780 CMP #6 BUTTON
5790 BEQ AY
5800 RTS
5810 AY INC STRTPRS START PRESSED
5820 LDA #$6A PURPLE
5830 STA COLOR0 "MAX MIND"
5840 PLA
5850 PLA
5860 JMP START
5870 MOVE LDA STRIG0
5880 CMP TRIGV BRANCH IF
5890 BNE AZ STATUS CHANGE
5900 BB RTS IN FIRE BUTTON
5910 AZ STA TRIGV
5920 CMP #1 NOT PRESSED
5930 BEQ BB
5940 INC NUMPCK
5950 LDA NUMPCK
5960 CMP #5
5970 BNE BC
5980 LDA #0 COMPLETE LINE
5990 STA NUMPCK ENTERED
6000 BC INC POS
6010 LDX POS
6020 LDY CSRPOS
6030 LDA COLOR,Y
6040 STA LINE1,X
6050 LDA NUMPCK
6060 BNE BB
6070 JSR CKERR
6080 JSR CALC
6090 LDA VPOSBAR UPDATE VERTICAL
6100 SEC POS FOR NEW
6110 SBC #8 LINE
6120 STA VPOSBAR
6130 LDA POS
6140 CMP #$36 TOTAL NUMBER OF
6150 BCS BD PICKS ALLOWED
6160 RTS
6170 BD PLA LOSE-ALL PICKS
6180 PLA USED UP
6190 JMP LANE
6200 CLEAR LDA CH CHECK IF SPACE
6210 CMP #33 BAR PRESSED
6220 BEQ BE
6230 BF RTS
6240 BE LDA #255
6250 STA CH
6260 LDX POS
6270 LDA NUMPCK CANNOT DELETE
6280 BEQ BF IF NEW LINE
6290 DEC NUMPCK
6300 DEC POS
6310 LDA #0
6320 STA LINE1,X
6330 RTS
6340 JOYST DEC COUNTER CAN MOVE CURSOR
6350 BEQ BG ONCE EVERY
6360 BH RTS 12/60 SECOND
6370 BG LDA #12
6380 STA COUNTER
6390 STA $4D NO ATTRACT MODE
6400 LDA STICK0
6410 CMP #11 LEFT
6420 BEQ BI
6430 CMP #7 RIGHT
6440 BNE BH
6450 INC CSRPOS 0-7 ALLOWED
6460 LDX CSRPOS
6470 CPX #8
6480 BNE BJ
6490 DEX
6500 LDA #0
6510 STA SC+385,X
6520 LDX #0 MOVE CORSOR TO
6530 STX CSRPOS LEFTMOST POS
6540 BK LDA #1
6550 STA SC+385,X
6560 RTS
6570 BJ DEX CLEAR PREVIOUS
6580 LDA #0 CURSOR POSITION
6590 STA SC+385,X
6600 INX MOVE CSR RIGHT
6610 BNE BK 1 POSITION
6620 BI DEC CSRPOS
6630 BPL BL
6640 LDX #0 MOVE CURSOR TO
6650 LDA #0 RIGHTMOST POS
6660 STA SC+385,X
6670 LDX #7
6680 STX CSRPOS
6690 BNE BK
6700 BL LDX CSRPOS
6710 INX CLEAR PREVIOUS
6720 LDA #0 CURSOR POSITION
6730 STA SC+385,X
6740 DEX
6750 BPL BK
6760 TIMER LDA RTCLOCK DO NOTHING
6770 BM CMP RTCLOCK FOR 1/60
6780 BEQ BM SECOND
6790 RTS
6800 IM .BYTE $C1,$81,$41,1
6810 ;CHARACTER CODES FOR FACE
6820 MXMND .BYTE $2D,$21,$38,$34,$25,$32,0,$2D,$29,$2E,$24
6830 ;CHAR CODES FOR "MXTR MND"
6840 PLIM .BYTE $7C,$FE,$BA,$EE,$BA,$C6,$7C,0
6850 ;BIT MAP OF FACE
6860 COLOR .BYTE $F,4,$12,$36,$32,$2A,$C4,$94
6870 ;COLORS AVAIBLE
6880 DL .BYTE $70,$70,$70,$46
6890 ;DISPLAY LIST
6900 .WORD SC
6910 .BYTE 6,6,6,$90,$90,6,$86,$86
6920 .BYTE $86,$86,$86,$86,$86,$86,$86,$86
6930 .BYTE $86,6,6,$90,$90,6,6,$80
6940 .BYTE 6,$41
6950 .WORD DL