8-Bit Software Online Conversion
:2.t.TETRMAC - Listing
10REM T E T R T E M P
20REM
30REM Questo programma e' diviso in
tre parti: 2 in Assembly (la
prima da richiamare nella mem.
princip. ogni 2 cs tramite
tempor. di intervallo e la
seconda da inserire in ROM e
40REM richiamare ogni 1 cs tramite
polling interrupt (codice &15))
ed una in BASIC (consente una
simulazione per la prova dei
due programmi in linguaggio
macchina). Per assemblare i due
50REM programmi (il primo comincia a
&2016 invece che &2000 perche'
prima inizializza le variabili,
mentre il secondo e' a &2500)
eseguire (RUN); per la prova
andare alla linea 1320 (tra la
60REM parte in Assembly e quella in
BASIC c'e' un END).
70REM
80REM
90REM Prima parte Assembly
100REM
110FORC=0TO2STEP2
120P%=&900
130[
140OPTC
150.down EQUB 0
160.down1 EQUB 0
170.dtime EQUB 0
180.dtime1 EQUB 0
190.left EQUB 0
200.left1 EQUB 0
210.right EQUB 0
220.right1 EQUB 0
230.change EQUB 0
240.change1 EQUB 0
250.lrtime EQUB 8
260.speed EQUB 0
270.speed1 EQUB 0
280.lflag EQUB 0
290.lflag1 EQUB 0
300.rflag EQUB 0
310.rflag1 EQUB 0
320.cflag EQUB 0
330.cflag1 EQUB 0
340.dflag EQUB 0
350.dflag1 EQUB 0
360.pflag EQUB 0
370.pflag1 EQUB 0
380.pause EQUB 0
390.pause1 EQUB 0
400.ptime EQUB 0
410.ptime1 EQUB 0
420.ctime EQUB 12
430.ultratime EQUB 4
440.lpress EQUB 0
450.screensp EQUB 35
460.screensp1 EQUB 35
470.rightkey EQUB 189
480.rightmov EQUB 16
490.leftkey EQUB 158
500.leftmov EQUB 2
510.changekey EQUB 182
520.changemov EQUB 1
530.downkey EQUB 255
540.downmov EQUB 4
550.pausekey EQUB 200
560.pausemov EQUB 8
570.players EQUB 0
580.device1 EQUB 0
590.device2 EQUB 1
600.player EQUB 0
610.device EQUB 0
620.passage EQUB 0
630.temp0 EQUB -2
640EQUB -1
650EQUB -1
660EQUB -1
670EQUB -1
680LDA #4
690LDX #temp0 MOD 256
700LDY #temp0 DIV 256
710JSR &FFF1
720.intbeg LDA players
730INA
740CMP passage
750BNE again
760JMP endkey
770.again DEA
780STA player
790TAX
800LDA device1,X
810STA device
820TAX
830LDA leftkey,X
840JSR check
850STA lpress
860LDX player
870TAY
880BNE notleft
890INC left,X
900LDA left,X
910CMP lrtime
920BNE notleft1
930STZ left,X
940INC lflag,X
950BRA notleft1
960.notleft LDA lrtime
970DEA
980STA left,X
990.notleft1 LDX device
1000LDA rightkey,X
1010JSR check
1020LDX player
1030TAY
1040BNE notright
1050CMP lpress
1060BEQ notright
1070INC right,X
1080LDA right,X
1090CMP lrtime
1100BNE notright1
1110STZ right,X
1120INC rflag,X
1130BRA notright1
1140.notright LDA lrtime
1150DEA
1160STA right,X
1170.notright1 LDX device
1180LDA changekey,X
1190JSR check
1200LDX player
1210TAY
1220BNE notchange
1230INC change,X
1240LDA change,X
1250CMP ctime
1260BNE notchange1
1270STZ change,X
1280INC cflag,X
1290BRA notchange1
1300.notchange LDA ctime
1310DEA
1320STA change,X
1330.notchange1 LDX device
1340LDA downkey,X
1350JSR check
1360LDX player
1370TAY
1380BNE notdown
1390INC speed,X
1400LDA speed,X
1410CMP ultratime
1420BCS ultras
1430LDA #9
1440STA dtime,X
1450LDA speed,X
1460CMP #1
1470BNE notfirst
1480INC dflag,X
1490.notfirst LDA down,X
1500CMP #9
1510BCC pauschk
1520STZ down,X
1530BRA pauschk
1540.ultras LDA #5
1550STA dtime,X
1560LDA down,X
1570CMP #5
1580BCC pauschk
1590STZ down,X
1600BRA pauschk
1610.notdown LDA screensp,X se non
e' premuto speed rimette a default la v
elocita'
1620STA dtime,X
1630STZ speed,X
1640.pauschk LDX device
1650LDA pausekey,X
1660JSR check
1670LDX player
1680TAY
1690BNE notpause
1700INC pause,X
1710LDA pause,X
1720CMP ptime,X
1730BNE end
1740STZ pause,X
1750INC pflag,X
1760BRA end
1770.notpause LDA #255
1780STA pause,X
1790.end INC passage
1800JMP intbeg
1810.check LDX device
1820BNE joy
1830TAX
1840LDA #129
1850LDY #255
1860JSR &FFF4
1870CPX #255
1880BEQ kpresd
1890BNE knpresd
1900.joy AND &FE60
1910BEQ kpresd
1920.knpresd LDA #255
1930RTS
1940.kpresd LDA #0
1950RTS
1960.endkey STZ lpress
1970STZ passage
1980RTS
1990]
2000NEXTC
2010REM Seconda parte Assembly
2020REM
2030FORC=4TO6STEP2
2040O%=&2500
2050P%=&802B
2060[
2070OPTC
2080INC down
2090LDA down
2100CMP dtime
2110BNE scdck
2120INC dflag
2130STZ down
2140.scdck INC down1
2150LDA down1
2160CMP dtime1
2170BNE end1
2180INC dflag1
2190STZ down1
2200.end1 RTS
2210]
2220NEXT C
2230GOTO2480
2240REM Parte B A S I C
2250C%=-1
2260C%=C%+1
2270CALL &2500
2280IF C% MOD 2=0 THEN CALL &2015
2290PRINT"left",?left
2300PRINT"right",?right
2310PRINT"down",?down
2320PRINT"change",?change
2330PRINT"lflag",?lflag
2340PRINT"rflag",?rflag
2350PRINT"cflag",?cflag
2360PRINT"dflag",?dflag
2370PRINT"speed",?speed
2380PRINT"dtime",?dtime
2390PRINT"lpress",?lpress
2400?dflag=0
2410?lflag=0
2420?rflag=0
2430?cflag=0
2440PRINT:GOTO2260
2450REM
2460REM T E T R M A C
2470REM
2480FORC=0TO2STEP2
2490bloctab=&8000 :REM tab. grafica
2500shptable=&8600:REM forme pezzi
2510chgtbl=&86E4 :REM cambi pezzi
2520newtab=&86F7 :REM indice newtock
2530rndtab=&8700 :REM tabella random
2540scrtab=&8800 :REM mappa schermo
2550durtab=&8A00 :REM flags durezza
2560blink1=&8C00 :REM lampeggio1
2570bord=&8CA0 :REM bordi schermo
2580blink2=&8D00 :REM lampeggio2
2590ztab=&8DA0 :REM zona 96 zeri
2600P%=&E00
2610[
2620OPTC
2630.SCR EQUD 0 rnd scratch
2640EQUW 0
2650.X EQUB 0 posizioni preced.
2660.X1 EQUB 0 dei blocchi del
2670.X2 EQUB 0 pezzo
2680.X3 EQUB 0
2690.X4 EQUB 0
2700.Y EQUB 0
2710.Y1 EQUB 0
2720.Y2 EQUB 0
2730.Y3 EQUB 0
2740.Y4 EQUB 0
2750.Z EQUB 0 tipo di pezzo prec.
2760.Z1 EQUB 0
2770.Z2 EQUB 0
2780.Z3 EQUB 0
2790.Z4 EQUB 0
2800.P EQUB 0 posizioni attuali
2810.P1 EQUB 0 dei blocchi del
2820.P2 EQUB 0 pezzo
2830.P3 EQUB 0
2840.P4 EQUB 0
2850.Q EQUB 0
2860.Q1 EQUB 0
2870.Q2 EQUB 0
2880.Q3 EQUB 0
2890.Q4 EQUB 0
2900.R EQUB 0 tipo di pezzo att.
2910.R1 EQUB 0
2920.R2 EQUB 0
2930.R3 EQUB 0
2940.R4 EQUB 0
2950.O EQUB 0
2960.V EQUB 0
2970.O1 EQUB 0
2980.V1 EQUB 0
2990.apflag EQUB 0
3000.linflag EQUB 0 contat. per
controllo linee
3010.lines EQUB 0 linee riempite
3020.lin EQUB 0 linea completa
3030.rndptr EQUB 0 punt. numeri rnd
3040.temp EQUB 0 variabili
3050.temp1 EQUB 0 temporanee
3060.oper1 EQUB 0 fattori per
3070.oper2 EQUB 0 moltiplic.
3080.xoffset EQUB 4 valori x e y
3090.yoffset EQUB 3 della parte sup.
3100.xnext EQUB -2 pos. del next
3110.ynext EQUB 1 tock risp. all'
angolo s.s. dello schermo di gioco.
3120.xcount EQUB 4 contatori ciclo
3130.ycount EQUB 2 canc. next
3140.rows EQUB 22
3150.columns EQUB 10 numero colonne
3160LDA #15 setta memoria
3170STA &FE34
3180LDX #0 colori off
3190.vdloop LDA vdu0,X
3200JSR &FFEE
3210INX
3220CPX #24
3230BNE vdloop
3240LDX #com0 MOD 256 disegna schermo
3250LDY #com0 DIV 256
3260JSR &FFF7
3270LDX #com1 MOD 256
3280LDY #com1 DIV 256
3290JSR &FFF7
3300LDX #0 setta colori
3310.vdloop1 LDA vdu10,X
3320JSR &FFEE
3330INX
3340CPX #18
3350BNE vdloop1
3360LDA &FE64 seme per
3370STA SCR+1 generatore
3380STA SCR+4 random
3390LDA #5 rende accessib.
3400STA &F4 RAM Sydeways#5
3410STA &FE30
3420.init0 LDY #0 Riempie tabella
3430.rdomloop JSR random di numeri
3440AND #&07 random
3450CMP #7
3460BEQ rdomloop
3470STA rndtab,Y
3480DEY
3490BNE rdomloop
3500LDX #0
3510.clrscrlp LDA vdu20,X svuota
3520JSR &FFEE schermo
3530INX
3540CPX #7
3550BNE clrscrlp
3560LDA #scrtab DIV 256 inizializza
3570JSR clrall tabella schermo
3580LDA #durtab DIV 256 e tabella
3590JSR clrall di durezza
3600STZ rndptr e punt. random
3610.init STZ speed iniz.vel.pezzo
(punto di ritorno dopo caduta pezzo)
3620LDA screensp
3630STA dtime
3640STZ down
3650LDA xnext imp. punt. next
3660SEC
3670SBC #2
3680STA temp
3690LDA ynext
3700DEA
3710STA temp1
3720LDA #2 ciclo grande per
3730STA ycount le 2 linee
3740.clrloop LDA #4
3750STA xcount
3760LDA xnext
3770SEC
3780SBC #2 ciclo corto per
3790STA temp le due colonne
3800.clrloop1 LDA #1 imposta valori
3810STA O di graph per un
3820STA V solo blocco
3830LDA temp1 inserisce le
3840STA V1 coordinate
3850LDA temp
3860STA O1
3870STZ &53
3880JSR zero cancella
3890INC temp
3900DEC xcount doppio riciclo
3910BNE clrloop1 se non fine
3920INC temp1
3930DEC ycount
3940BNE clrloop
3950LDX rndptr carica
3960LDA rndtab+1,X pezzo next
3970TAX
3980LDA newtab,X carica n^ pezzo
3990STA Z
4000LDA xnext carica pos. xy
4010STA X del pezzo
4020LDA ynext
4030STA Y
4040JSR tock calcola pezzo
4050LDA #3 numero cicli
4060STA temp
4070.nxtloop LDX temp
4080LDA #1 un solo pezzo
4090STA O
4100STA V
4110LDA X1,X carica coord.
4120STA O1
4130LDA Y1,X
4140STA V1
4150LDA Z1,X
4160STZ &51 res. sp. lavoro
4170STZ &53
4180JSR nozero dis. blocco
4190DEC temp ricicla se non
4200BPL nxtloop fine
4210LDX rndptr
4220LDA rndtab,X
4230INC rndptr
4240TAX
4250LDA newtab,X
4260STA Z
4270LDA #1
4280STA Y
4290LDA columns pezzo in mezzo
4300LSR A
4310STA X
4320STZ apflag
4330.start JSR tock ritorno dopo
ciclo di controllo e disegno
4340JSR legal controlla per
4350BEQ nvr fine partita
4360JMP termine
4370.nvr LDX #14
4380.copyloop LDA X,X
4390STA P,X
4400DEX
4410BPL copyloop
4420.chang LDA cflag premuto change?
4430BEQ lef
4440STZ cflag
4450LDA X controlla se
4460CMP #0 occorre spostare
4470BNE ctrlrgt il pezzo
4480LDA Z a sinistra...
4490CMP #7
4500BEQ lftset
4510CMP #11
4520BEQ lftset
4530CMP #15
4540BEQ lftset
4550BRA ctrlast
4560.lftset INC X
4570BRA ctrlend
4580.ctrlrgt LDA X ...a destra...
4590INA
4600CMP columns
4610BNE ctrlast
4620LDA Z
4630CMP #2
4640BEQ rgtset
4650CMP #5
4660BEQ rgtset
4670CMP #9
4680BEQ rgtset
4690CMP #13
4700BEQ rgtset
4710CMP #17
4720BEQ rgtset
4730CMP #19
4740BEQ rgtset
4750BRA ctrlend
4760.rgtset DEC X
4770BRA ctrlend
4780.ctrlast LDA Z ...controllo
4790CMP #2 speciale per
4800BNE ctrlend pezzo#2 a sin.
4810LDA X che si puo spos-
4820CMP #1 tare di 1 o 2
4830BEQ oneset passi
4840BCS ctrlend
4850INC X
4860.oneset INC X
4870.ctrlend LDX Z controllo lega-
4880DEX litTHEN change
4890LDA chgtbl,X
4900STA Z
4910JSR tock
4920JSR legal
4930BEQ lef
4940LDX #14 non legale,
4950.copyloop1 LDA P,X rimette a po-
4960STA X,X sto le variab.
4970DEX
4980BPL copyloop1
4990.lef LDA lflag left premuto?
5000BEQ righ
5010STZ lflag
5020DEC X controlla leg.
5030DEC X1 del left
5040DEC X2
5050DEC X3
5060DEC X4
5070JSR legal
5080BEQ righ
5090INC X illegale, rimet-
5100INC X1 te a posto le
5110INC X2 var.
5120INC X3
5130INC X4
5140.righ LDA rflag lo stesso per
5150BEQ paus right
5160STZ rflag
5170INC X
5180INC X1
5190INC X2
5200INC X3
5210INC X4
5220JSR legal
5230BEQ paus
5240DEC X
5250DEC X1
5260DEC X2
5270DEC X3
5280DEC X4
5290.paus LDA pflag pause premuto?
5300BEQ dow
5310STZ pflag
5320.pchk LDA pflag si, aspetta
5330BEQ pchk altra pressione
5340STZ pflag azzera var.
5350STZ down dopo la pausa
5360STZ lflag
5370STZ rflag
5380STZ cflag
5390STZ dflag
5400.dow LDA dflag down attivo?
5410BEQ piece
5420STZ dflag
5430INC Y controlla leg.
5440INC Y1 del down
5450INC Y2
5460INC Y3
5470INC Y4
5480JSR legal
5490BEQ piece
5500DEC Y down illegale,
5510DEC Y1 rimetti a posto
5520DEC Y2 var. e appoggia
5530DEC Y3 il pezzo
5540DEC Y4
5550JMP appoggio
5560.piece LDY #3 cancella pos.
5570.deloop LDA Q1,Y prec.
5580STA oper1
5590LDA columns
5600STA oper2
5610JSR multi
5620TXA
5630CLC
5640ADC P1,Y
5650TAX
5660LDA #128
5670STA scrtab,X
5680DEY
5690BPL deloop
5700LDY #3
5710.pieloop LDA Y1,Y piazza pezzo
5720STA oper1 nella nuova
5730LDA columns pos.
5740STA oper2
5750JSR multi
5760TXA
5770CLC
5780ADC X1,Y
5790TAX
5800LDA Z1,Y
5810ORA #128
5820STA scrtab,X
5830DEY
5840BPL pieloop
5850JSR graph dis. schermo
5860LDA apflag pezzo caduto?
5870BEQ goon
5880JMP init si, nuovo pezzo
5890.goon JMP start no, nuovo ciclo
5900.graph LDA rows calcola il
5910STA V numero di pas-
5920STA oper1 saggi necess.
5930LDA columns
5940STA O
5950STA oper2
5960JSR multi
5970DEX
5980.op STZ &50 azzera i punt.
5990STZ &51 di indirizzo
6000STZ &52
6010STZ &53
6020LDA O prepara le var.
6030DEA per il calcolo
6040STA O1 degli indirizzi
6050LDA V
6060DEA
6070STA V1
6080LDA scrtab,X carica blocco
6090BPL dec se bit#7=0, non
6100AND #127 disegnarlo
6110STA scrtab,X azzera bit#7
6120BNE nozero se blocco=0
6130.zero LDA #ztab DIV 256 evita
6140STA &51 calcolo indir.
6150LDA #ztab MOD 256
6160STA &50
6170BRA po52
6180.nozero DEA calcola indir.
6190STA &50 della definiz.
6200ASL &50 del blocco
6210ROL &51
6220ASL &50
6230ROL &51
6240ASL &50
6250ROL &51
6260ASL &50
6270ROL &51
6280LDA &51
6290CLC
6300ADC #bloctab DIV 256
6310STA &51
6320.po52 LDA O1 aggiungi offset
6330CLC della pos.sullo
6340ADC xoffset schermo
6350STA O1
6360LDA V1
6370CLC
6380ADC yoffset
6390STA V1
6400ASL A calcola indir.
6410ASL A grafico
6420ADC V1
6430STA &52
6440ASL &52
6450ROL &53
6460ASL &52
6470ROL &53
6480ASL &52
6490ROL &53
6500LDA &52
6510CLC
6520ADC O1
6530BCC vaben
6540INC &53
6550.vaben STA &52
6560ASL &52
6570ROL &53
6580ASL &52
6590ROL &53
6600ASL &52
6610ROL &53
6620ASL &52
6630ROL &53
6640LDA &53
6650CLC
6660ADC #&30
6670STA &53
6680LDY #15 ciclo per il
6690.gloop LDA (&50),Y disegno del
6700STA (&52),Y blocco
6710DEY
6720BPL gloop
6730.dec DEX decrementa le
6740DEC O variabili
6750BEQ plut se zero,
6760JMP op ritorna
6770.plut DEC V
6780BEQ final
6790LDA columns
6800STA O
6810JMP op
6820.final RTS
6830.appoggio STZ lines azzera #linee
6840LDY #3 controlla se
6850.govloop LDA Y1,Y fine partita
6860CMP #0
6870BNE notover
6880JMP termine
6890.notover DEY
6900BPL govloop
6910LDY #3
6920.durloop LDA Y1,Y attiva flags di
6930STA oper1 durezza approp-
6940LDA columns priati
6950STA oper2
6960JSR multi
6970TXA
6980CLC
6990ADC X1,Y
7000TAX
7010INC durtab,X
7020DEY
7030BPL durloop
7040INC apflag flag app. pezzo
7050.line LDX #0 controlla linee
7060STZ lin
7070.liip LDY columns ogni ciclo una
7080DEY linea
7090.ck LDA durtab,X
7100BNE hard
7110INC linflag
7120.hard INX
7130DEY
7140BPL ck
7150LDA linflag
7160BEQ linea linea completa?
7170STZ linflag no, controlla
7180CPX #220 altra linea
7190BCS endc fine?
7200INC lin
7210BRA liip
7220.endc JMP fuori fine
7230.linea STZ &50 routine per il
7240STZ &51 lampeggio
7250LDA lin calcola indir.
7260CLC di lampeggio
7270ADC yoffset
7280STA temp
7290ASL A
7300ASL A
7310ADC temp
7320STA &50
7330ASL &50
7340ROL &51
7350ASL &50
7360ROL &51
7370ASL &50
7380ROL &51
7390ASL &50
7400ROL &51
7410ASL &50
7420ROL &51
7430ASL &50
7440ROL &51
7450ASL &50
7460ROL &51
7470LDA xoffset aggiungi offset
7480STA temp orizzontale...
7490STZ temp1
7500ASL temp
7510ROL temp1
7520ASL temp
7530ROL temp1
7540ASL temp
7550ROL temp1
7560ASL temp
7570ROL temp1
7580LDA &50
7590CLC
7600ADC temp
7610STA &50
7620LDA &51
7630ADC temp1
7640ADC #&30 ...e della
7650STA &51 memoria video
7660STZ &52
7670LDA #blink1 DIV 256 inizia lamp.
7680STA &53
7690LDA #19 aspetta sinc.vert.
7700JSR &FFF4
7710JSR blink
7720LDA lin routine per scor-
7730INA rimento schermo
7740STA oper1 calcola primo byte
7750LDA columns da scorrere
7760STA oper2
7770JSR multi
7780DEX
7790TXA
7800SEC
7810SBC columns
7820TAY
7830STX temp
7840STY temp1
7850.shftlp1 LDA scrtab,Y loop di
7860ORA #128 scorr. schermo
7870STA scrtab,X
7880DEX
7890DEY
7900CPX #255
7910BNE shftlp1
7920LDX temp
7930LDY temp1
7940.shftlp2 LDA durtab,Y loop di
7950STA durtab,X scorr. flags di
7960DEX durezza
7970DEY
7980CPX #255
7990BNE shftlp2
8000INC lines inc. linee compl.
8010LDA #blink2 DIV 256 lampeggio
8020STA &53
8030LDA #19
8040JSR &FFF4
8050JSR blink
8060LDA #blink1 DIV 256
8070STA &53
8080LDA #19
8090JSR &FFF4
8100JSR blink
8110LDA #blink2 DIV 256
8120STA &53
8130LDA #19
8140JSR &FFF4
8150JSR blink
8160LDA #blink1 DIV 256
8170STA &53
8180LDA #19
8190JSR &FFF4
8200JSR blink
8210LDA #19
8220JSR &FFF4
8230JSR graph disegna schermo
8240JMP line controlla se ci
sono altre linee
8250.fuori LDA lines non piu linee
8260BNE sd linee fatte=0?
8270JMP piece si, stesso pezzo
8280.sd JMP init no, nuovo pezzo
8290.termine LDA #14 fine game
8300STA &F4
8310STA &FE30
8320LDA #11
8330STA &FE34
8340RTS
8350.blink LDA columns disegna lamp.
8360ASL A calcola indir.
8370ASL A
8380ASL A
8390ASL A
8400DEA
8410TAY
8420.blinkloop LDA (&52),Y
8430STA (&50),Y
8440DEY
8450CPY #255
8460BNE blinkloop
8470RTS
8480.tock LDA Z routine che da nelle
8490DEA variabili XYZ i va-
8500STA Z1 ri dei blocchi del
8510ASL A pezzo in Z e le loro
8520ADC Z1 posizioni
8530ASL A
8540ASL A
8550TAX
8560LDA X
8570CLC
8580ADC shptable,X
8590STA X1
8600INX
8610LDA X
8620CLC
8630ADC shptable,X
8640STA X2
8650INX
8660LDA X
8670CLC
8680ADC shptable,X
8690STA X3
8700INX
8710LDA X
8720CLC
8730ADC shptable,X
8740STA X4
8750INX
8760LDA Y
8770CLC
8780ADC shptable,X
8790STA Y1
8800INX
8810LDA Y
8820CLC
8830ADC shptable,X
8840STA Y2
8850INX
8860LDA Y
8870CLC
8880ADC shptable,X
8890STA Y3
8900INX
8910LDA Y
8920CLC
8930ADC shptable,X
8940STA Y4
8950INX
8960LDA shptable,X
8970STA Z1
8980INX
8990LDA shptable,X
9000STA Z2
9010INX
9020LDA shptable,X
9030STA Z3
9040INX
9050LDA shptable,X
9060STA Z4
9070RTS
9080.legal LDY #3 cont. di ciclo
9090.legoop LDA X1,Y controllo bordo
9100CMP #255 sinistro
9110BEQ ille
9120CMP columns bordo destro
9130BEQ ille
9140LDA Y1,Y controllo bordo
9150CMP rows inferiore
9160BEQ ille
9170STA oper1 controllo coi
9180LDA columns blocchi gia
9190STA oper2 esistenti
9200JSR multi
9210TXA
9220CLC
9230ADC X1,Y
9240TAX
9250LDA durtab,X
9260BNE ille
9270DEY
9280BPL legoop
9290LDA #0 legale
9300RTS
9310.ille LDA #255 illegale
9320RTS
9330.random SEC routine numeri
9340LDA SCR+1 casuali
9350ADC SCR+4
9360ADC SCR+5
9370STA SCR
9380LDX #4
9390.rndlp LDA SCR,X
9400STA SCR+1,X
9410DEX
9420BPL rndlp
9430RTS
9440.clrall LDX #0 pone tutti 0 nella
9450STA ag+2 pagina contenuta in
9460.ag STZ &1000,X a
9470INX
9480BNE ag
9490RTS
9500.multi PHY moltiplicazione
9510LDA #0 fattori oper1 e 2
9520STA temp prodotto L in X
9530LDX #8 H in A
9540.LOOP LSR oper2
9550BCC NOADD
9560CLC
9570ADC oper1
9580.NOADD ROR A
9590ROR temp
9600DEX
9610BNE LOOP
9620TAY
9630LDX temp
9640PLY
9650RTS
9660.vdu0 EQUB 19:EQUB 0:EQUB 0:EQUB 0:
EQUB 0:EQUB 0:EQUB 19:EQUB 1:EQUB 0:EQUB
0:EQUB 0:EQUB 0:EQUB 19:EQUB 2:EQUB 0:E
QUB 0:EQUB 0:EQUB 0:EQUB 19:EQUB 3:EQUB
0:EQUB 0:EQUB 0:EQUB 0
9670.com0 EQUS"SRREAD 3000 4000 9000 5"
:EQUB 13
9680.com1 EQUS"SRREAD 4000 8000 8000 6"
:EQUB 13
9690.vdu10 EQUB 19:EQUB 1:EQUB 1:EQUB 0
:EQUB 0:EQUB 0:EQUB 19:EQUB 2:EQUB 2:EQU
B 0:EQUB 0:EQUB 0:EQUB 19:EQUB 3:EQUB 7:
EQUB 0:EQUB 0:EQUB 0
9700.vdu20 EQUB 28:EQUB 4:EQUB 24:EQUB
13:EQUB 5:EQUB 12:EQUB 26
9710]
9720NEXTC