Ready64 Forum

Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: iAN CooG - 12 Marzo 2009, 01:06:41

Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: iAN CooG - 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' =)
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 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!
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 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...

Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 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>
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: iAN CooG - 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:  
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 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!
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: iAN CooG - 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.
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Speranza - 28 Marzo 2009, 12:47:09
 Avete presente l'arabo? ..Ecco come leggo!!!

Giusto per curiosità.. Ma che linguaggio è ? ..
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: sys58255 - 28 Marzo 2009, 22:01:08
Trattasi di linguaggio di programmazione assembly, trovi QUI (http://it.wikipedia.org/wiki/Assembly) maggiori dettagli.
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 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. ;)
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 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... ;)
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 30 Marzo 2009, 12:50:24
Ora il movimento é controllato dal joystick in porta 2 (su, fermo, giù).
(62 byte + 2 di start address).
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 30 Marzo 2009, 18:40:39
Alternativa al precedente: doppio raster in direzioni opposte.
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 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
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: LoadError - 31 Marzo 2009, 08:46:09
 10 print "ciao"
20 goto 10




 :lol: scusate, non ho saputo resistere  :ciauz:  
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: mces - 31 Marzo 2009, 12:22:43
 Allora ottimizziamo:

10 ?"Ciao": goto10


Anche io non ho saputo resistere!!!!!  :mattsid:  :lol:  
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 31 Marzo 2009, 17:24:54
Esattamente quanto scritto nel precedente post, ma questa volta in assembly.
Ho commentato un po' per i neofiti, spero sia un incentivo a provare a giochicchiarci. ;)
iAN, se disapprovi o comunque siamo troppo fuori tema, chiedo umilmente perdono ed elimina pure i post.

Codice: [Seleziona]
*=$0801 ; CIAO!
.Byte $0B,$08,$D4,$07,$9E,"2061",$00,$c9,$00

intro
st
   ldx #$00      ; Azzero l'indice
ld
   lda ciao,x    ; Carico l'x-esimo carattere   
   beq st        ; se é uguale a 0 riparto dall'inizio
   jsr $ffd2    ; equivale a "Print chr$(A)": A é l'accumulatore
   inx          ; Incremento l'indice
   bne ld        ; Stringhe di massimo 255 caratteri + il terminatore (0)
   rts          ; Stringa troppo lunga, uscita (Equivale a End)

ciao ; Stringa, $0d é il ritorno a capo, $00 il terminatore (come in C)

.byte "CIAO",$0d,$00

NB1: il codice qua sopra pur fittando 64 byte, non é assolutamente ottimizzato.
NB2: Grazie iAN, molto comodo il DASM col supporto per gli illegal!
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: iAN CooG - 31 Marzo 2009, 20:11:12
 Freshness, continua assolutamente su questa strada, gli esperimenti di programmazione sono sempre apprezzati, da me per lo meno. I disturbatori sono ben altri. :angry:
QUesto thread era interessante al 100%, a parte il tentativo di voler riportare il livello di mediocrita' abituale di questo forum.
A loro posso solo consigliare di andare su edicolac64 se vogliono sentirsi a casa.
 
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: LoadError - 01 Aprile 2009, 11:47:41
 Versione breve: voleva essere una battuta innocente, mi scuso di avere interrotto il thread.
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 14 Aprile 2010, 01:44:09
Riprendo in mano questo vecchio thread per evitare di aprirne altri.
Stasera ho giochicchiato un po' con l'assembler e coi soliti 64 byte (ok, 61 per la precisione) ho tirato fuori questo, a mio avviso, simpatico effetto:

Codice: [Seleziona]
; Raster expander - Freshness79

*=$0326
.word Start
.word $F6ED

S ldy $fc
  pha
L tsx

; Bande fisse
  and #$38
  cmp #$20
  bne C
  inc $fd
  ldx $fd

C lda $d012
  cmp $d012  
  beq *-3  
  stx $d020    
  asl $d011
  ror
  cmp #$9b
  beq M
  dey  
  bpl L  
  bmi S
Start
  sei      
M inc $fe
  lda $fe
  bpl K  
  eor #$ff
K sta $fc
  tay
  inc $fd
  ldx #$00  
  txs
  beq C

La sola parte (con i dovuti limiti) "configurabile" é il numero, la posizione e la dimensione delle bande fisse.
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: antoniomauro - 14 Aprile 2010, 10:58:01
 Molto interessante!
Provo a studiarmelo un po'
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: MarC=ello - 15 Ottobre 2010, 16:27:54
Citazione da: "antoniomauro"
Molto interessante!
Provo a studiarmelo un po'
Quoto. Davvero un bellissimo effetto!
Titolo: 64bytes Intro - Raster Scorrevoli
Inserito da: Freshness79 - 03 Giugno 2011, 19:11:57
 57 (+2) byte e la possibilità di avere barre da 32 colori liberamente selezionabili. Mi dava troppo fastidio veder sprecati i nibble più significativi dell'elenco dei colori.
Per cambiare i colori tener presente che prima viene visualizzato il low nibble e poi l'high nibble.

Codice: [Seleziona]
*=$032c
.word start
 retrst
lsr
lsr
lsr
lsr
start=*+1
lsr $78
bcs waitrst
lda #$0f
inc $78
SBX #$FF
lda table,x
waitrst
cpy $d012
beq waitrst
sta $d020  
iny
cpy #$21
bne retrst
 endframe
asl $d011
bcc retrst  
ldy #$00  
bcs endframe

table=*-1
; Prima barra da 16 colori
.byte $b6,$e4,$d3,$71,$cf,$b4,$09,$00
; Seconda barra da 16 colori
.byte $60,$d5,$17,$11,$d7,$65,$00,$00