EDIT by FXXS: Threadsplit, stammte aus: C65 Next Generation MEGA65
Hmmm... Würde ich jetzt nicht so sagen. Im Grunde genommen hat man beim Amiga zum Malen zumeist als Bildschirmmodus nur eine 320x200x16 Bitmap. Mit der Copperliste kann man dann mehr Farben hervorzaubern, wenn man will, Double-Buffering realisieren usw., so daß man keinen Rasterinterrupt mehr braucht, sondern nur noch den VBL als Timer für Sound, Tastaturbearbeitung... Das war's dann mehr oder weniger. Das einzig Schwierige für mich war stets nur der Sound, aber das liegt daran, daß ich von Tonerzeugung keine Ahnung habe.
Sorry, aber mich regt es echt auf, dass dieser Unsinn immer wieder verbreitet wird, und die Amiga Community als ein Haufen fauler Trottel dasteht.
Ist jetzt ein längerer Text geworden, aber ich werde den immer wieder mir hier rauskopieren und posten in Zukunft wenn wieder jemand diesen Quark schreibt.
Also mal Fakten...
Situation: Ich bin Anfänger, und will auf der für mich neuen Zielplattform ein Spiel coden mit einem statischen Screen (also kein Scrolling) der sich aus einem Datenfeld ausgelesenen irgendwie hingezeichneten Grafikelementen ("tiles" oder "chars") zusammensetzt, und bewegten Männekens (Sprites oder BOBs).
C64
System/Screen vorbereiten
- Eigentlich nix. Eventuell selber Routine basteln, um 1000 x Leerzeichen zu setzen. In Basic sogar nur ->Print "Herzchen" machen.
Tiles
entweder...
- im Charpad mir ein paar Chars malen aus denen ich meine Grafikelemente zusammensetzen will. Diese dann includen und dann Register setzen auf das Charset.
- Grafikzeichen für meine Tiles in den Screen ab $0400 poken.
- oder noch einfacher, PETSCII verwenden und direkt poken. Schaut für den Anfang auch gut aus (geht sogar in BASIC direkt).
Sprites
- im Spritepad Sprites malen, includen.
- gewünschte Sprites anmachen in einem Register.
- Pointerregister auf die Sprites setzen
- Farben einstellen in Registern
- Koordinaten setzen. hier ist auch die einzige Schwierigkeit mit dem MSB, weil wir nur 256 Werte für 320 Pixel breite haben.
Fertig. Hab ich damals als ich das erste Mal ASM am C64 gemacht habe an einem Abend rausgehabt.
Amiga (500 OCS)
System/Screen vorbereiten:
- OS/Interrupts abschalten
- DMACON Register für alle Bereiche richtig setzen
- erstmal alle Sprites mit Pointern auf ein Nullsprite belegen, falls an. Am besten aber eh auslassen, weil Sprites unflexibel sind und kacke ausschauen auf dem Amiga wenn man sich nicht auskennt.
- Entscheidung wieviele Bitplanes/Farben verwendet werden sollen.
- Bitplanepointer setzen.
- Interleaved oder nicht? Wenn ja (was angeraten ist!), Bitplane Modulos korrekt einstellen sonst Grafikmüll.
- Screengröße, DMA Fetch Start usw einstellen, wenn man mag.
- Bitplanes löschen indem man durch alle Bytes ("chars" gibt es nicht) durchgeht und auf Null setzt.
Tiles:
- Grafik in Grafikprogramm erstellen
- Grafik umwandeln in Konvertertool auf normalerweise interleaved Format
- Blit-Modulos für interleaved ausrechnen und dann einstellen für Source und Destination.
- Minterm einstellen auf Raw Blit
- StartAdresse samt korrekt ausgerechneten Modulo für die Grafiksource Tiles
- Blit-Source und -Destination ausrechnen. Das sind Bytes, also ausrechnen wo genau auf den vorher gesetzten Bitplanes das ist. Modulos und Interleaved Planes hierbei nicht vergessen, sonst landet man in der falschen Plane und hat falsche Farben und generell nur Grafikmüll.
- Blitsize ausrechnen per Formel.
"Sprites" (eigentlich BOBs)
Da glaub ich die wenigsten mit den beschissenen Amiga Sprites (8 Stück, 16 Pixel breit, 3 Farben plus transparent) arbeiten wollen, wird man wohl BOBs verwenden wollen.
Dazu braucht man alles was in "Tiles" schon drinsteht, und außerdem noch...
- Savebuffer für jeden einzelnen BOB anlegen für die Hintergrundgrafik über die wir rübermalen
- relativ komplexe Routine erstellen, die 1. Hintergrundgrafik restored 2. Hintergrundgrafik rettet bevor wir blitten und 3. dann den BOB blittet.
- dabei aber auch Minterm einstellen für Maskenoperationen,
- korrekte Sources und Destinations einstellen
- den Barrel Shifter im Blitter einstellen, sonst können wir BOBs nur auf Wordgrenzen setzen
- und sicher noch so ein zwei andere Sachen die ich grad vergessen habe.
Da bin ich ne ganze Weile dran gesessen, bis das alles saß. Und ich kann mir gut vorstellen, dass da echt nicht jeder drauf Bock hat sich durchzubeißen.
Also, sorry, was du da schreibst stimmt einfach schon rein faktisch nicht.