c64 Sprites...
Geizhals » Forum » Programmierung » c64 Sprites... (18 Beiträge, 896 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
..
Re(2): c64 Sprites...
10.01.2012, 10:01:57
aber der Bereich ist doch eher "riskant" weil sehr niedrig im BASIC-RAM ...

Soweit ich mich erinnere, wächst der Basic-Code von unten nach oben - und Variablen von oben nach unten. Das bedeutet IMHO, dass ein niedriger Bereich eher nicht überschrieben werden sollte, solange ich keine neuen Zeilen einfüge.

Der Witz in dem Beispiel ist ja, dass ich gar keine Sprites definiere/poke, sondern das Sprite nur die zufälligen Daten an dem Ort anzeigen lasse. Mir geht es also noch nicht darum, die Sprites zu erzeugen, sondern sie nur zum Anzeigen zu verwenden. Wenn der VIC funktioniert, wie ich es mir denke, müsste das angezeigte Sprite nach Pokereien einfach anders aussehen... Und genauso, wenn die Daten zufällig verändert werden.

Warum ich das so möchte:
Ich schreibe gerade mit cc65 - gemischt C und Assembler.
Die Idee war nun, dass ich ein eigenes Segment definiere (Segmente sind bei CC65 einfach Bereiche für den Linker, die er unterschiedlich behandelt) - mit align=64.
Dort kommen die Sprite-Daten hin - mit
SPRITE1: .BYTE 0,255,...


Durch das Linken wird das Ding Bestandteil des Programms - ausgerichtet an eine durch 64 teilbare Adresse. Ich bräuchte sie daher nicht umverschieben, sondern könnte direkt die durch 64 geteilte Adresse in die nach 2040 schreiben.

Dieses Segment hatte ich als letztes in meinem Programm.

Einen Workaround habe ich inzwischen eh gefunden - ich lasse dieses Segment nun an eine frühere Stelle in das Programm linken. Meine Sprite-Daten starten dann ab $940, also 2368. Bis zum Wert 63 passt ja alles, was man nach 2040 schreibt. Das höchste Sprite ist bei diesem Ansatz also bei Position 4032. Ich kann also 27 Sprites so bequem definieren...

Unklar bleibt mir trotzdem, warum der VIC scheinbar nur 6bits für die Daten des Sprites verwendet. Ausprobiert habe ich alles am VICE-Emulator  - und der ist ja schon seeehr perfekt.





Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
.....
Re(5): c64 Sprites...
LCD
12.01.2012, 13:33:51
Ja aber mein Problem ist ja, dass ich eben keine 16384 Bytes für Sprites zur
Verfügung habe, sondern nur 64*64=4096...

Eben deswegen! Ein Hires C64-Screen hat 9 Kb, Lowres sogar 10 Kb, d.h. du kannst mit dem Screen und Character ROM nur noch 4-5 KB für Sprites verwenden. Dann ist das VIC II RAM aus. Die 16KB wären ein theoretischer Wert wenn man z.B. einen 2 KB großen Char-Screen verwendet, wobei das keinesfalls eine üble Idee bei dem Spiel wäre...
Ich will aber mehrere Sprites hinterlegen für verschiedene Bilder desselben
Sprites, also für die Sprite-Animation.

Ich weiß! Speicher kopieren dauert länger als das umstellen eines Hardware-Pointers, aber wie viele Animphasen braucht das Spiel?

Mir schwebt vor, den Kleinen (er ist 8) für Programmieren zu begeistern.

Sorry, aber Commodere C64 BASIC tut genau das Gegenteil von begeistern, deswegen steigen viele schnell auf ASM um oder lassen das coden und spielen Spiele >:-D. Das schlechte C64 BASIC hat mich damals zu Sinclair getrieben.
Aber 8 ist ein Alter mo man sich noch gut anpassen kann. Das Spiel ist jedenfalls ganz nett. Habe es im vorigen Jahrtausend auf VCS2600 gespielt.
Wir brauchen also Sprites für
- 2 Flugzeuge
- 2 Springer
- 2 Plattformen
- Windfahne

Blöde Frage: Wieso Sprites für Plattformen?
Und Fahnen lassen sich als Char Bitmaps doch genauso gut realisieren, wobei nur das oberste Char verändert werden muss.
Beim C64 lassen sich übrigens Hires und Lores Sprites überlappen, damit kann man sie mit 2 Sprites wie Hires Multicolor erscheinen lassen.
2 Flugzeuge, 2 Springer zu je 2 Sprites=8 Sprites.

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
......
Re(6): c64 Sprites...
12.01.2012, 13:59:54
Die 16KB wären ein theoretischer Wert wenn man z.B. einen 2 KB großen Char-Screen verwendet, wobei das keinesfalls eine üble Idee bei dem Spiel wäre...

Ja, Wir bauen es in Blockgraphik... Wir definieren nicht mal den Zeichensatz um... Wir brauchen ja nur "inverse Spaces" für den braunen Boden |-D.


Ich weiß! Speicher kopieren dauert länger als das umstellen eines Hardware-Pointers, aber wie viele Animphasen braucht das Spiel?

Mal sehen... Noch nicht geklärt |-D.

Auch wenn wir es nicht brauchen:
Lowres sogar 10 K

? Wie kommst auf das? Wenn Du damit Multicolor meinst: Gleich viel Farbram/Screen wie Hires, oder?



Sorry, aber Commodere C64 BASIC tut genau das Gegenteil von begeistern, deswegen steigen viele schnell auf ASM um oder lassen das coden und spielen Spiele

Geh, ich hatte davor den ZX/81... 1 KB Ram (und da war der Bildschirmspeicher auch drin). Der C=64 war super komfortabel im Vergleich |-D

Losgelöst davon war man beim ZX/81 seeehr schnell bei Assembler... Weil die CPU selbst das Videosignal erzeugte, war Basic bei weitem langsamer als am C64. Das Asse-Coden war auch umständlicher als beim C64... Das Programm packte man in REM-Zeilen. Jede konnte 32 Bytes oder so lang werden. Dann brauchtest einen JMP zur nächsten Zeile... Alles mühsam am Zettel ermittelt, weil für einen Assembler kein Platz im RAM war |-D.

Das schlechte C64 BASIC hat mich damals zu Sinclair getrieben.

Und mich hat die feine C=64 Hardware im Vergleich zum ZX/81 schwören lassen, nie wieder Sinclair zu kaufen |-D

Im Ernst, ich halte den C64 für ein Topgerät in den Einstieg.... Eben weil er so einfach ist. Alles ist klar und übersichtlich, es gibt keine Problemfelder wie RaceConditions, ... (wenn wir mal Rasters aussen vor lassen).

Das Basic ist supereinfach (weil super limitiert), die Hardware nett ansteuerbar (zumindest SID und VIC), .... und man bekommt seeehr schnell Erfolgserlebnisse.
Einen Hintergrundschirm (oben blau, unten braun) hast in <10 Mins für den C64 mit FOR/NEXT/PRINT gebaut, bei einem Terminal müsstest Dich erst mal in Curses einarbeiten.

Unser Plan ist jedenfalls:
- BASIC zum einfachen kennenlernen
- Danach C mit cc65 um schnell eine sinnvolle Sprache zu haben.

Blöde Frage: Wieso Sprites für Plattformen?

Natürlich. Auch die Fahne könntest locker mit Blockgraphik machen. Dadurch, dass seeehr wenig bewegte Teile sind, könntest sogar alles mit umdefinierten Zeichen lösen... Wenn Die Flugzeuge halt um 1-7 Bit versetzt auch Platz im Character-Ram finden. Sprites sind halt super-nett weil super-bequem. Die Kollisionsabfrage kriegst auch gleich geschenkt... Drum Sprites.

Nett am Ziel (Sky Diver) ist auch, dass man recht schnell etwas basteln kann, was besser aussieht als am VCS... Gut fürs Selbstbewusstsein |-D. Ausserdem gibts für jede bei uns verwendete Plattform (PCs, Wii, Handies) einen C64-Emulator - man kann es also auch mitnehmen.

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
.......
Re(7): c64 Sprites...
LCD
13.01.2012, 00:07:39
? Wie kommst auf das? Wenn Du damit Multicolor meinst: Gleich viel
Farbram/Screen wie Hires, oder?

Theoretisch nur... Auch wenn der C64 bei Lowres (Ja, Multicolor) euine globale Farbe erzwingt, so wird noch im Farbram eine Farbe pro Character abgespeichert. Ja, ich weiß dass der C64 ein getrenntes FarbRAM hat. Ich rechne es halt immer dazu, Koala-Bilder haben ja 10 kb.

Geh, ich hatte davor den ZX/81... 1 KB Ram (und da war der Bildschirmspeicher
auch drin). Der C=64 war super komfortabel im Vergleich |-D

Ich schreibe aber nicht von dem ZX81 sondern von ZX Spectrum... 48KB RAM, sehr gutes BASIC mit Grafikbefehlen die man am C64 vermisst. Ich will aber nicht flammen ;-). Habe selber einige C64 da.
Das Asse-Coden war auch umständlicher als beim C64... Das Programm packte man
in REM-Zeilen. Jede konnte 32 Bytes oder so lang werden. Dann brauchtest einen
JMP zur nächsten Zeile... Alles mühsam am Zettel ermittelt, weil für einen
Assembler kein Platz im RAM war |-D.

Ich habe das ZX ASZMIC ROM, das ist da viel bequemer, aber wie gesagt, der Spectrum ist mir lieber. Für den ZX81 habe ich aber auch 64 KB Erweiterung.
Einen Hintergrundschirm (oben blau, unten braun) hast in <10 Mins für den C64
mit FOR/NEXT/PRINT gebaut, bei einem Terminal müsstest Dich erst mal in Curses einarbeiten.

Beim Spectrum dauert das keine 2 Minuten sowas zu programmieren.
Unser Plan ist jedenfalls:
- BASIC zum einfachen kennenlernen
- Danach C mit cc65 um schnell eine sinnvolle Sprache zu haben.

Ja, ist eine gute Idee. Für den Spectrum gibt es auch das ANSI C und mit Z88dk, aber ich bevorzuge den Crosscompiler von Boriel, der das BASIC stark erweitert, z.B. um binäre Operationen. Übrigens plant Boriel ab release 2.0 auch andere Plattformen zu unterstützen, darunter den C64.
Sprites sind halt super-nett weil super-bequem. Die Kollisionsabfrage kriegst
auch gleich geschenkt... Drum Sprites.

Kollision der Fahnenstange braucht man nicht, und wenn der Bub programmieren lernen soll, sollte er auch die Tricks beherrschen. Aber am Anfang kann man es mit Sprites lösen und später optimieren.
Nett am Ziel (Sky Diver) ist auch, dass man recht schnell etwas basteln kann,
was besser aussieht als am VCS... Gut fürs Selbstbewusstsein |-D.

Wenn es nicht so wäre, würde ich enttäuscht sein ;-)
Nur echte Hardware rult.
Es gibt da irgendwo eine C64 Programmierumgebung am PC...

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
........
Re(8): c64 Sprites...
13.01.2012, 07:23:11

Theoretisch nur... Auch wenn der C64 bei Lowres (Ja, Multicolor) euine globale Farbe erzwingt, so wird noch im Farbram eine Farbe pro Character abgespeichert. Ja, ich weiß dass der C64 ein getrenntes FarbRAM hat. Ich rechne es halt immer dazu, Koala-Bilder haben ja 10 kb.

Ich stehe gerade auf der Leitung:
Bei LowRes hast:
- 8KB Bildschirmspeicher für die 160x200 Punkte/2 bits pro Pixel.
- 1KB FarbRam
Der Zeichenalgo war so ca:
- "00" = Hintergrundfarbe
- "11" = Vordergrundfarbe
- "01" = 4 Bits aus dem passenden Byte aus dem Farbram
- "10" = 4 andere Bits aus dem passenden Byte aus dem Farbram

Bei HiRes hast:
- 8KB Bildschirmspeicher für die 160x200 Punkte/2 bits pro Pixel.
- 1KB FarbRam
Der Zeichenalgo war so ca:
- "0" = Hintergrundfarbe
- "1" = Vordergrundfarbe aus dem Farbram (1 Byte für 8x8 Pixel)

IMHO braucht LoRes dasselbe Ram wie HighRes |-D






Beim Spectrum dauert das keine 2 Minuten sowas zu programmieren.

Ebenfalls ohne Flamen zu wollen: Farben am Spectrum sind _hart_ bei Graphik... Die Farbgestaltung mit dem brutalen Farbraster ist schlimm.... Das das Basic dafür am Speccy netter war, stimmt aber auch. Nur wer nutzt schon Basic? Praktischer fand ich da auf den Sinclairs schon den Z80. Vom Z80 zu 6502 wechseln ist mir vorgekommen, wie von einer Supermaschine auf ein Steinzeittrum zu wechseln |-D.



Kollision der Fahnenstange braucht man nicht, und wenn der Bub programmieren lernen soll, sollte er auch die Tricks beherrschen

Keine Frage. Derzeit brauche ich aber etwas, was _schnell_ klappt. Die Aufmerksamkeitsspanne ist da bei neuen "Spielsachen" gering. Beispielsweise Lego Mindstorms (mit 6 bekommen): 3 Tage Tag und Nacht genutzt, dann wochenlang weggeräumt :-/.
Wir brauchen also etwas, was täglich Fortschritte macht. Für die Fahne als Zeichen würde ich eine Datenstruktur anlegen, die einfach über den Bildschirm geschrieben wird... zB ein Array von char* pro Fahnenposition. Oder in Basic halt mit 2dimensionalen Strings arbeiten. Wenn wir das als Sprite lösen, brauchen wir mehrdimensionale Felder noch nicht kennen |-D. Ein weiterer Vorteil der Sprites ist, dass sich die 1:1 in C übernehmen lassen. Das Umlernen wird leichter. Alternativ könnte man die Fahne mit einem  umdeklarierten Zeichen erzeugen. Das wäre auch einfach - dann ist sie aber arg klein.

Ausserdem ist ja im Auge zu halten, was er kann... Und das ist noch wenig... Es ist ja schon das Konzept der Variablen neu... Variable kennen sie ja noch nicht mal aus Mathe in der Schule |-D. Derzeit kann er
- NEW/CLR
- "normale"/nicht dimensionierte Variablen (Also X, X% und X$)
- GOTO
- IF/THEN
- LIST
- PRINT
- GET/INPUT
- RND(0)
- FOR/TO/STEP

Dringend benötigte Gschichten wie PEEK, POKE, AND, OR - oder auch nur die Binäraritmhetik - kann er noch nicht. Das werden wir uns am Wochenende noch ansehen.


Es gibt da irgendwo eine C64 Programmierumgebung am PC...

Wir werden dann eben cc65 am PC nutzen. Rennt (auch) unter Linux. Ist ein seeehr cleverer c-Compiler für diverse 65xx-Maschinen, hat einen mächtigen Assembler und Linker dabei, ... http://www.cc65.org/

Programmieren wird also bald aussehen wie es soll: Auf einem ASCII-Terminal (oder in einem x-Term) mit vim |-D

13.01.2012, 07:40 Uhr - Editiert von kombipaket, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung