PROGRAMMA "CARD" PER COMMODORE 64 - BASIC V2
MANUALE D'USO
A COSA SERVE IL PROGRAMMA "CARD"
Il programma CARD serve per disegnare le carte da gioco sullo schermo. Le carte sono visualizzate con simboli grafici ridefiniti. è possibile visualizzare ogni tipo di carta in ogni parte del video.

Nell'animazione un esempio di CARDS stampate in modo "random" come sfondo iniziale del gioco "Poker4-en" scritto in BASIC sfruttando il programma CARD (velocità in tempo reale).
STRUTTURA DEL PROGRAMMA CARD CON IL BASIC V2
Il programma CARD è costituito da due files prg: CARD SYMBOLS e CARD ROUTINES.
Il file CARD SYMBOLS contiene i dati dei simboli grafici ridefiniti e prima di essere caricato in memoria ha bisogno che questa sia protetta dall'utilizzo del BASIC con
POKE44,16Dopodiché si può caricare da disco il file prg con
LOAD"CARD SYMBOLS",8,1o da nastro con
LOAD"CARD SYMBOLS",1,1Il file così caricato occupa nell'area BASIC 2k di memoria RAM e più precisamente le locazioni da 2048 a 4095 compresa.
Il file CARD ROUTINES contiene invece tutte quelle routines in linguaggio macchina che consentono di disegnare le carte da gioco sullo schermo. Questo file prg viene caricato da disco con
LOAD"CARD ROUTINES",8,1o da nastro con
LOAD"CARD ROUTINES",1,1e non occupa memoria nell'area BASIC, ma le locazioni da 49152 a 49788 compresa. Dopo aver caricato questi due files occorre dare i comandi
POKE4096,0 e NEWA questo punto potete iniziare a scrivere il vostro programma BASIC o caricarne uno da disco o da nastro.

Nell’immagine un esempio della sequenza di caricamento del gioco “poker 4”
USO DEL COMANDO CARD
Per utilizzare il comando CARD dovete, in testa al programma, assegnare ad una variabile (es. K1) il valore 49152 e lanciare la routine K1+138 che, oltre ad abilitare il comando CARD, che se non abilitato causerebbe un
?SYNTAX ERRORdisabilita i tasti shift e commodore (passaggio maiuscolo/minuscolo) e abilita il nuovo set di caratteri che contiene, oltre alle lettere, ai numeri e agli altri simboli non grafici, es:
**!"#$%&'()+-£**i simboli grafici ridefiniti per disegnare le carte.
ATTENZIONE: se l'istruzione THEN è seguita da CARD bisogna aggiungere un ":" (due punti) tra le due istruzioni per non provocare un ?SYNTAX ERROR. es:
IFA<0THEN:CARD0,1,2,3I 4 PARAMETRI DEL COMANDO CARD
Il comando CARD è seguito da 4 parametri numerici separati da virgole.
I primi due parametri indicano la posizione X e Y dello schermo nella quale verrà visualizzato l'angolo superiore sinistro della carta (es. se tutti e due i parametri sono zero, la carta viene visualizzata nell'angolo in alto a sinistra dello schermo).
Per non provocare un
?ILLEGAL QUANTITY ERRORla posizione X della carta deve assumere un valore compreso fra 0 incluso e 34 escluso, mentre la posizione Y deve assumere un valore compreso fra 0 incluso e 17 escluso.
Il terzo parametro si riferisce alla carta da visualizzare sul video: i valori da 1 a 10 si riferiscono alle carte dall'asso al 10, mentre i valori da 11 a 13 si riferiscono rispettivamente al fante, alla donna e al re; il valore 14 si riferisce al jolly, mentre il valore 15 si riferisce alla carta coperta (o dorso della carta); infine il valore 0 cancella la carta visualizzata nella posizione specificata dai due parametri precedenti.
Il quarto ed ultimo parametro si riferisce al seme della carta: 0=picche; 1=fiori; 2=quadri; 3=cuori.
Nel caso in cui però la carta da visualizzare fosse quella coperta (terzo parametro=15) l'ultimo parametro si riferisce al mazzo che si utilizza: 1=mazzo blu; 2=mazzo rosso.
Nel caso invece che la carta da visualizzare sia il jolly, questa sarà nera o rossa a seconda del seme che si mette nell' ultimo parametro (se l'ultimo parametro è 0 o 1, cioè picche o fiori, il jolly verrà nero, viceversa sarà rosso).
Infine se la carta da visualizzare è quella che "cancella", l'ultimo parametro può assumere un qualsiasi valore compreso fra 0 incluso e 4 escluso, ma non può essere omesso.
Il programma qui sotto visualizza continuamente una carta qualsiasi (tranne quella che cancella) in una qualsiasi parte del video usando la funzione
RND(0)Ecco il codice:
10 K1=49152
20 PRINTCHR$(147):POKE53280,0:POKE53281,15
30 SYSK1+138:REM ABILITA COMANDO CARD
40 CARDRND(0)*34,RND(0)*17,RND(0)*15+1,RND(0)*4
50 GOTO40ELENCO DELLE ROUTINES DI CARD
Routines di abilitazione:
K1+138: abilita il comando CARD e chiama la K1+150.
K1+150: disabilita i tasti shift e commodore (passaggio maiuscolo/minuscolo) e chiama la K1+158.
K1+158: abilita il set di caratteri di CARD .
Routines di disabilitazione:
K1+169: disabilita il comando CARD e chiama la K1+181.
K1+181: disabilita il set di caratteri di CARD .
Altre routines:
K1+232: sostituisce il comando CARD (es. CARD0,1,2,3 può essere sostituito con SYSK1+232,0,1,2,3). In questo modo si può anche fare a meno di abilitare il comando CARD con SYSK1+138, facendo solamente SYSK1+150.
K1+269: ridisegna la carta precedentemente disegnata (I valori dei parametri dell'ultima carta disegnata si trovano nelle locazioni da K1+132 a K1+135 compresa).

Nell’immagine il “desktop” del gioco “Briscola 2”
CAMBIARE I COLORI DELLE CARTE COPERTE
Quando si visualizza una carta coperta (terzo parametro=15) questa viene visualizzata blu o rossa a seconda del numero del mazzo che mettiamo nell'ultimo parametro (1=mazzo blu, 2=mazzo rosso). Questi due colori sono specificati nelle locazioni K1+136 (che contiene 6, cioè blu) e K1+137 (che contiene 2, cioè rosso). Modificando il contenuto di queste due locazioni si potra' cambiare il colore dei due mazzi. Es:
POKEK1+136,5cambia il colore del mazzo 1 da blu in verde.
CARD ROUTINES 2 - CLIPPING FUORI SCHERMO
Una seconda versione delle CARD ROUTINES è disponibile: CARD ROUTINES 2, che estende il comando CARD per supportare coordinate fuori schermo con clipping automatico.
Con le CARD ROUTINES originali, la posizione X deve essere compresa tra 0 e 33 e Y tra 0 e 16, quindi la carta è sempre interamente visibile sullo schermo. Con CARD ROUTINES 2, X può andare da -6 a 39 e Y da -8 a 24, permettendo di disegnare carte parzialmente fuori schermo. La parte della carta che cade fuori dall'area visibile viene automaticamente ritagliata.
CARD ROUTINES 2 è completamente retrocompatibile: i programmi esistenti che usano coordinate nell'intervallo originale funzionano senza alcuna modifica.
Per usare CARD ROUTINES 2 al posto dell'originale, basta caricare il file CARD ROUTINES 2 al posto di CARD ROUTINES:
LOAD"CARD ROUTINES 2",8,1La sequenza di caricamento e tutte le routine (K1+138, K1+150, K1+169, K1+232, K1+269) funzionano esattamente allo stesso modo. L'unica differenza è l'intervallo esteso delle coordinate per i parametri X e Y.
Il programma qui sotto visualizza continuamente una carta random in una posizione random usando l'intervallo esteso:
10 K1=49152
20 PRINTCHR$(147):POKE53280,0:POKE53281,1
30 SYSK1+138:REM ABILITA COMANDO CARD
40 CARDINT(RND(0)*46)-6,INT(RND(0)*33)-8,RND(0)*14+1,RND(0)*4
50 GOTO40
Nell'immagine, 100 carte random disegnate con le nuove coordinate estese. Le carte vicine ai bordi dello schermo vengono automaticamente ritagliate.
USO DEL COMANDO CARD CON BASIC ESPANSI
Se si vuole utilizzare il programma CARD con BASIC espansi non si deve abilitare il comando CARD (SYSK1+138) perchè questo funziona solo con il BASIC V2.
Si deve invece utilizzare la routine K1+232 che in pratica sostituisce tale comando (vedi ELENCO DELLE ROUTINES DI CARD).
Come esempio è riportato qui sotto il programma precedentemente descritto utilizzando al posto del comando CARD la routine K1+232.
10 K1=49152
20 PRINTCHR$(147):POKE53280,0:POKE53281,15
30 SYSK1+150:REM ABILITAZIONE
40 SYSK1+232,RND(0)*34,RND(0)*17,RND(0)*15+1,RND(0)*4
50 GOTO40RILOCAZIONE DELLE ROUTINES DI CARD
Le routines di CARD sono allocate nelle locazioni da 49152 a 49788 compresa.
Nel caso in cui vogliate spostarle in un'altra zona di memoria perchè quella utilizzata normalmente (da 49152 a 49788 appunto) deve essere utilizzata o dall'espansione BASIC o da altre routines, potete farlo tramite il comando N dello ZOOM monitor. Se ad esempio volete che le vostre CARD ROUTINES vengano caricate nelle locazioni da 4096 a 4732 dovete agire nel seguente modo:
Per il disco:
.L "CARD ROUTINES" 08 1040
.N 108A 127C 5000 C000 C27C
.S "@0:CARD ROUTINES" 08 1040 127DPer il nastro:
.L "CARD ROUTINES" 01 1040
.N 108A 127C 5000 C000 C27C
.S "CARD ROUTINES" 01 1040 127DIn questo modo le routines di CARD verranno caricate nelle locazioni da 4096 a 4732 invece che da 49152 a 49788.
Per poterle utilizzare pero' è bene che questa zona di memoria sia protetta dall'utilizzo del BASIC, quindi prima ancora di caricare il file "CARD SYMBOLS" dovete dare i comandi POKE43,126 e POKE44,18. Dopodichè potete caricare i files "CARD SYMBOLS" e "CARD ROUTINES" e dare i comandi POKE4733,0 e NEW. Ricordatevi pero' di modificare l'assegnazione K1=49152 in testa al programma con K1=4096.
UTILIZZO DI CARD DA LINGUAGGIO MACCHINA
Per utilizzare il programma CARD da Linguaggio Macchina dovete inserire i valori dei 4 parametri nelle locazioni da K1+132 a K1+135 e chiamare la routine K1+269.
Prima di chiamare questa routine pero' assicuratevi che il modo decimale sia disabilitato, altrimenti disabilitatelo con l'istruzione CLD.
SOSTITUZIONE DEL COMANDO CARD
è possibile sostituire il comando CARD con un qualsiasi altro comando (es. CARTA) purchè non piu' lungo di 8 caratteri.
Tale comando è registrato nelle locazioni da K1+120 a K1+127 sotto forma di codice ASCII.
L'ultimo carattere del comando (es. la D nel caso di CARD) è contrassegnato dall'avere il bit piu' significativo (MSB) a 1.
Qui sotto è mostrato il listato di una subroutine BASIC che, se richiamata, sostituisce al comando CARD il comando che è presente nella variabile A$.
10000 IFLEN(A$)=0ORLEN(A$)>8THENSTOP
10010 FORA=1TOLEN(A$)
10020 POKEK1+119+A,ASC(MID$(A$,A,1))OR-128*(A=LEN(A$))
10030 NEXT
10040 RETURNSe si vuole ad esempio cambiare il comando CARD con il comando CARTA basta assegnare ad A$ la stringa "CARTA" (A$="CARTA") e chiamare la subroutine con GOSUB10000. Dopodichè per visualizzare le carte usate il comando CARTA invece di CARD. Qui sotto è riportato il listato precedentemente descritto utilizzando al posto del comando CARD il comando CARTA.
10 K1=49152
20 A$="CARTA":GOSUB10000:A$="":A=0
30 PRINTCHR$(147):POKE53280,0:POKE53281,15
40 SYSK1+138:REM ABILITA COMANDO CARTA
50 CARTARND(0)*34,RND(0)*17,RND(0)*15+1,RND(0)*4
60 GOTO50
10000 IFLEN(A$)=0ORLEN(A$)>8THENSTOP
10010 FORA=1TOLEN(A$)
10020 POKEK1+119+A,ASC(MID$(A$,A,1))OR-128*(A=LEN(A$))
10030 NEXT
10040 RETURNUn ultimo avvertimento: nel nuovo comando (es. CARTA) non devono essere presenti comandi BASIC, altrimenti questo nuovo comando non potra' essere utilizzato (es. se il comando CARD viene sostituito con PRINTCAR non potra' essere utilizzato perchè il computer interpretera' tale comando come un PRINT CAR, cioè come un "stampa il contenuto della variabile CAR").

Nell'immagine il "desktop" del gioco Poker 4
SET COMPLETO DELLE CARTE
Tutte le carte renderizzate dalla libreria CARD su Commodore 64.
Carte standard
| Valore | Picche ♠ | Fiori ♣ | Quadri ♦ | Cuori ♥ |
|---|---|---|---|---|
| A | ||||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | ||||
| 7 | ||||
| 8 | ||||
| 9 | ||||
| 10 | ||||
| J | ||||
| Q | ||||
| K |
Carte speciali
| Jolly nero | Jolly rosso | Dorso blu | Dorso rosso |
|---|---|---|---|
APPENDICE: TABELLA DEI SIMBOLI GRAFICI DI CARD
| Codice POKE | Simbolo visualizzato |
|---|---|
| da 0 a 63 | standard Commodore 64 |
| 64 | A di asso |
| da 65 a 73 | dal 2 al 10 |
| 74 | J di fante |
| 75 | Q di donna |
| 76 | K di re |
| 77 | stella del jolly |
| 78 | angolo superiore sinistro |
| 79 | angolo superiore destro |
| 80 | A di asso capovolta |
| da 81 a 84 | dal 2 al 5 capovolti |
| 85 | linea orizzontale |
| 86 | 7 capovolto |
| 87 | angolo inferiore sinistro |
| 88 | angolo inferiore destro |
| 89 | 10 capovolto |
| da 90 a 92 | J,Q e K capovolti |
| da 93 a 95 | simboli di c&l |
| 96 | picche grande |
| 97 | fiori grande |
| 98 | quadri grande |
| 99 | cuori grande |
| 100 | picche grande rovesciato |
| 101 | fiori grande rovesciato |
| 102 | simbolo carta coperta |
| 103 | cuori grande rovesciato |
| da 104 a 107 | simboli semi piccoli |
| da 108 a 111 | simboli semi piccoli capovolti |
| da 112 a 126 | simboli jolly |
| 127 | linea verticale |
| da 128 a 191 | standard Commodore 64 |
| da 192 a 212 | simboli fante |
| da 213 a 233 | simboli donna |
| da 234 a 254 | simboli re |
| 255 | € - simbolo euro |
Si noti come i simboli standard non grafici del Commodore 64 (lettere, numeri e altri tipo !"#$%&') vengano riportati tali e quali in questo nuovo set di caratteri in modo tale che oltre alle carte possano essere visualizzati anche messaggi e numeri.
