Jump to content

Mastermind: Difference between revisions

42,946 bytes removed ,  4 years ago
no edit summary
No edit summary
No edit summary
Line 3,233:
You found the code: DCBD
</pre>
 
=={{header|Basic/Assembler for ZX Spectrum}}==
Written for ZX Spectrum microcomputer. Can be run using an emulator.
All infos and program at: https://www.dropbox.com/s/gggcpdpoze9brq9/ZXMasterMind.zip?dl=0
 
10 REM Version MM62 - BASIC Parts - Roberto Zaffanella
20 BRIGHT 1
30 BORDER 7
 
40 REM FILE .BAS
50 LOAD "MM.BIN"CODE 48000,1608
60 LOAD "UDG.BIN"CODE 65368,168
70 LOAD "MM.SCR"SCREEN$
80 REM
 
90 REM FILE TAP PER EMULATORE - MMEMUXX.TAP
100 REM LOAD ""CODE 48000,1608
110 REM LOAD ""CODE 65368,168
120 REM LOAD ""SCREEN$
130 REM
 
140 REM FILE TAP PER FILE WAV - MMVAWXX.WAV
150 REM NEL TAP SCREEN$, MM.BAS, OBJ E UDG
160 REM TUTTI I LOAD IN REM. LASCIARE SOLO I POKE
170 REM LOAD ""CODE 48000,1608
180 REM LOAD ""CODE 47830,168
190 REM LOAD ""SCREEN$
200 REM POKE 23675,214
210 REM POKE 23676,186
220 REM
 
230 PRINT AT 20,20; INK 7; PAPER 0; FLASH 1;"Setting..."
240 LET LM=48000
250 LET VAR=49620
260 LET C1=49728
270 LET ROUTINE=VAR+0
280 LET MEMFT=VAR+1
300 LET MEMTUTTICP=VAR+4
310 LET C0=VAR+6
320 LET CS=VAR+18
330 LET MEMVR=VAR+31
340 LET MEMLASTPRT=VAR+32
350 LET MEMNUMCPPRT=VAR+34
360 LET MEMPESOMIN=VAR+84
370 LET MEMR=VAR+86
380 LET MEMBC=VAR+87
390 LET MEME=VAR+89
395 REM
 
400 REM CODIFICA ROUTINE LM
410 LET INIZ=1
420 LET CLEANVIDEO=2
430 LET DEFNUMCOL=3
440 LET TROVACH=4
450 LET ELIMINACP=5
460 LET VISFT=6
470 LET SIMULA=7
490 LET VISBC=8
500 LET GIOCATAPRG=9
550 REM
 
560 REM SET PER ROUTINE INPUT CP/CS - Q e Q$
580 DIM Q$(7,8)
590 DIM Q(7,8)
610 FOR I=4 TO 7
620 FOR J=1 TO 8
630 LET Q(I,J)=J
640 IF J=7 THEN LET Q(I,J)=0
650 LET Q$(I,J)="\j"
660 IF J=7 THEN LET Q$(I,J)="\i"
670 IF J=8 THEN LET Q(I,J)=2+(I-1)*2
680 NEXT J
690 NEXT I
700 LET Q(1,8)=4: LET Q(2,8)=5: LET Q(3,8)=6
710 FOR J=1 TO 8: LET Q$(1,J)="X": NEXT J
720 REM
 
730 REM SET PER ROUTINE INPUT CH - H e H$
740 DIM H$(6,4)
750 DIM H(6,4)
770 FOR I=1 TO 6
780 FOR J=1 TO 4
790 IF J=1 THEN LET H$(I,J)="\g": LET H(I,J)=1
800 IF J=2 THEN LET H$(I,J)="\h": LET H(I,J)=1
810 IF J=3 THEN LET H$(I,J)="\k": LET H(I,J)=3
820 IF I=1 THEN LET H$(I,J)="X"
830 IF I=2 THEN LET H$(I,J)="F"
840 IF J=4 THEN LET H(I,J)=I
850 NEXT J
860 NEXT I
870 REM
 
872 LET OPZ=1: LET OPZOLD=1
874 DIM G(2,10): REM SCORE
876 LET G1=0: LET G2=0
878 LET G$="OK"
890 DIM V(4):DIM W(7)
910 REM
 
920 FOR I=1 TO 10: BEEP .05,20+(10-I): NEXT I
930 REM
 
940 REM MAIN LOOP DEL GIOCO ******************
950 REM
960 POKE ROUTINE,INIZ: RANDOMIZE USR LM
962 LET FT=1296
970 REM
980 REM CALL MENU
990 GO SUB 6800
1000 REM
1010 IF G$="FINITA" THEN PRINT AT 20,1; INK 1;" Press any key to play again "; INK 0: GO SUB 6720: GO TO 500
1020 REM
1030 IF OPZ=1 THEN GO SUB 1150: REM GIO>PRG
1050 IF OPZ=2 THEN GO SUB 2940: REM PRG>GIO
1070 IF OPZ=3 THEN GO SUB 4470: REM DEMO
1090 IF OPZ=4 THEN GO SUB 7090: REM ISTRUZIONI
1092 IF OPZ=5 THEN GO SUB 7300: REM STAT
1100 REM
1110 IF G$="G1_ANNULLATA" THEN LET G(OPZ,G1)=0: LET G1=G1-1
1120 IF G$="G2_ANNULLATA" THEN LET G(OPZ,G2)=0: LET G2=G2-1
1125 REM VAI A LOOP PRINCIPALE
1130 GO TO 940
1140 REM
 
1150 REM GIO > PRG ++++++++++
1160 REM ++++++++++++++++++++
1170 CLS
1180 REM CALL DRAW BOARD
1190 GO SUB 5960
1200 REM
1205 REM SET MATRICE PER INPUT CP
1210 FOR J=1 TO 8: LET Q$(2,J)="B": NEXT J
1220 FOR J=1 TO 8: LET Q$(3,J)="F": NEXT J
1230 REM
1250 LET G1=G1+1
1260 IF G1>=7 THEN LET G1=6
1270 LET G(OPZ,G1)=0
1280 REM
1290 REM PRG TROVA CS CON RND E LO METTE IN CS
1300 RANDOMIZE
1310 LET E=INT (RND*1296)
1320 FOR I=0 TO 9
1330 POKE (CS+I),PEEK (C1+E*12+I)
1340 NEXT I
1350 REM
1360 REM METTE CS IN V(4)
1370 FOR I=1 TO 4: LET V(I)=PEEK (CS+I-1): NEXT I
1400 REM
1410 REM VIS CS OSCURATO
1440 LET R=1
1450 GO SUB 6320
1470 REM
1480 LET R=22
1490 REM ** PUNTO DI LOOP PER TUTTE LE GIOCATE **
1500 REM
1510 LET R=R-2
1525 LET S$="RUN_SIMULA"
1530 REM
1540 REM TROPPI TENTATIVI
1550 IF R=2 THEN GO SUB 2350: RETURN
1560 REM
1570 PRINT AT 1,18;" "
1580 PRINT AT 1,18;"Fit Codes:";FT
1590 PRINT AT 2,18;" "
1600 REM
1635 REM CALL INPUT CP/CS - RITORNA TENTATIVO IN W(1) W(2) W(3) W(4)
1640 GO SUB 1900
1645 REM
1655 PRINT AT 1,1;" "; AT 2,1;" ":
1660 IF G$="G1_ANNULLATA" THEN RETURN
1670 REM
1680 REM CALL METTE W(4) IN C0 E DEFINISCE NUM COL IN C0
1690 GO SUB 2590
1700 REM
1710 REM CALL TROVA CH TRA C0 E CS
1720 POKE ROUTINE,TROVACH: RANDOMIZE USR LM
1730 LET NERI=PEEK (C0+10)
1740 LET BIAN=PEEK (C0+11)-NERI
1750 REM
1760 REM CALL VIS CH
1770 GO SUB 5840
1780 REM
1785 REM CALL CS INDOVINATO
1790 IF NERI=4 THEN GO SUB 2670: RETURN
1800 REM
1810 REM CALL ELIMINA CP
1840 POKE ROUTINE,ELIMINACP: RANDOMIZE USR LM
1850 LET FT=PEEK (MEMFT)+PEEK (MEMFT+1)*256
1860 REM
1870 REM VAI A PUNTO DI LOOP PER TUTTE LE GIOCATE
1880 GO TO 1490
1890 REM
 
1900 REM ROUTINE DI INPUT CP SE OPZ=1 O CS SE OPZ=2
1910 REM
1920 LET G$="OK"
1930 FOR I=1 TO 7: LET W(I)=7: NEXT I
1960 LET U=0
1980 LET X=4: LET XOLD=4
1990 LET Y=7: LET YOLD=7
2000 PRINT AT R,4; INK 0;Q$(1,7);Q$(2,7);Q$(3,7)
2010 REM
2020 REM INPUT X B F CP o X H R CS
2030 PRINT AT R,Q(XOLD,8); INK Q(XOLD,YOLD); FLASH 0;Q$(XOLD,YOLD)
2040 PRINT AT R,Q(X,8); INK Q(X,Y); FLASH 1;Q$(X,Y)
2050 LET XOLD=X: LET YOLD=W(X)
2060 REM CALL INPUT
2070 GO SUB 6570
2080 REM
2090 IF K=8 AND X=1 THEN LET Y=W(X): REM SX
2100 IF K=8 AND X>1 THEN LET X=X-1: LET Y=W(X): REM SX
2110 IF K=9 AND X=7 THEN LET Y=W(X): REM DX
2120 IF K=9 AND X<7 THEN LET X=X+1: LET Y=W(X): REM DX
2130 IF K=10 THEN LET Y=Y-1: LET W(X)=Y: IF Y=0 THEN LET Y=7: LET W(X)=Y: REM GIU
2140 IF K=11 THEN LET Y=Y+1: LET W(X)=Y: IF Y=8 THEN LET Y=1: LET W(X)=Y: REM SU
2160 IF K=13 AND OPZ=1 THEN GO SUB 2220
2170 IF K=13 AND OPZ=2 THEN GO SUB 3820
2175 IF U=1 THEN RETURN
2180 REM
2190 REM RIPETI INPUT X B F CP o X H R CS
2200 GO TO 2020
2210 REM
 
2220 REM ROUTINE TASTO INVIO INPUT CP - 1900
2240 REM VF=1 VIS FIT CODES - VF=2 VIS BEST CODES
2250 LET K=13
2255 REM INVIO SU F CALL VIS FT/BC
2260 IF X=3 THEN PRINT AT R,6; INK 0;"F": LET X=X+1: LET Y=W(X): LET VF=1: GO SUB 5170
2265 REM
2270 REM INVIO SU B CALL BEST CODES
2280 IF X=2 THEN PRINT AT R,5; INK 0;"B": LET X=X+2: LET Y=W(X): LET VF=2: GO SUB 2440
2285 REM
2290 REM CODICE COMPLETATO + TASTO INVIO
2300 IF W(4)<7 AND W(5)<7 AND W(6)<7 AND W(7)<7 AND X>3 AND K=13 THEN PRINT AT R,2+(XOLD-1)*2; INK YOLD; FLASH 0;"\j": LET G(OPZ,G1)=G(OPZ,G1)+1: FOR I=4 TO 7: LET W(I-3)=W(I): NEXT I: POKE ROUTINE,CLEANVIDEO: RANDOMIZE USR LM: LET U=1: RETURN
2310 REM
2320 REM INVIO SU X PARTITA ANNULLATA
2330 IF X=1 THEN LET G$="G1_ANNULLATA": LET U=1: RETURN
2340 RETURN
 
2350 REM ROUTINE TROPPI TENTATIVI - OPZ 1
2360 PRINT AT 1,8; INK V(1);"\j";" "; INK V(2);"\j";" "; INK V(3);"\j";" "; INK V(4);"\j"; INK 0
2370 PRINT AT 7,17;" No more space": PRINT AT 8,20;"for codes": PRINT AT 10,20;"Score 10": PRINT AT 11,18;"for this game"
2380 PRINT AT 20,18;"Press any key": BEEP .6,-10
2390 LET G(OPZ,G1)=10
2400 REM CALL PRESS ANY KEY
2410 GO SUB 6720
2420 RETURN
2430 REM
 
2440 REM ROUTINE BEST CODES - 2220
2460 IF S$="RUN_SIMULA" THEN GO SUB 2530: LET S$="NO_RUN_AGAIN":REM CALL SIMULA
2485 LET BC=PEEK MEMBC+PEEK (MEMBC+1)*256
2490 LET VF=2: GO SUB 5170: RETURN: REM CALL VIS FT/BC
2520 RETURN
 
2530 REM ROUTINE SIMULA - opz 2 3 2440
2535 POKE ROUTINE,CLEANVIDEO: RANDOMIZE USR LM
2540 PRINT AT R,18; FLASH 1;"Processing:";FT
2550 POKE MEMR,R
2560 POKE ROUTINE,SIMULA: RANDOMIZE USR LM
2570 PRINT AT R,18;" "
2580 RETURN
 
2590 REM ROUTINE METTE W() IN C0 - OPZ 1 3
2600 POKE C0+0,W(1)
2610 POKE C0+1,W(2)
2620 POKE C0+2,W(3)
2630 POKE C0+3,W(4)
2640 POKE ROUTINE,DEFNUMCOL: RANDOMIZE USR LM
2650 RETURN
2660 REM
 
2670 REM CS INDOVINATO - OPZ 1 2 3
2680 LET W$=" GUESSED! "
2690 IF OPZ>1 THEN GO TO 2770
2700 LET Z=1
2710 LET J=G(OPZ,G1)
2720 IF J<4 THEN LET W$=" VERY LUCKY! "
2730 IF J=5 OR J=4 THEN LET W$=" WELL DONE! "
2740 IF J=6 THEN LET W$=" NOT SO BAD! "
2750 IF J>6 THEN LET W$="CAN DO BETTER"
2760 LET J=1
2770 IF OPZ>1 THEN LET Z=20: LET J=-1
2780 INK INT (RND*4)+1
2790 PRINT AT 1,18;" "
2800 FOR I=Z TO R STEP J
2810 IF I<20 THEN PRINT AT I-J,18;" "
2820 PRINT AT I,18+13-LEN W$;W$
2830 BEEP 0.04,-4
2840 NEXT I
2850 PRINT AT R,18+13-LEN W$; FLASH 1;W$
2860 INK 0: INVERSE 0
2870 IF OPZ=1 THEN PRINT AT Z,8; INK V(1);"\j";" "; INK V(2);"\j";" "; INK V(3);"\j";" "; INK V(4);"\j"
2880 FOR I=0 TO 19: BEEP .05,20-I: NEXT I
2890 PRINT AT 20,18;"Press any key"
2895 REM CALL PRESS ANY KEY
2900 GO SUB 6720
2910 RETURN
2930 REM
 
2940 REM PRG > GIO +++++++++
2950 REM +++++++++++++++++++
2960 CLS
2980 REM CALL DRAW BOARD
2990 GO SUB 6140
2995 REM
2997 REM SETTA H R PER MENU INPUT CS
3000 FOR J=1 TO 8: LET Q$(2,J)="H": NEXT J
3010 FOR J=1 TO 8: LET Q$(3,J)="R": NEXT J
3020 REM
3030 LET NERI=0: LET S$="NO_RUN_AGAIN"
3060 LET G2=G2+1
3070 IF G2>=7 THEN LET G2=6
3080 LET G(OPZ,G2)=0
3090 REM
3110 LET R=20
3120 REM CALL INPUT CP/CS
3130 GO SUB 1900
3140 IF G$="G2_ANNULLATA" THEN RETURN
3160 LET R=-1:
3170 REM
3180 REM ** PUNTO DI LOOP PER TUTTE LE GIOCATE **
3190 LET R=R+2
3200 LET G(OPZ,G2)=G(OPZ,G2)+1
3210 REM
3220 PRINT AT 1,18;" "
3230 PRINT AT 1,18;"Fit Codes:";FT
3240 PRINT AT 2,18;" "
3250 REM
3265 LET BC=PEEK MEMBC+PEEK (MEMBC+1)*256
3270 REM CALL GIOCATA PRG - RITORNA GIOCATA IN C0
3280 GO SUB 4030
3290 REM
3300 REM METTE C0 IN V(4)
3310 FOR I=1 TO 4: LET V(I)=PEEK (C0+I-1): NEXT I
3320 REM
3330 REM VIS CP GIOCATO DA PRG
3370 GO SUB 6450
3380 REM
3420 REM SE FT=1, PRG HA INDOVINATO. CALL VIS CH: CALL CS INDOVINATO
3430 IF FT=1 THEN LET BIAN=0: LET NERI=4: GO SUB 5840: GO SUB 2670: RETURN
3440 REM
3450 REM CALL INPUT CH - RITORNA W(4)
3460 GO SUB 4110
3470 IF G$="G2_ANNULLATA" THEN RETURN
3480 REM
3490 REM CONTA I NERI E BIANCHI DI W(4)
3500 LET BIAN=0: LET NERI=0
3510 FOR I=1 TO 4
3520 IF W(I)=1 THEN LET NERI=NERI+1
3530 IF W(I)=2 THEN LET BIAN=BIAN+1
3540 NEXT I
3550 REM
3560 REM CALL VIS CH
3570 GO SUB 5840
3580 REM
3600 POKE ROUTINE,CLEANVIDEO: RANDOMIZE USR LM
3610 REM
3620 REM CS INDOVINATO
3630 IF NERI=4 THEN GO SUB 2670: RETURN
3640 REM
3650 REM METTI BIANCHI E NERI IN C0+10/11
3660 POKE C0+10,NERI
3670 POKE C0+11,BIAN+NERI
3680 REM
3690 REM CALL ELIMINA CP
3700 POKE ROUTINE,ELIMINACP: RANDOMIZE USR LM
3710 LET FT=PEEK MEMFT+PEEK (MEMFT+1)*256
3720 IF FT=0 THEN PRINT AT 7,17; INK 0;" One Key Code": PRINT AT 8,20; INK 0;"is wrong": PRINT AT 10,19; INK 0;"No score for": PRINT AT 11,20; INK 0;"this game": PRINT AT 20,18;"Press any key": BEEP .6,-10: LET G$="G2_ANNULLATA": GO SUB 6720: RETURN
3730 REM
3740 REM CALL SIMULA
3750 GO SUB 2530
3760 REM
3770 REM VAI A PROSSIMA GIOCATA
3780 GO TO 3180
3790 REM
 
3820 REM ROUTINE TASTO INVIO INPUT CS - 1900
3830 REM CS COMPLETATO + ENTER
3840 IF W(4)<7 AND W(5)<7 AND W(6)<7 AND W(7)<7 AND X>3 THEN PRINT AT 20,4;" ": PRINT AT 20,Q(XOLD,8); INK YOLD; FLASH 0;"\j": LET U=1: RETURN
3850 REM
3860 REM INVIO SU H - CS SCRITTO SU CARTA
3870 IF X=2 THEN PRINT AT 20,5; INK 0;"H": LET R=20: GO SUB 6320: PRINT AT 20,4;" ": LET U=1: RETURN
3880 REM
3890 REM INVIO SU X - PARTITA ANNULLATA
3900 IF X=1 THEN LET G$="G2_ANNULLATA": LET U=1: RETURN
3910 REM
3920 REM INVIO SU R - CS RANDOM
3930 IF X=3 THEN PRINT AT 20,6; INK 0;"R": LET R=20: GO SUB 3950: PRINT AT 20,4;" ": LET U=1: RETURN
3940 RETURN
 
3950 REM ROUTINE CS RANDOM - 3820
3970 FOR I=1 TO 4
3980 LET V(I)=INT (RND*6)+1
3990 NEXT I
4000 REM CALL VIS CS
4010 GO SUB 6450
4020 RETURN
 
4030 REM GIOCATA PRG - OPZ 2 3
4035 REM RITORNA GIOCATA IN C0
4040 RANDOMIZE
4050 LET E=INT (RND*BC)+1
4060 POKE MEME,(E-INT (E/256)*256)
4070 POKE MEME+1,INT (E/256)
4080 POKE ROUTINE,GIOCATAPRG: RANDOMIZE USR LM
4090 RETURN
4100 REM
 
4110 REM ROUTINE INPUT CH - OPZ 2
4120 REM
4130 LET G$="OK"
4140 FOR I=1 TO 6
4150 LET W(I)=3
4160 NEXT I
4170 REM
4180 LET X=3: LET XOLD=3
4190 LET Y=3: LET YOLD=3
4200 PRINT AT R,1; INK 0;H$(1,3);H$(2,3);H$(3,3);H$(4,3);H$(5,3);H$(6,3)
4210 REM
4220 REM LOOP INPUT CH
4230 PRINT AT R,H(XOLD,4); INK 0; FLASH 0;H$(XOLD,YOLD)
4240 PRINT AT R,H(X,4); INK 0; FLASH 1;H$(X,Y)
4250 LET XOLD=X: LET YOLD=W(X)
4260 REM CALL INPUT
4270 GO SUB 6570
4280 REM
4290 IF K=8 AND X=1 THEN LET Y=W(X): REM SX
4300 IF K=8 AND X>1 THEN LET X=X-1: LET Y=W(X): REM SX
4310 IF K=9 AND X=6 THEN LET Y=W(X): REM DX
4320 IF K=9 AND X<6 THEN LET X=X+1: LET Y=W(X): REM DX
4330 IF K=10 THEN LET Y=Y-1: LET W(X)=Y: IF Y=0 THEN LET Y=3: LET W(X)=Y: REM GIU
4340 IF K=11 THEN LET Y=Y+1: LET W(X)=Y: IF Y=4 THEN LET Y=1: LET W(X)=Y: REM SU
4350 REM
4360 REM CH COMPLETATO + ENTER
4370 IF K=13 AND X>2 THEN PRINT AT R,H(XOLD,4); INK 0; FLASH 0;H$(XOLD,YOLD): FOR I=3 TO 6: LET W(I-2)=W(I): NEXT I: RETURN
4380 REM
4390 REM INVIO SU F CALL "VIS CP
4400 IF K=13 AND X=2 THEN PRINT AT R,2; INK 0;"F": LET VF=1: GO SUB 5170: REM VIS FT E BC
4410 REM
4420 REM INVIO SU X - PARTITA ANNULLATA
4430 IF K=13 AND X=1 THEN LET G$="G2_ANNULLATA": RETURN
4432 REM
4435 REM VAI A LOOP INPUT CH
4440 GO TO 4220
4450 REM
 
4470 REM DEMO +++++++++++
4480 REM ++++++++++++++++
4490 CLS
4500 LET G$="OK": LET NERI=0
4505 REM
4510 REM CALL DRAW BOARD
4520 GO SUB 6140
4530 REM
4580 REM METTE RND IN CS
4590 REM RANDOMIZE
4600 LET E=INT (RND*1296)
4610 FOR I=0 TO 9
4620 POKE (CS+I),PEEK (C1+E*12+I)
4630 NEXT I
4640 REM
4650 REM METTE CS IN V(4) PER VIS CS
4660 FOR I=1 TO 4: LET V(I)=PEEK (CS+I-1): NEXT I
4690 REM
4710 LET R=20
4720 REM CALL VIS CS
4730 GO SUB 6450
4740 REM
4750 LET R=-1
4760 REM
4770 REM **PUNTO DI LOOP PER TUTTE LE GIOCATE**
4780 LET R=R+2
4790 REM
4800 PRINT AT 1,18;" "
4810 PRINT AT 1,18;"Fit Codes:";FT;
4820 REM
4835 LET BC=PEEK MEMBC+PEEK (MEMBC+1)*256
4837 REM
4840 REM CALL GIOCATA PRG - RITORNA CP IN C0
4850 GO SUB 4030
4860 REM
4870 REM METTE C0 IN V()
4880 FOR I=1 TO 4: LET V(I)=PEEK (C0+I-1): NEXT I
4890 REM
4900 REM CALL VIS CP
4910 GO SUB 6450
4930 REM
4935 REM CALL TROVA CH TRA C0 E CS
4960 POKE ROUTINE,TROVACH: RANDOMIZE USR LM
4970 REM
4980 REM VIS CH
4990 LET NERI=PEEK (C0+10)
5000 LET BIAN=PEEK (C0+11)-NERI
5010 GO SUB 5840
5020 REM
5030 IF NERI=4 THEN GO SUB 2670: RETURN
5040 REM
5045 REM CALL ELIMINA CP
5080 POKE ROUTINE,ELIMINACP: RANDOMIZE USR LM
5090 LET FT=PEEK (MEMFT)+PEEK (MEMFT+1)*256
5112 REM
5115 REM CALL SIMULA
5125 GO SUB 2530
5130 REM
5140 REM VAI ALLA PROSSIMA GIOCATA
5150 GO TO 4770
5160 REM
 
5170 REM VIS FIT E BEST CODES - 2220 2440 4110
5190 PRINT AT 1,18;" "
5200 IF VF=1 THEN PRINT AT 1,18;"Fit Codes:";FT
5205 IF VF=1 AND OPZ=1 THEN PRINT AT 1,1;" "; AT 2,1;" ":
5210 IF VF=2 THEN PRINT AT 1,18;"BestCodes:";BC
5315 IF VF=2 THEN PRINT AT 1,1;"FitCod"; AT 2,2;FT
5220 REM
5230 REM PASSAGGIO VARIABILI PER ROUTINE VISFT E VISBC
5250 IF VF=1 THEN POKE MEMTUTTICP,(FT-INT (FT/256)*256)
5260 IF VF=1 THEN POKE MEMTUTTICP+1,INT (FT/256)
5270 IF VF=2 THEN POKE MEMTUTTICP,(1296-INT (1296/256)*256)
5280 IF VF=2 THEN POKE MEMTUTTICP+1,INT (1296/256)
5290 POKE MEMLASTPRT,(C1-INT (C1/256)*256)
5300 POKE MEMLASTPRT+1,INT (C1/256)
5310 POKE MEMNUMCPPRT,0
5320 POKE MEMNUMCPPRT+1,0
5325 REM
5330 REM ** LOOP VIS PAGINA DI FT/BC **
5340 POKE MEMVR,2
5350 REM
5360 IF VF=1 THEN POKE ROUTINE,VISFT: RANDOMIZE USR LM
5370 IF VF=2 THEN POKE ROUTINE,VISBC: RANDOMIZE USR LM
5380 LET VR=PEEK MEMVR
5390 LET NUMCPPRT=PEEK MEMNUMCPPRT+PEEK (MEMNUMCPPRT+1)*256
5400 PRINT AT 2,28;" "
5410 PRINT AT 2,18;"Displayed:";NUMCPPRT
5420 REM
5460 REM IF VF=1 THEN IF NUMCPPRT=FT THEN POKE MEMNUMCPPRT,0: POKE MEMNUMCPPRT+1,0
5470 REM IF VF=2 THEN IF NUMCPPRT=BC THEN POKE MEMNUMCPPRT,0: POKE MEMNUMCPPRT+1,0
5480 REM CALL MENU SCELTA/VIS FT/BC
5490 GO SUB 5550
5500 IF Z=1 THEN RETURN
5505 REM SE FT/BC SONO FINITI, RICOMINCIA DAL PRIMO
5510 IF VF=1 THEN IF NUMCPPRT=FT THEN GO TO 5250
5520 IF VF=2 THEN IF NUMCPPRT=BC THEN GO TO 5250
5525 REM VAI ALLA PROSSIMA PAGINA
5530 GO TO 5330
5540 REM
 
5550 REM MENU SCELTA/VIS FT/BC - 5170
5560 LET F=1: GO SUB 5800: REM VIS MENU A FRECCE - F=1 FLASH ON
5570 REM
5580 LET FR=VR: LET FROLD=VR
5590 REM CALL INPUT
5600 GO SUB 6570
5610 IF K=8 THEN LET Z=1: PRINT AT 20,18;" ": RETURN : REM SX
5620 IF K=10 THEN LET Z=2: RETURN : REM GIU
5630 IF K=11 AND OPZ=1 THEN LET F=0: GO SUB 5800: GO SUB 5670: IF Z=1 THEN RETURN : REM SU
5640 IF K=14 AND VF=1 AND S$="NO_RUN_AGAIN" AND FT<317 THEN GO SUB 5935: REM VIS PESI FT E BC
5642 IF K=14 AND VF=2 AND S$="NO_RUN_AGAIN" AND FT<317 THEN PRINT AT R,0;" "; AT R,0;PEEK (MEMPESOMIN)
5650 GO TO 5590
5660 REM
 
5670 REM SELEZIONE FT/BC DA GIOCARE - 5550
5680 LET FR=VR: LET FROLD=VR
5690 PRINT AT FR,30; FLASH 1;"\d"
5700 REM
5710 REM CALL INPUT
5720 GO SUB 6570
5725 IF K=8 THEN LET F=1: GO SUB 5800: PRINT AT FR,30;" ": LET Z=3: RETURN : REM SX
5730 IF K=11 THEN LET FR=FR-2: IF FR=2 THEN LET FR=VR: REM SU
5740 IF K=10 THEN LET FR=FR+2: IF FR=VR+2 THEN LET F=1: GO SUB 5800: PRINT AT VR,30;" ": LET Z=3: RETURN : REM GIU
5750 IF FR<>FROLD THEN PRINT AT FROLD,30;" ": PRINT AT FR,30; FLASH 1;"\d": LET FROLD=FR
5760 IF K=13 THEN PRINT AT FR,30;" ": PRINT AT 20,23;" ": FOR I=6 TO 0 STEP -2: LET TT=ATTR (FR,22+I)-120: PRINT AT R,8+I; INK TT;"\j": LET W(4+I/2)=TT: NEXT I: LET Y=TT: LET Z=1: PRINT AT R,4;" ": RETURN
5770 GO TO 5710
5780 REM
 
5800 REM VIS MENU A FRECCE - 5550
5805 PRINT AT 20,23; FLASH F;"\d";" "; FLASH F;"\f";" ";
5810 IF OPZ=1 THEN PRINT AT 20,27; FLASH F;"\e"
5820 RETURN
5830 REM
 
5840 REM ROUTINE VIS CH - OPZ 1 2 3
5850 LET I=6: LET Y=BIAN: LET X=NERI
5860 IF OPZ=1 THEN PRINT AT R,4;" "
5870 IF OPZ=2 THEN PRINT AT R,0;" "
5880 REM RIPETI PRINT DEI NERI
5890 IF X>0 THEN PRINT AT R,I;"\g": BEEP .04,-4: LET X=X-1: LET I=I-1: GO TO 5880
5900 REM RIPETI PRINT DEI BIANCHI
5910 IF Y>0 THEN PRINT AT R,I;"\h": BEEP .04,-4: LET Y=Y-1: LET I=I-1: GO TO 5900
5920 BEEP .04,-4
5925 RETURN
5930 REM
 
5935 REM ROUTINE VIS PESI DEI FT E BC - 5550
5936 PRINT AT R,0;PEEK (MEMPESOMIN)
5937 LET DS=PEEK (MEMLASTPRT)+PEEK (MEMLASTPRT+1)*256-12
5938 LET DT=NUMCPPRT-INT(NUMCPPRT/8)*8
5939 IF DT=0 THEN LET DT=8
5941 LET DT=DS-(DT-1)*12
5942 LET J=VR
5943 FOR I = DS TO DT STEP -12
5944 PRINT AT J,19;" ";AT J,19; PEEK (I+11)
5946 LET J=J-2
5948 NEXT I
5950 RETURN
5955 REM
 
5960 REM ROUTINE DRAW BOARD - OPZ 1
5970 PLOT 59,171
5980 DRAW 0,-14
5990 DRAW 64,0
6000 DRAW 0,14
6010 DRAW -64,0
6020 PRINT AT 1,8;"\i";" ";"\i";" ";"\i";" ";"\i";
6030 PLOT 59,4
6040 DRAW 0,146
6050 DRAW 64,0
6060 DRAW 0,-146
6070 DRAW -64,0
6080 REM
6090 FOR I=4 TO 20 STEP 2
6100 PRINT AT I,8;"\i";" ";"\i";" ";"\i";" ";"\i";AT I,16;(22-I)/2
6110 NEXT I
6120 RETURN
6130 REM
 
6140 REM ROUTINE DRAW BOARD - OPZ 2 3
6150 PLOT 59,26
6160 PRINT AT 20,8;"\i";" ";"\i";" ";"\i";" ";"\i"
6170 DRAW 0,146
6180 DRAW 64,0
6190 DRAW 0,-146
6200 DRAW -64,0
6210 REM
6220 FOR I=1 TO 17 STEP 2
6230 PRINT AT I,8;"\i";" ";"\i";" ";"\i";" ";"\i";AT I,16;(I+1)/2
6240 NEXT I
6250 PLOT 59,4
6260 DRAW 0,14
6270 DRAW 64,0
6280 DRAW 0,-14
6290 DRAW -64,0
6300 RETURN
6310 REM
 
6320 REM ROUTINE VIS CS OSCURATO - OPZ 1 2
6330 FOR I=1 TO 4
6340 LET Z=0
6350 FOR J=1 TO INT (RND*10)+1
6360 LET Z=Z+1
6370 IF Z=7 THEN LET Z=1
6380 PRINT AT R,6+2*I; INK Z;"\j"
6390 BEEP .02,-Z
6400 NEXT J
6410 PRINT AT R,6+2*I; INK 0;"\j"
6420 NEXT I
6430 RETURN
6440 REM
 
6450 REM ROUTINE VIS V() (CP O CS) - OPZ 2 3 3950
6460 FOR I=1 TO 4
6470 LET Z=0
6480 FOR J=1 TO V(I)
6490 LET Z=Z+1
6500 IF Z=7 THEN LET Z=1
6510 PRINT AT R,6+2*I; INK Z;"\j"
6520 BEEP .02,-Z
6530 NEXT J
6540 NEXT I
6550 RETURN
6560 REM
 
6570 REM ROUTINE INPUT
6580 PAUSE 0
6590 LET K=CODE INKEY$
6600 LET J=IN 31
6610 IF K=111 OR J=2 THEN LET K=8
6620 IF K=112 OR J=1 THEN LET K=9
6630 IF K=97 OR J=4 THEN LET K=10
6640 IF K=113 OR J=8 THEN LET K=11
6650 IF K=109 OR J=16 THEN LET K=13
6660 IF K=32 THEN LET K=14
6670 IF K<8 OR K>14 THEN GO TO 6570
6680 BEEP .04,-4
6690 RETURN
6700 REM
 
6720 REM ROUTINE PRESS ANY KEY
6730 PAUSE 0
6740 LET K=CODE INKEY$
6750 LET J=IN 31
6760 IF K=0 AND (J>16 OR J=0) THEN GO TO 6740
6770 BEEP .04,-4
6780 RETURN
6790 REM
 
6800 REM ROUTINE MENU
6810 CLS
6820 LET G(1,10)=0: LET G(2,10)=0
6830 FOR I=1 TO 5: LET G(1,10)=G(1,10)+G(1,I): LET G(2,10)=G(2,10)+G(2,I): NEXT I
6840 PRINT AT 2,9; INK 2; BRIGHT 1;"ZX MASTER MIND"
6850 PRINT AT 4,1; INK 8;"\j You guess my Secret Code \c\b\a"
6860 PRINT AT 6,1; INK 8;"\j I guess your Secret Code \a\b\c"
6870 PRINT AT 8,1; INK 8;"\j Demo \a\b\a"
6880 PRINT AT 10,1; INK 8;"\j Instructions"
6890 PRINT AT 13,1;" SCORE TOTAL "
6900 PRINT AT 15,2;"\c YOU:";AT 15,9;G(1,1);AT 15,12;G(1,2);AT 15,15;G(1,3);AT 15,18;G(1,4);AT 15,21;G(1,5);AT 15,26; INK 2;G(1,10)
6910 PRINT AT 17,2;"\a ME :";AT 17,9;G(2,1);AT 17,12;G(2,2);AT 17,15;G(2,3);AT 17,18;G(2,4);AT 17,21;G(2,5);AT 17,26; INK 2;G(2,10)
6920 PRINT AT 20,1;"\* 1985-2020 Zaffa Research Ltd"
6930 PLOT 12,76
6940 DRAW 230,0
6950 DRAW 0,-48
6960 DRAW -230,0
6970 DRAW 0,48
6980 REM
6990 PRINT AT 2+OPZ*2,1; FLASH 1; INK 2;"\j"
7000 IF G(1,5)<>0 AND G(2,5)<>0 THEN PRINT AT 15,26; FLASH 1; INK 1;G(1,10): PRINT AT 17,26; FLASH 1; INK 1;G(2,10): LET G$="FINITA": RETURN
7010 REM CALL INPUT
7020 GO SUB 6570
7030 IF K=10 THEN LET OPZ=OPZ+1: IF OPZ=5 THEN LET OPZ=1: REM GIU
7040 IF K=11 THEN LET OPZ=OPZ-1: IF OPZ=0 THEN LET OPZ=4: REM SU
7050 IF OPZ<>OPZOLD THEN PRINT AT 2+OPZOLD*2,1; FLASH 0; INK 0;"\j": PRINT AT 2+OPZ*2,1; FLASH 1; INK 2;"\j": LET OPZOLD=OPZ
7060 IF K=13 THEN RETURN
7065 REM IF K=14 THEN LET OPZ=5: RETURN
7070 GO TO 7010
7080 REM
 
7090 REM ISTRUZIONI
7100 LET G$="OK"
7110 CLS
7120 PRINT AT 0,1; INK 1;"KEYBOARD OR KEMPSTON JOYSTICK"
7130 REM PRINT AT 1,6; INK 1;"KEMPSTON JOYSTICK"
7140 PRINT AT 2,1; INK 1;"KEYS:"; INK 0;" \e or Q, \d or O"
7150 PRINT AT 3,6; INK 0;" \f or A, \b or P"
7160 PRINT AT 4,8;"Enter or M or Fire"
7170 PRINT AT 6,1; INK 1;"Game Options";
7180 PRINT AT 8,1; INK 1;"R"; INK 0;" - Random Secret Code"
7190 PRINT AT 10,1; INK 1;"H"; INK 00;" - Hide your Secret Code."
7200 PRINT AT 11,1;" (Write it down)"
7210 PRINT AT 13,1; INK 1;"F"; INK 0;" - Displays the Fit Codes"
7220 PRINT AT 15,1; INK 1;"B"; INK 0;" - Displays the Best Codes"
7230 PRINT AT 17,1; INK 1;"X"; INK 0;" - Exit from current game"
7240 PRINT AT 19,1; INK 1;"README.PDF"; INK 0;" For more information"
7250 PRINT AT 21,9;"Press any key"
7255 REM CALL PRESS ANY KEY
7260 GO SUB 6720
7270 RETURN
 
7300 REM STAT +++++++++++
7310 REM ++++++++++++++++
7312 LET TX=0: LET TN=0: LET TT=0
7315 FOR C= 1 TO 1296
7317 POKE ROUTINE,INIZ: RANDOMIZE USR LM
7319 LET FT=1296
7320 CLS
7330 LET G$="OK": LET NERI=0
7340 REM
7350 REM CALL DRAW BOARD
7360 GO SUB 6140
7370 REM
7380 REM METTE E IN CS
7410 FOR I=0 TO 9
7420 POKE (CS+I),PEEK (C1-12+C*12+I)
7430 NEXT I
7440 REM
7450 REM METTE CS IN V(4)
7460 FOR I=1 TO 4: LET V(I)=PEEK (CS+I-1): NEXT I
7470 REM
7480 LET R=20
7490 REM CALL VIS CS
7500 GO SUB 6450
7510 REM
7512 IF TN>TX THEN LET TX=TN
7514 PRINT AT 20,0;"MAX ";TX
7516 LET TT=TT+TN:
7518 IF C>1 THEN PRINT AT 18,0;"AVG ";TT/(C-1)
7520 LET R=-1: LET TN=0
7530 REM
7540 REM ** LOOP GIOCATE **
7550 LET R=R+2: LET TN=TN+1
7560 REM
7600 LET BC=PEEK MEMBC+PEEK (MEMBC+1)*256
7610 REM
7620 REM CALL GIOCATA PRG
7630 GO SUB 4030
7640 REM
7650 REM METTE C0 IN V()
7660 FOR I=1 TO 4: LET V(I)=PEEK (C0+I-1): NEXT I
7670 REM
7680 REM CALL VIS CP
7690 GO SUB 6450
7700 REM
7710 REM CALL TROVA CH
7720 POKE ROUTINE,TROVACH: RANDOMIZE USR LM
7730 REM
7740 REM VIS CH
7750 LET NERI=PEEK (C0+10)
7760 LET BIAN=PEEK (C0+11)-NERI
7770 GO SUB 5840
7780 REM
7790 IF NERI=4 THEN NEXT C:LET OPZ=1:PAUSE 0:RETURN
7800 REM
7810 REM CALL ELIMINA CP
7820 POKE ROUTINE,ELIMINACP: RANDOMIZE USR LM
7830 LET FT=PEEK (MEMFT)+PEEK (MEMFT+1)*256
7840 REM
7870 REM CALL SIMULA
7880 GO SUB 2530
7890 REM
7900 REM VAI A LOOP
7910 GO TO 7540
7920 REM
 
;ZX Master Mind
;Version MM62 - ASSEMBLER Part - Roberto Zaffanella
 
LM EQU 48000 ;INDIRIZZO PER IL CODICE OGGETTO
 
VAR EQU 49620 ;PUNTO DI PARTENZA PER LE VARIABILI
;LE VARIABILI USATE ANCHE DAL PROGRAMMA BASIC, INIZIANO CON "MEM"
 
C1 EQU 49728 ;1296 * 12 BYTES
;C1 PUNTA AL PRIMO FT (FT= FIT CODE)
 
ROUTINE EQU VAR+0 ;1 BYTE
;IL PRG BASIC CODIFICA OGNI ROUTINE CON UN NUMERO.
 
MEMFT EQU VAR+1 ;2 BYTES
;NUMERO TOTALE DEI CP RIMANENTI CIOE' DEI FT
 
;MEMVFLAG EQU VAR+3 ;1 BYTE
;NON USATA
 
MEMTUTTICP EQU VAR+4 ;2 BYTES
;USATA DA VISFT E VISBC. SETTATO UGUALE A FT O 1296
 
C0 EQU VAR+6 ;10 BYTES
;CODICE TENTATIVO
 
CH EQU VAR+16 ;2 BYTES
;CODICE CHIAVE. PUNTATO CON IX O IY +10 E +11
 
CS EQU VAR+18 ;12 BYTES
;CODICE SEGRETO
 
MEMVR EQU VAR+31 ;1 BYTE
;USATA DA VISFT E VISBC. RIGA IN CUI STAMPARE L'FT O BC
 
MEMLASTPRT EQU VAR+32 ;2 BYTES
;USATA DA VISFT E VISBC. INDIRIZZO DI MEMORIA DELL'ULTIMO FT O BC STAMPATO
 
MEMNUMCPPRT EQU VAR+34 ;2 BYTES
;USATA DA VISFT E VISBC. NUMERO DI FT O BC STAMPATI
 
CONTROV EQU VAR+36 ;2 BYTES
;SETTATA COME NUMCP DA SIMULACORE PER IL CONTO ALLA ROVESCIA
 
; 2 BYTES LIBERI 38 E 39
 
OFFSETXO EQU VAR+40 ;XX BYTES
;USATA DA SIMULACORE
 
;NUMCS EQU VAR+80 ;2 BYTE
;NON USATA
 
NUMCP EQU VAR+82 ;2 BYTE
;NUMERO DI CP CONSIDEARTI NELLA ROUTINE SIMULACORE
 
MEMPESOMIN EQU VAR+84 ;2 BYTE
;USATA DA TROVAPESOMINORE. CONTIENE IL PESO DEL CP CHE HA IL PESO PIU' BASSO
 
MEMR EQU VAR+86 ;1 BYTE
;USATA SOLO DA CONTOROVESCIA. RIGA DEL CP GIOCATO PASSATA DAL BASIC
 
MEMBC EQU VAR+87 ;2 BYTE
;NUMERO TOTALE DEI BC. USATA SOLO DA NUMBESTCODES
 
MEME EQU VAR+89 ;2 BYTE
;(MEME)CONTIENE E=INT (RND*BC)+1 - BC E' IL TOTALE DEI BC
;USATA SOLO DA GIOCATAPRG
 
TEMP EQU VAR+91 ;12 BYTES
;USATA DA "COMPATTA" PER SWAP CP
 
 
;----------------------------------------------------
ORG LM
 
LD A,(ROUTINE)
 
CP 1
JP Z,INIZ
 
CP 2
JP Z,CLEANVIDEO
 
CP 3
JP Z,DEFNUMCOL
 
CP 4
JP Z,TROVACH
 
CP 5
JP Z,ELIMINACP
 
CP 6
JP Z,VISFT
 
CP 7
JP Z,SIMULA
 
CP 8
JP Z,VISBC
 
CP 9
JP Z,GIOCATAPRG
 
RET
 
 
;-----------------------------------------------------
;INIZIALIZZAZIONE DEI CP (CP SONO IN GENERALE I CODICI POSSIBILI)
;I CP PARTONO DA 1296 E POI DIMINUISCONO AD OGNI GIOCATA
;INIZ VIENE CHIAMATA PRIMA DI OGNI PARTITA
INIZ
CALL INIZ_CODICI
CALL INIZ_NUMCOL
CALL INIZ_PESI
CALL TROVAPESOMINORE
CALL NUMBESTCODES
LD HL,1296
LD (MEMFT),HL
RET
 
 
;INIZIALIZZA I PRIMI 4 BYTE DEL CODICE
;UN BYTE PER OGNI POSIZIONE VALORIZZATO CON IL NUMERO DEL COLORE
INIZ_CODICI
LD IX,C1
LD D,1
LOOP_E
LD E,1
LOOP_B
LD B,1
LOOP_C
LD C,1
NEXT_CP
LD (IX+0),D
LD (IX+1),E
LD (IX+2),B
LD (IX+3),C
PUSH BC
LD BC,12
ADD IX,BC
POP BC
INC C
LD A,7
CP C
JR NZ,NEXT_CP
INC B
LD A,7
CP B
JR NZ,LOOP_C
INC E
LD A,7
CP E
JR NZ,LOOP_B
INC D
LD A,7
CP D
JR NZ,LOOP_E
RET
 
 
;INIZIALIZZA 6 BYTE DA C1+4. OGNI BYTE CORRISPONE A UN COLORE
;E CONTIENE IL NUMERO DI VOLTE CHE QUESTO COLORE E' PRESENTE NEL CP
INIZ_NUMCOL
LD IX,C1
LD BC,1296 ; 1296 CP
RPT_NEXT_CP
LD D,0
LD (IX+4),0
LD (IX+5),0
LD (IX+6),0
LD (IX+7),0
LD (IX+8),0
LD (IX+9),0
 
LD A,(IX+0)
ADD A,3 ;PER PUNTARE AI BYTE DI NUMCOL
LD E,A
PUSH IX
POP HL
ADD HL,DE ;HL PUNTA AL BYTE DEL COLORE
INC (HL)
 
LD A,(IX+1)
ADD A,3
LD E,A
PUSH IX
POP HL
ADD HL,DE
INC (HL)
 
LD A,(IX+2)
ADD A,3
LD E,A
PUSH IX
POP HL
ADD HL,DE
INC (HL)
 
LD A,(IX+3)
ADD A,3
LD E,A
PUSH IX
POP HL
ADD HL,DE
INC (HL)
 
LD DE,12 ;PASSA AL CP SUCCESSIVO
ADD IX,DE
DEC BC
LD A,B
OR C
JP NZ,RPT_NEXT_CP
RET
 
 
;INIZIALIZZA I CAMPI PESO.
;IX+10 E' IL CAMPO FIT E VIENE SETTATO A $FF. UN FT ESCLUSO VERRA' FLAGGATO COME "AA"
;IX+11 E' IL CAMPO BC E VIENE SETTATO A $BC SE IL CODICE E' DI TIPO 1234 1123 1122.
;SETTATO A $EE SE E'DEL TIPO 1112 O 1111
 
INIZ_PESI
 
LD IX,C1
LD BC,1296 ; 1296 CP
LD DE,12
 
RPT_SETPESI
LD (IX+10),$FF
LD (IX+11),$EE
 
LD A,(IX+4)
CP 3 ;SE A=>3 ALLORA NO CARRY
JR NC,NOBC
 
LD A,(IX+5)
CP 3
JR NC,NOBC
 
LD A,(IX+6)
CP 3
JR NC,NOBC
 
LD A,(IX+7)
CP 3
JR NC,NOBC
 
LD A,(IX+8)
CP 3
JR NC,NOBC
 
LD A,(IX+9)
CP 3
JR NC,NOBC
 
LD (IX+11),$BC ;CAMPO BC SETTATO A $BC
 
NOBC
ADD IX,DE ;PASSA AL CP SUCCESSIVO
DEC BC
LD A,B
OR C
JP NZ,RPT_SETPESI
LD A,$BC
LD (MEMPESOMIN),A
RET
 
 
;--------------------------------------------------------
;PULISCE LA ZONA VIDEO DI VISUALIZZA FIT E BEST CODES
CLEANVIDEO
 
LD IY,23610
LD A,2
CALL 5633
 
;PRTENZA DA RIGA 2
LD B,2
 
NEXTRIGA
;PARTENZA DA COLONNA 18
LD C,18
 
NEXTCOL
LD A,22 ;AT
RST 16
 
LD A,B ;RIGA
RST 16
 
LD A,C ;COLONNA
RST 16
 
LD A,32 ; METTI IN A UNO SPAZIO " "
RST 16 ; STAMPA AT B,C;" "
 
INC C
LD A,C
CP 31 ; FINO A COLONNA 30
JR NZ,NEXTCOL
 
INC B
LD A,B
CP 21 ;FINO A RIGA 20
JR NZ,NEXTRIGA
 
RET
 
;-----------------------------------------------------
;PASSA IL CODICE DA BASIC IN MEMORIA.
;RICEVE I CAMPI "CODICE" CON UNA POKE DAL BASIC (C0 +0 +1 +2 +3)
;VALORIZZA I CAMPI NUMCOL DI C0
 
DEFNUMCOL
LD IX,C0
 
LD (IX+4),0 ;RESETTA I CAMPI "NUMERO DI COLORI"
LD (IX+5),0
LD (IX+6),0
LD (IX+7),0
LD (IX+8),0
LD (IX+9),0
LD D,0
 
LD A,(IX+0)
ADD A,3 ;PER PUNTARE AI BYTE DI NUMCOL
LD E,A
PUSH IX
POP HL
ADD HL,DE ;HL PUNTA AL BYTE DEL COLORE
INC (HL)
 
LD A,(IX+1)
ADD A,3
LD E,A
PUSH IX
POP HL
ADD HL,DE
INC (HL)
 
LD A,(IX+2)
ADD A,3
LD E,A
PUSH IX
POP HL
ADD HL,DE
INC (HL)
 
LD A,(IX+3)
ADD A,3
LD E,A
PUSH IX
POP HL
ADD HL,DE
INC (HL)
 
RET
 
 
;----------------------------------------------------------
;CONFRONTA CS CON C0 E METTI I NERI IN C0+10 E
;I BIACHI+NERI IN C0+11
;CHIAMATA DA GIOC>PRG
TROVACH
LD IY,C0
LD IX,CS
CALL TEST
LD A,C
LD (C0+10),A ;NUMERO DI NERI
LD A,B
LD (C0+11),A ;NUMERO DI NERI + BIANCHI
RET
 
 
;--------------------------------------------------------------------
;TROVA IL NUMERO DI NERI+BIANCHI CONFRONTANDO C0 NUM COLORI
;PUNTATO DA IY E UN CP PUNTATO DA IX
;RITORNA B CON IL NUMERO DI X+O (VIENE MODIFICATO AF E BC
;IX^CP o IX^CS IY^C0 B=NUM DI NERI+BIANCHI
TEST
 
LD C,(IX+4)
LD A,(IY+4)
CP C
JR C,JUMP1 ;SE A<C SALTA
LD A,C ;METTI IN A IL NUN COL MINORE TRA (IX+3) E (IY+3)
JUMP1
LD B,A ;TIENE IN B IL NUMERO DI NERI+BIANCHI
 
LD C,(IX+5)
LD A,(IY+5)
CP C
JR C,JUMP2
LD A,C
JUMP2
ADD A,B
LD B,A
 
LD C,(IX+6)
LD A,(IY+6)
CP C
JR C,JUMP3
LD A,C
JUMP3
ADD A,B
LD B,A
 
LD C,(IX+7)
LD A,(IY+7)
CP C
JR C,JUMP4
LD A,C
JUMP4
ADD A,B
LD B,A
 
LD C,(IX+8)
LD A,(IY+8)
CP C
JR C,JUMP5
LD A,C
JUMP5
ADD A,B
LD B,A
 
LD C,(IX+9)
LD A,(IY+9)
CP C
JR C,JUMP6
LD A,C
JUMP6
ADD A,B
LD B,A
 
;------------------------------------------------------------------
;TROVA IL NUMERO DI NERI CONFRONTANDO C0 PUNTATO DA IY
;E UN CP PUNTATO DA IX. ;RITORNA C CON IL NUMERO DI NERI
;VIENE MODIFICATO AF E BC
;IX^CP IY^C0 C=NUM DI NERI
 
 
LD C,0
PEG1
LD A,(IX+0)
CP (IY+0)
JP NZ, PEG2
INC C
PEG2
LD A,(IX+1)
CP (IY+1)
JP NZ, PEG3
INC C
PEG3
LD A,(IX+2)
CP (IY+2)
JP NZ, PEG4
INC C
PEG4
LD A,(IX+3)
CP (IY+3)
RET NZ
INC C
RET
 
 
 
 
;---------------------------------------------------------------------------
;ELIMINAZIONE CODICI IMPOSSIBILI
;CONFRONTA C0 CON I CP. SE CH NON E' UGUALE A QUELLO IN C0+10/11
;ELIMINA IL CP.
;I CP BUONI CIOE' I FIT CODE VENGONO SPOSTATI DA C1 FINO A FT
;FT E' IL TOTALE DEL NUMERO DI CP RIMASTI
ELIMINACP
 
CALL FLAG_CP
LD A,E
OR D
RET Z ;FT=0 ALMOST ONE KEY CODE WRONG
 
CALL COMPATTA
 
RET
 
 
;--------------------------------------
;METTE FF IN IX+10 PER TUTTI I CP BUONI
FLAG_CP
LD HL,(MEMFT) ;HL=NUMERO DI FT DI PARTENZA
 
LD A,0 ;RESETTA IL TOTALE DEI FT
LD (MEMFT),A
LD (MEMFT+1),A
 
LD DE,(MEMFT) ;DE E' IL NUOVO CONTATORE FT
 
LD IX,C1
LD IY,C0
 
LOOP5
LD (IX+10),$AA ;SETTA DI DAFAULT IL CP IN C1 COME UN FIT CODE ELIMINATO
CALL TEST ;RITORNA C=NUM DI X E B=O+X
LD A,(IY+10) ;A=NUMERO DI X DI C0 QUELLE DATE DAL GIOCATORE O DAL COMPUTER
CP C
JR NZ,NEGATIVO1 ;SE IL NUM DI X E' DIVERSO, ELIMINA IL CP
 
LD A,(IY+11) ;METTE IN A IL NUM DI O+X DI C0
CP B ;SE IL NUM DI X+O E' DIVERSO, ELIMINA IL CP
JR NZ,NEGATIVO1
 
LD (IX+10),$FF ;SE IL CP NON VIENE ELIMINATO, VIENE FLAGGATO COME FT CON IL VALORE $FF
INC DE ;INCREMENTA IL TOTALE DEI FT
 
NEGATIVO1
PUSH DE ;AL CP RIMANE IL FLAG $AA E QUINDI VIENE ELIMINATO
LD DE,12
ADD IX,DE ;IX PASSA AL CP SUCCESSIVO
POP DE
 
DEC HL
LD A,H
OR L
JP NZ,LOOP5 ;RIPETI PER TUTTI I CP
LD (MEMFT),DE ;AGGIORNA IL NUMERO TOTALE DI FT
 
RET
 
;---------------------------------------
;COMPATTA TUTTI GLI FT, QUELLI CON $FF A PARTIRE DA C1
;CALCOLA L'INDIRIZZO DEL PRIMO CP NELL'AREA FT+1 CIOE' NELL'AREA
;DEI CP ESCLUSI. CERCA PARTENDO DA C1 IL PRIMO CP ELIMINATO E QUANDO LO TROVA,
;CERCA IL PRIMO FT NELL'AREA DEGLI ESCLUSI. qUANDO LO TROVA LI SCAMBIA DI POSIZIONE.
;RIPETE FINO A CHE TUTTI GLI FT PARTONO DA C1 E ARRIVANO FINO A FT
 
 
COMPATTA
 
 
LD IX,C1-12 ;IX PUNTA AI CP A PARTIRE DA C1
LD BC,(MEMFT) ;BC E' IL NUMERO DI CONFRONTI PER LO SWAP
INC BC
 
LD HL,(MEMFT) ;CALCOLO DELL'OFFSET PER L'AREA DEI CP NON BUONI
DEC HL
LD DE,12
; HL=HL*DE
CALL $30A9
LD DE,C1
ADD HL,DE
PUSH HL
POP IY ;IY PUNTA ALLA POSIZIONE DEL PRIMO CP NON BUONO
 
LD DE,12
 
FINDDELETEDCP
ADD IX,DE ;CERCA I CP NON BUONI NELL'AREA DEI BUONI
DEC BC ;
LD A,B
OR C
RET Z ;RITORNA QUANDO FINISCE LA ZONA DEI CP BUONI
LD A,$AA ;SE IX+10 E'$AA IL CP NON E' BUONO E QUINDI FAI LO SWAP
CP (IX+10)
JR Z,READYFORSWAP
JR FINDDELETEDCP
 
READYFORSWAP
 
CERCAFT
ADD IY,DE ;CERCA I CP BUONI NELL'AREA DEI NON BUONI
LD A,$FF
CP (IY+10)
JR NZ,CERCAFT ;QUANDO TROVATO, PROCEDI CON LO SWAP
 
PUSH BC ;SALVA BC
PUSH DE ;SALVA DE
 
PUSH IX
POP HL ;HL SOURCE DATA
LD DE,TEMP ;DE TARGET DATA
LD BC,12 ;NUMERB OF BYTE TO MOVE
LDIR
 
PUSH IY
POP HL ;HL SOURCE DATA
PUSH IX
POP DE ;DE TARGET DATA
LD BC,12 ;NUMERB OF BYTE TO MOVE
LDIR
 
LD HL,TEMP ;HL SOURCE DATA
PUSH IY
POP DE ;DE TARGET DATA
LD BC,12 ;NUMERB OF BYTE TO MOVE
LDIR
POP DE ;RIPRISTINA DE
POP BC ;RIPRISTINA BC
 
JR FINDDELETEDCP
 
 
;----------------------------------------------------
;VISUALIZZA FIT CODES
VISFT
 
CALL CLEANVIDEO
 
LD IX,(MEMLASTPRT) ;VIENE PASSATO DAL BASIC E SETTATO COME C1
LD B,8 ;NUMERO DI FT DA VISUALIZZARE PRIMA DI TORNARE AL BASIC
LD C,0
 
NEXTFT
PUSH BC
CALL PRINTCP
POP BC
LD HL,(MEMNUMCPPRT) ;NUMERO DI FT VISUALIZZATI. SETTATO A 0 DAL BASIC
INC HL
LD (MEMNUMCPPRT),HL
LD DE,12
ADD IX,DE
LD HL,(MEMTUTTICP) ;SETTATO INIZIALMENTE UGUALE A FT DAL BASIC
DEC HL
LD (MEMTUTTICP),HL
LD (MEMLASTPRT),IX ;SALVA L'INDIRIZZO DELL'ULTIMO FT VISUALIZZATO
LD A,H
OR L
RET Z ;SE I FT DA VISUALIZZARE SONO FINITI, RITORNA
DJNZ NEXTFT ;RIPETI PER 8 FT DA VISUALIZZARE
RET
 
 
;-------------------------------------------------------
;VISUALIZZA BEST CODES
VISBC
 
CALL CLEANVIDEO
 
LD IX,(MEMLASTPRT)
LD B,8
LD C,0
 
NEXTBC
LD A,(MEMPESOMIN) ;VISUALIZZA SOLO SE (IX+11) E' UGUALE A PESOMIN
CP (IX+11)
JR Z,CONTINUAPRINTBC
LD DE,12
ADD IX,DE
LD HL,(MEMTUTTICP) ;SETTATO A 1296 DAL BASIC
DEC HL
LD (MEMTUTTICP),HL
LD A,H
OR L
RET Z
JR NEXTBC
 
 
CONTINUAPRINTBC
PUSH BC
CALL PRINTCP
POP BC
LD HL,(MEMNUMCPPRT)
INC HL
LD (MEMNUMCPPRT),HL
LD DE,12
ADD IX,DE
LD HL,(MEMTUTTICP)
DEC HL
LD (MEMTUTTICP),HL
LD A,H
OR L
RET Z
DJNZ NEXTBC
LD (MEMLASTPRT),IX
RET
 
 
 
;-------------------------
PRINTCP
LD HL,MEMVR ;VISUALIZZA RIGA. SETTATA INIZIALMENTE A 2 DAL BASIC
INC (HL)
INC (HL)
 
LD IY,23610
 
LD A,2
CALL 5633
 
LD A,22 ;AT
RST 16
 
LD A,(MEMVR) ;RIGA
RST 16
 
LD A,20 ;COLONNA
RST 16
 
 
LD A,$AA ;SE E' BC INCONSISTENTE STAMPA *
CP (IX+10)
JR Z,STAMPA_ASTERISCO
 
LD A,32 ;ALTRIMENTI STAMPA SPAZIO
RST 16 ;STAMPA UNO SPAZIO
JR CONT765
 
 
STAMPA_ASTERISCO
LD A,42 ;*
RST 16 ;STAMPA UN "*"
 
 
CONT765
 
 
;................ primo piolo
LD A,16 ;INK
RST 16
 
LD A,(IX+0) ;VALORE INK
RST 16
 
LD A,22 ;AT
RST 16
 
LD A,(MEMVR) ;RIGA
RST 16
 
LD A,22 ;COLONNA
RST 16
 
LD A,153
RST 16
 
;................ secondo
 
LD A,16 ;INK
RST 16
 
LD A,(IX+1) ;VALORE INK
RST 16
 
LD A,22 ;AT
RST 16
 
LD A,(MEMVR) ;RIGA
RST 16
 
LD A,24 ;COLONNA
RST 16
 
LD A,153
RST 16
 
;.................... terzo
 
LD A,16 ;INK
RST 16
 
LD A,(IX+2) ;VALORE INK
RST 16
 
LD A,22 ;AT
RST 16
 
LD A,(MEMVR) ;RIGA
RST 16
 
LD A,26 ;COLONNA
RST 16
 
LD A,153
RST 16
 
;.................... quarto
 
LD A,16 ;INK
RST 16
 
LD A,(IX+3) ;VALORE INK
RST 16
 
LD A,22 ;AT
RST 16
 
LD A,(MEMVR) ;RIGA
RST 16
 
LD A,28 ;COLONNA
RST 16
 
LD A,153
RST 16
 
RET
 
 
;------------------------------------------
SIMULA
 
LD BC,(MEMFT)
LD HL,317 ;SE FT > 317 ESEGUI SOLO ELIMINA BC INCONSISTENTI E NUMBESTCODES
OR A ;AZZERA I FLAG
SBC HL,BC
JP NC,CONT741
CALL ELIMINAINCONSISTENTI
CALL NUMBESTCODES
RET
 
CONT741
CALL CLSPESI
CALL SIMULACORE
CALL TROVAPESOMINORE
CALL ELIMINAINCONSISTENTI
CALL NUMBESTCODES
RET
 
;-----------------
;CLS PESI - SETTA A $FF I CAMPI PESO DI TUTTI I CP
CLSPESI
 
LD BC,1296
LD IX,C1
LD DE,12
CLS
LD (IX+11),$FF
ADD IX,DE
DEC BC
LD A,B
OR C
JR NZ,CLS
RET
 
 
;------------------
;IY PUNTA AI CP - IX PUNTA AI CS
SIMULACORE
 
LD HL,(MEMFT)
 
LD BC,50 ;SE FT <= 50 CONSIDERA SOLO I FIT, ALTRIMENTI CONSIDERA TUTTI I 1296 CODICI
PUSH HL
OR A ;AZZERA I FLAG
SBC HL,BC
POP HL
JR NC,CONTINUA888 ; SE HL>BC CIOE' FT>50 SALTA A CONTINUA888. SE I FT SONO PIU' DI 50 USA SOLO I FT
 
LD BC,3 ;SE FT<3 CONSIDERA SOLO I FIT, ALTRIMENTI CONSIDERA TUTTI I 1296 CODICI
PUSH HL
OR A ;AZZERA I FLAG
SBC HL,BC
POP HL
JR C,CONTINUA888 ; SE HL<=BC CIOE' SE FT<=3 SALTA A CONTINUA888
LD HL,1296 ; SIMULA CON TUTTI I CP
 
CONTINUA888
LD (NUMCP),HL ;SE FT>50 OR FT<3 THEN NUMCP=FT ELSE NUMCP=1296
LD (CONTROV),HL ;SALVA (NUMCP) IN CONTO ALLA ROVESCIA
LD IY,C1 ;IY PUNTA AI CP
;INC (IY+11) ;SETTA IL PESO A ZERO DOPO CHE CLSPESI LO HA SETTATO A $FF
 
NEXTCP88
INC (IY+11) ;SETTA IL PESO A ZERO DOPO CHE CLSPESI LO HA SETTATO A $FF
LD IX,C1 ;IX PUNTA AI CS
LD DE,12
;CLEAN OFFSET
LD B,14
LD HL,OFFSETXO ;HL PUNTA ALL'OFFSET DEI NERI E BIANCHI
AZZERAOFFSET
LD (HL),0 ; SETTA 0 NELLE 14 CASELLE DELL'OFFSET
INC HL
DJNZ AZZERAOFFSET
LD HL,(MEMFT) ;HL E' IL NUMERO DI CS
 
RIPETISETTAOFFSET
CALL SETTAOFFSET ;CONFRONTA IY (CP) CON IX (CS) E METTE CH NELL'OFFSET
DEC HL ;DECREMENTA IL NUMERO DI CS E QUANDO SONO FINITI VAI A CALCPESO
LD A,H
OR L
JP Z,CALCPESO ;SE I CS SONO FINITI VAI A CALCOLA PESO
ADD IX,DE ;PASSA AL PROSSIMO CS
JR RIPETISETTAOFFSET
 
CALCPESO
LD A,0
LD B,14 ;NUMERO DI TIPI DI CH NELL'OFFSET
LD HL,OFFSETXO
 
NEXTCH01
LD A,(IY+11) ;A= PESO DEL CP. AL PRIMO CICLO E' ZERO
OR A
SBC A,(HL) ;PESO DEL CP - PESOOFFSET
JR NC,CONT456
LD A,(HL) ;SE PESO DEL CP < PESOOFFSET ALLORA METTI IL PESO DELL'OFFSET NEL CP
LD (IY+11),A
 
CONT456
INC HL ;HL PUNTA AL PROSSIMO CH DELL'OFFSET
DJNZ NEXTCH01
 
LD HL,(NUMCP) ;DECREMENTA IL NUMERO DI CP. SE FINITI, ROTORNA.
DEC HL
LD A,H
OR L
RET Z
 
ADD IY,DE ;IY PASSA AL PROSSIMO CP
LD (NUMCP),HL ;SALVA IL NUMERO DI CP
PUSH IY
CALL CONTOROVESCIA ;VISUALIZZA A VIDEO IL CONTATORE
POP IY
;INC (IY+11) ;SETTA IL PESO A ZERO DOPO CHE CLSPESI LO HA SETTATO A $FF
JP NEXTCP88
 
SETTAOFFSET ;INCREMENTA IL CH RISULTANTE DAL TEST DI IX E IY
CALL TEST ;TORNA C CON IL NUMERO DI NERI E B CON IL NUMERO DI NERI+BIANCHI
LD A,B
SUB C
LD B,A ;METTE IN B IL NUMERO DI BIANCHI
;C=NUMERO DI NERI
;B=NUMERO DI BIANCHI
 
LD A,0
CP C
JR Z,ZERO_NERI
 
LD A,1
CP C
JR Z,UNO_NERO
 
LD A,2
CP C
JR Z,DUE_NERI
 
LD A,3
CP C
JR Z,TRE_NERI
 
LD A,4
CP C
JR Z,QUATTRO_NERI
 
 
ZERO_NERI
LD A,0
CP B
JR Z,CH_
 
LD A,1
CP B
JR Z,CH_O
 
LD A,2
CP B
JR Z,CH_OO
 
LD A,3
CP B
JR Z,CH_OOO
 
LD A,4
CP B
JR Z,CH_OOOO
 
 
UNO_NERO
LD A,0
CP B
JR Z,CH_X
 
LD A,1
CP B
JR Z,CH_OX
 
LD A,2
CP B
JR Z,CH_OOX
 
LD A,3
CP B
JR Z,CH_OOOX
 
 
DUE_NERI
LD A,0
CP B
JR Z,CH_XX
 
LD A,1
CP B
JR Z,CH_OXX
 
LD A,2
CP B
JP Z,CH_OOXX
 
 
TRE_NERI
LD A,(OFFSETXO+12)
INC A
LD (OFFSETXO+12),A
RET
 
QUATTRO_NERI
LD A,(OFFSETXO+13)
INC A
LD (OFFSETXO+13),A
RET
 
CH_
LD A,(OFFSETXO+0)
INC A
LD (OFFSETXO+0),A
RET
 
CH_O
LD A,(OFFSETXO+1)
INC A
LD (OFFSETXO+1),A
RET
 
CH_OO
LD A,(OFFSETXO+2)
INC A
LD (OFFSETXO+2),A
RET
 
CH_OOO
LD A,(OFFSETXO+3)
INC A
LD (OFFSETXO+3),A
RET
 
CH_OOOO
LD A,(OFFSETXO+4)
INC A
LD (OFFSETXO+4),A
RET
 
CH_X
LD A,(OFFSETXO+5)
INC A
LD (OFFSETXO+5),A
RET
 
CH_OX
LD A,(OFFSETXO+6)
INC A
LD (OFFSETXO+6),A
RET
 
CH_OOX
LD A,(OFFSETXO+7)
INC A
LD (OFFSETXO+7),A
RET
 
CH_OOOX
LD A,(OFFSETXO+8)
INC A
LD (OFFSETXO+8),A
RET
 
CH_XX
LD A,(OFFSETXO+9)
INC A
LD (OFFSETXO+9),A
RET
 
CH_OXX
LD A,(OFFSETXO+10)
INC A
LD (OFFSETXO+10),A
RET
 
CH_OOXX
LD A,(OFFSETXO+11)
INC A
LD (OFFSETXO+11),A
RET
 
 
;---------
;TROVA PESOMIN
TROVAPESOMINORE
 
LD BC,1296
LD DE,12
LD IX,C1
LD HL,MEMPESOMIN
LD (HL),255 ;SETTA PESOMIN=255
 
LOOP6
LD A,(HL) ;A=255 AL PRIMO GIRO
CP (IX+11)
JR C,CONTINUA01 ;SE (IX+11) > (PESOMIN) THEN (PESOMIN)= (IX+11)
 
LD A,(IX+11)
LD (HL),A
 
CONTINUA01
ADD IX,DE
DEC BC
LD A,B
OR C
JP NZ,LOOP6
RET
 
 
;---------
;ELIMINA BC INCONSISTENTI
;SE CI SONO BC CHE SONO ANCHE FT, QUELLI INCONSISTENTI VANNO ELIMINATI
;
ELIMINAINCONSISTENTI
 
LD BC,(MEMFT)
LD DE,12
LD IX,C1
LD H,0 ;H E' IL FLAG. SE H=0 NON CI SONO BC TRA I FT
 
LOOP888
LD A,(MEMPESOMIN)
CP (IX+11)
JR NZ, CONT333 ;SETTA IL FLAG H A 1 SE TROVATO UN BC TRA I FT
LD H,1
CONT333
ADD IX,DE
DEC BC
LD A,B
OR C
JR NZ,LOOP888 ;CICLA PER TUTTI GLI FT
 
XOR A
CP H
RET Z ;SE NON E' STATO TROVATO UN BC TRA I FT, RITORNA
 
LD HL,1296
LD BC,(MEMFT)
OR A ;AZZERA I FLAG
SBC HL,BC ;HL E' IL NUMERO DEI CP NON FT
RET Z ;SE FT=1296 TORNA. CASO DEL PRIMO TENTATIVO GIOC>PRG
 
 
LOOP546
LD (IX+11),$FF ;SETTA IL PESO A FF PER ELIMINARE TUTTI I BC NON FT
ADD IX,DE
DEC HL
LD A,H
OR L
JR NZ,LOOP546 ;RIPETI PER TUTTI I CP NON FT
 
RET
 
 
 
 
;---------
CONTOROVESCIA
 
LD HL,(CONTROV)
DEC HL
LD (CONTROV),HL
 
LD IY,23610
LD A,2
CALL 5633
 
; IMPOSTA FLASH 1
LD A,18
RST 16
 
LD A,1
RST 16
 
; AZZERA COL 30 31
LD A,22 ;AT
RST 16
 
LD A,(MEMR) ;RIGA
RST 16
 
LD A,30 ;COLONNA
RST 16
 
LD A,32
RST 16
 
LD A,32
RST 16
 
; PRINT CONTROV A COL 29
LD A,22 ;AT
RST 16
 
LD A,(MEMR) ;RIGA
RST 16
 
LD A,28 ;COLONNA
RST 16
 
LD BC,(CONTROV)
CALL 6683
 
RET
 
 
;-----------------------------------
NUMBESTCODES
;CONTA BEST CODES
 
LD A,0
LD (MEMBC),A
LD (MEMBC+1),A
LD BC,1296
LD DE,12
LD IX,C1
 
LOOP444
LD A,(MEMPESOMIN)
CP (IX+11)
JR NZ, CONT335
LD HL,(MEMBC) ;SE (IX+11)=(MEMPESOMIN) THEN INC (MEMBC)
INC HL
LD (MEMBC),HL ;(MEMBC) E' IL NUMERO DI BC
 
CONT335
ADD IX,DE
DEC BC
LD A,B
OR C
JR NZ,LOOP444
RET
 
 
;-------------------------------
GIOCATAPRG
 
LD IX,C1
LD IY,C0
 
LD BC,(MEME) ;(MEME)CONTIENE E=INT (RND*BC)+1 - BC E' IL TOTALE DEI BC
LD DE,12
 
 
NEXTBC1
LD A,(MEMPESOMIN)
CP (IX+11)
JR NZ,NEXTCP
DEC BC
LD A,B
OR C
JR Z,TROVATOCP
NEXTCP
ADD IX,DE
JR NEXTBC1
 
TROVATOCP
LD A,(IX+0)
LD (IY+0),A
LD A,(IX+1)
LD (IY+1),A
LD A,(IX+2)
LD (IY+2),A
LD A,(IX+3)
LD (IY+3),A
LD A,(IX+4)
LD (IY+4),A
LD A,(IX+5)
LD (IY+5),A
LD A,(IX+6)
LD (IY+6),A
LD A,(IX+7)
LD (IY+7),A
LD A,(IX+8)
LD (IY+8),A
LD A,(IX+9)
LD (IY+9),A
LD A,(IX+10)
LD (IY+10),A
LD A,(IX+11)
LD (IY+11),A
RET
 
 
;-------------------------------
 
;PER DEBUG
;ATTENDI2
;LD A,1
;CP 2
;JR Z,ATTENDI2
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.