Autore Topic: Generazione Di Pixel E Linee  (Letto 2981 volte)

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Generazione Di Pixel E Linee
« il: 05 Maggio 2006, 17:00:47 »
 In vena di autolesionismo, e per colmare le mie lacune derivanti da uso smodato di basic 3.5 (vedi locate, draw e compagnia bella) nel passato, sto cercando di capire come ottenere grafica statica ad alta risoluzione.
In verità sto faticando molto a ritrovarmi dal nulla, in quanto le mie esperienze col basic 2.0 si limitavano alla bassa risoluzione. Ho pensato quindi che potevo usare uno sprite per ottenere un pixel fisso sullo schermo.  :fagiano:

Codice: [Seleziona]
10 ? "{CLR/HOME}"
15 V=53248:POKE V+21,2:POKE 2041,13
20 FOR N=0 TO 62: READ A:POKE 832+N,A:NEXT N
30 POKE V+2,150:POKE V+3,150
40 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
41 DATA 0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0
42 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Ora, anche se in calcio d'angolo il pixel ce l'ho, non sono affatto certo che per generare linee, poligoni o immagini fisse col solo uso del basic la strada normale siano gli sprite, o quantomeno che il modo di gestirli sia questo.
Per questo motivo sarei grato a chi comprensivo, potesse aiutarmi con qualche esempio pratico ad individuare la strada corretta per operare, oppure indicarmi qualche eventuale lettura istruttiva in tal senso. Grazie e ciao.
 
C= - Dal 1985! Lunga vita e prosperità.

eregil

  • Administrator
  • Utente
  • *****
  • Post: 706
  • Gioco Preferito: Impossible Mission
Generazione Di Pixel E Linee
« Risposta #1 il: 05 Maggio 2006, 22:18:57 »
 Se il disegno è sufficientemente piccolo possono essere sufficienti gli sprite, ma naturalmente è possibile attivare la pagina grafica (quella del GRAPHIC 1 per intenderci) per poter accendere singolarmente ognuno dei 320x200 pixel dello schermo. È però sconvenientissimo operare in BASIC 2.0 "puro" per farlo, a causa della lentezza: la sola cancellazione dello schermo richiede qualche minuto, figuriamoci il calcolo e il disegno di figure geometriche di una certa complessità. Non è per un vezzo o per sola comodità che sono fioccati i BASIC espansi e le varie routine grafiche esistenti, insomma.

Certo, se lo fai per sfizio, puoi anche decidere di ricorrere solo al BASIC 2.0 (e magari alla modalità Warp di VICE *g*). In tal caso, se cominci da zero, un buon articolo introduttivo sulla pagina grafica nel C64, corredato da semplici esempi in BASIC, si trova su CCC numero 28 che trovi su questo sito (pagina 35 e seguenti).
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Generazione Di Pixel E Linee
« Risposta #2 il: 05 Maggio 2006, 23:02:38 »
Citazione da: "eregil"
la sola cancellazione dello schermo richiede qualche minuto,
posto qui di seguito un sorgente passatomi molto tempo fa da MarC=ello, giusto per mostrare che quando ci si mette in testa che si puo' fare tutto anche in Basic - e MarC=ello spesso soleva dire "it can be done" - si possono ottenere dei risultati piu' che soddisfacenti.

Codice: [Seleziona]
start tok64 Az82.prg
10 POKE 53265,PEEK(53265)OR32:REM attiva la modalita' bit map
20 POKE 53272,(PEEK(53272)AND240)OR8:REM schermo bitmap a partire da 8192
30 base=8192
40 GOSUB200: GOSUB400
45 FOR i=0TO7:bit(i)=2^i:NEXT
50 REM x=raggio
55 x=40:y=0:tx=x/2:x0=160:y0=100
60 by=base+40*(y+y0 AND 248)+(y+y0 AND 7)+(x+x0 AND 504)
65 POKEby,PEEK(by)OR(bi(NOTx+x0 AND 7))
70 by=base+40*(x+y0 AND 248)+(x+y0 AND 7)+(y+x0 AND 504)
75 POKEby,PEEK(by)OR(bi(NOTy+x0 AND 7))
80 by=base+40*(y0+y AND 248)+(y0+y AND 7)+(x0-x AND 504)
85 POKEby,PEEK(by)OR(bi(NOTx0-x AND 7))
90 by=base+40*(y0+x AND 248)+(y0+x AND 7)+(x0-y AND 504)
95 POKEby,PEEK(by)OR(bi(NOTx0-y AND 7))
100 by=base+40*(y0-y AND 248)+(y0-y AND 7)+(x0-x AND 504)
105 POKEby,PEEK(by)OR(bi(NOTx0-x AND 7))
110 by=base+40*(y0-x AND 248)+(y0-x AND 7)+(x0-y AND 504)
115 POKEby,PEEK(by)OR(bi(NOTx0-y AND 7))
120 by=base+40*(y0-y AND 248)+(y0-y AND 7)+(x0+x AND 504)
125 POKEby,PEEK(by)OR(bi(NOTx0+x AND 7))
130 by=base+40*(y0-x AND 248)+(y0-x AND 7)+(y+x0 AND 504)
135 POKEby,PEEK(by)OR(bi(NOTy+x0 AND 7))
140 IF x<=y THEN 160
145 y=y+1:tx=tx-y
150 IF tx<0 THEN x=x-1:tx=tx+x
155 GOTO 60
160 POKE 53280,15:GOTO 160
200 REM cancellamento rapido dello schermo bitmap in basic
230 a=8192:b=15872
240 s$="@"
250 FORc=1TO40:a$=a$+s$:NEXT:REM a$ = 40 @
260 FORc=1TO16:b$=b$+s$:NEXT:REM b$ = 16 @
270 FORc=1TO8:t$=t$+s$:NEXT:c$=b$+t$:REM c$ = 23 @
280 FORl=aTObSTEP256
290 POKE 648,l/256:PRINT"{home}";
300 FORc=1TO6
310 PRINT a$;
320 NEXTc
330 PRINTb$;
340 NEXTl
350 POKE648,16128/256:PRINT"{home}";
360 PRINTa$;
370 PRINTc$;
380 POKE 648,4
390 RETURN
400 REM colorazione rapida dello schermo
403 PRINT"{home}";
405 m$="c":sc=3
406 FORc=1TO39:g$=g$+m$:NEXT:h$=g$+m$
410 FORt=1TO24:PRINTh$;:NEXT
420 PRINTg$;:POKE2023,sc
430 RETURN
stop tok64

La parte piu' ecclatante del listato e' proprio la cancellazione della pagina bitmap, non effettuata con un banale e lento
FOR I = 8192 TO 16191:POKEI,0:NEXT
Ma cambiando l'indirizzo della pagina testo e stampando stringhe piene di '@' (screencode $00)
Semplicemente geniale.
Poi ovviamente il disegno del cerchio e' quello che e', ma nonostante la lentezza per lo meno e' un cerchio perfetto senza "buchi", come si potrebbe ottenere implementando male la formula del cerchio applicando calcoli ad interi...
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Generazione Di Pixel E Linee
« Risposta #3 il: 05 Maggio 2006, 23:23:56 »
 Gestire ogni singolo pixel dello schermo è proprio ciò che mi interessa. Solo che non avevo idea di come attivare la modalità grafica, e anche se per ovvi motivi doveva pur esistere, il manuale non mi aiutava.
Sapete, l'interesse verso l'argomento è puramente didattico e volto a capire le basi teoriche di ciò che vedo, sono ben consapevole della sconvenienza nell'uso pratico, ma in un certo senso voglio riprendermi quegli aspetti che mi sono perso negli anni '80.
Eregil e iAN, davvero 64 kb di grazie per l'indicazione delle pagine di CCC e per il listato di Marcello (davvero geniale, avevo letto anche un suo vecchio discorso dove già tagliava di netto i tempi di cancellazione della pagina solo ottimizzando il listato stesso; bello superare se stessi e i limiti del basic). Me le bevo subito con interesse e poi passo alla battitura e analisi. :lol: :lol:  
C= - Dal 1985! Lunga vita e prosperità.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Generazione Di Pixel E Linee
« Risposta #4 il: 06 Maggio 2006, 00:08:31 »
Citazione da: "Cbm"
poi passo alla battitura e analisi.
Spero che per "battitura" tu intenda copiare/incollare in un file testo az82.txt e dare
bastext -o az82.txt
e avere il prg belle che pronto :)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Generazione Di Pixel E Linee
« Risposta #5 il: 06 Maggio 2006, 11:23:02 »
 
Citazione
non avevo idea di come attivare la modalità grafica, e anche se per ovvi motivi doveva pur esistere, il manuale non mi aiutava.
Se ti può interessare,la Guida del programmatore C64 spiega per filo e per segno come attivare la modalità grafica.
 

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Generazione Di Pixel E Linee
« Risposta #6 il: 06 Maggio 2006, 20:02:59 »
Citazione da: "Alberto"
Se ti può interessare,la Guida del programmatore C64 spiega per filo e per segno come attivare la modalità grafica.
Ad avercela avuta... cmq le pagine di CCC mi hanno chiarito non poco le idee. La battitura non l'ho ancora fatta, ma credo che la farò a mano per ripassarla mentre la copio.
 
C= - Dal 1985! Lunga vita e prosperità.

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Generazione Di Pixel E Linee
« Risposta #7 il: 07 Maggio 2006, 10:11:03 »
 
Citazione
Ad avercela avuta...
La puoi scaricare dal web. :)
 

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Generazione Di Pixel E Linee
« Risposta #8 il: 07 Maggio 2006, 20:35:47 »
Citazione da: "Alberto"
La puoi scaricare dal web. :)
Ad onor del vero prima di chiedere aiuto sul forum ho cercato in lungo e in largo un testo ma non ho beccato nulla di pertinente, tantomeno la leggendaria guida.  :doh:
Ehm ehm non è che potresti indicarmi la pagina?  :sabber:  
C= - Dal 1985! Lunga vita e prosperità.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Generazione Di Pixel E Linee
« Risposta #9 il: 07 Maggio 2006, 21:14:08 »
 Non so quante volte siano stati postati i links, ma repetita iuvant, sai mai che la funzione di ricerca vada meglio :P

http://project64.c64.org/index.htm
Qui trovi la Programmers reference guide, la Mappa della memoria, il disassemblato del kernal e altre tante belle cosine da tenere sempre sottocchio.

All about your 64:
http://www.the-dreams.de/aay.html

Se puoi scarica anche il pacco dei tutorials (11mb)
http://noname.c64.org/csdb/release/?id=8717
o direttamente
http://bj.spline.de/stuff/ml-tutorial.zip
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Generazione Di Pixel E Linee
« Risposta #10 il: 07 Maggio 2006, 22:19:44 »
 Equivoco di fondo, colpa mia.  ;) Io cercavo qualcosa in madrelingua, mi sembrava troppo bello che nascosta da qualche parte ci fosse.
C= - Dal 1985! Lunga vita e prosperità.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Generazione Di Pixel E Linee
« Risposta #11 il: 07 Maggio 2006, 22:54:55 »
 Mamma mia quanta pigrizia!
Ci sarebbe la traduzione adattata da MarC=ello, che un simpatico copione ha messo sul proprio sito

http://www.retrogames-retrocomputer.com/commodore64.asp
(link "Guida di Riferimento per il Programmatore")

ma non e' la versione completa, mancano le appendici ; non sono indispensabili ma rende comunque l'opera incompleta. Fatti bastare questa e compensa le parti mancanti con la versione testo inglese.

Sul sito Hokutoforce abbiamo poi anche il suo corso di programmazione, incompiuto.
http://62.168.142.47/~hf/index.php?lang=it
(sezione "Leggere")

 
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Cbm

  • Utente
  • **
  • Post: 423
  • Gioco Preferito: Wonderboy
Generazione Di Pixel E Linee
« Risposta #12 il: 08 Maggio 2006, 00:17:35 »
 E tu quanta pazienza. Grazie. Sarà che non ho mai superato lo shock per il manuale del mio C16 in olandese.

p.s.: inizia a venirmi il sospetto che tu sia l'incarnazione di google.  :)
C= - Dal 1985! Lunga vita e prosperità.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Generazione Di Pixel E Linee
« Risposta #13 il: 08 Maggio 2006, 00:24:26 »
 iAN CooGLE , mi piace  :lol:  
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

KONEY

  • Utente
  • **
  • Post: 60
    • http://www.koney.org
  • Gioco Preferito: ghost'n'goblins
Generazione Di Pixel E Linee
« Risposta #14 il: 17 Giugno 2006, 22:45:26 »
Citazione da: "iAN CooG/HF"
Citazione da: "Cbm"
poi passo alla battitura e analisi.
Spero che per "battitura" tu intenda copiare/incollare in un file testo az82.txt e dare
bastext -o az82.txt
e avere il prg belle che pronto :)
Stavo per aprire un discussione su come importare porzioni di testo come codice...

Ma bastext cos'e'? un comando? programma? fa parte di che emulatore? vice? ccs??

 :huh: