Autore Topic: Aprire I Bordi In Basic  (Letto 3856 volte)

Senbei

  • Neo-iscritto
  • *
  • Post: 22
    • http://www.fabioapps.com
  • Gioco Preferito: Starquake
Aprire I Bordi In Basic
« il: 11 Settembre 2011, 15:29:08 »
 Io pensavo non fosse possibile, ma avendo da poco scoperto l'istruzione WAIT del BASIC ho provato ad utilizzarla per realizzare qualche effetto normalmente solo possibile in assembly.
Aprire i bordi superiore e inferiore non richiede una precisione estrema, ci sono due o tre scanlines di tempo, e infatti si riesce da BASIC, ecco il sorgente:

Codice: [Seleziona]
1 poke56334,0:poke53266,212:poke53265,27:poke16383,0
2 h=53265:i=53273:h1=19:h2=27:i1=1
3 pokei,i1:waiti,i1:pokeh,h1:pokeh,h2:goto3

Testato con Vice 2.3 64 bit, PAL.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Aprire I Bordi In Basic
« Risposta #1 il: 11 Settembre 2011, 16:29:41 »
 gia' visto, questo fu postato da TNT/BF su lemon nel 2005 ;)
Codice: [Seleziona]
0 s=53265:r=s+1:a=peek(s)and240:b=aor8: poke16383,0:poke56334,peek(56334)and254
1 waitr,128,0:pokes,b::::::::::::::::::::
2 pokes,a:goto1
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Senbei

  • Neo-iscritto
  • *
  • Post: 22
    • http://www.fabioapps.com
  • Gioco Preferito: Starquake
Aprire I Bordi In Basic
« Risposta #2 il: 11 Settembre 2011, 17:10:04 »
 Sì, nel frattempo sono stato indirizzato ad altri esempi che non avevo trovato prima.
In una prima versione anch'io aspettavo il bit alto del raster, poi ho preferito impostare il raster interrupt alla riga che mi serviva per aprire subito il bordo ed avere il tempo di eseguire qualcos'altro, ma in realtà ho solo il tempo per altre tre POKE, un po' poco per costruirci sopra qualcosa di elaborato.
 

tostilio

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: usagj yojimbo
Aprire I Bordi In Basic
« Risposta #3 il: 27 Ottobre 2011, 09:59:13 »
 Forte... non l'avevo mai provato prima... però il mio VICE si "pianta" dopo averlo eseguito... ma forse è il risultato del GOTO in linea 3... fatto sta che non riesco a bloccarne l'esecuzione (in realtà non trovo STOP/RESTORE sulla tastiera del mio portatile...)

Una domanda però: i bordi così aperti sono fruibili, cioè ci si può scrivere qualcosa, oppure è solo un effetto ottico che colora la parte del bordo su e giù come lo schermo?

PS: Ad occhio e croce mi sa che è solo un effetto ottico... però magari mi sbaglio! Mi ricordo che era possibile visualizzare degli sprite sul bordo... è possibile in qualche modo anche scriverci qualche cosa?

Commodore4Life

  • Utente
  • **
  • Post: 75
  • Gioco Preferito: Jupiter Lander
Aprire I Bordi In Basic
« Risposta #4 il: 27 Ottobre 2011, 16:02:39 »
 Che forza :metal: , anch'io l'ho provato sia sul commodore astratto e anche su quello materiale

 
2 Commodore Vic-20 (uno made in England non funzionante ,uno made in W. Germany funzionante)
Commodore 64c made in W. Germany
Amiga 500 Plus made in China
Monitor Commodore 1084s
1541 II, 2 Datassette, 9 Cartridge (tutte x Vic20), 1 Expansion Cartridge, 5 Joystick
Olivetti PCS-44
Compaq Portable I Plus

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Aprire I Bordi In Basic
« Risposta #5 il: 27 Ottobre 2011, 20:37:06 »
Citazione da: "tostilio"
Forte... non l'avevo mai provato prima... però il mio VICE si "pianta" dopo averlo eseguito... ma forse è il risultato del GOTO in linea 3... fatto sta che non riesco a bloccarne l'esecuzione (in realtà non trovo STOP/RESTORE sulla tastiera del mio portatile...)

Una domanda però: i bordi così aperti sono fruibili, cioè ci si può scrivere qualcosa, oppure è solo un effetto ottico che colora la parte del bordo su e giù come lo schermo?

PS: Ad occhio e croce mi sa che è solo un effetto ottico... però magari mi sbaglio! Mi ricordo che era possibile visualizzare degli sprite sul bordo... è possibile in qualche modo anche scriverci qualche cosa?
Si', e' un ciclo infinito, e non e' solo un effetto ottico, i bordi sono realmente aperti, nel senso che si impedisce al VIC-II di ridisegnarli.
Restore e' "pagina su", runstop e' esc o capslock.
nei bordi puoi visualizzare degli sprite ma pretendere di muoverli e' un po' troppo. una volta piazzati nel bordo il ciclo infinito fa appena in tempo (in basic) a tenere i bordi aperti senza sfarfallare. Per queste cose e' necessario l'asm.
Codice: [Seleziona]
start tok64 xsp.prg
0 s=53265:r=s+1:a=peek(s)and240:b=aor8: poke16383,0:poke56334,peek(56334)and254:gosub3
1 waitr,128,0:pokes,b::::::::::::::::::::
2 pokes,a:goto1
3 forx=0to15step2:poke53248+x,40+(27*x/2):poke53248+x+1,255
4 poke2040+(x/2),8+x:next:pokes+4,255:pokes+11,255:return
stop tok64 xsp.prg
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

tostilio

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: usagj yojimbo
Aprire I Bordi In Basic
« Risposta #6 il: 10 Novembre 2011, 18:11:37 »
 
Citazione da: "iAN CooG"
Si', e' un ciclo infinito, e non e' solo un effetto ottico, i bordi sono realmente aperti, nel senso che si impedisce al VIC-II di ridisegnarli.
Restore e' "pagina su", runstop e' esc o capslock.
nei bordi puoi visualizzare degli sprite ma pretendere di muoverli e' un po' troppo. una volta piazzati nel bordo il ciclo infinito fa appena in tempo (in basic) a tenere i bordi aperti senza sfarfallare. Per queste cose e' necessario l'asm.
Sì, ok...

Che tu sappia, qualche gioco srutta questa potenzialità?

Eppoi: in che senso non è un effetto ottico? Mi spiego meglio: se in una shell windows aumento la grandezza dello schermo e del suo buffer, allora quello non è un effetto ottico, nel senso che le righe le vedo e le posso utilizzare per scriverci... chiaramente non mi aspetto una cosa del genere (anche se sarebbe bello avere anche sul C64 una shell evoluta che mi permetterebbe di impostare N buffer di schermo e di poterci scorrere su e giù a piacere... e magari poter impostare l'area così "aperta" per ottenere - ad occhio e croce - sei, otto righe in più... mica sarebbe male!). In realtà delle shell evolute con le quali è possibile scrollare su e giù le ho viste... ma sempre con 25 linee di testo e non di più!


Ancora:

Ho provato a mettere in riga 2 una semplice istruzione print"C" tra pokes,a e goto 1, quindi ho capito cosa intendevi per "sfarfallio"... pur "sfarfallando", lo schermo scrollava e faceva vedere 25 + 1 righe di testo (anche quella famosa in più coperta dal bordo). Evidentemente con l'assembler riuscirei a fare "qualche cosa" di attivo in un tempo brevissimo (che evidentemente è quello necessario al "pennello elettronico" per ritornare indietro e disegnare la riga successiva. Ma non credo che riuscirei a scrivere qualche cosa sul bordo... senz'altro non con l'istruzione print, ma secondo me nemmeno con nessun'altra istruzione, in quanto non esistono proprio le locazioni di memoria schermo dedicate all'area così aperta.

Allora la domanda la pongo in modo diverso: è possibile istruire il VICII in modo da far vedere più righe sullo schermo e magari anche più colonne? Qualcosa del genere non l'ho mai visto... però non si finisce mai di imparare.

PS: So che esiste il modo di far vedere 80 colonne sul C64... però credo che queste siano gestite in modalità hi-res e non in modalità testo!

Elder0010

  • Utente
  • **
  • Post: 75
    • http://csdb.dk/scener/?id=22731
  • Gioco Preferito: Rampage
Aprire I Bordi In Basic
« Risposta #7 il: 10 Novembre 2011, 20:37:33 »
 Non è un effetto ottico perchè di fatto quello spazio esiste (ed è collegato ad una precisa zona di memoria).

Quello che il vic fa normalmente  è

- disegnare lo schermo
- disegnare i bordi sullo schermo

Esistono una serie di side effects che possono essere generati manipolando il registro $d011 in momenti precisi (primi N cicli di una rasterline), aprire i bordi è uno di questi.

Alcuni di esempio sono:
Linecrunch ("schiacciare" le linee di un bitmap per farlo scrollare velocemente senza copiare nulla)

FLD (Flexible line distance - cambiare il valore dello scroll verticale in diversi punti
dello schermo per far comparire delle aree nere). E questo si, è un effetto ottico perchè quelle zone nere non sono mappate a una locazione di memoria.

FPD (Flexible pixel distance - sarebbe linecrunch + fld)

ed altri che ancora non ho studiato quindi non so spiegarti ;)

questi 3 li trovi nel demo Arsenic - Toxic Taste

Dipende cosa intendi per righe: impedendo al vic di disegnare i bordi si guadagna dello spazio, ma non puoi gestire questo spazio come il resto dello schermo. Puoi metterci sprites, e in generale visualizzare quello che è in memoria nella locazione $3ffff. Mi sembra che non puoi neanche cambiare il colore di quello che cè in questa locazione.

Chiaramente, per queste cose, devi sempre utilizzare l'assembly.
 
lda #0 sta $d020 sta $d021

tostilio

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: usagj yojimbo
Aprire I Bordi In Basic
« Risposta #8 il: 11 Novembre 2011, 13:25:16 »
Citazione da: "Elder0010"
Dipende cosa intendi per righe: impedendo al vic di disegnare i bordi si guadagna dello spazio, ma non puoi gestire questo spazio come il resto dello schermo. Puoi metterci sprites, e in generale visualizzare quello che è in memoria nella locazione $3ffff. Mi sembra che non puoi neanche cambiare il colore di quello che cè in questa locazione.
Mi spiego meglio... se io scrivo qualche cosa sullo schermo, p.es. "pippo" io vedo scritto pippo perché quelle 5 lettere (o meglio i rispettivi codici schermo) sono state inserite in punti precisi della RAM che mappa lo schermo del C64. In particolare, nel C64, la memoria allocata per lo schermo ammonta a 1024 byte, 1000 dei quali visibili, e 24 relative agli sprite... ecco: 1000 byte che guarda caso fanno 25 righe di testo x 40 colonne, che è poi l'area caratteri di cui posso fruire a livello basic, ma anche a livello ASM.

Se ora io dico "benissimo, con 'questo' codice (uno qualunque che non conosco) alloco per lo schermo tante locazioni di memoria, ed ora ho disponibili 30 righe di testo per 60 colonne...", e quindi con questo effetto posso scrivere effettivamente 30 righe e 60 colonne di testo, allora ho "aperto" effettivamente i bordi...

Insomma, posso far in modo che il VICII mi visualizzi un'area di, per esempio, 30 righe di testo per 60 colonne?.

Inoltre, è possibile spostare l'area visibile (25x40 locazioni) decentrandola dallo schermo? Oppure ancora, sempre 25 righe per 40 colonne, ma più piccine (e quindi con bordi più grandi) oppure più grandi (e quindi con bordi più stretti).

Infine, se fosse possibile, per esempio, rimpicciolire l'area visibile e contemporaneamente decentrarla dal centro dello schermo, con tecniche di interlacciamento potrei visualizzare due pagine testo affiancate (come pagina 1 e 2 ovvero come testo 25 linee per 80 colonne), oppure una sopra e l'altra sotto (con 50 linee di testo per 40 colonne)... ma tali tecniche non l'ho mai viste realizzare, eppure sarebbero comode, per esempio, per visulizzare più righe di testo o addirittura 2 pagine distinte, e quindi rendere più agevole la stesura di testi scritti e così via...

Ecco, queste cose non l'ho mai viste fare (ad eccezione delle bruttissime e inutili 80 colonne), e credo che il fatto che sul C64 io veda 25 linee x 40 colonne sia così legato al VICII e a come questo sia stato inplementato nell'hw della macchina, che effettivamente tali tecniche non siano possibili. Ma potrei sbagliarmi, del resto tecniche di interlacciamento e modi grafici a me sconosciuti ogni tanto cicciano fuori, fornendo effetti ottici bellissimi e impensabili.

Senbei

  • Neo-iscritto
  • *
  • Post: 22
    • http://www.fabioapps.com
  • Gioco Preferito: Starquake
Aprire I Bordi In Basic
« Risposta #9 il: 11 Novembre 2011, 21:53:18 »
 
Citazione da: "tostilio"
Sì, ok...
Che tu sappia, qualche gioco srutta questa potenzialità?
...
Ehm, sì, 'qualche' gioco apre il bordo...

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Aprire I Bordi In Basic
« Risposta #10 il: 12 Novembre 2011, 01:29:20 »
Citazione da: "tostilio"
Se ora io dico "benissimo, con 'questo' codice (uno qualunque che non conosco) alloco per lo schermo tante locazioni di memoria, ed ora ho disponibili 30 righe di testo per 60 colonne...", e quindi con questo effetto posso scrivere effettivamente 30 righe e 60 colonne di testo, allora ho "aperto" effettivamente i bordi...

Insomma, posso far in modo che il VICII mi visualizzi un'area di, per esempio, 30 righe di testo per 60 colonne?.
 
Forse non ti e' ancora chiaro: nei bordi aperti ci possono essere solo Sprite, nient'altro. Poi negli sprite ci si possano disegnare ANCHE lettere prese da un font quindi simulando del testo anche nei bordi, ma sempre di sprite si tratta.
Di text editor che sfruttano i bordi ce ne sono alcuni, ad esempio:
http://csdb.dk/release/?id=30152
questo permette di creare schermate con testo 46x32, tutto fatto di sprite anche nei bordi. La modalita' testo non viene usata.
Ne ricordo anche un altro che usava i font nella ROM e non un font ridefinito, ma non ricordo esattamente come si chiamasse.

E no, lo schermo non si puo' spostare.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

tostilio

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: usagj yojimbo
Aprire I Bordi In Basic
« Risposta #11 il: 14 Novembre 2011, 10:00:34 »
Citazione da: "iAN CooG"
[...]
Forse non ti e' ancora chiaro: nei bordi aperti ci possono essere solo Sprite, nient'altro.
[...]
E no, lo schermo non si puo' spostare.
Sì, sì... m'era tutto chiaro... ora che me lo dici tu, ci credo di più!