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 19.09.2004, 17:03   #1
TMC
 
Registriert seit: 23.04.2003

TMC hat die Renommee-Anzeige deaktiviert

Standard Keine Rekursion?

Hi,
ich moechte gerne in meine 3D-Engine den Quicksort einsetzen, habe den auch im groben verstanden, aber wie setze ich den jetzt um? Beim GBA-Assembler kann man keine Verzweigungen innerhalb eines Unterprogrammes machen.

Wer kann mir in groben Zuegen nochmal erklaeren wie der Algo genau funktioniert? Ich habe schon google befragt aber kein befriedigendes Ergebnis gefunden

cya
TMC ist offline   Mit Zitat antworten
Sponsored Links
Alt 19.09.2004, 18:20   #2
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 04.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard RE: Keine Rekursion?

Natürlich kann man Verzweigungen in einem Unterprogramm machen, musst nur den LR sichern (z.B. auf dem Stack).

Hier mein altes Qsort

Code:
;****************************************************************
;*
;* qsort
;*
;* in:	r0 = array
;* 	r1 = left
;* 	r2 = right
;**	
;*	r10 = &getcont
;*	r11 = &swapcont
;*
;*
;* waste not r7,r12
;*
;*********************************************

	.global	qsort_ex
	.type	qsort_ex,function
qsort_back

	stmfd	sp!,{r5,r6,lr}

	cmp	r2,r1			;right<left
	ble	nSort2
	
	stmfd	sp!,{r1,r2}		;save l&r
	
	mov	r3,r1			;r3 (key) = getcont(r0 (array),r3 (left));
	mov	lr,pc
	mov	pc,r10
	
	add	r4,r1,#1		;i=left+1	;r4=r1+1
	mov	r5,r2			;j=right	;r5=r2
	
loopA2					

loopB2					
	cmp	r4,r2			;if(i>=right) 	;if(r4>=r2) break;
	bge	loopB_e2
	
	mov	r6,r3			;save key (r6=r3)
	
	mov	r3,r4			;r3 = getcont(r0 (array),i (r4))
	mov	lr,pc
	mov	pc,r10
	
	cmp	r3,r6			;if(r3>r6) break;
	mov	r3,r6			;restore key
	blt	loopB_e2

	add	r4,r4,#1		;i++

	b	loopB2
loopB_e2

loopC2
	cmp	r5,r1			;if(j<=l) 	;r5<=r1	break
	ble	loopC_e2
	
	mov	r6,r3			;save key
	
	mov	r3,r5			;r3 = getcont(r0 (array),j (r5)) 
	mov	lr,pc
	mov	pc,r10
	
	cmp	r3,r6			;r3 < r6 (key) break;
	mov	r3,r6			;restore key
	bgt	loopC_e2
	
	sub	r5,r5,#1		;j--

	b	loopC2
loopC_e2	

	cmp	r4,r5			;if( i (r4)>=j (r5) ) break;
	bge	loopA_e2

	
	mov	r8,r4			;i
	mov	r9,r5			;j	
	mov	lr,pc			;swapcont(array,i,array,j);
	mov	pc,r11
	
	b	loopA2
loopA_e2	

	mov	r8,r5			;j
	mov	r9,r1			;left
	mov	lr,pc			;swapcont(array,j,array,left);
	mov	pc,r11
	
	ldmfd	sp!,{r1,r2}
	
	mov	r6,r2
	orr	r6,r6,r1, lsl #16
	
	sub	r2,r5,#1		; quick_sort(array, left, j-1);
	bl	qsort_back
	
	mov	r2,r6, lsl #16
	mov	r1,r6, lsr #16
	mov	r2,r2, lsr #16
	
	mov	r6,r2
	orr	r6,r6,r1, lsl #16
	
	add	r1,r5,#1
	bl	qsort_back		; quick_sort(array, j+1, right);
	
	mov	r2,r6, lsl #16
	mov	r1,r6, lsr #16
	mov	r2,r2, lsr #16

nSort2	
	ldmfd	sp!,{r5,r6,lr}
	bx	lr
Hier Beispiele für die get und swap Fukntionen
Code:
****************************************************************
;*
;* getcont 	(bekomme Key an Stelle r3 von Polygonliste r0)
;*
;* r0 = adr,r3 = pos
;* ret: r3 = cont (r7,r12 for free use)
;*
;****************************************************************
getcont
	mov	r7,r3, lsl #3
	add	r7,r7,#6		;Polygon Tiefe 
	ldrsh	r3,[r0,r7]
	bx	lr

;****************************************************************
;*
;* swapcont 	(tausche Polygon Stelle r3 von Polygonliste r0)
;*
;* r0 = adr, r8 = i (tmp), r9 = j (tmp)  (r7,r12 for free use)
;*
;****************************************************************

swapcont

	add	r8,r0,r8, lsl #3
	add	r9,r0,r9, lsl #3
	
	ldr	r7,[r8]		;Tausche 8 Byte 
	ldr	r12,[r9]
str	r7,[r9],4
	str	r12,[r8],4
	
	ldr	r12,[r9]
	swp	r7,r12,[r8]
	str	r7,[r9]

	bx	lr
goldmomo 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
Keine Taskleiste, keine Icons, der Leere Bildschirm oedicleu PC/Mac 10 13.05.2008 19:33
Keine Fossilien ? TheKey Animal Crossing: Wild World (Nintendo DS) 6 01.03.2007 18:10
Keine Verbindung icebreaker Onlinefeature (PSP) 11 26.05.2006 13:47
Keine RPGs? Gahix666 Spiele (PSP) 27 18.09.2005 12:56
keine musik CopEater Hardware (N-Gage) 7 24.10.2003 11:38


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:38 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2018, 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