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.

  • »Andreas Goller« ist männlich
  • »Andreas Goller« ist der Autor dieses Themas
  • Deutschland

Beiträge: 803

Wohnort: Rastatt

Beruf: Bauzeichner - halbtags

  • Nachricht senden

1

Freitag, 21. Oktober 2011, 21:00

Fertige Routine einer Sinusfahrt mit Sprites

Hier eine fertige Routine für eine Sinusfahrt mit fünf Sprites.

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
;////////////////////////////////////////////////
;//                                        	//
;// Kleines Demo für den Emu64             	//
;// 						        	//
;////////////////////////////////////////////////

!to "Projekte\Codes\Sprite-Demo.prg",cbm	
!cpu 6502

*=$0801				; Basic-Start
!byte $0b,$08,$d8,$07,$9e	; Werte für den Sysbefehl in einer Basic-Zeile
!convtab pet			; CBM-Zeichen Konvertierung
!text "4096"			; Startadresse (4096 = $1000)

;--------- Variabeln

Zeropage_Sprite_N	 = $02
Zeropage_Pointer_1  	= $17
Zeropage_Pointer_2  	= $19

Clr				 = $e544
IRQ_Interrupt		 = $ea31
IRQ_Vector			 = $0314 
CIA_Control_Register	 = $dc0d

VIC_Border_Color    	= $d020
VIC_Background_Color	= $d021
VIC_Charset_Multicolor_1= $d022
VIC_Charset_Multicolor_2= $d023

VIC_Rasterzeile		 = $d012
VIC_Flag_Register	 = $d019
VIC_Mask_Register	 = $d01a

;--------- Spritesvariabeln

VIC_Sprite_X_Pos    	= $d000
VIC_Sprite_Y_Pos    	= $d001
VIC_Sprite_X_Extend 	= $d010
VIC_Sprite_Enable   	= $d015
VIC_Control         	= $d016
VIC_Memory_Control  	= $d018
VIC_Sprite_Multicolor   = $d01c
VIC_Sprite_Multicolor_1 = $d025
VIC_Sprite_Multicolor_2 = $d026
VIC_Sprite_Color    	= $d027

Sprite_Ram			 = $3000
Sprite_Pointer		 = $07f8		; für Sprite 1
Sprite_Pointer_Base 	= $c0		; Sprites liegen bei der Adresse MEM (Bildschirmspeicher+$03f8+Spritenummer)*64 
							; Die Adresse des Bildschirmspeicherwird durch die gewählte VIC-Bank ($dd00 und $d018 festgelegt)
Sprite_Number       	= $05		; Anzahl der Sprites		 							

;------------------------------------------------------------
; Macro  
; SpriteLine - für eine bessere Darstellung der Sprites im Code
; von "ddrv.a" by Marco Baye
;------------------------------------------------------------
		
		!macro SpriteLine .v {
		!by .v>>16, (.v>>8)&255, .v&255
		}
;------------------------------------------------------------


;--------- Hauptprogramm

*=$1000					; Startadresse
			
		jsr Clr			; Bildschirmlöschen

;--------- Adresse von vom Spriteblock in Zerropage 1 speichern
      	
      		lda #<Sprites
      		sta Zeropage_Pointer_1  
      		lda #>Sprites
      		sta Zeropage_Pointer_1 + 1
      	
      		jsr CopySprites			; Sprites an die richtige Speicherstelle kopieren
      	
      		lda #$00
      		sta VIC_Border_Color
      		sta VIC_Background_Color
      	
;--------- Sprites einschalten

		ldx #$00				; Zähler auf $00
		lda #Sprite_Pointer_Base	; Spriteblockpointer
spr		sta Sprite_Pointer,x
		clc
		adc #$01				; Akku um 1 erhöhen
		inx
		cpx #$05				; schon alle 5 Sprites?
		bne spr				; nein dann zu spr
		
		lda #%00011111		; Alle 5 Sprites als Multicolor
		sta VIC_Sprite_Enable
		sta VIC_Sprite_Multicolor
		
		lda #$0e				; blau
		sta VIC_Sprite_Multicolor_1
		lda #$01				; hellblau
		sta VIC_Sprite_Multicolor_2
		lda #$06				; weiß
		sta VIC_Sprite_Color
		sta VIC_Sprite_Color+1
		sta VIC_Sprite_Color+2
		sta VIC_Sprite_Color+3
		sta VIC_Sprite_Color+4
		 
;------------------------------------------------------------
;IRQ-Routine für das kleine Demo
;------------------------------------------------------------
     		
     		sei
     		lda #<int
     		sta IRQ_Vector
     		lda #>int
     		sta IRQ_Vector+1
     		
     		lda #$00
     		sta VIC_Rasterzeile 	;rasterline 0 setzen
     		
     		lda #$7f
     		sta CIA_Control_Register
     		lda #$01
     		sta VIC_Flag_Register
     		sta VIC_Mask_Register
     		cli
     		
     		jmp *

;------------------------------------------------------------
;eigene IRQ
;------------------------------------------------------------

int
		lda VIC_Flag_Register
     		and #$01
     		sta VIC_Flag_Register
     		bne irq
     		jmp IRQ_Interrupt
     	
irq	  	lda #$00        			;Interrupt auf Rasterzeile 0 setzen
     		sta VIC_Rasterzeile

		jsr Move_Sprite

		jmp IRQ_Interrupt


;--------------------------------------------------------------------
;Spritebewegungroutine in einer Sinuskurve von Innovating  / Forum64
;--------------------------------------------------------------------
 
Move_Sprite
		ldy #$00
zaehler	ldx #$ff			; Zähler für die Tabelle
	
		lda #$00
		sta Zeropage_Sprite_N	; Zwischenspeicher für die Sprites 1-5
		
loop_2	lda xwalk,x			; Tabelle der X-Koordinate für die Sinuskurve 
		asl				; Der Wert mal 2 nehmen. Damit die Sprites über den ganzen Bildschirm huschen
		sta VIC_Sprite_X_Pos,y
		
		bcc loop_1			; Spring sobald das Carry-Flag gelöscht ist ( Sprite unter 255 Pixel X-koordinate)
		lda Zeropage_Sprite_N
		ora Tab_A,y
		sta Zeropage_Sprite_N
		
loop_1	lda Zeropage_Sprite_N	
		sta VIC_Sprite_X_Extend	; Setzt das Bit für für die Darstellung des Sprites über 255 Pixel  
		
		lda ywalk,x			; Tabelle der Y-Koordinate für die Sinuskurve
		clc
		adc #$15			; Festwert für die Y-Richtung damit man die Figur besser zentieren kann auf den Bildschirm
		sta VIC_Sprite_Y_Pos,y		
		
		txa
		clc
		adc #$08			; Abstände der Sprites untereinander
		
		tax				; nächster Sprite holen
		iny
		iny
		
		lda Zeropage_Sprite_N		
		sta VIC_Sprite_X_Extend
		cpy #$0a			; Anzahl der Sprites schon erreicht
		bne loop_2
		
		inc zaehler+1		; Zähler um 1 erhöhen
		rts
			      	
;------------------------------------------------------------
;Kopierroutine für die Sprites
;------------------------------------------------------------

!zone CopySprites
CopySprites
      	ldy #$00
      	ldx #$00
      	
      	lda #<Sprite_Ram					; Lo-Byte für Speicheradresse der Sprites
      	sta Zeropage_Pointer_2
      	lda #>Sprite_Ram					; High-Byte für Speicheradresse der Sprites
 	 	sta Zeropage_Pointer_2 + 1
      	
      	;4 sprites pro loop
.SpriteLoop
      	lda (Zeropage_Pointer_1),y
      	sta (Zeropage_Pointer_2),y
      	iny
      	bne .SpriteLoop
      	inx
      	inc Zeropage_Pointer_1+1
      	inc Zeropage_Pointer_2+1
      	cpx #Sprite_Number					;Anzahl der Sprites 
      	bne .SpriteLoop

      	rts
 
;--------- Tabelle für die X-Koordinate der Sprites 1-8 die größer X-Koordinate 255 sind

Tab_A	!byte $01, $00, $02, $00, $04, $00, $08, $00, $10, $00, $20, $00, $40, $00, $80

;--------- X-Koordinaten der Sinuskurve
xwalk
		!byte $0f,$0f,$0f,$0f,$0f,$0f
		!byte $0f,$0f,$10,$10,$11,$11
		!byte $11,$12,$12,$13,$14,$14
		!byte $15,$16,$16,$17,$18,$19
		!byte $1a,$1b,$1c,$1d,$1e,$1f
		!byte $20,$21,$22,$23,$25,$26
		!byte $27,$28,$2a,$2b,$2c,$2e
		!byte $2f,$31,$32,$34,$35,$37
		!byte $38,$3a,$3b,$3d,$3e,$40
		!byte $41,$43,$45,$46,$48,$4a
		!byte $4b,$4d,$4e,$50,$52,$53
		!byte $55,$57,$58,$5a,$5c,$5d
		!byte $5f,$60,$62,$64,$65,$67
		!byte $68,$6a,$6b,$6d,$6e,$70
		!byte $71,$73,$74,$76,$77,$78
		!byte $7a,$7b,$7c,$7e,$7f,$80
		!byte $81,$82,$83,$84,$86,$87
		!byte $88,$89,$89,$8a,$8b,$8c
		!byte $8d,$8e,$8e,$8f,$90,$90
		!byte $91,$91,$92,$92,$93,$93
		!byte $93,$94,$94,$94,$94,$94
		!byte $94,$94,$94,$94,$94,$94
		!byte $94,$94,$94,$94,$93,$93
		!byte $92,$92,$92,$91,$91,$90
		!byte $8f,$8f,$8e,$8d,$8d,$8c
		!byte $8b,$8a,$89,$88,$87,$86
		!byte $85,$84,$83,$82,$81,$80
		!byte $7e,$7d,$7c,$7b,$79,$78
		!byte $77,$75,$74,$72,$71,$6f
		!byte $6e,$6c,$6b,$69,$68,$66
		!byte $65,$63,$62,$60,$5e,$5d
		!byte $5b,$59,$58,$56,$55,$53
		!byte $51,$50,$4e,$4c,$4b,$49
		!byte $47,$46,$44,$43,$41,$3f
		!byte $3e,$3c,$3b,$39,$38,$36
		!byte $35,$33,$32,$30,$2f,$2d
		!byte $2c,$2b,$29,$28,$27,$25
		!byte $24,$23,$22,$21,$20,$1f
		!byte $1d,$1c,$1b,$1a,$1a,$19
		!byte $18,$17,$16,$15,$15,$14
		!byte $13,$13,$12,$12,$11,$11
		!byte $10,$10,$10,$0f,$0f,$0f
		!byte $0f,$0f,$0f,$0f

;--------- Y-Koordinaten der Sinuskurve
ywalk
		!byte $3c,$3c,$3c,$3c,$3d,$3e
		!byte $3f,$41,$42,$44,$46,$48
		!byte $4a,$4c,$4f,$52,$54,$57
		!byte $5a,$5d,$60,$63,$66,$68
		!byte $6b,$6e,$71,$74,$76,$79
		!byte $7b,$7e,$80,$82,$84,$85
		!byte $87,$88,$89,$8a,$8b,$8b
		!byte $8b,$8b,$8b,$8b,$8b,$8a
		!byte $89,$88,$86,$85,$83,$81
		!byte $7f,$7d,$7b,$78,$75,$73
		!byte $70,$6d,$6a,$67,$64,$61
		!byte $5f,$5c,$59,$56,$53,$51
		!byte $4e,$4c,$49,$47,$45,$43
		!byte $42,$40,$3f,$3e,$3d,$3c
		!byte $3c,$3c,$3c,$3c,$3c,$3c
		!byte $3d,$3e,$3f,$41,$42,$44
		!byte $46,$48,$4a,$4c,$4f,$52
		!byte $54,$57,$5a,$5d,$60,$63
		!byte $66,$68,$6b,$6e,$71,$74
		!byte $76,$79,$7b,$7e,$80,$82
		!byte $84,$85,$87,$88,$89,$8a
		!byte $8b,$8b,$8b,$8b,$8b,$8b
		!byte $8b,$8a,$89,$88,$86,$85
		!byte $83,$81,$7f,$7d,$7b,$78
		!byte $75,$73,$70,$6d,$6a,$67
		!byte $64,$61,$5f,$5c,$59,$56
		!byte $53,$51,$4e,$4c,$49,$47
		!byte $45,$43,$42,$40,$3f,$3e
		!byte $3d,$3c,$3c,$3c,$3c,$3c
		!byte $3c,$3c,$3d,$3e,$3f,$41
		!byte $42,$44,$46,$48,$4a,$4c
		!byte $4f,$52,$54,$57,$5a,$5d
		!byte $60,$63,$66,$68,$6b,$6e
		!byte $71,$74,$76,$79,$7b,$7e
		!byte $80,$82,$84,$85,$87,$88
		!byte $89,$8a,$8b,$8b,$8b,$8b
		!byte $8b,$8b,$8b,$8a,$89,$88
		!byte $86,$85,$83,$81,$7f,$7d
		!byte $7b,$78,$75,$73,$70,$6d
		!byte $6a,$67,$64,$61,$5f,$5c
		!byte $59,$56,$53,$51,$4e,$4c
		!byte $49,$47,$45,$43,$42,$40
		!byte $3f,$3e,$3d,$3c

;--------- Sprite Block - Das ist hier nur zur Veranschaulichung. Normal würde ich eine Spritedatei hochladen lassen
 
Sprites	
	; Multicolor Buchstabe " E "
	; 	         	765432107654321076543210
		+SpriteLine %..####################.#	;01
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;02
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;03
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;04
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;05
		+SpriteLine %..##.#.##.#.#.#.#.#.#.#.	;06
		+SpriteLine %..##.#.##...............	;07
		+SpriteLine %..##.#.##...............	;08
		+SpriteLine %..##.#.#######.#........	;09
		+SpriteLine %..##.#.#.#.#.##.........	;10
		+SpriteLine %..##.#.#.#.#.##.........	;11
		+SpriteLine %..##.#.#.#.#.##.........	;12
		+SpriteLine %..##.#.##.#.#.#.........	;13
		+SpriteLine %..##.#.##...............	;14
		+SpriteLine %..##.#.##...............	;15
		+SpriteLine %..##.#.###############.#	;16
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;17
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;18
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;19
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;20
		+SpriteLine %...##.#.#.#.#.#.#.#.#.#. 	;21
		!byte $00

	; Multicolor Buchstabe " M "
	; 	         	765432107654321076543210
		+SpriteLine %..######.#.........#.##.	;01
		+SpriteLine %..##.#.##.......######.#	;02
		+SpriteLine %..##.#.#.##...####.#.##.	;03
		+SpriteLine %..##.#.#.##...##.#.#.##.	;04	
		+SpriteLine %..##.#.#.#.###.#.#.#.##.	;05
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;06
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;07
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;08
		+SpriteLine %..##.#.###.#.#.#.#.#.##.	;09
		+SpriteLine %..##.#.##.##.##..#.#.##.	;10
		+SpriteLine %..##.#.##.#.#.#.##.#.##.	;11
		+SpriteLine %..##.#.##.......##.#.##.	;12
		+SpriteLine %..##.#.##.......##.#.##.	;13
		+SpriteLine %..##.#.##.......##.#.##.	;14
		+SpriteLine %..##.#.##.......##.#.##.	;15
		+SpriteLine %..##.#.##.......##.#.##.	;16
		+SpriteLine %..##.#.##.......##.#.##.	;17
		+SpriteLine %..##.#.##.......##.#.##.	;18
		+SpriteLine %..##.#.##.......##.#.##.	;19
		+SpriteLine %..##.#.##.......##.#.##.	;20
		+SpriteLine %..##.#.##.......##.#.##.	;21
		!byte $00

	; Multicolor Buchstabe " U "
	; 	         	765432107654321076543210
		+SpriteLine %..##.#.#.#......######.#	;01
		+SpriteLine %..##.#.##.......##.#.##.	;02
		+SpriteLine %..##.#.##.......##.#.##.	;03
		+SpriteLine %..##.#.##.......##.#.##.	;04
		+SpriteLine %..##.#.##.......##.#.##.	;05
		+SpriteLine %..##.#.##.......##.#.##.	;06
		+SpriteLine %..##.#.##.......##.#.##.	;07
		+SpriteLine %..##.#.##.......##.#.##.	;08
		+SpriteLine %..##.#.##.......##.#.##.	;09
		+SpriteLine %..##.#.##.......##.#.##.	;10
		+SpriteLine %..##.#.##.......##.#.##.	;11
		+SpriteLine %..##.#.##.......##.#.##.	;12
		+SpriteLine %..##.#.##.......##.#.##.	;13
		+SpriteLine %..##.#.##.......##.#.##.	;14
		+SpriteLine %..##.#.##.......##.#.##.	;15
		+SpriteLine %..##.#.#.#######.#.#.##.	;16
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;17
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;18
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;19
		+SpriteLine %....##.#.#.#.#.#.#.##...	;20
		+SpriteLine %......#.#.#.#.#.#.#.....	;21
		!byte $00
	
	; Multicolor Buchstabe " 6 "
	; 	         	765432107654321076543210
		+SpriteLine %....##################.#	;01
		+SpriteLine %....##.#.#.#.#.#.#.#.##.	;02
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;03
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;04
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;05
		+SpriteLine %..##.#.#.##.#.#.#.#.#.#.	;06
		+SpriteLine %..##.#.#.##.............	;07
		+SpriteLine %..##.#.#.##.............	;08
		+SpriteLine %..##.#.#.##.............	;09
		+SpriteLine %..##.#.#.###########....	;10
		+SpriteLine %..##.#.#.#.#.#.#.#.###.#	;11
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;12
		+SpriteLine %..##.#.#.##.#.#.#..#.##.	;13
		+SpriteLine %..##.#.#.##.....##.#.##.	;14
		+SpriteLine %..##.#.#.##.....##.#.##.	;15
		+SpriteLine %..##.#.#.##.....##.#.##.	;16
		+SpriteLine %..##.#.#.#.#######.#.##.	;17
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;18
		+SpriteLine %....##.#.#.#.#.#.#.##...	;19
		+SpriteLine %.....##.#.#.#.#.#.#.....	;20
		+SpriteLine %........................ 	;21
  		!byte $00
 	
 	; Multicolor Buchstabe " 4 "
	; 	         	765432107654321076543210
		+SpriteLine %..######.#.........#.##.	;01
		+SpriteLine %..##.#.##.......######.#	;02
		+SpriteLine %..##.#.##.......##.#.##.	;03
		+SpriteLine %..##.#.##.......##.#.##.	;04
		+SpriteLine %..##.#.##.......##.#.##.	;05
		+SpriteLine %..##.#.##.......##.#.##.	;06
		+SpriteLine %..##.#.##.......##.#.##.	;07
		+SpriteLine %..##.#.#.#########.#.##.	;08
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;09
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;10
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;11
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;12
		+SpriteLine %...##.#.#.#.#..#.#.#.##.	;13
		+SpriteLine %..............##.#.#.##.	;14
		+SpriteLine %..............##.#.#.##.	;15
		+SpriteLine %..............##.#.#.##.	;16
		+SpriteLine %..............##.#.#.##.	;17
		+SpriteLine %..............##.#.#.##.	;18
		+SpriteLine %..............##.#.#.##.	;19
		+SpriteLine %...............#.#.#.##.	;20
		+SpriteLine %.................#.#.##.	;21
		!byte $00


Wie immer komme ich mit dem Quellcode-Editor nicht zu streich.
So und hier die Datei dazu für den Relaunch64 mit ACME als Compiler
index.php?page=Attachment&attachmentID=648

Und hier das fertig Programm für den Emu64 oder den echten C64´er
index.php?page=Attachment&attachmentID=649

Viel Spass damit

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

2

Samstag, 22. Oktober 2011, 00:01

Hey hey, du wirst ja immer besser, das sieht super aus. Sieht auch flüssig aus, nur wenn man ganz genau hinschaut sieht man n bissl was ruckeln, bei der großen Steigung in der Mitte. Und dass es verkehrt rum zurück geht sieht verwirrend aus. 46UME kenne ich net ;) Kann man das eventuell stoppen und dann mit dem E anfangen zurückzufahren?

Thomas Daden

* Mugg / Giri *

  • »Thomas Daden« ist männlich
  • Deutschland

Beiträge: 1 700

Wohnort: Langen (Hessen)

Beruf: Techniker

  • Nachricht senden

3

Samstag, 22. Oktober 2011, 08:35

Hi,

sieht gut aus !!!

Wie immer komme ich mit dem Quellcode-Editor nicht zu streich.


Ich probiere es mal mit deinem Quellcode ... aus dem Editor (PSPad) mit STRG + A alles markiert. Im Forumseditor auf Quellcode und mit STRG + V hineinkopiert. BB Code vor und hinter dem Quellcode getippsert... und fertig.

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
;////////////////////////////////////////////////
;//                                            //
;// Sinus - Sprites                            //
;// 						            //
;////////////////////////////////////////////////

!to "Projekte\Codes\Sprite-Demo.prg",cbm	
!cpu 6502

*=$0801				; Basic-Start
!byte $0b,$08,$d8,$07,$9e	; Werte für den Sysbefehl in einer Basic-Zeile
!convtab pet			; CBM-Zeichen Konvertierung
!text "4096"			; Startadresse (4096 = $1000)

;--------- Variabeln

Zeropage_Sprite_N	 = $02
Zeropage_Pointer_1      = $17
Zeropage_Pointer_2      = $19

Clr				 = $e544
IRQ_Interrupt		 = $ea31
IRQ_Vector			 = $0314 
CIA_Control_Register	 = $dc0d

VIC_Border_Color        = $d020
VIC_Background_Color    = $d021
VIC_Charset_Multicolor_1= $d022
VIC_Charset_Multicolor_2= $d023

VIC_Rasterzeile		 = $d012
VIC_Flag_Register	 = $d019
VIC_Mask_Register	 = $d01a

;--------- Spritesvariabeln

VIC_Sprite_X_Pos        = $d000
VIC_Sprite_Y_Pos        = $d001
VIC_Sprite_X_Extend     = $d010
VIC_Sprite_Enable       = $d015
VIC_Control             = $d016
VIC_Memory_Control      = $d018
VIC_Sprite_Multicolor   = $d01c
VIC_Sprite_Multicolor_1 = $d025
VIC_Sprite_Multicolor_2 = $d026
VIC_Sprite_Color        = $d027

Sprite_Ram			 = $3000
Sprite_Pointer		 = $07f8		; für Sprite 1
Sprite_Pointer_Base     = $c0		; Sprites liegen bei der Adresse MEM (Bildschirmspeicher+$03f8+Spritenummer)*64 
							; Die Adresse des Bildschirmspeicherwird durch die gewählte VIC-Bank ($dd00 und $d018 festgelegt)
Sprite_Number           = $05		; Anzahl der Sprites		 							

;------------------------------------------------------------
; Macro  
; SpriteLine - für eine bessere Darstellung der Sprites im Code
; von "ddrv.a" by Marco Baye
;------------------------------------------------------------
		
		!macro SpriteLine .v {
		!by .v>>16, (.v>>8)&255, .v&255
		}
;------------------------------------------------------------


;--------- Hauptprogramm

*=$1000					; Startadresse
			
		jsr Clr			; Bildschirmlöschen

;--------- Adresse von vom Spriteblock in Zerropage 1 speichern
          
          	lda #<Sprites
          	sta Zeropage_Pointer_1  
          	lda #>Sprites
          	sta Zeropage_Pointer_1 + 1
          
          	jsr CopySprites			; Sprites an die richtige Speicherstelle kopieren
          
          	lda #$00
          	sta VIC_Border_Color
          	sta VIC_Background_Color
          
;--------- Sprites einschalten

		ldx #$00				; Zähler auf $00
		lda #Sprite_Pointer_Base	; Spriteblockpointer
spr		sta Sprite_Pointer,x
		clc
		adc #$01				; Akku um 1 erhöhen
		inx
		cpx #$05				; schon alle 5 Sprites?
		bne spr				; nein dann zu spr
		
		lda #%00011111			; Alle 5 Sprites als Multicolor
		sta VIC_Sprite_Enable
		sta VIC_Sprite_Multicolor
		
		lda #$0e				; blau
		sta VIC_Sprite_Multicolor_1
		lda #$01				; hellblau
		sta VIC_Sprite_Multicolor_2
		lda #$06				; weiß
		sta VIC_Sprite_Color
		sta VIC_Sprite_Color+1
		sta VIC_Sprite_Color+2
		sta VIC_Sprite_Color+3
		sta VIC_Sprite_Color+4
		 
;------------------------------------------------------------
;IRQ-Routine für das kleine Demo
;------------------------------------------------------------
         	
         	sei
         	lda #<int
         	sta IRQ_Vector
         	lda #>int
         	sta IRQ_Vector+1
         	
         	lda #$00
         	sta VIC_Rasterzeile 	;rasterline 0 setzen
         	
         	lda #$7f
         	sta CIA_Control_Register
         	lda #$01
         	sta VIC_Flag_Register
         	sta VIC_Mask_Register
         	cli
         	
         	jmp *

;------------------------------------------------------------
;eigene IRQ
;------------------------------------------------------------

int
		lda VIC_Flag_Register
         	and #$01
         	sta VIC_Flag_Register
         	bne irq
         	jmp IRQ_Interrupt
         
irq	  	lda #$00            		;Interrupt auf Rasterzeile 0 setzen
         	sta VIC_Rasterzeile

		jsr Move_Sprite

		jmp IRQ_Interrupt


;--------------------------------------------------------------------
;Spritebewegungroutine in einer Sinuskurve von Innovating  / Forum64
;--------------------------------------------------------------------
 
Move_Sprite
		ldy #$00
zaehler	ldx #$ff			; Zähler für die Tabelle
	
		lda #$00
		sta Zeropage_Sprite_N	; Zwischenspeicher für die Sprites 1-5
		
loop_2	lda xwalk,x			; Tabelle der X-Koordinate für die Sinuskurve 
		asl				; Der Wert mal 2 nehmen. Damit die Sprites über den ganzen Bildschirm huschen
		sta VIC_Sprite_X_Pos,y
		
		bcc loop_1			; Spring sobald das Carry-Flag gelöscht ist ( Sprite unter 255 Pixel X-koordinate)
		lda Zeropage_Sprite_N
		ora Tab_A,y
		sta Zeropage_Sprite_N
		
loop_1	lda Zeropage_Sprite_N	
		sta VIC_Sprite_X_Extend	; Setzt das Bit für für die Darstellung des Sprites über 255 Pixel  
		
		lda ywalk,x			; Tabelle der Y-Koordinate für die Sinuskurve
		clc
		adc #$15			; Festwert für die Y-Richtung damit man die Figur besser zentieren kann auf den Bildschirm
		sta VIC_Sprite_Y_Pos,y		
		
		txa
		clc
		adc #$08			; Abstände der Sprites untereinander
		
		tax				; nächster Sprite holen
		iny
		iny
		
		lda Zeropage_Sprite_N		
		sta VIC_Sprite_X_Extend
		cpy #$0a			; Anzahl der Sprites schon erreicht
		bne loop_2
		
		inc zaehler+1		; Zähler um 1 erhöhen
		rts
    		          
;------------------------------------------------------------
;Kopierroutine für die Sprites
;------------------------------------------------------------

!zone CopySprites
CopySprites
          ldy #$00
          ldx #$00
          
          lda #<Sprite_Ram					; Lo-Byte für Speicheradresse der Sprites
          sta Zeropage_Pointer_2
          lda #>Sprite_Ram					; High-Byte für Speicheradresse der Sprites
 	     sta Zeropage_Pointer_2 + 1
          
          ;4 sprites pro loop
.SpriteLoop
          lda (Zeropage_Pointer_1),y
          sta (Zeropage_Pointer_2),y
          iny
          bne .SpriteLoop
          inx
          inc Zeropage_Pointer_1+1
          inc Zeropage_Pointer_2+1
          cpx #Sprite_Number					;Anzahl der Sprites 
          bne .SpriteLoop

          rts
 
;--------- Tabelle für die X-Koordinate der Sprites 1-8 die größer X-Koordinate 255 sind

Tab_A	!byte $01, $00, $02, $00, $04, $00, $08, $00, $10, $00, $20, $00, $40, $00, $80

;--------- X-Koordinaten der Sinuskurve
xwalk
		!byte $0f,$0f,$0f,$0f,$0f,$0f
		!byte $0f,$0f,$10,$10,$11,$11
		!byte $11,$12,$12,$13,$14,$14
		!byte $15,$16,$16,$17,$18,$19
		!byte $1a,$1b,$1c,$1d,$1e,$1f
		!byte $20,$21,$22,$23,$25,$26
		!byte $27,$28,$2a,$2b,$2c,$2e
		!byte $2f,$31,$32,$34,$35,$37
		!byte $38,$3a,$3b,$3d,$3e,$40
		!byte $41,$43,$45,$46,$48,$4a
		!byte $4b,$4d,$4e,$50,$52,$53
		!byte $55,$57,$58,$5a,$5c,$5d
		!byte $5f,$60,$62,$64,$65,$67
		!byte $68,$6a,$6b,$6d,$6e,$70
		!byte $71,$73,$74,$76,$77,$78
		!byte $7a,$7b,$7c,$7e,$7f,$80
		!byte $81,$82,$83,$84,$86,$87
		!byte $88,$89,$89,$8a,$8b,$8c
		!byte $8d,$8e,$8e,$8f,$90,$90
		!byte $91,$91,$92,$92,$93,$93
		!byte $93,$94,$94,$94,$94,$94
		!byte $94,$94,$94,$94,$94,$94
		!byte $94,$94,$94,$94,$93,$93
		!byte $92,$92,$92,$91,$91,$90
		!byte $8f,$8f,$8e,$8d,$8d,$8c
		!byte $8b,$8a,$89,$88,$87,$86
		!byte $85,$84,$83,$82,$81,$80
		!byte $7e,$7d,$7c,$7b,$79,$78
		!byte $77,$75,$74,$72,$71,$6f
		!byte $6e,$6c,$6b,$69,$68,$66
		!byte $65,$63,$62,$60,$5e,$5d
		!byte $5b,$59,$58,$56,$55,$53
		!byte $51,$50,$4e,$4c,$4b,$49
		!byte $47,$46,$44,$43,$41,$3f
		!byte $3e,$3c,$3b,$39,$38,$36
		!byte $35,$33,$32,$30,$2f,$2d
		!byte $2c,$2b,$29,$28,$27,$25
		!byte $24,$23,$22,$21,$20,$1f
		!byte $1d,$1c,$1b,$1a,$1a,$19
		!byte $18,$17,$16,$15,$15,$14
		!byte $13,$13,$12,$12,$11,$11
		!byte $10,$10,$10,$0f,$0f,$0f
		!byte $0f,$0f,$0f,$0f

;--------- Y-Koordinaten der Sinuskurve
ywalk
		!byte $3c,$3c,$3c,$3c,$3d,$3e
		!byte $3f,$41,$42,$44,$46,$48
		!byte $4a,$4c,$4f,$52,$54,$57
		!byte $5a,$5d,$60,$63,$66,$68
		!byte $6b,$6e,$71,$74,$76,$79
		!byte $7b,$7e,$80,$82,$84,$85
		!byte $87,$88,$89,$8a,$8b,$8b
		!byte $8b,$8b,$8b,$8b,$8b,$8a
		!byte $89,$88,$86,$85,$83,$81
		!byte $7f,$7d,$7b,$78,$75,$73
		!byte $70,$6d,$6a,$67,$64,$61
		!byte $5f,$5c,$59,$56,$53,$51
		!byte $4e,$4c,$49,$47,$45,$43
		!byte $42,$40,$3f,$3e,$3d,$3c
		!byte $3c,$3c,$3c,$3c,$3c,$3c
		!byte $3d,$3e,$3f,$41,$42,$44
		!byte $46,$48,$4a,$4c,$4f,$52
		!byte $54,$57,$5a,$5d,$60,$63
		!byte $66,$68,$6b,$6e,$71,$74
		!byte $76,$79,$7b,$7e,$80,$82
		!byte $84,$85,$87,$88,$89,$8a
		!byte $8b,$8b,$8b,$8b,$8b,$8b
		!byte $8b,$8a,$89,$88,$86,$85
		!byte $83,$81,$7f,$7d,$7b,$78
		!byte $75,$73,$70,$6d,$6a,$67
		!byte $64,$61,$5f,$5c,$59,$56
		!byte $53,$51,$4e,$4c,$49,$47
		!byte $45,$43,$42,$40,$3f,$3e
		!byte $3d,$3c,$3c,$3c,$3c,$3c
		!byte $3c,$3c,$3d,$3e,$3f,$41
		!byte $42,$44,$46,$48,$4a,$4c
		!byte $4f,$52,$54,$57,$5a,$5d
		!byte $60,$63,$66,$68,$6b,$6e
		!byte $71,$74,$76,$79,$7b,$7e
		!byte $80,$82,$84,$85,$87,$88
		!byte $89,$8a,$8b,$8b,$8b,$8b
		!byte $8b,$8b,$8b,$8a,$89,$88
		!byte $86,$85,$83,$81,$7f,$7d
		!byte $7b,$78,$75,$73,$70,$6d
		!byte $6a,$67,$64,$61,$5f,$5c
		!byte $59,$56,$53,$51,$4e,$4c
		!byte $49,$47,$45,$43,$42,$40
		!byte $3f,$3e,$3d,$3c

;--------- Sprite Block - Das ist hier nur zur Veranschaulichung. Normal würde ich eine Spritedatei hochladen lassen
 
Sprites	
	; Multicolor Buchstabe " E "
	; 	             765432107654321076543210
		+SpriteLine %..####################.#	;01
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;02
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;03
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;04
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;05
		+SpriteLine %..##.#.##.#.#.#.#.#.#.#.	;06
		+SpriteLine %..##.#.##...............	;07
		+SpriteLine %..##.#.##...............	;08
		+SpriteLine %..##.#.#######.#........	;09
		+SpriteLine %..##.#.#.#.#.##.........	;10
		+SpriteLine %..##.#.#.#.#.##.........	;11
		+SpriteLine %..##.#.#.#.#.##.........	;12
		+SpriteLine %..##.#.##.#.#.#.........	;13
		+SpriteLine %..##.#.##...............	;14
		+SpriteLine %..##.#.##...............	;15
		+SpriteLine %..##.#.###############.#	;16
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;17
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;18
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;19
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;20
		+SpriteLine %...##.#.#.#.#.#.#.#.#.#. 	;21
		!byte $00

	; Multicolor Buchstabe " M "
	; 	             765432107654321076543210
		+SpriteLine %..######.#.........#.##.	;01
		+SpriteLine %..##.#.##.......######.#	;02
		+SpriteLine %..##.#.#.##...####.#.##.	;03
		+SpriteLine %..##.#.#.##...##.#.#.##.	;04	
		+SpriteLine %..##.#.#.#.###.#.#.#.##.	;05
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;06
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;07
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;08
		+SpriteLine %..##.#.###.#.#.#.#.#.##.	;09
		+SpriteLine %..##.#.##.##.##..#.#.##.	;10
		+SpriteLine %..##.#.##.#.#.#.##.#.##.	;11
		+SpriteLine %..##.#.##.......##.#.##.	;12
		+SpriteLine %..##.#.##.......##.#.##.	;13
		+SpriteLine %..##.#.##.......##.#.##.	;14
		+SpriteLine %..##.#.##.......##.#.##.	;15
		+SpriteLine %..##.#.##.......##.#.##.	;16
		+SpriteLine %..##.#.##.......##.#.##.	;17
		+SpriteLine %..##.#.##.......##.#.##.	;18
		+SpriteLine %..##.#.##.......##.#.##.	;19
		+SpriteLine %..##.#.##.......##.#.##.	;20
		+SpriteLine %..##.#.##.......##.#.##.	;21
		!byte $00

	; Multicolor Buchstabe " U "
	; 	             765432107654321076543210
		+SpriteLine %..##.#.#.#......######.#	;01
		+SpriteLine %..##.#.##.......##.#.##.	;02
		+SpriteLine %..##.#.##.......##.#.##.	;03
		+SpriteLine %..##.#.##.......##.#.##.	;04
		+SpriteLine %..##.#.##.......##.#.##.	;05
		+SpriteLine %..##.#.##.......##.#.##.	;06
		+SpriteLine %..##.#.##.......##.#.##.	;07
		+SpriteLine %..##.#.##.......##.#.##.	;08
		+SpriteLine %..##.#.##.......##.#.##.	;09
		+SpriteLine %..##.#.##.......##.#.##.	;10
		+SpriteLine %..##.#.##.......##.#.##.	;11
		+SpriteLine %..##.#.##.......##.#.##.	;12
		+SpriteLine %..##.#.##.......##.#.##.	;13
		+SpriteLine %..##.#.##.......##.#.##.	;14
		+SpriteLine %..##.#.##.......##.#.##.	;15
		+SpriteLine %..##.#.#.#######.#.#.##.	;16
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;17
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;18
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;19
		+SpriteLine %....##.#.#.#.#.#.#.##...	;20
		+SpriteLine %......#.#.#.#.#.#.#.....	;21
		!byte $00
	
	; Multicolor Buchstabe " 6 "
	; 	             765432107654321076543210
		+SpriteLine %....##################.#	;01
		+SpriteLine %....##.#.#.#.#.#.#.#.##.	;02
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;03
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;04
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;05
		+SpriteLine %..##.#.#.##.#.#.#.#.#.#.	;06
		+SpriteLine %..##.#.#.##.............	;07
		+SpriteLine %..##.#.#.##.............	;08
		+SpriteLine %..##.#.#.##.............	;09
		+SpriteLine %..##.#.#.###########....	;10
		+SpriteLine %..##.#.#.#.#.#.#.#.###.#	;11
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;12
		+SpriteLine %..##.#.#.##.#.#.#..#.##.	;13
		+SpriteLine %..##.#.#.##.....##.#.##.	;14
		+SpriteLine %..##.#.#.##.....##.#.##.	;15
		+SpriteLine %..##.#.#.##.....##.#.##.	;16
		+SpriteLine %..##.#.#.#.#######.#.##.	;17
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;18
		+SpriteLine %....##.#.#.#.#.#.#.##...	;19
		+SpriteLine %.....##.#.#.#.#.#.#.....	;20
		+SpriteLine %........................ 	;21
  		!byte $00
 	
 	; Multicolor Buchstabe " 4 "
	; 	             765432107654321076543210
		+SpriteLine %..######.#.........#.##.	;01
		+SpriteLine %..##.#.##.......######.#	;02
		+SpriteLine %..##.#.##.......##.#.##.	;03
		+SpriteLine %..##.#.##.......##.#.##.	;04
		+SpriteLine %..##.#.##.......##.#.##.	;05
		+SpriteLine %..##.#.##.......##.#.##.	;06
		+SpriteLine %..##.#.##.......##.#.##.	;07
		+SpriteLine %..##.#.#.#########.#.##.	;08
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;09
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;10
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;11
		+SpriteLine %..##.#.#.#.#.#.#.#.#.##.	;12
		+SpriteLine %...##.#.#.#.#..#.#.#.##.	;13
		+SpriteLine %..............##.#.#.##.	;14
		+SpriteLine %..............##.#.#.##.	;15
		+SpriteLine %..............##.#.#.##.	;16
		+SpriteLine %..............##.#.#.##.	;17
		+SpriteLine %..............##.#.#.##.	;18
		+SpriteLine %..............##.#.#.##.	;19
		+SpriteLine %...............#.#.#.##.	;20
		+SpriteLine %.................#.#.##.	;21
		!byte $00


Das ganze sieht mir genau nach deinem Text aus ... wenn aber bei deinem Texteditor etwas anderes aussieht, kann es daran liegen das Du Tabs verwendet hast ? Ist so eine Sache bei Web-Editoren. Die kommen damit nicht zurecht. Aber im ganzen sieht es doch gut aus, was du hier geschrieben hast.

Gruß,
Thomas

  • »Andreas Goller« ist männlich
  • »Andreas Goller« ist der Autor dieses Themas
  • Deutschland

Beiträge: 803

Wohnort: Rastatt

Beruf: Bauzeichner - halbtags

  • Nachricht senden

4

Samstag, 22. Oktober 2011, 10:30

Hi

Auf viel fachen Wunsch eines einzelen (Selmiak) werde ich die Routine so ändern das man das Wort Emu64 immer lesen kann.
Beim Vorwärtslauf sowie beim Rückwärtslauf.

Gruss Andreas :D
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

5

Samstag, 22. Oktober 2011, 11:00

An sich hat er ja auch recht ;-) ...

Was vielleicht auch ein netter Effekt sein könnte, wenn der Emu64 Schriftzug im Kreis fährt ...

Grundsätzlich tolle Arbeit !

Grüße,
Thomas

  • »Andreas Goller« ist männlich
  • »Andreas Goller« ist der Autor dieses Themas
  • Deutschland

Beiträge: 803

Wohnort: Rastatt

Beruf: Bauzeichner - halbtags

  • Nachricht senden

6

Samstag, 22. Oktober 2011, 17:45

Hi

so Selmika ich hoffe es ist gut so. Besser habe ich es nicht hin bekommen

So und hier das fertige Programm

index.php?page=Attachment&attachmentID=652

Und hier wieder der Quellcode für die Leute die damit noch herum spielen wollen, oder zum lernen
index.php?page=Attachment&attachmentID=653


Hier einen Auszug des geänderten Quellcode

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
;--------------------------------------------------------------------
;Spritebewegungroutine in einer Sinuskurve von Innovating  / Forum64
;--------------------------------------------------------------------
 
Move_Sprite
		ldy #$00
zaehler	ldx #$ff			; Zähler für die Tabelle
		

		lda #$00
		sta Zeropage_Sprite_N	; Zwischenspeicher für die Sprites 1-5
		
loop_2	lda xwalk,x			; Tabelle der X-Koordinate für die Sinuskurve 
		
		cpx #$7d			; schon bei der hälfte der Tabelle xwalk angekommen
		beq wechsel_1		; wenn ja dann springe, und ändere die Spriteheihenfolge
		
		cpx #$00			; schon am Anfang der Tabelle xwalk angekommen
		beq wechsel_2		; wenn ja dann springe, und ändere die Spriteheihenfolge

loop_3	asl				; Der Wert mal 2 nehmen. Damit die Sprites über den ganzen Bildschirm huschen
		sta VIC_Sprite_X_Pos,y
		
		bcc loop_1			; Spring sobald das Carry-Flag gelöscht ist ( Sprite unter 255 Pixel X-koordinate)
		lda Zeropage_Sprite_N
		ora Tab_A,y
		sta Zeropage_Sprite_N
		

loop_1	lda Zeropage_Sprite_N	
		sta VIC_Sprite_X_Extend	; Setzt das Bit für für die Darstellung des Sprites über 255 Pixel  
		
		lda ywalk,x			; Tabelle der Y-Koordinate für die Sinuskurve
		clc
		adc #$15			; Festwert für die Y-Richtung damit man die Figur besser zentieren kann auf den Bildschirm
		sta VIC_Sprite_Y_Pos,y		
		
		txa
		clc
		adc #$08			; Abstände der Sprites untereinander
		
		tax				; nächster Sprite holen
		iny
		iny
		
		lda Zeropage_Sprite_N		
		sta VIC_Sprite_X_Extend
		cpy #$0a			; Anzahl der Sprites schon erreicht
		bne loop_2
		
		inc zaehler+1		; Zähler um 1 erhöhen
		rts
 
;--------------------------------------------------------------------
;Spriterichtung von links nach rechts
;--------------------------------------------------------------------

wechsel_1
		lda Reihev		
		sta Sprite_Pointer
		lda Reihev+1		
		sta Sprite_Pointer+1
		lda Reihev+2		
		sta Sprite_Pointer+2
		lda Reihev+3		
		sta Sprite_Pointer+3
		lda Reihev+4		
		sta Sprite_Pointer+4
		jmp loop_3

;--------------------------------------------------------------------
;Spriterichtung von rechts nach links
;--------------------------------------------------------------------

wechsel_2
		lda Reiher	
		sta Sprite_Pointer
		lda Reiher+1		
		sta Sprite_Pointer+1
		lda Reiher+2		
		sta Sprite_Pointer+2
		lda Reiher+3		
		sta Sprite_Pointer+3
		lda Reiher+4		
		sta Sprite_Pointer+4
		jmp loop_3

;--------- Die Reihenfolge der Sprites / Sprite_Base_Pointer
						
Reihev	!byte $c4, $c3, $c2, $c1, $c0
Reiher	!byte $c0, $c1, $c2, $c3, $c4


Und nun viel Spass damit :thumbup:

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

7

Samstag, 22. Oktober 2011, 20:11

Nagut, das lass ich mal so durchgehen ;)
...kann es sein, dass das nichtmal ne richtige Sinuskurve ist. Die startpunkte sind ja wohl Maximum und Minimum der Sinuskurve, aber die gehen da nicht raus wie aus einem sinus Minmum sondern wie aus dem Schnittpunkt mit der nullinie. Also von der Steigung her. Ist mir nur so aufgefallen.

  • »Andreas Goller« ist männlich
  • »Andreas Goller« ist der Autor dieses Themas
  • Deutschland

Beiträge: 803

Wohnort: Rastatt

Beruf: Bauzeichner - halbtags

  • Nachricht senden

8

Samstag, 22. Oktober 2011, 20:48

Hi

Kann ich nicht sagen, da die Tabelle ja von 6585freak stammt.
Und in Mathe war ich nicht gerade ein Ass. Aber es langt für das einmal ein :D

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

9

Sonntag, 23. Oktober 2011, 13:52

Hiho,
Jo.. Andreas kniet sich da ja ordentlich rein, ich hatte die letzten Tage mal leider nicht viel Zeit da weiterzugucken, werde mir aber Andreas sein Quelltext jetzt mal genau ansehn. ;)
Jo die Tabelle hab ich rein aber die hat mir der Relaunch64 errechtnet , da gibs so ne Funktion. Hab da rumgebastelt , star-endwert wieviele Werte (sollten immer 256 sein) und wieviele Kurven. Da kann man sicher noch was ändern. Selber die Werte einer Sinuskurve zu erstellen.. nene das ist mir zu heftig ;).

Gruß
6581freak

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


10

Montag, 24. Oktober 2011, 14:31

stört ja auch niemanden und sieht super aus. Ist mir halt eben aufgefallen. Ihr schreibt ja auch nicht sinuskurve daneben, da kann ich mich dann nur in dem Thread hier wundern, da der Thread Sinus im Titel hat ;)

Ich bin leider noch gar nicht weiter zum Pixeln gekommen, hab auch so schon wieder volles Programm und hab trotzdem das Gefühl, dass eigentlich nix passiert... ;)

  • »Andreas Goller« ist männlich
  • »Andreas Goller« ist der Autor dieses Themas
  • Deutschland

Beiträge: 803

Wohnort: Rastatt

Beruf: Bauzeichner - halbtags

  • Nachricht senden

11

Montag, 24. Oktober 2011, 18:56

Hi

OK - Hab ein schlechten Titel gewählt. Bei der nächsten Demo mache ich keine Sinuskurve mehr. Versprochen :D

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