Autore Topic: 64bytes Intro - Raster Scorrevoli  (Letto 8321 volte)

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
64bytes Intro - Raster Scorrevoli
« il: 12 Marzo 2009, 01:06:41 »
Stavo provando a far qualcosa per passare il tempo...
Codice: [Seleziona]
; iAN CooG/HF
        *=$0326
        word newintro
        word $F6ED
newintro
        sei
        stx $d011
l
        tya
        and #$0f
        tax
        lda table,x
        cpy $d012
        beq *-3
        sta $d020
        iny
        bne l
        ldy #[eot-table-1]
        ldx table+[eot-table-1]
tr
        lda table-1,y
        sta table,y
        dey
        bne tr
        stx table
        lda $d011
        bmi *-3
        bpl l

table
        byte $09,$0b,$04,$0c,$0f,$07,$01,$0d,$03,$0e,$04,$0b,$06
eot=*+3

senza molta fantasia, ma in 64byte (anzi, 63 per essere esatti) non si puo' fare molto.
O mi faccio venire in mente qualcosa di meglio o quest'anno alla limiTED compo di Plus4world non partecipero' =)
« Ultima modifica: 21 Gennaio 2015, 23:29:02 da eregil »
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #1 il: 26 Marzo 2009, 02:31:06 »
Son capitato qua per caso, era un pezzo che non venivo, ma mi fa un sacco
di piacere vedere che la scena c64 italiana ha ancora dei militanti!
Di solito non rompo le scatole con le ottimizzazioni... ma non ho potuto resistere.
:P

Citazione
<span style='font-family:Courier'>
;Prova
*=$0326       
.word newintro       
.word $F6ED

newintro

  sei
  stx $d011

L tya
  clc
  adc $fe
  and #$0f
  tax
  lda table,x
  cpy $d012
  beq *-3
  sta $d020
  iny
  bne L
  dec $fe
  lda $d011
  bmi *-3
  bpl L
 
table
.byte $09,$0b,$04,$0c,$0f,$07,$01,$0d,$03,$0e,$04,$0b,$06
</span>

Stesso risultato ma 11 byte in meno! ;)
In realtà si potrebbe pensare di togliere anche il clc al prezzo di uno scattino
ogni 256 frame (in sostanza ogni volta che dec $fe mette il carry a 1).
Che fare con sti 11 byte? Boh... se mi viene in mente qualcosa lo posto!
« Ultima modifica: 21 Gennaio 2015, 23:29:30 da eregil »

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #2 il: 26 Marzo 2009, 10:59:39 »
... ad esempio estendere l'effetto raster a tutto lo schermo:

Citazione
<span style='font-family:Courier'>;Prova
*=$0326     
.word newintro     
.word $F6ED

newintro

  sei
  stx $d011

S ldy #$00
L tya
  clc
  adc $fe
  and #$0f
  tax
  lda table,x
  cpy $d012
  beq *-3
  sta $d020
  iny
  lda $d011
  bpl L
  cpy #$30
  bne L
  dec $fe
  lda $d011
  bmi *-3
  bpl S
 
table
.byte $09,$0b,$04,$0c,$0f,$07,$01,$0d,$03,$0e,$04,$0b,$06
</span>

Avanziamo ancora 2 byte...

« Ultima modifica: 21 Gennaio 2015, 23:29:54 da eregil »

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #3 il: 26 Marzo 2009, 13:34:16 »
Ultimo aggiornamento altrimenti verrò tacciato di flooding: stesso risultato del precedente ma questa volta avanziamo 6 byte.
Per cambiare la direzione é sufficiente modificare il cpy con i valori 2F e 31.

Citazione
<span style='font-family:Courier'>;Prova
*=$0326     
.word newintro     
.word $F6ED

newintro

  sei
  stx $d011

S ldy #$00
L txa
  and #$0f
  tax
  lda table,x
  cpy $d012
  beq *-3
  sta $d020
  inx
  iny
  lda $d011
  bpl L
  cpy #$2F
  bne L 
  lda $d011
  bmi *-3
  bpl S
 
table
.byte $09,$0b,$04,$0c,$0f,$07,$01,$0d,$03,$0e,$04,$0b,$06
</span>
« Ultima modifica: 21 Gennaio 2015, 23:30:24 da eregil »

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
64bytes Intro - Raster Scorrevoli
« Risposta #4 il: 26 Marzo 2009, 21:13:18 »
 \o/ eccezionale!
Altro che flood, continua pure!
Sono io il primo a voler vedere un flood di programmi qua dentro, non sai da quanto tempo non si vedeva una tale preparazione in questo forum  :metallica:  
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #5 il: 27 Marzo 2009, 01:28:46 »
Grazie mille iAN... allora io proseguo! :D
Stesso programma dell'ultimo post, stessa funzionalità e stessa paletta di colori: altri 2 byte in meno, in tutto 56. ;)
Ho ritenuto utile commentare le linee un po' più ostiche per facilitare la lettura a tutti.


Citazione
<span style='font-family:Courier'>;Prova
*=$0326     
.word newintro     
.word $F6ED

newintro

  sei
  stx $d011

S ldy #$00
L lda #$0f     
.byte $cb,$01   ;SBX #$01 opcode non doc.: X = (A&X)-1
  lda table+$01,x  
  cpy $d012
  beq *-3
  sta $d020
  iny
  bit $d011
  bpl L
  cpy #$2F
  bne L 
  bit $d011   ;basta un bit, ciò che conta é il flag N
  bpl S
.byte $30     ; bmi *-5: $30 é l'opcode di bmi
 
table
.byte $F9     ; colore (x9) ma anche parametro di bmi
.byte $0b,$04,$0c,$0f,$07,$01,$0d,$03,$0e,$04,$0b,$06
</span>

Non credo di essere in grado di comprimere ulteriormente questo codice...
D'altra parte é comunque difficile aggiungere qualcosa con solo 8 byte a disposizione e tutti i registri quasi costantemente occupati...
Vabbe... Grazie mille iAN per i complimenti e per l'ottimo spunto!
« Ultima modifica: 21 Gennaio 2015, 23:30:54 da eregil »

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
64bytes Intro - Raster Scorrevoli
« Risposta #6 il: 27 Marzo 2009, 20:32:22 »
 Ottima pensata quella di usare un illegal opcode per fare sia la and che la dec :)
Se usi la mia versione di dasm, sbx e tutti gli altri illegals sono supportati, quindi non devi "abbassarti" a scriverli come .byte.
Una cosa che pero' non e' "giusta" e' quella di definire il byte $f9 della bmi finale, o meglio e' inutile, tanto non lo usi mai dato che punti a table+1 =) Quindi la riduzione e' "dannosa" in questo caso perche' togli un colore effettivo dal gradient. Cosi' dovrebbe essere invece effettivamente usato.
Codice: [Seleziona]
 *=$0326
  word newintro
  word $F6ED

newintro

  sei
  stx $d011

S ldy #$00
L lda #$0f
  SBX #$01
  lda table,x
  cpy $d012
  beq *-3
  sta $d020
  iny
  bit $d011
  bpl L
  cpy #$2F
  bne L
  bit $d011  
  bpl S
  bmi *-5

table=*-1
  byte $0b,$04,$0c,$0f,$07,$01,$0d,$03,$0e,$04,$0b,$06
Ad ogni modo ottimo lavoro, mi fa piacere trovare qualcun altro che si diverte a spippolare i bit.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Speranza

  • Utente
  • **
  • Post: 52
  • Gioco Preferito: 1942
64bytes Intro - Raster Scorrevoli
« Risposta #7 il: 28 Marzo 2009, 12:47:09 »
 Avete presente l'arabo? ..Ecco come leggo!!!

Giusto per curiosità.. Ma che linguaggio è ? ..

sys58255

  • Utente
  • **
  • Post: 183
64bytes Intro - Raster Scorrevoli
« Risposta #8 il: 28 Marzo 2009, 22:01:08 »
Trattasi di linguaggio di programmazione assembly, trovi QUI maggiori dettagli.
« Ultima modifica: 21 Gennaio 2015, 23:31:36 da eregil »

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #9 il: 29 Marzo 2009, 15:04:12 »
 iAn, hai perfettamente ragione: in effetti mi perdevo il colore $09.
Era un po' che non prendevo in mano il 6502 e mi pareva che l'indirizzamento indicizzato non supportasse il page boundary crossing: in realtà solo l'indiretto ha questo difetto.
Speranza, il linguaggio assembly é meno ostico di quanto tu possa pensare: leggi qualche tutorial e prova a giocarci. E' un po' come giocare con i Lego, bisogna attaccare piccoli pezzi uno alla volta. ;)

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #10 il: 30 Marzo 2009, 00:40:45 »
Sembra che sta routine si possa ottimizzare ancora...

Citazione
<span style='font-family:Courier'>
*=$0326
.word newintro 
.word $F6ED

newintro 

  sei 
L lda #$0f 
  SBX #$FF 
  lda table,x 
  cpy $d012 
  beq *-3 
  sta $d020 
  iny
  cpy #$2f
  bne L
K asl $d011
  bcc L
  ldy #$00
  bcs K
 
table=*-1 
.byte $06,$0b,$04,$0e,$03,$0d,$01,$07,$0f,$0c,$04,$0b,$09
</span>

Ho dovuto solamente invertire il gradient perché SBX in questo caso con parametro $FF funge da AND + INX; chiaramente ho anche perso la possibilità di occultare il primo valore di gradient nell'ultimo branch perché é cambiato il displacement.
Con X che cresce si evita di caricare uno dei valori di gradient dallo schermo: lo pescava intorno allo 0440 (per X=$FF), lo faceva anche nella routine corretta da te solo che prendeva uno spazio ($20) e quindi il colore risultante era il nero.
Ho dovuto mettere table=*-1 perché la INX viene sempre dopo l'AND pertanto i valori che può assumere X vanno da $01 a $10.
Nota anche il fatto che ho potuto risparmiare l'inizializzazione di D011 perché si azzera "gratis" nel primo frame "a suon di" asl.
Comunque sia adesso i byte in meno sono 15, si può pensare di aggiungere qualcosa... ;)
« Ultima modifica: 21 Gennaio 2015, 23:31:57 da eregil »

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #11 il: 30 Marzo 2009, 12:50:24 »
Ora il movimento é controllato dal joystick in porta 2 (su, fermo, giù).
(62 byte + 2 di start address).
« Ultima modifica: 21 Gennaio 2015, 23:32:16 da eregil »

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #12 il: 30 Marzo 2009, 18:40:39 »
Alternativa al precedente: doppio raster in direzioni opposte.
« Ultima modifica: 21 Gennaio 2015, 23:32:31 da eregil »

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
64bytes Intro - Raster Scorrevoli
« Risposta #13 il: 30 Marzo 2009, 22:28:43 »
 Versione rivista del doppio raster. Esteso fino all'ultima riga.

Codice: [Seleziona]
*=$0326 ; Doppio raster
.word newintro
.word $F6ED

newintro
    sei
L   lda #$0F
    sbx #$FF
tya
sbc $fc
and #$0c
bne R2
lda #$05
    bne R1 
R2  lda table+1,X
R1  ldy $D012
R   cpy $D012
    beq R
    sta $D020
    cpy #$36
    bne L
txa
sbc #$26
T   asl $D011
    bcc L
tax
stx $fc
    bcs T

table
.byte $06,$0B,$04,$0E,$03,$0D,$01,$07,$0F,$0C,$04,$0B,$09
« Ultima modifica: 21 Gennaio 2015, 23:33:22 da eregil »

LoadError

  • Utente
  • **
  • Post: 67
  • Gioco Preferito: Bruce Lee
64bytes Intro - Raster Scorrevoli
« Risposta #14 il: 31 Marzo 2009, 08:46:09 »
 10 print "ciao"
20 goto 10




 :lol: scusate, non ho saputo resistere  :ciauz:  
Commodore 64 n. UK B 1739295, made in UK
Commodore 64C n. HB 4 375276 E, made in Hong Kong
Commodore 1541C disk drive
Commodore 1530 Datassette tape drive
Commodore 1702 monitor
Commodore 6499 modem