Sie sind nicht angemeldet.

Bitte schaut euch auch ruhig den aktuellen Entwicklungsstand der Emu64 Version 5.xx an. Diese läuft schon recht stabil und rückt dem Ende der Portierung (Linux/windows) Woche für Woche immer näher.
https://github.com/ThKattanek/emu64

Kontrollzentrum

Geburtstage

Heute hat niemand Geburtstag.

Neue Benutzer

janney(1. Mai 2018, 08:15)

rba1207(7. April 2018, 10:35)

luck42(16. März 2018, 13:03)

MiniWiesel1512(18. Januar 2018, 18:23)

Shooter(12. Januar 2018, 23:11)

Zur Zeit sind keine Benutzer aktiv.

Statistik

  • Mitglieder: 841
  • Themen: 1107
  • Beiträge: 7108 (ø 1,64/Tag)
  • Wir begrüßen unser neuestes Mitglied: janney

Umfrage

Lieber Besucher, herzlich willkommen bei: Emu64. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Sonntag, 25. September 2011, 23:04

Sprites über Bitmap

Hallo Leute,

Bin am Werkeln mit Sprites und hab ein Quelltext wo ein einfarbiges Sprite (Hires nicht Multicolor) angezeigt wird, klappt auch soweit.
Nun wollte ich gleiches Sprite über ein Bitmap (multicolor) legen. Das Sprite erscheint auch aber total verzerrt also nur Pixelsalat.
Meine Frage ist nun mal schon. Kann ein einfarbiges Sprite einfach so über ein Teil des Screens gelegt werden wo eine multicolor Bitmap angezeigt wird?.

Ich leg hier mal das Stück quelltext rein daß das Sprite anzeigt:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   	lda sprdat+63	; Spritefarbe holen 	
   	sta $d027    	; und setzen
   	lda #$35     	; Y-Position  	
   	sta $d001		
   	
   	lda #$c0     	; Spritepointer Sprite 1 setzen	
   	sta $43f8    	;  $3000 = $c0*$40	
   	
   	lda #$01     	; 	
   	sta $d017    	; X-Zoom
   	sta $d01d    	; Y-Zoom   
   	
   	sta $d015    	; Sprite 1 an
   	
   	ldx #$5f      	
   	txa          	; X-Reg. in Akk
   	sta $d000  	 ; x position setzen


Also es wird die Vic-Bank ab $4000 benutzt, Spritedaten liegen ab $3000 , ich hoffe mal die Adressierung im Quellcode stimmt einigermaßen, es erscheint ja auch was aber eben nicht korrekt. :S

Vielleicht weis einer der Profis hier um guten Rat :)

Gruß
6581freak



EDIT:
Inzwischen hab ich wahrscheinlich des Rätsel Lösung gefunden. Laut Infos aus dem Inet müssen die SpriteDaten innerhalb der gewählten VIC-Bank liegen, was bei mir ja nicht der Fall ist. Spritedaten sind bei $3000 , gewählte VIC-Bank fängt bei $4000 an :wacko:
Das wird jetzt was... muss alle Adressen , Sidtune, Scrollercharset und Bitmap umstellen ;(
Naja...


EDIT2:
Hab das Problem lösen können, teilweise aber auf mir schleierhafte Weise:
Hab jetzt die Sprite-Daten nach $5F00 verschoben. Das liegt ja innerhalb der von mir gewählten VIC-Bank.. so weit ok. Nun stellte mir sich aber das Problem der Adressierung des Spritepointers. Der is ja nur nen Byte breit.
Die berechnete Adresse für den Pointer war aber wie vorgeschrieben:
Adresse Spritedaten / 64 = $17c und das passt ja nicht in ein Byte (Compilierungsmeldung = Number out of Range). Nun hab ich einfach probiert statt $17c nur $7c zu setzen und siehe da es klappt!!!.
Der Grund is mir bis dato unbekannt 8|

Gruß
6581freak

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »6581freak« (27. September 2011, 11:50)


2

Dienstag, 11. Oktober 2011, 21:47

Hiho Forum,

Inzwischen hab ich mich in Sachen Sprites bischen schlauer gemacht und bin nen Stück weitergekommen. Ich und Andreas wollen ja nen kleines Demo basteln , wie schon erwähnt , bin selber in C64-Assembler ja erst der Anfänger aber hab schon einiges dazugelernt.

Möcht hier mal ein Beispiel .. naja eher ein Grundgerüst schon mal zeigen, Bild etc wird schon mal anders werden und vielleicht noch mit Sprites mehr rumhantiert ;)
Rasterbars sind noch nicht stabilisiert und ne Zusatzinfo: vielleicht fällt im Emulator auf daß der Scroller und das Sprite ein kitzekleinen Tick ruckelig sind, was allerdings am C64 selber (von mir getestet) nicht der Fall ist.

index.php?page=Attachment&attachmentID=634

Gruß
6581freak

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »6581freak« (11. Oktober 2011, 21:57)


3

Mittwoch, 12. Oktober 2011, 00:17

cooool. Der Bass rockt auch gut rein :D
Ist die musik selber gemacht?
So n Emu64 sprite könnte ich auch noch beisteuern.. halt in PS gemacht, aber mit 16 farben. Das kann ich dann aber wohl auch als bitmap speichern. keine Ahnung, ob dir das was bringt.

Thomas Daden

* Mugg / Giri *

  • »Thomas Daden« ist männlich
  • Deutschland

Beiträge: 1 700

Wohnort: Langen (Hessen)

Beruf: Techniker

  • Nachricht senden

4

Mittwoch, 12. Oktober 2011, 19:12

@6581freak :
Coole Sache !!!

Bitte weiter machen ;-) ...
Ist die musik selber gemacht?
Ich glaube nicht, irgendwie kommt mir das Lied bekannt vor ;-) ...



Gruß,
Thomas

5

Mittwoch, 12. Oktober 2011, 21:21

Danke Leute :)
Da hat Thomas Recht, Die Musik ist von der HVSC-Collection rausgeholt, hab vom Sids komponieren leider keinen Schimmer (bis jetzt.
Das Sprite hab ich schnell so hingepixelt fürs Testen. Es ist ein Hires (einfarbiges) Sprite und x und y expanded, Multicolor Sprite halbieren sich leider in der Größe, ich wollte mal ein großes haben :).
Die Emu64-Schrift und die Rasterbar hab ich von Andreas bekommen da wir ja beide daran arbeiten. :)

Selmiak danke für dein Vorschlag, Andreas hat auch schon was in Bearbeitung was ich mir noch ansehn muss.
Andreas ist der GFXler :)

Gruß

6581freak

Thomas Daden

* Mugg / Giri *

  • »Thomas Daden« ist männlich
  • Deutschland

Beiträge: 1 700

Wohnort: Langen (Hessen)

Beruf: Techniker

  • Nachricht senden

6

Mittwoch, 12. Oktober 2011, 22:04

Ich vermute mal zu wissen, welches Symbol selmiak vorschwebt und in diesem Fall solltet ihr es vielleicht mal ansehen :-) ...


Grüße,
Thomas

7

Mittwoch, 12. Oktober 2011, 22:14

Seh ich mir gerne an , ist keine Frage :D

  • »Andreas Goller« ist männlich
  • Deutschland

Beiträge: 803

Wohnort: Rastatt

Beruf: Bauzeichner - halbtags

  • Nachricht senden

9

Donnerstag, 13. Oktober 2011, 18:54

Hi Selmiak

Sollen wir dein ganze Bild als Logo machen?
Das wird schwierig, da ich noch nicht weis wie man so grosse Bilder mit Sprits über den Bildschirm bewegt.
Da müsste man Manfred Trenz seine Routine haben für so grosse Sprites.
Aber das behalte ich mir im Auge.

Gruss Andreas
Ich liebe den Sound vom C64´er 8o 8o

Thomas Daden

* Mugg / Giri *

  • »Thomas Daden« ist männlich
  • Deutschland

Beiträge: 1 700

Wohnort: Langen (Hessen)

Beruf: Techniker

  • Nachricht senden

10

Donnerstag, 13. Oktober 2011, 19:02

Logisch meinte er die Logos. :-D ...

Vielleicht kann man das ganze noch etwas verkleinern ?


Grüße,
Thomas

Thorsten Kattanek

Emu64 - Entwickler

  • »Thorsten Kattanek« ist männlich
  • Deutschland

Beiträge: 1 297

Wohnort: Berlin

Beruf: Staatlich geprüfter Techniker in Elektrotechnik / Informatik

  • Nachricht senden

11

Donnerstag, 13. Oktober 2011, 21:56

Spites lassen sich in Y mehr mals anzeigen. z.B. Sprite #0 in RZ 100 dann in 121 und dann wieder in 142 usw. ;)

MfG Thrsten
Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.

12

Freitag, 14. Oktober 2011, 00:31

ich kann auch was kleineres zusammenpixeln, müsste halt nur wissen wie groß ;)

Thorsten Kattanek

Emu64 - Entwickler

  • »Thorsten Kattanek« ist männlich
  • Deutschland

Beiträge: 1 297

Wohnort: Berlin

Beruf: Staatlich geprüfter Techniker in Elektrotechnik / Informatik

  • Nachricht senden

13

Freitag, 14. Oktober 2011, 01:10

Hier hab ich mal schnell was zusammen gecoded, ist aber wirklich dirty und nicht optimiert. Zeigt nur wie man mehr als 8 Sprites auf dem Schirm bringt.

index.php?page=Attachment&attachmentID=638

index.php?page=Attachment&attachmentID=639

MfG Thorsten

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
;////////////////////////////////////////////////
;//                                            //
;// Kleine Demo für Spritemultiplexing         //
;// 								//
;// von Thorsten Kattanek / BLN 13.10.2011     //
;//								//
;////////////////////////////////////////////////

!to "projekte\spritemultiplex\spritemultiplex.prg",cbm

vic = $d000
sprite_me  = vic+$15
sprite_x8  = vic+$10
raster	= vic+$12
spritex = vic+0
spritey = vic+1
counter = $7c

*=$0801

!byte $0b,$08,$da,$07,$9e
!text "2064"

;/////////// CODE /////////////

*=$0810
			
start
		lda #00
		sta $d020
		sta $d021
		jsr $e544
		lda #$80		;Spritepointer auf $2000 setzen
		sta $07f8		;Sprite Pointer #0
		sta $07f9		;Sprite Pointer #1
		sta $07fa		;Sprite Pointer #2
		sta $07fb		;Sprite Pointer #3
		sta $07fc		;Sprite Pointer #4
		sta $07fd		;Sprite Pointer #5
		sta $07fe		;Sprite Pointer #6
		sta $07ff		;Sprite Pointer #7
		lda #$ff		;Sprite0-7
		sta sprite_me     ;einschalten
		ldx #80		;Sprite Positionen für X Setzen
		stx spritex
		ldx #105
		stx spritex+2
		ldx #130
		sty spritex+4
		ldx #155
		stx spritex+6
		ldx #180
		stx spritex+8
		ldx #205
		stx spritex+10
		ldx #230
		stx spritex+12
		ldx #255
		stx spritex+14
		
		sei			;IRQ aus
		
		ldy raster_y	;start Ratserzeile
		dey
		sty raster
		
		lda #$f1		;VIC Raster IRQ einstellen
		sta $d01a
		
		lda $d011
		and #$7f
		sta $d011
		
		lda #0		;Timer ausschalten
		sta $dc0e			
		sta $dd0e
		
		sta counter		

		lda #<irq		;IRQ Vector verbiegen
		sta $0314
		lda #>irq
		sta $0315
		
		cli			;IRQ wieder zulassen
		
			
		jmp*
		
irq
		lda $d019
		sta $d019
		
		ldx counter
		lda raster_y,x
		sta spritey
		sta spritey+2
		sta spritey+4
		sta spritey+6
		sta spritey+8
		sta spritey+10
		sta spritey+12
		sta spritey+14
		
		inx
		cpx #$07
		bne irq1
		ldx #$00	
irq1
		stx counter
		ldy raster_y,x
		dey
		sty raster		
		;inc $d020
		;inc $d021
		jmp $ea81
		
;/////////////////////////
raster_y !byte 50,80,110,141,170,200,230		
;///////// Sprite ////////
* = $2000
!bin "projekte\spritemultiplex\sprite00.prg",,2
Ich möchte gerne die Welt verändern, doch Gott gibt den Quelltext nicht frei.

  • »Andreas Goller« ist männlich
  • Deutschland

Beiträge: 803

Wohnort: Rastatt

Beruf: Bauzeichner - halbtags

  • Nachricht senden

14

Freitag, 14. Oktober 2011, 16:22

Hi Thorsten

Das sieht ja schon einmal gut aus. Aber habe ich dann auch eine Möglichkeit das ganze in Y-Richtung zu bewegen.
Wenn ich die Routine richtig verstehe, kann ich das ganze dann nur in X-Richtung hin und her bewegen.
Aber es wäre doch sehr gut, könnte man das Logo von Selmiak in einer Sinuskurve bewegen.
Wir müssen mal Selmiak fragen ob er das Logo mit dem Windows-Tool "7up Sprite Editor" noch einmal zeichnen kann.
Da kann man einstellen aus wie viel Sprites sein Logo zusammen gesetzt wird.
Das könnte mann dann mal als nächstes Demo proggen :D

Gruss Andreas
Ich liebe den Sound vom C64´er 8o 8o

15

Freitag, 14. Oktober 2011, 18:52

Thorsten hat glatt Zeit für bissl C64 Assembler :D

ich kann auch was kleineres zusammenpixeln, müsste halt nur wissen wie groß
Also was ich bis jetzt mitbekommen haben sind Hires-Sprites (einfarbig wie in meinem Beispiel) 24 Bit Breite plus kann man halt in X und Y nochmal Expandieren. Nimmt man Multicolor Sprites können die nur mehr 12Bit Breite + expanded nehm ich mal an.
Mein Verstand sagt mir um größere Sprites zu machen vielleicht mehrere "aneinanderkleben" und bewegen??.
Muss mich leider noch mehr in das Zeugs einarbeiten, denk mal da gibt es sicher noch einige Möglichkeiten.

@Selmiak: am besten wär du pixelst mal was mit einem SpriteEditor hin ;) SpritePad oder eben wie Andreas meinte 7up Sprite Editor.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »6581freak« (14. Oktober 2011, 21:54)


16

Freitag, 14. Oktober 2011, 19:46

Ich hab mir mal den 7up SE von der csdb geladen. Also da sind ja dann, wenns gut läuft 9 sprites in einem Bild, was issn besser, high res oder MC? Wie zeichnet ma da mit mehr als einer farbe und einer farbe für den hintergrund? Sehr blöd das ganze...
geht auch ne animation?
UNd vor allem, wie viel pixel auf wie viel pixel. Die bitbreite sagt mir ja mal GAR NIX!

17

Freitag, 14. Oktober 2011, 20:14

Den 7up hab ich mir leider noch nicht angsehn. Aber im Spritepad ist ein Kästchen ein Bit. im Hires einfach die Farbe einstellen und mit linker Maustaste Pixel setzten und mit rechter löschen. Im MC Modus muss man halt wenn man die Kästchen stetzt erst die Farbe wählen. Eine davon ist ja die Trasparenz , das ist bei mir immer der Hintergrund z.b schwarz.
Ein Sprite ist normal 24X21 Pixel (Hires) und MC 12X21 , also wenn ich nicht irre ist die Höhe die gleiche.

Ob Highres oder MC willst hängt davon ab ob mehr Farben haben willst oder nen größeres Sprite. Das weis ich selber auch noch nicht genau was wir nehmen wollen :). Laut Andreas sollten es MC-Sprites sein?

  • »Andreas Goller« ist männlich
  • Deutschland

Beiträge: 803

Wohnort: Rastatt

Beruf: Bauzeichner - halbtags

  • Nachricht senden

18

Freitag, 14. Oktober 2011, 20:30

Hi

Genau ein Multicolorsprite. Das sieh besser aus.

Gruss Andreas
Ich liebe den Sound vom C64´er 8o 8o

19

Samstag, 15. Oktober 2011, 01:28

gabs da nicht auch irgend welche beschränkungen, so nur 4 farben pro sprite oder so?

Thomas Daden

* Mugg / Giri *

  • »Thomas Daden« ist männlich
  • Deutschland

Beiträge: 1 700

Wohnort: Langen (Hessen)

Beruf: Techniker

  • Nachricht senden

20

Samstag, 15. Oktober 2011, 09:00

Zitat

Die Verwaltung der Sprites, die Festlegung der Sprite-Eigenschaften (z.B. Farbe, Größe, Kollisions- oder Prioritätsverhalten) und die Steuerung der Sprites erfolgt über den Grafikspeicherchip VIC(-II) im C64. Dieser unterstützt die Darstellung von max. acht Sprites, entweder in einem hochauflösenden einfarbigen Modus (Hires; 24x21 Pixel; eine aus 16 möglichen Farben pro Sprite) oder einem Mehrfarben-Modus (Multicolor; 12x21 Pixel; drei aus 16 möglichen Farben plus Hintergrundfarbe, wobei zwei Farben allen Sprites gemeinsam sind). Durch spezielle Programmiertechniken in Assembler, die den Raster-Interrupt beeinflussen, können mehr als acht Sprites gleichzeitig angezeigt werden. Sprites haben eine Aktionsfläche von 512x256 Pixels, wobei das Standard-Bildschirmfenster eine Teilmenge dieser Aktionsfläche darstellt.
Quelle: http://www.c64-wiki.de/index.php/Sprite