PlanetSwitch Planet3DS PlanetVita PSP.de PlanetiPhone Classics Forum Handheld-Wiki

PGN-ID:[?] (Nicht eingeloggt)
Login
Registrieren
PlanetDS PlanetGameboy N-Page.de
portablegaming.de  

Zurück   portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung


Development Abteilung Ihr wollt für euren Lieblingshandheld Spiele oder Tools entwickeln?
Bitte die Präfixe benutzen!

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 18.10.2004, 00:48   #1
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard Sprites

Hi!
So habe mich jetzt mal auf
http://sublab.game-host.org/tikiwiki...age=OAM+Memory
und
http://sublab.game-host.org/tikiwiki...ware+Registers
erkundigt, wie man Sprites auf dem PM darstellen kann.

Ich möchte also Sprite 0, mit X = 20 und Y = 20 auf den Bildschirm bringen. Dazu habe ich ein 16 * 16 Bild konvertiert. Eben mit der Vorgabe:
Mask(0, 0), Mask(0, 1), Color(0, 0), Color(0, 1), Mask(1, 0), Mask(1, 1), Color(1, 0), Color(1, 1). Pro Mask oder Color ein 8 *8 Pixel Tile.
Jetzt lade ich in Adresse
- 0x1300 20; X-Location
- 0x1301 20; Y-Location
- 0x1302 0; Tile 0 im Spritedataspeicher
- 0x1303 8; für Enable
- 0x2087 sprite; die 8 Tiles des Sprites im Spritedtaspeicher.

Minimon zeigt zwar richtig, X und Y-Location sowie Flags = Enable an, jedoch nicht den Sprite selber. o_O

Code:
main:

	mov x1, 0x1300
	mov [x1], 20

	mov x1, 0x1301
	mov [x1], 20

	mov x1, 0x1302
	mov [x1], 0

	mov x1, 0x1303
	mov [x1], 0b00001000

	mov x1, 0x2087
	mov [x1], sprite

	jmp end


sprite:
	.incbin "sprite.rar"

end:
	.end
Jemand ne Ahnung was da schief gegangen ist?
mfg olli
Vertex ist offline   Mit Zitat antworten
Sponsored Links
Alt 19.10.2004, 21:31   #2
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard RE: Sprites

Du musst erstmal in reg $80 die Sprites anschalten, dann stimmt deine Spriteadresse auch nicht, übergibst nur 8Bit (24Bit müssen aber gesetzt werden)!! Allerdings zeigts bei mir auch nicht das Sprite richtig an (verzerrt)? Scheinbar habe ich eine falsche Tilenummer? Aber ansonsten gehts (achso Sprite Adr. muss glaub ich align 8 sein.)




Code:
.orgfill 0x21D0

start:	
	xorb	a,a
	movx	x1,a
	movx	x2,a
	movx	hl,a
	mov	sp, $2000	;set stack
	movw	nn, $2000	;base

	movb	[nn+$08],$08
	movb	[nn+$80],$0e	
	movb	[nn+$81],$01	
	
	mov	ba,map
	mov	[nn+$82],map>>16	;set map ptr
	mov	[nn+$83],a
	mov	[nn+$84],b

	;set sprite
	
	mov	nn,$1300
	mov	[nn+0],16+16	
	mov	[nn+1],16+16	
	mov	[nn+2],0
	mov	[nn+3],$08
	
	mov	nn,$2000
	
	mov	[nn+$87],spr_dt>>16	;set spr ptr
	mov	[nn+$88],spr_dt>>8
	mov	[nn+$89],spr_dt

end:	jmp	end
	
	
	.align	8
spr_dt:	.incbin		sprite1.raw
	.align	8	
map:	.ds	96/8*64
goldmomo ist offline   Mit Zitat antworten
Alt 20.10.2004, 00:29   #3
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

Hi!

Danke, jetzt "geht" es. Hmm Minimon ist echt eine Krankheit. Mal geht der scheiß, mal nicht. Gibt es nicht irgendein Emulator oder Debugger der auch Sprites anzeigen kann? PokeKaMini_Debug ist echt klasse, aber unterstützt noch kein Sprites Minimon ist zum Debugging ja mehr als ungeeignet, das Teil bringt meine Kiste im SInglestepmodus glatt immer zum Abstürzen, und von Keypad Unterstützung ist irgendwie auch nicht zu sprechen ?oder

Das eigentliche Sprite ist übrigens um 42 Byte irgendwie verschoben. Was bewirkt eigentlich die .align DIrektive?

mfg olli
Vertex ist offline   Mit Zitat antworten
Alt 20.10.2004, 08:11   #4
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard

Du solltest unbedingt ein Bios.file in Minimon laden, sonst loescht der bei einem neuen Laden die Speicher nicht. Kannst es auch selber machen, aber irgendwie stript der das zugelandene Bios raus. Align 8, legt das nachste Byte auf eine durch 8 Teilbare Adresse (mit mod 0). Dann hat man keine Probleme bei z.B. 16Bit zugriffen die auf gerade Adressen zugreifen muessen (ist beim PM nicht so). Dann kann man dann z.B. .align 2 schrieben, bei longs .align 4.
Das Keypad in Minimon geht schon ist nur die x und y taste, der Programmierer (astertick)arbeitet aber daran, kannst ihn mal in #pmdev (efnet) ansprechen. Immerhin hat er in knapp einem Monat diesen Emulator gebaut Also mein Sprite war um genau 1 Teil verschoben, muss nochmal testen wenn ich zeit habe.
goldmomo ist offline   Mit Zitat antworten
Alt 20.10.2004, 22:40   #5
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

Der Code geht jetzt. Ich habe das Framework komplett dem Minimon angepasst.

Code:
.orgfill 0x0009A
	jmp main

.orgfill 0x02100
	.db "MN"

.orgfill 0x021A4
	.db "NINTENDO"
	.db "1234"
	.db "Spritetest"

.orgfill 0x021BC
	.db "2P"

.orgfill 0x021D0


main:
	; LCD Control
	mov nn, 0x2000
	mov [nn+0x80], 0b00001110 ; Enable Spriterendering and LCD Refreshing
	mov [nn+0x81], 0b00000001 ; Enable LCD

	; Setup Sprite
	mov nn, 0x1300
	mov [nn+0], 10+16      ; X Location
	mov [nn+1], 20+16      ; Y Location
	mov [nn+2], 0          ; Tilenumber
	mov [nn+3], 0b00001000 ; Enable

	; Set Spritedata
	mov nn, 0x2000
	mov [nn+0x87], (sprite+16)>>16
	mov [nn+0x88], (sprite+16)>>8
	mov [nn+0x89], (sprite+16)


end:	jmp end


	.align 8
sprite:	.incbin "sprite.bin"
Jedoch weiss ich nicht, wie die Spritedatas aufgebaut werden müssen.
Hier mal der Code meines Konvertors:
Code:
Graphics 640, 480, 32, 2

Global sprite, stream
sprite = LoadImage("sprite.bmp")
stream = WriteFile("sprite.bin")

SetBuffer ImageBuffer(sprite)

For y = 0 To 31 Step 2
	For x = 0 To 31 Step 2
		writeSprite x,   y,   True
		writeSprite x+1, y,   True
		writeSprite x,   y,   False
		writeSprite x+1, y,   False
		writeSprite x,   y+1, True
		writeSprite x+1, y+1, True
		writeSprite x,   y+1, False
		writeSprite x+1, y+1, False
	Next
Next

CloseFile stream
End

Function writeSprite(tx, ty, mask)
	Local x, y, x2, y2, rgb, count, byte
	
	For x = 0 To 7
		For y = 0 To 7
			x2 = tx*8+x
			y2 = ty*8+y
			
			rgb = ReadPixel(x2, y2)
			If mask = True Then
				; Magenta
				If rgb = %11111111111111110000000011111111 Then
					byte = byte+2^count
				EndIf
			Else
				; Schwarz
				If rgb = %11111111111111111111111111111111 Then
					byte = byte+2^count
				EndIf
			EndIf
				
			count = count+1
			If count = 8 Then
				WriteByte stream, byte
				byte = 0
				count = 0
			EndIf
		Next
	Next
End Function
So wie es links zu sehen ist, sollte das Tool aussehen, so wie es rechts zu sehen ist, ist es
Vllt fällt dir Spontan der Fehler im Konvertor auf
mfg olli
Miniaturansicht angehängter Grafiken
Sprites-sprite.png  
Vertex ist offline   Mit Zitat antworten
Alt 21.10.2004, 18:55   #6
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

Küüssssssssssssssssssssst mir die Füsse! Ich habe es nach tausenden Blue Screens durch Minimon dennoch geschafft, einen funktionierenden Konvertor zu schreiben.

Der Code dafür lautet:
Code:
Graphics 640, 480, 32, 2

Global sprite, stream
sprite = LoadImage("sprite.bmp")
stream = WriteFile("sprite.bin")

SetBuffer ImageBuffer(sprite)

For y = 0 To 31 Step 2
	For x = 0 To 31
		writeSprite x-1, y+1, 0
		writeSprite x,   y,   1
		writeSprite x,   y+1, 1
		writeSprite x,   y,   0
	Next
Next

CloseFile stream
End

Function writeSprite(tx, ty, mask, g=0)
	Local x, y, x2, y2, rgb, count, byte
	

	For x = 0 To 7
		For y = 0 To 7
			If g = 1
				x2 = (tx-1)*8+x
			Else
				x2 = tx*8+x
			EndIf
			
			y2 = ty*8+y
			
			rgb = ReadPixel(x2, y2)
			If mask = True Then
				; Magenta
				If rgb = %11111111111111110000000011111111 Then
					byte = byte+2^count
				EndIf
			Else
				; Schwarz
				If rgb = %11111111000000000000000000000000 Then
					byte = byte+2^count
				EndIf
			EndIf
			
			count = count+1
			If count = 8 Then
				WriteByte stream, byte
				byte = 0
				count = 0
			EndIf
		Next
	Next
End Function
wenn ich noch genau herausgefunden habe, warum writeSprite x-1, y+1, 0 sein muss, kann denke ich Tutorial 2 kommen
mfg olli
Vertex ist offline   Mit Zitat antworten
Alt 22.10.2004, 20:35   #7
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

Ok, Fehler nun gefunden

Code:
Graphics 640, 480, 32, 2

Global sprite, stream
sprite = LoadImage("sprite.bmp")
stream = WriteFile("sprite.bin")

SetBuffer ImageBuffer(sprite)

For y = 0 To 31 Step 2
	For x = 0 To 31
		writeSprite x, y,   1
		writeSprite x, y+1, 1
		writeSprite x, y,   0
		writeSprite x, y+1, 0
	Next
Next

CloseFile stream
ExecFile("make.bat")
End

Function writeSprite(tx, ty, mask, g=0)
	Local x, y, x2, y2, rgb, count, byte
	

	For x = 0 To 7
		For y = 0 To 7
			If tx = -1 Then
				x2 = (0)*8+x
			Else
				x2 = (tx)*8+x
			EndIf 
			
			y2 = ty*8+y
			
			rgb = ReadPixel(x2, y2)
			If mask = True Then
				; Magenta
				If rgb = %11111111111111110000000011111111 Then
					byte = byte+2^count
				EndIf
			Else
				; Schwarz
				If rgb = %11111111000000000000000000000000 Then
					byte = byte+2^count
				EndIf
			EndIf
			
			count = count+1
			If count = 8 Then
				WriteByte stream, byte
				byte = 0
				count = 0
			EndIf
		Next
	Next
End Function
und der code dazu:
Code:
.orgfill 0x0009A
	jmp main

.orgfill 0x02100
	.db "MN"

.orgfill 0x021A4
	.db "NINTENDO"
	.db "1234"
	.db "Spritetest"

.orgfill 0x021BC
	.db "2P"

.orgfill 0x021D0


main:
	; LCD Control
	mov nn, 0x2000
	mov [nn+0x80], 0b00001110 ; Enable Spriterendering and LCD Refreshing
	mov [nn+0x81], 0b00000001 ; Enable LCD

	; Setup Sprite
	mov nn, 0x1300
	mov [nn+0], 16         ; X Location at 0
	mov [nn+1], 16         ; Y Location at 0
	mov [nn+2], 0          ; Tilenumber
	mov [nn+3], 0b00001000 ; Enable

	; Set Spritedata
	mov nn, 0x2000
	mov [nn+0x87], sprite>>16
	mov [nn+0x88], sprite>>8
	mov [nn+0x89], sprite


end:	jmp end


	.align 64
sprite:	.incbin "sprite.bin"
Ja .align 64 war der Überltäter
mfg olli
Vertex ist offline   Mit Zitat antworten
Alt 23.10.2004, 16:53   #8
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard

So ich habe mal einen Konverter in c geschrieben, damit alle nicht BlitzBasic Nutzer auch konvertieren können

Das align 64 stimmt natürlich da 6 Bits -> 0 bei der Sprite Adresse sind (außerdem hatte ich die Adressbytes in der falschen Reihenfolge angegeben).

also beim pm so (wie bei vertex nur die Adressen andersrum)

Programmaufruf im dos:

bmp2pm.exe bildname bildnamemaske ausgabename

z.B. so

./bmp2pm.exe 256x256.bmp 256x256.bmp 256x256.raw

Dies SDL.dll Lib muss noch in das Verzeichnis mir rein, gibts in dem Zip-Archiv: http://www.libsdl.org/release/SDL-1.2.7-win32.zip

(Exe/Quellcode ist im Anhang mit drin.)
Angehängte Dateien
Dateityp: zip bmpconvert.zip (14,6 KB, 49x aufgerufen)
goldmomo ist offline   Mit Zitat antworten
Alt 23.10.2004, 18:19   #9
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard

Hier ein kleines Demo von mir, welches 6 Sprites auf dem Bildschirm dreht. Damit sollte eigentlich alles zu den Sprites gesagt sein, mal davon abesehen, dass es wohl keinen Interessiert

Code:
	;**** bios
	
.org 0
.incbin bios.min

.orgfill 0x1000  			;vram
.orgfill 0x1800

winkel:	.db	0

	.equ	POINT_CNT	6

points:	.db	0,0
	.db	0,0
	.db	0,0
	.db	0,0
	.db	0,0
	.db	0,0

	;**** ram

.orgfill 0x2100  
	.db "MN"
.orgfill 0x2102  
    	jmp start			;start vektor

	;**** header
		
.orgfill 0x21A4 

	.db "NINTENDO"			
	.db "TEST"
	.db "TESTTEST"			
	.orgfill 0x21Bc
	.db "TS"               

	;**** start
		
.orgfill 0x21D0

start:	
	xorb	a,a
	movx	x1,a
	movx	x2,a
	movx	hl,a
	mov	sp, $2000	;set stack
	movw	nn, $2000	;base

	movb	[nn+$08],$08
	movb	[nn+$80],$0e	
	movb	[nn+$81],$01	
	
	mov	ba,map
	mov	[nn+$82],a	;set map ptr
	mov	[nn+$83],b
	mov	[nn+$84],spr_dt
	
	mov	ba,spr_dt
	mov	[nn+$87],a	;set spr ptr
	mov	[nn+$88],b
	mov	[nn+$89],spr_dt>>16

	;set sprite
	
loop:	
	;**** change winkel
	
	movx	hl,0
	mov	hl,winkel 
	inc	[hl]

	;**** rotate points
	
	movx	x1,points_o>>24
	mov	x1,points_o
	movx	x2,points>>24
	mov	x2,points
	movx	hl,0

	mov	b,POINT_CNT	;4 punkte	
rot_points:
	
	push	b
	push	x1
	push	x2
	pushxxx
	mov	b,[winkel] 
	call	rotate
	popxxx
	pop	x2
	pop	x1
	
	inc 	x1
	inc	x1
	inc	x2
	inc	x2
	
	pop	b
	jdbnz	rot_points
	
	;**** draw sprites

	movx	x1,points>>24
	mov	x1,points
	
	mov	b,POINT_CNT	; punkte	
drw_points:	
	
	push	b
	dec	b
	shl	b
	shl	b	;b*4
	mov	l,b
	
	mov	a,[x1]
	mov	b,[x1+1]
	
	add	a,48+16-8
	xchg	a,b
	add	a,32+16-8

	;**** draw sprite

	movx	hl,0
	movx	x2,0
	mov	x2,$1300
	mov	h,0
	add	x2,hl
	
	mov	[x2],b	
	inc	x2
	pop	b
	
	mov	[x2],a	
	inc	x2
	dec	b
	mov	[x2],b
	inc	b
	inc	x2
	mov	[x2],$08
	
	inc	x1
	inc	x1
	
	
	jdbnz	drw_points
	
	;**** wait busy
	
	mov	hl,$1fff		
	movx	hl,0
b_wait:	dec	hl
	jnz	b_wait	
	
	jmp	loop


;**********************************************
;*
;* rotate
;*
;* x1 = points_o
;* x2 = points
;*
;* b  = winkel
;* 

rotate:

	and	b,$7f
	
	pushxxx	
	push	x2		;save pdest
	
	movx	x2,sin8>>24	;sin
	mov	x2,sin8		;sin
	xorb	a,a		;
	xchg	a,b		;ba = winkel
	add	x2,ba
	movb	h,[x2]		;h = sin
	movb	l,[x2+32]	;l = cos

	pop	x2		;restore pdest
	popxxx
	
	push	hl		;sin & cos auf stack
	
	;****
	
	mov	ba,[sp+0]
	mov	l,[x1]
	call	muls		;x*cos
	mov	a,h
	movx	hl,a
	
	;****
	
	mov	ba,[sp+0]
	mov	l,[x1+1]
	mov	a,b
	call	muls		;y*sin
	
	;****
	
	movx	a,hl	
	mov	b,h
	sub	a,b		;x´=x*cos - y*sin
	mov	[x2],a
	
	;****
	
	mov	ba,[sp+0]
	mov	l,[x1]
	mov	a,b
	call	muls		;x*sin
	mov	a,h
	movx	hl,a
		
	;****	
		
	mov	ba,[sp+0]
	mov	l,[x1+1]
	call	muls		;y*cos
	
	;****
	
	movx	a,hl		
	mov	b,h
	add	a,b		;y´=x*sin + y*cos
	mov	[x2+1],a
	
	add	sp,2		;remove sin cos
	
	ret	
	
;***********************************************
;* 
;* muls
;*
;* hl = a * l (ba = wasted)
;*

muls:	push	b
	cmp	l,0
	jns	mnl
	mov	b,l
	neg 	b
	mov	l,b
	mov	b,1		;signed
	jmp	ml
mnl:	mov	b,0		;unsigned	
ml:	cmp	a,0
	jns	mna
	neg	a
	xorb	b,1		;signed
mna:	mul	l,a		
	cmp	b,0
	jz	mnhl
	xorb	a,a
	mov	b,a
	subw	ba,hl
	mov	hl,ba
mnhl:	pop	b
	ret	
	
;**** sinus 2.5pi

sin8:
	
        .db     $00,$06,$0c,$12,$18,$1e,$24,$2a,$30,$36,$3b,$41,$46,$4b,$50,$55
        .db     $59,$5e,$62,$66,$69,$6c,$70,$72,$75,$77,$79,$7b,$7c,$7d,$7e,$7e
        .db     $7f,$7e,$7e,$7d,$7c,$7b,$79,$77,$75,$72,$70,$6c,$69,$66,$62,$5e
        .db     $59,$55,$50,$4b,$46,$41,$3b,$36,$30,$2a,$24,$1e,$18,$12,$0c,$06
        .db     $00,$fa,$f4,$ee,$e8,$e2,$dc,$d6,$d0,$ca,$c5,$bf,$ba,$b5,$b0,$ab
        .db     $a7,$a2,$9e,$9a,$97,$94,$90,$8e,$8b,$89,$87,$85,$84,$83,$82,$82
        .db     $81,$82,$82,$83,$84,$85,$87,$89,$8b,$8e,$90,$94,$97,$9a,$9e,$a2
        .db     $a7,$ab,$b0,$b5,$ba,$bf,$c5,$ca,$d0,$d6,$dc,$e2,$e8,$ee,$f4,$fa
        .db     $00,$06,$0c,$12,$18,$1e,$24,$2a,$30,$36,$3b,$41,$46,$4b,$50,$55
        .db     $59,$5e,$62,$66,$69,$6c,$70,$72,$75,$77,$79,$7b,$7c,$7d,$7e,$7e
		
points_o:	.db	-30,-30
		.db	30,30
		.db	-30,30
		.db	30,-30
		.db	15,0
		.db	-15,0
		
	.align	8	
map:	.ds	96/8*64	

	.align	64
spr_dt:	.incbin		256x256_2.raw
Aussehen tuts dann so
Miniaturansicht angehängter Grafiken
Sprites-capture-1.png  
goldmomo ist offline   Mit Zitat antworten
Alt 23.10.2004, 18:21   #10
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard

Hier noch das min & s + raw File.
Angehängte Dateien
Dateityp: zip sprite.zip (17,2 KB, 52x aufgerufen)
goldmomo ist offline   Mit Zitat antworten
Alt 23.10.2004, 22:15   #11
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

Jetzt verstehe ich ersteinmal wo der Fehler liegt, denn ich habe mich schon gewundert, warum das schonwieder nicht geht, auch mit .align 64. Das ist ein Bug des Assemblers der anscheinend erst am Schluss die .align Direktiven ausführt. Meinst du man könnte selber mit den anderen Direktiven das Offset Berechne? Dürfte doch irgendwie über den Rest bei einer Division gehen, da nicht unbedingt wertvoller speicher im RAM verbaucht werden soll.

Ich bräuchte jedoch mal deine Hilfe, nämlich beim Keypad. Normalerweise sitzt der Keypadregister auf Adresse 0x002052, der Pokemini_Debug gibt korrekter Weise da 0x00 aus, wenn keine Taste gedrückt wurden ist, jedoch Minimon 0xFF. Somit ist die Maske 0b01000000 immer True Auch wenn sie true ist, kann Minimon irgendwie nicht meine definierten Variablen ändern. Kann das irgendwie samit zusammenhängen, das der VRAm zuerst kommt?

Hier mal der Code, ich hoffe er ist ausreichend Kommentiert:
Code:
.orgfill 0x0009A
	jmp main

.orgfill 0x02100
	.db "MN"

.orgfill 0x021A4
	.db "NINTENDO"
	.db "1234"
	.db "Spritetest"

.orgfill 0x021BC
	.db "2P"

.orgfill 0x021D0


knut_x:	.db 16 ; relative x coord of Knut
knut_y: .db 40 ; relative y coord of Knut
frame:	.db 0  ; animation framenumber of Knut


main:
	; set stackpointer why ever
	mov sp, 0x2000

	; lcd control
	mov nn, 0x2000
	mov [nn+0x80], 0b00001100 ; enable spriterendering and lcd refreshing
	mov [nn+0x81], 0b00000001 ; enable LCD

	; set spritedata
	mov ba, sprite
	mov [nn+0x87], a
	mov [nn+0x88], b
	mov [nn+0x89], sprite

	; enable sprites
	mov nn, 0x1300
	mov [nn+0x03], 0b00001000 ; sprite 1
	mov [nn+0x07], 0b00001000 ; sprite 2
	mov [nn+0x0B], 0b00001000 ; sprite 3
	mov [nn+0x0F], 0b00001000 ; sprite 4
	call update_sprites

	; setup keypad
	mov x1, 0x002052


main_loop:
	mov a, [x1]       ; get keypad
	and a, 0b01000000 ; check right button
	cmp a, 0b01000000 ; but keypad is every 0xFF ?!
	callz key_right   ; when right button pressed
	jmp main_loop


key_right:
	mov a, [frame] ; get act. framenumber
	inc a          ; add 1
	mov [frame], a ; and write it in frame variable

	mov a, [knut_x]   ; move Knut 1 step right
	inc a
	cmp a, 97         ; check if right display border collide with Knut
	calll  move_right ; not? then update Knut

	mov a, [knut_x]   ; get x position of Knut 
	cmp a, 96         ; check if right display border collide with Knut
	callge reset      ; yes? then reset Knut

	ret

	
move_right:
	mov [knut_x], a     ; update y position of Knut
	call update_sprites ; redraw Knut
	ret


reset:
	mov a, 16       ; relative x position = 16
	mov [knut_x], a
	mov a, 40       ; relative y position = 40
	mov [knut_y], a

	ret


update_sprites:
	; get x and y position
	mov a, [knut_x]
	mov b, [knut_y]
	
	; set positions
	mov [nn+0x00], a ; sprite1 x
	mov [nn+0x01], b ; sprite1 y
	mov [nn+0x08], a ; sprite3 x
	mov [nn+0x05], b ; sprite2 y
	add a, 16
	mov [nn+0x04], a ; sprite2 x
	mov [nn+0x0C], a ; sprite4 x
	mov a, b
	add a, 16
	mov [nn+0x09], a ; sprite3 y
	mov [nn+0x0D], a ; sprite4 y

	; get framenumber
	mov a, [frame]
	
	; set frame
	mov [nn+0x02], a ; sprite 1
	inc a
	mov [nn+0x06], a ; sprite 2
	add a, 7
	mov [nn+0x0A], a ; sprite 3
	inc a
	mov [nn+0x0E], a ; sprite 4

	ret


	.align 64
sprite:	.incbin "sprite.bin"

Deine Spritedemo ist übrigens sau geil geworden! Repsekt!
mfg olli

Edit:
Ok das ganze dürfte über
Code:
	mov [nn+0x87], (sprite+(sprite/64))>>16
	mov [nn+0x88], (sprite+(sprite/64))>>8
	mov [nn+0x89], (sprite+(sprite/64))
auch gehen, statts vorher die oberen 16 bit in ba zu laden.

Weiter geht das jetzt auch mit den Variablen durch:
Code:
...
.orgfill 0x1800 ; vram

knut_x:	.db 18 ; relative x coord of Knut
knut_y: .db 40 ; relative y coord of Knut
frame:	.db 0  ; animation framenumber of Knut

.orgfill 0x02100
	.db "MN"
...
update_sprite scheint noch nicht zu richtig zu funktionieren, jedoch bleibt immer noch das Keypad Problem.
Angehängte Dateien
Dateityp: zip Demo.zip (3,3 KB, 52x aufgerufen)
Vertex ist offline   Mit Zitat antworten
Alt 24.10.2004, 00:40   #12
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard

Bei mir gehen die Tasten, das Problem scheint zu sein, dass sie immer $ff sind, solang sie nicht gedrückt sind. Das ist aber so, denn sie sind lowactive, werden also 0, wenn sie gedrückt werden.

Also sollte ein z.B.

Code:
      movx hl,0
      mov nn,$2000
      test   [nn+$52],$01
      callz   tasteA
      test   [nn+$52],$02
      callz  tasteB
      .
      .
      .
eigentlich gehen. Hatte da auch mal ein Problem mit Pokekamini, muss ich noch mal testen.
goldmomo ist offline   Mit Zitat antworten
Alt 24.10.2004, 17:01   #13
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

Ja danke, ich entnehme http://sublab.game-host.org/tikiwiki...p?page=Key-pad auch, das wenn ein Button gedrückt ist, an dieser Stelle das Bit GELÖSCHT wird. Man man man, ich muss sicher nochmal das Tutorial neu schreiben mit den ganzen neuen Erkenntnissen.

Wie sieht es eigentlich mit dem ROM aus? Wenn ich jetzt direkt eine *.min Datei erzeugen wollte für den PM, damit ich die dann auch auf Karte flashen könnte, dann dürfte man ja praktisch zu beginn OrgFill und sonstiges nicht benutzen. Der Speicher der Karte beginnt ja physikalisch bei 0x2100. Per OrgFill 0x2100 schreibe ich jedoch schon 8448 Byte mit Nullen voll, und erst dann kommt der String "MN". Somit würde ja der PM an Adresse 0x2100 nur zwei Nullen vorfinden, und an Adresse 0x4200 der gewünschte String "MN" stehen ?oder.
mfg olli
Vertex ist offline   Mit Zitat antworten
Antwort

  portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Sprites Masters Fire Emblem (GBA) 9 22.12.2006 19:47
SoM Sprites many moles Sword of Mana (GBA) 0 01.04.2004 13:28
Größere Sprites... Plugmug Development Abteilung 4 28.01.2004 12:30
Kirby GBA-Games nur aufgewärmte Sprites? Zak Spiele (GBA) 4 27.01.2004 16:24
max anz. geklonter Sprites Flash106 Development Abteilung 3 14.09.2003 13:13


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:19 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0
Template-Modifikationen durch TMS
PortableGaming.de © bk 2000 - 2010

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