Mený principale
 Notizie
 Grafica
 Forum
 Links
 Retro Trailer
 Recensioni
 Modelli Amiga
 Storia Amiga
 Lista Utenti
 Policy sito
Ricerca Google

Login

Nick


Password


11 Maggio 2018 Postato da: Ozzyboshi_2
Demo "the crows" per imparare l'assembler basato su ramjam
Volevo segnalare che ho scritto un po' di "pensierini" su di una semplce demo che ho scritto insieme all'utente Dr Procton di questo forum, come test di apprendimento dei primi 9 capitoli del libro di Fabio Ciucci / Ramjam.
Potrebbe essere utile a chi come me sta studiando questo libro, la demo riprende i concetti di playfield, dual playfield, blittering e sprites.

Il sorgente è disponibile all'indirizzo

https://github.com/Ozzyboshi/AmigaDemo_the_cr ows

corredato di una spiegazione di quello che ho fatto e dei problemi che mi sono trovato ad affrontare.

Commenti: 155  Aggiungi - Pagine: 1...-4-5-6-7-8


Pagine: -1-2-3-4-5-6-7- [8] -

Post inviati: 14

Visulizza profilo Messaggio Personale
87.6.121.*** Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Commento 141
Z3k 2 Agosto 2018    23:54:36
Aggiungo prove fatte sul 500, con la ver 1.5.1 della demo, sia con gotek che con floppy reale ;
usando l' adf, in presenza dell' espansione 512k si locca il tutto dopo aver visualizzato lo splash-screen il floppy sembra leggere circa 9 tracce e poi interrompe la sua attività). La cosa buffa è che se scollego i 512k aggiuntivi, quindi Amiga 500 1.3 liscio, riesco ad arrivare a vedere il crowman(musica, scacchiera, scrolltext e quanto possa essere nella parte successiva è completamente irriconoscibile.
Ma non finisce quì.
Ho fatto un floppy bootabile amigados con il solo esguibile ed una semplicissima startup-sequence che lo lanciasse; il risultato è un errore amigados 103, ovvero mancanza di ram. il bello è che mi restituisce il solito errore anche con l 'espansione montata.
Il mistero si infittisce....

Post inviati: 303

Visulizza profilo Messaggio Personale
213.198.135.*** Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Commento 142
Ozzyboshi_2 4 Agosto 2018    10:18:26
secondo la mia analisi su 500 con mezzo mega di chip crasha semplicemente perché.... non ci sta!

facendo 2 conti a spanne, solo i mods vanno ad occupare 250k, poi mettici le immagini, il load screen ecc ecc... non penso di riuscire a far star tutto in 512k, magari potrei fare una versione mirata per la 500 in modo da sfruttare la slow ram (che adesso non viene toccata), però veramente ho grosse difficoltà a far stare gli assets su cosi poca memoria. E' anche vero che fino ad adesso allocavo allegramente memoria senza preoccuparmi del "fondo del barile", da ora in poi non sarà piu cosi.
In definitiva, ad oggi, requisito minimo e sufficiente per far girare la demo, un mega di chip.
Proverò a far qualcosa per utilizzare la slow ram, vedremo se riuscirò... però sarà su di un adf apposito.

Post inviati: 303

Visulizza profilo Messaggio Personale
62.94.49.*** Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Commento 143
Ozzyboshi_2 9 Agosto 2018    23:12:56
Salve a tutti

oggi ho rilasciato la versione 1.6 della demo.
La novità più rilevante è l'aggiunta di una nuova sezione dove delle palline vagano nello schermo in una traiettoria precalcolata a forma prima a ellisse e poi di infinito.

L'adf è qui : https://github.com/Ozzyboshi/AmigaDemo_the_crows/r eleases/download/v1.6/the_crows_dual_pf_bove_V1.6. adf

In questa release ho tralasciato volutamente i problemi segnalatomi sul funzionamento su a500 con mezzo mega di chip perché ho voluto concentrarmi sul funzionamento del blitter.
Poiché stasera mi sento un po' il Piero Angela dell'Amiga mi va di parlare a modo mio del blitter, magari qualche lettore di amigapage può ritenerlo interessante.

Iniziamo col dire che le palline avrebbero potuto risiedere tranquillamente negli sprites hardware poiché sono immagini larghe solo 16bit e composte da 3 colori piu lo sfondo.
Il problema sorge quando il mitico dr procton mi ha detto che voleva moooolte palline, a questo punto la soluzione su sprite hardware non era piu praticabile perché come ben sapete il chipset ocs mette a disposizione al massimo 8 registri dedicati a questo scopo.
Di questi 3 sono già occupati: 2 dal teschio e uno dallo starfield, ne rimangono 5... possiamo stampare 5 palline, troppo poco per le ambizioni napoleoniche del nostro amico procton.
Una tecnica alternativa è quella di sfruttare il blitter, ora molti di voi sicuramente hanno già sentito parlare di questo utilissimo cooprocessore che se non erro risiede dentro Agnus, ma quanti sanno veramente cosa fa?
Alla fine se ci pensate bene, l'Amiga è caratterizzata sopratutto dai custom chips: i processori motorola 68k all'epoca erano molto diffusi, si potevano trovare benissimo anche in altre macchine ed erano utilizzati anche per scopi totalmente differenti dall'home computing... quindi, come faceva l'Amiga ad essere cosi figa e performante rispetto alla concorrenza? Molto è dovuto proprio ai custom chips.
Tornando al blitter, cosa fa il blitter? Perché ci può aiutare? Beh, a me piace pensare al blitter come un dispositivo che ci permette di fare il copia incolla in modo semplice e rapido.
Chi non conosce il copia incolla? Dai lo sa usare anche mia madre imbranata, ricordo ancora quando qualche anno fa, usando il suo fiammante computer da 2000 euro scopri la combinazione di tasti ctrl-c / ctrl-v, ai suoi occhi sembrava una magia, tutto il testo selezionato veniva riportato su di un documento ogni volta che premeva ctrl-v e lo poteva usare a mo di stampino.
Ebbene, il blitter fondamentalmente fa una cosa analoga, voi scegliete cosa copiare, glielo dite attraverso appositi registri e lui se li copia nella sua "clipboard" e successivamente incollerà i dati copiati dove volete voi.
Una sua particolarità è che dispone di 3 clipboard corrispondenti a 3 canali DMA per mezzo dei quali il blitter accede direttamente alla preziosa chip ram, quando questo avviene il processore non può piu accedervi liberamente ma deve aspettare che il blitter disimpegni il bus, cosa che avviene a determinati intervalli (con buona pace di Amiten tv che tempo fa sosteneva che la cpu non ha dma su chip ram).
E' possibile comunque impostare un bit, chiamato nasty bit (bit cattivo) che fa in modo che il processore resti a bocca asciutta dando priorità completa al blitter, nella mia demo ho dovuto attivarlo per riuscire a fare piu blittate in meno tempo.
Per impostare il nasty blit basta fare un bset del bit 10 di dmacon, ricordatevi che dmacom ha un funzionamento un po' particolare, ha un interruttore generale (il bit 15) che deve essere alto per fare le modifiche altrimenti nisba.
Una volta che il blitter ha riempito le sue 3 clipboard, in base ad altri bit chiamati MINTERMS produce un output attraverso un quarto canale dma il quale va a scrivere il risultato in memoria.
Spiegare i minterms nel dettaglio richiederebbe un bel po' di tempo comunque il libro dei ramjam è molto esaudiente a riguardo, quello che ci interessa sapere è che la mia demo imposta questi minterms in una configurazione comunemente chiamata "cookie cut".
Quando questa viene impostata basta mettere su canale A la maschera dell'immagine da blittare, sul B l'immagine da blittare, sul C il pezzo di sfondo da blittare e su D ovviamente l'indirizzo di dove blittare che cambierà di volta in volta dando l'illusione del movimento.
Tutto quello che ho scritto qua sopra lo ritrovate alla riga 794 sotto forma di codice ASM:

move.l 8(a0),$dff050 ; A channel address (MASK)
move.l a1,$dff04c ; B channel address (ptBob)
move.l a2,$dff048 ; C channel address (Screen)
move.l a2,$dff054 ; D channel address (Dest Screen)
move.w 18(a0),$dff058 ; Blit the ball!!!

Quindi, per farla breve, ad ogni vertical blank io ogni volta cancello tutti i bobs dallo schermo, poi calcolo la posizione dove andare a blittare e poi blitto e attendo il frame successivo, tutto qua.
Anche la cancellazione della immagine viene fatta con il blitter, stavolta in una configurazione particolare che forza la scrittura di soli bit a zero, il codice per fare questo è alla riga 813.

move.w #$FFFF,$dff044 ; BLTAFWM - Blitter first word mask for source A
move.w #$FFFF,$dff046 ; BLTALWM - Blitter last word mask for source A
move.w #$0000,$dff042 ; BLTCON1

lea DataBobs(pc),a0 ; load the address of the bobs in a0
bsr.w waitblitter ; wait for the blitter to be available
move.w #40-6,$dff066 ; set blitter module for channel D to 34 (1 row 40 bytes - bob width 3 words aka 6 bytes)

move.w nbBobs(pc),d6 ; for each bob
.loopbobs
move.w #$100,$dff040 ; set bltcon0 to use source 'D' and no minterms (to force zeroing the memory)
move.l 12(a0),d1 ; calculate destination address on the screen

moveq #2-1,d5 ; for each bitplane
.loopbpl
move.l d1,$dff054 ; set channel D address for the blitter
move.w 18(a0),$dff058 ; BLIT!!!!! the bltsize is at databobs+18


Ultima cosa... i BOB, questi fantomatici oggetti, ne avevo sentito parlare alla nausea ma non ho mai capito cosa caspita veramente fossero, all'inizio pensavo c'entrasse qualcosa twin peaks ma oggi ho una idea piu chiara, signori e signori...il BOB!!!!

dc.w 220,128 ; x,y
dc.l ballpic
dc.l ballpicmsk
dc.l BALLBITPLANE_1
dc.w 0
dc.w 32*64+6/2 ; bltsize

Ebbene si... è tutto qua, non è altro che una porzione di memoria, neanche tanto larga visto che si tratta di 20 bytes.
In questa porzione di memoria vengono registrate tutte le informazioni che rappresentano un oggetto in movimento, ci sono le coordinate di dove stampare, gli indirizzi dove risiede l'immagine e la sua maschera, l'indirizzo del bitplane dove andare a scrivere, informazioni di come impostare il blitter e la dimensione dell'immagine (altezzaXlarghezza).
E io che mi immaginavo chissà quale ritrovato della scienza moderna... vabbè.
Insomma la demo si va a leggere dove e come blittare ogni pallina da questi bobs (sono 9 in tutto, uno per ogni pallina) e poi semplicemente.. blitta!

Ora però vi ho annoiato abbastanza con questo blitter, però alla fine è stato utile pure a me per ripassare tutto quello che ho scritto e magari ho destato la curiosità di qualcuno che nel 2018 ha voglia di cimentarsi nella difficile arte della programmazione hardware amiga in assembler.
Vi auguro una buonanotte e vi ricordo a chi interessato che distribuirò personalmente e gratuitamente (in tiratura limitatissima) una copia del floppy disk di questa demo a tutti gli amici amigosi che ci faranno compagnia al pranzo di badia prataglia presumibilmente il giorno 1 settembre ( da confermare ).

consulenza informatica ambito aziendale - appliance sicurezza - ambienti server multipiattaforma - servizi hosting - networking

Post inviati: 2202

Visulizza profilo Messaggio Personale
94.35.36.*** Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1
Commento 144
divina 10 Agosto 2018    00:54:31
è bellissimo; devo riuscire a trovare il tempo, prima o poi ci devo riuscire

MorphOS 3.9 PowerMac G5 &&Pegasos2 G4 //AmigaOS4.1 FE - AMiGA4000T&D &&1200 &&600 &&500+ &&500 - Mac Intel &&PowerPc - x64 servers -


Post inviati: 303

Visulizza profilo Messaggio Personale
62.94.49.*** Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Commento 145
Ozzyboshi_2 10 Agosto 2018    09:15:11
ma ti ha funzionato questo ultimo adf? A dr procton non va e non riesco a circoscrivere il problema

Pegasus RyuSei Ken

Post inviati: 8283

Visulizza profilo Messaggio Personale
87.5.28.*** Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Commento 146
Seiya 10 Agosto 2018    11:50:46
ok, la demo funziona benissimo in configurazione A600 con 1 MB Chip RAM. In configurazione A500 con 512k+512k non va. si blocca alla schermata "Loading".

Post inviati: 303

Visulizza profilo Messaggio Personale
62.94.49.*** Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Commento 147 in risposta al 146 di Seiya
Ozzyboshi_2 10 Agosto 2018    12:22:40
Citazione

ok, la demo funziona benissimo in configurazione A600 con 1 MB Chip RAM. In configurazione A500 con 512k+512k non va. si blocca alla schermata "Loading".



purtroppo in questo momento la demo funziona solo con macchine dotate di un mega di chip ram, il programma supera abbondantemente i 512k, un po' per colpa degli assets un po' per colpa mia che quando scrivo codice penso di avere un server dell sotto il sedere.
Vedrò se riesco a targettare in una prossima release anche questa configurazione, sulla 500 plus dovrebbe andare cosi come nella a1200

Pegasus RyuSei Ken

Post inviati: 8283

Visulizza profilo Messaggio Personale
87.5.28.*** Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Commento 148
Seiya 10 Agosto 2018    12:30:05
Ma questa demo è già compressa? hai provato qualche compressore tipo TitanCrunch che andava di moda ai suoi tempi per far girare demo enormi su Amiga 500?

Post inviati: 303

Visulizza profilo Messaggio Personale
62.94.49.*** Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Commento 149 in risposta al 148 di Seiya
Ozzyboshi_2 10 Agosto 2018    12:46:54
Citazione

Ma questa demo è già compressa? hai provato qualche compressore tipo TitanCrunch che andava di moda ai suoi tempi per far girare demo enormi su Amiga 500?



non c'è nulla di compresso, i dati vengono copiati dal floppy alla chip ram pari pari.
Mi piacerebbe sapere come facevano a comprimere su floppy e poi decomprimere su ram, non ho mai letto nulla a riguardo.
Con un compressore comunque non sono sicuro di risolvere, cosa fanno di preciso i compressori? cosa ti comprimono? quello che cè dentro il floppy? in questo caso me ne faccio poco.
La soluzione migliore sarebbe ottimizzare il codice, per esempio, la parte finale dei credits va a stampare il corvo su nuova memoria, invece potrebbe andare benissimo a sovrascrivere i bitplanes dove c'è il crowman, magari il passaggio dalla demo ai credits non è immediato ma risparmio 40*256*3 bytes e magari rientro nei 512k.
Un'altro modo sarebbe quello di andare a fare una versione apposita che va a scrivere i dati all'indirizzo $C00000 dove inizia la slow ram (che mi sembra di capire su amiga ecs non c'è giusto?)

Pegasus RyuSei Ken

Post inviati: 8283

Visulizza profilo Messaggio Personale
87.5.28.*** Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Commento 150
Seiya 10 Agosto 2018    13:25:41
TitanCruch fa tutto automaticamente perchè è autoestraente. Quando tu avvi la demo dovrebbe scompattarsi e poi avviarsi. Una volta l'avevo provato su una demo. Non mi ricordo è passato tanto tempo, ma dovrebbe funzionare. Fai una prova.

Post inviati: 14

Visulizza profilo Messaggio Personale
95.244.52.*** Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0
Commento 151
Z3k 10 Agosto 2018    15:21:28
Saluto entusiasta l' apparizione in scena dei Bobs!
Credo anche di aver trovato una "feauture" nascosta (non parlare di bug a casa del programmatore!);
Nella parte dei credits il "layer" (o piano o come lo vogliamo chiamare) dello scrolltext è DIETRO all' immagine del corvo;
Immagine
Che poi non mi dispiace affatto esteticamente, magari a discapito della leggibilità.

Non riesco sempre a riprodurre questo "comportamento" ma le condizioni sono generalmente queste;
- da Winuae (non ho ancora provato da 600 e 1200)
- aspettare l'arrivo delle palline rosse
- entrare nella parte dei crediti quando il percorso dei bob è DAVANTI al crowman

Comunque, anche al netto di questa caratteristica nscosta, complimenti!!

Post inviati: 303

Visulizza profilo Messaggio Personale
62.94.49.*** Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Commento 152
Ozzyboshi_2 10 Agosto 2018    16:26:09
oddio hai ragione, mi sono dimenticato un bclr.b #6,BPLCON2 quando carica i credits... stasera faccio la release 1.6.1 che risolverà anche questo

Post inviati: 303

Visulizza profilo Messaggio Personale
62.94.49.*** Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Commento 153
Ozzyboshi_2 11 Agosto 2018    12:26:49
Provate la versione 1.6.1 dovrebbe risolvere alcuni problemi tra cui quello di z3k del corvo il foreground

https://github.com/Ozzyboshi/AmigaDemo_the_crows/r eleases/download/v1.6.1/the_crows_dual_pf_bove_V1. 6.1.adf

consulenza informatica ambito aziendale - appliance sicurezza - ambienti server multipiattaforma - servizi hosting - networking

Post inviati: 2202

Visulizza profilo Messaggio Personale
217.133.133.*** Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:61.0) Gecko/20100101 Firefox/61.0
Commento 154 in risposta al 145 di Ozzyboshi_2
divina 15 Agosto 2018    23:29:14
Citazione

ma ti ha funzionato questo ultimo adf? A dr procton non va e non riesco a circoscrivere il problema


ciao,
appena ho la possibilità provo la 1.6.1 con tutte le configurazioni e ti dico

MorphOS 3.9 PowerMac G5 &&Pegasos2 G4 //AmigaOS4.1 FE - AMiGA4000T&D &&1200 &&600 &&500+ &&500 - Mac Intel &&PowerPc - x64 servers -


Post inviati: 303

Visulizza profilo Messaggio Personale
62.94.49.*** Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Commento 155
Ozzyboshi_2 16 Agosto 2018    18:04:09
non penso avrai problemi, ci sono solo bug fixes di poco rilievo rispetto a 1.6
dove funzionava 1.6 funzionerà a maggior ragione 1.6.1


cmq è strano , la slow ram della 500 parrebbe essere allo stesso indirizzo della fast della mia 600, dal punto di vista software non penso vi siano cambiamenti particolari, potrei veramente fare una versione per fast ram oppure detectare la fast ram ed eventualmente spostarci lo spostabile

Pagine: -1-2-3-4-5-6-7- [8] -

Utenti Online
Utenti registrati: 875 dal 1 Gennaio 2006
di cui online: 0 registrati - 
8 non registrati

Benvenuto all'ultimo utente registrato: zerohatan

© Amigapage 1998 - 2007 - Sito italiano dedicato alla piattaforma Amiga ed evoluzioni varie.
Struttura del sito interamente ideata e realizzata da Marco Lovera e Alessandra Lovera - Tutto il materiale inserito all'interno del sito Ť dei rispettivi autori/creatori.
E' assolutamente vietata la riproduzione o la manipolazione di tutti i contenuti o parte di essi senza l'esplicito consenso degli amministratori e degli autori/creatori.

Eseguito in 0.07954216003418 secondi