Autore Topic: Scrolling Orizzontale Di Un Testo  (Letto 1292 volte)

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Scrolling Orizzontale Di Un Testo
« il: 02 Ottobre 2004, 16:18:37 »
 Hello! :)

Questo mio programma, scritto in BASIC, effettua lo scrolling fluido (coarse + fine) di un messaggio.
 
Non utilizza alcuna routine ausiliaria in linguaggio macchina.

Vista la "lentezza" dell'istruzione PRINT, mi sono dovuto limitare a scorrere 8 caratteri; con più caratteri si hanno dei disturbi visivi dovuti alla visualizzazione di un fotogramma "cattivo": cio' si verifica nell'attimo in cui è avvenuto il coarse scrolling ma il registro del fine scrolling non è stato ancora aggiornato. Finché ci si accontenta di pochi caratteri, l'interprete BASIC riesce ad effettuare entrambe
le operazioni in maniera sufficientemente rapida (cioè in un intervallo di tempo in cui il rasterbeam è ancora fuori all'area visibile del video).

Ho usato una subroutine che carica i caratteri in un'array (C$): questo richiede un'attesa iniziale ma evita di appesantire il loop dello scrolling, pur consentendo di scrivere il messaggio nelle istruzioni DATA in maniera comoda (per stringhe intere e non per caratteri separati).
L'estrazione di un carattere da ciascuna stringa contenuta nelle DATA potrebbe anche avvenire in tempo reale, ma come detto non volevo appesantire il  loop dello scrolling, onde evitare un rallentamento nel movimento.

Il messaggio nel programma contiene alcune informazioni su come il programma stesso e' stato realizzato (comunque c'è il codice).

Nota (per maggiore chiarezza):
coarse scrolling = scorrimento di un carattere alla volta
(effettuato qui usando la funzione RIGHT$);
fine scrolling = scorrimento di un pixel alla volta
(effettuato naturalmente usando il registro di scrolling del VIC-II).

Ciao a tutti.

Codice:

Codice: [Seleziona]

0 r=53265:s=128:poke53280,0:poke53281,0:poke646,13:f=0:g=24
1 a$="{space*8}":q=53270:a=199:b=192:n=len(a$)-1:gosub 100:pokeq,peek(q)or8
2 p=1
3 waitr,s:print"{home}"a$:ifp=lthen2
4 pokeq,a:a$=right$(a$,n)+c$(p):waitr,s:print"{home}"a$:fort=atobstep-1
5 waitr,s:pokeq,t:forj=ftog:next:next:p=p+1:goto3
99 end
100 v=53248:poke2040,13:fort=832to832+63:poket,255:next:pokev+21,1:pokev+39,0
110 pokev+1,50:pokev,90
120 poke 53265,peek(53265)or8
122 dimc$(1000):printchr$(142) chr$(8)
123 print"{clear}{down*7}{space*10}*** attendere prego ***":gosub1000
125 k=1:p=1
130 readl$
135 c$=mid$(l$,k,1):ifc$="/"thenk=1:goto130
140 ifc$="@"thenc$(p)=c$:l=p:p=1:print"{clear}":return
150 c$(p)=c$:k=k+1:p=p+1:goto135
500 data "un caloroso saluto a tutti gli amici/"
505 data " del forum di ready64.   questa routine/"
510 data " effettua lo scrolling fluido in basic!/"
515 data "    mi piace fare degli esperimenti con/"
520 data " il basic e mi sono molto divertito/"
525 data " nello scrivere questa routine in puro/"
530 data " basic.    il coarse scrolling e' stato/"
535 data " realizzato grazie alla funzione stringa/"
540 data " right$, mentre il fine scrolling e'/"
545 data " stato ottenuto ovviamente con il registro di scrolling, piazzando/"
550 data " delle wait 53265,128 nel posto giusto/"
555 data " al momento giusto ottenendo cosi'{160}un movimento abbastanza regolare/"
560 data " (essendo in basic ci possiamo accontentare...). la subroutine a/"
565 data " partire dalla linea 100 colloca uno sprite pieno a destra per /"
570 data " simulare il bordo destro e carica i caratteri di questo testo /"
575 data "nell'array c$.   il numero dei caratteri che vengono fatti scorrere/"
580 data " e' di soli 8 a causa della lentezza dell'istruzione print...    /"
590 data "{space*17}ciao!{space*14}marc=ello signs off.{space*12}/"
595 data @
1000 print  chr$(17)chr$(17)chr$(17)chr$(5)spc(15)"    {206}{183}{208} {164*2}    "
1001 print  "{space*8}{206}{205}{206}{205} {206}{205} {207}{205} {180}{207}{183} {204}{206} {206} {180} {180} {206}{205}  "
1002 print  "{space*8}{180}{167}{180}{167} {180}{167}{160}{204}{206} {180}{204}{175} {207}{205} {204} {180} {180} {180}{167}  "
1005 print  "{space*8}{180}{167}{180}{167} {207}{208} {180}{205} {205}{175}{186} {163*2} {205} {204} {204} {205}{206}  "
1010 print  "{space*8}{163*26}  "
1020 print  chr$(154)"{space*10}p r o d u c t i o n s "chr$(153)
1022 printchr$(17)chr$(17)"{space*8}pure basic for the masses!"
1025 return


 
-=MarC=ellO=-

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Scrolling Orizzontale Di Un Testo
« Risposta #1 il: 02 Ottobre 2004, 17:31:41 »
Citazione da: "MarC=ello"
Codice: [Seleziona]
123 PRINT"“          *** attendere prego
1001 PRINT  "        ÎÍÎÍ ÎÍ ÏÍ ´Ï· ÌÎ Î ´ ´ ÎÍ"
1002 PRINT  "        ´§´§ ´§ ÌÎ ´Ì¯ ÏÍ Ì ´ ´ ´§"
1005 PRINT  "        ´§´§ ÏÐ ´Í ͯº ££ Í Ì Ì ÍÎ"
1010 PRINT  "        ££££££££££££££££££££££££££"
Usa bastext o tok64 per de-tokenizzare i prg basic altrimenti ci si fa poco ;)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Scrolling Orizzontale Di Un Testo
« Risposta #2 il: 02 Ottobre 2004, 23:28:33 »
 Sì hai nettamente ragione  :hail: . Ora ho risolto il problema. Grazie per la segnalazione  ;)   :c64:  
-=MarC=ellO=-

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Scrolling Orizzontale Di Un Testo
« Risposta #3 il: 03 Ottobre 2004, 16:01:09 »
 Ahh adesso l'ho riconosciuto, e' una parte del tuo demo tutto in basic! :)
Ho corretto solo una riga, perche' mi veniva disallineato il logo
Codice: [Seleziona]
1000 print  chr$(17)chr$(17)chr$(17)chr$(5)spc(19)"{206}{183}{208} {164*2}   "
Ottima l'idea di nascondere con uno sprite nero costruito al volo per nascondere il carattere a dx
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

MarC=ello

  • Utente
  • **
  • Post: 337
  • Gioco Preferito: CBM BASIC 2.0
Scrolling Orizzontale Di Un Testo
« Risposta #4 il: 03 Ottobre 2004, 20:23:00 »
 
Citazione
e' una parte del tuo demo tutto in basic!

Sì, devo ancora un po' riguardare tutto il demo, aggiungere della grafica e musica (se ci riesco, sai in puro BASIC) poi vedrò di rilasciarlo.

Citazione
Ottima l'idea di nascondere con uno sprite nero costruito al volo per nascondere il carattere a dx

 ;)

Ciao!
 :c64:  
-=MarC=ellO=-