Skip to content

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.

./CARD_Games_Start

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

Basic
POKE44,16

Dopodiché si può caricare da disco il file prg con

Basic
LOAD"CARD SYMBOLS",8,1

o da nastro con

Basic
LOAD"CARD SYMBOLS",1,1

Il 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

Basic
LOAD"CARD ROUTINES",8,1

o da nastro con

Basic
LOAD"CARD ROUTINES",1,1

e non occupa memoria nell'area BASIC, ma le locazioni da 49152 a 49788 compresa. Dopo aver caricato questi due files occorre dare i comandi

Basic
POKE4096,0 e NEW

A questo punto potete iniziare a scrivere il vostro programma BASIC o caricarne uno da disco o da nastro.

./Load_Poker_4.png

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

Basic
?SYNTAX ERROR

disabilita 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:

Basic
**!"#$%&'()+-£**

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:

Basic
IFA<0THEN:CARD0,1,2,3

I 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

Basic
?ILLEGAL QUANTITY ERROR

la 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

Basic
RND(0)

Ecco il codice:

Basic
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 GOTO40

ELENCO 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).

./Briscola2_desktop

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:

Basic
POKEK1+136,5

cambia 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:

Basic
LOAD"CARD ROUTINES 2",8,1

La 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:

Basic
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

./Test-clipping-border

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.

Basic
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 GOTO40

RILOCAZIONE 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:

Basic
.L "CARD ROUTINES" 08 1040
.N 108A 127C 5000 C000 C27C
.S "@0:CARD ROUTINES" 08 1040 127D

Per il nastro:

Basic
.L "CARD ROUTINES" 01 1040
.N 108A 127C 5000 C000 C27C
.S "CARD ROUTINES" 01 1040 127D

In 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$.

Basic
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 RETURN

Se 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.

Basic
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 RETURN

Un 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").

./Poker_desktop

Nell'immagine il "desktop" del gioco Poker 4

SET COMPLETO DELLE CARTE ​

Tutte le carte renderizzate dalla libreria CARD su Commodore 64.

Carte standard ​

ValorePicche ♠Fiori ♣Quadri ♦Cuori ♥
Acard-01-spadescard-01-clubscard-01-diamondscard-01-hearts
2card-02-spadescard-02-clubscard-02-diamondscard-02-hearts
3card-03-spadescard-03-clubscard-03-diamondscard-03-hearts
4card-04-spadescard-04-clubscard-04-diamondscard-04-hearts
5card-05-spadescard-05-clubscard-05-diamondscard-05-hearts
6card-06-spadescard-06-clubscard-06-diamondscard-06-hearts
7card-07-spadescard-07-clubscard-07-diamondscard-07-hearts
8card-08-spadescard-08-clubscard-08-diamondscard-08-hearts
9card-09-spadescard-09-clubscard-09-diamondscard-09-hearts
10card-10-spadescard-10-clubscard-10-diamondscard-10-hearts
Jcard-11-spadescard-11-clubscard-11-diamondscard-11-hearts
Qcard-12-spadescard-12-clubscard-12-diamondscard-12-hearts
Kcard-13-spadescard-13-clubscard-13-diamondscard-13-hearts

Carte speciali ​

Jolly neroJolly rossoDorso bluDorso rosso
card-14-joker-blackcard-14-joker-redcard-15-back-bluecard-15-back-red

APPENDICE: TABELLA DEI SIMBOLI GRAFICI DI CARD ​

Codice POKESimbolo visualizzato
da 0 a 63standard Commodore 64
64A di asso
da 65 a 73dal 2 al 10
74J di fante
75Q di donna
76K di re
77stella del jolly
78angolo superiore sinistro
79angolo superiore destro
80A di asso capovolta
da 81 a 84dal 2 al 5 capovolti
85linea orizzontale
867 capovolto
87angolo inferiore sinistro
88angolo inferiore destro
8910 capovolto
da 90 a 92J,Q e K capovolti
da 93 a 95simboli di c&l
96picche grande
97fiori grande
98quadri grande
99cuori grande
100picche grande rovesciato
101fiori grande rovesciato
102simbolo carta coperta
103cuori grande rovesciato
da 104 a 107simboli semi piccoli
da 108 a 111simboli semi piccoli capovolti
da 112 a 126simboli jolly
127linea verticale
da 128 a 191standard Commodore 64
da 192 a 212simboli fante
da 213 a 233simboli donna
da 234 a 254simboli 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.

Released under the Apache 2.0 License