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 23.12.2004, 10:41   #1
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard PSX Programmieren

Hallo, habe mich in den letzten Tagen mal mit der alten PSX und ihrer Programmierung beschäftigt. Dank der Emulatoren (z.B. ePSXe) ist eine erstellen eines Programms recht einfach. Eigentlich erzeugt man nur eine Exe-Datei und lädt diese in den Emulator. Wenn man will kann man natürlich auch ISO-Images erstellen. Also Entwicklerwerkzeuge stehen wie üblich gcc und co zur Verfügung, extra Assembler gibt es auch, z.B. spasm von Hitmen. Am Sinnvollsten halte ich die Entwicklung mit gcc, aber Assembler macht auch Spass auf der Maschine.

Von der technischen Seite gesehen ist es am Anfang alles recht merkwürdig. Sehr ungewohnt ist es, dass man mit der CPU nicht auf den Grafikspeicher direkt zugreifen kann. Sondern alles durch oder mit der GPU machen muss. Da die CPU keine FPU besitzt, gibt es einen extra Prozessor für Matrixoperationen (GTE). Dieser Prozessor hat seine eigenen Opcodes und kann direkt im Code ausgeführt werden. Die CPU ist vom Type MIPSR3000A und hat einige Eigenarten. Zum einen gibt es keinen wirklichen Conditionflags, sondern es wird immer direkt geprüft und gesprungen (in einem Befehl). Nach Spruengen gibt es immer einen Delayslot, dieser kann eine Instruktion (nicht alle, siehe Pipeline) enthalten die vor! Dem Sprung ausgeführt wird. Dann gibt es noch andere Eigenarten (z.B. r0 ist immer 0). Für eine Desktop RISC CPU ist diese CPU, vom Befehlsatz aus betrachtet, sehr primitiv.
Die GPU ist auch etwas merkwürdig, hat aber auch einige Vorteile. Generell gesehen, gibt man ihr Kommandosequenzen, die sie dann ausführt. Z.B.: Zeichen Sprite mit diesen Koordinaten an diese Stelle. Kommandos können auch in verlinkten Listen übergeben werden. Alle etwas ungewöhnlich, aber trotzdem ganz nett

Hier ein kurzer Überblick:

Speicher:

2MB normaler RAM für die CPU
1MB für den Grafikchip
512KB für Soundchip


CPU:

MIPSR3000A mit 33.9 MHz
4KB Icache, 1KB Dcache
32 Register
32Bit, LittleEndian (so konfiguriert)
keine FPU

GTE:

32 Daten & 32 Kontrollregister

GPU:

1 MB Videospeicher
2 KB Texturecache
kann Polygone, Sprites, Linien zeichnen
Shading: keins, Flat, Gourad
Transparenzen möglich
...

SPU:

24 Kanal
512 KB Puffer
16 Bit

CDROM:

1 bis 2 fach speed

Links (wäre schon, wenn ihr bessere findet)

http://www.geocities.co.jp/Playtown/2004/psx/ny_e.htm
http://www.hitmen-console.org/

Hab hier noch ein Beispiel, welches einen Text und eine Hexzahl auf dem BS ausgibt. Wäre natürlich in C einfach zu verstehen. Aber man kann gut die Assemblersyntax an diesem Beispiel ablesen.
t die Assemblersyntax an diesem Beispiel ablesen.


Code:
        org $80010000
            
        li 	sp, $801fff00
        li 	k1, $1f800000           ;set to hardware base (nicht cached)
                                
	li	a0,$08000009		;1001 W0=01 (Width=320) H=0 
                                    ;(Height=240) VIDEO=1 (PAL) RGB=0 (15BIT) ...                              
        jal     InitGPU         	;command 8
       	nop
       	
       	jal WaitIdle
        nop
       	
       	;**** clear screen (draw rect 320x240)
       	
	jal	clear_screen
	nop

        jal WaitIdle
        nop

	;**** copy font 
                             
        la	a0,font   
        li	a1,$00000140		;x=320
        li	a2,$00180100		;256x24
        li	a3,1			;16 bit
        jal	m2v_copy     
        nop
   
   	;**** draw text          
          
      	li	a0,$00200010
      	la	a2,text
      	
looptext
      	
      	lbu	a1,(a2)
      	beq	a1,zero,stoptext
      	addiu	a2,a2,1			;
      	jal	char8x8
      	nop
      	addiu	a0,a0,8			
      	j	looptext 
stoptext
	nop 
      
      	li	a2,$0123ABC0
      
      	;**** draw long
      	
      
      	li	a0,$00300010
        li	a2,$0ABCDEF0	;test long
        ori	a3,zero,$8	;8 ziffern
        
loopl	srl	a1,a2,28
	jal	hbyte8x8      
	subiu	a3,a3,1		;delay slot
	sll	a2,a2,4
	bgtz	a3,loopl
	addiu	a0,a0,8		;delay slot
                                   
stop	b	stop                                
        nop               
 
;a0=yyyyxxxx 	;dest on screen
;a1=char	

char8x8		
	subiu	a1,a1,32
	
	srl	t0,a1,5		
	and	t1,a1,$1f	
	sll	t0,t0,11	;*8*32	
	sll	t1,t1,3		;*8
	or	t1,t0,t1

	lui	t0,$7480
	ori	t0,t0,$8080	;sprite 8x8
	sw	t0,GP0(k1)
	sw	a0,GP0(k1)
	sw	t1,GP0(k1)	;0000vvuu
	jr	ra		;   
   	nop
   
;a0=yyyyxxxx 	;dest on screen
;a1=hbyte   
   
hbyte8x8
	
	move	t4,a1
	sub	t3,a1,9
	bgtz	t3,ish		;>9
	move	t2,ra		;save ra (delay slot is ever taken)	
	addiu	a1,48-55	;+0
ish	jal   	char8x8		
	addiu	a1,55		;+A (delay slot)
	jr	t2   
   	move	a1,t4		;delay slot
   	
        include sys2.s        ; GPU routines   
             
text	db	"Die PSX gibt einen Text aus :D",0             
             
font   	incbin  8x8_816x8_1.gfx
	incbin  8x8_816x8_2.gfx
	incbin  8x8_816x8_3.gfx
Aussehen wuerde es dann so:
Miniaturansicht angehängter Grafiken
PSX Programmieren-unbenannt.gif  
goldmomo ist offline   Mit Zitat antworten
Sponsored Links
Alt 23.12.2004, 10:44   #2
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard RE: PSX Programmieren

Hier noch die restlichen Quellen und das Exe-File.
Angehängte Dateien
Dateityp: zip daten.zip (6,2 KB, 148x aufgerufen)
goldmomo ist offline   Mit Zitat antworten
Alt 30.12.2004, 20:49   #3
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard RE: PSX Programmieren

So, habe jetzt auf gnu-tools umgestellt, also läuft neben den reinen Assembler auch gcc. Wenn es jemand benötigen sollte, soll er bescheid sagen dann lade ich die ganzen Daten mal hoch.

Damit man sich CD sparen kann, geht auch die Verbindung über den PC<->PSX. Dazu braucht ihr eine XPloder Modul und die entsprechende Software (läuft meist nur unter W95/98/ME, deshalb habe ich ein altes Notebook benutzt). Habe mal einen simples Programm geschrieben, dass ein Polygon mit der GTE dreht (Vektorprozessor). Siehe Foto. Werd wenn ich Zeit bzw. Lust habe mal weiter machen. Wenn jemand Lust hat mitzumachen, sag bescheid
Miniaturansicht angehängter Grafiken
PSX Programmieren-clipboard-1.jpg  
goldmomo ist offline   Mit Zitat antworten
Alt 31.12.2004, 02:28   #4
Moderator
 
Benutzerbild von goldmomo
 
Registriert seit: 03.02.2003

goldmomo hat die Renommee-Anzeige deaktiviert

Standard RE: PSX Programmieren

Nach langem suchen habe ich endlich einen Emulator (psemupro) mit Debugger gefunden Ist zwar nur ein minimaler Debugger mit Disassembler, aber man kann einen (und nur einen) Breakpoint setzen. Aber immerhin kann man alle Register (CPU,GTE) sehen und so schnell Fehler finden oder die genaue Funktionsweise der GTE ergründen/debuggen.
Miniaturansicht angehängter Grafiken
PSX Programmieren-clipboard-2.png  
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
Nintendo DS programmieren? Tomarr Sovai Sonstiges (Nintendo DS) 2 16.04.2007 13:19
homebrew programmieren Animus Homebrew (PSP) 0 26.11.2006 12:08
Flash programmieren Ranger Sonstiges (PSP) 2 21.09.2006 21:56
Handhelds Programmieren... testest Development Abteilung 7 03.07.2006 14:59
Zeitkritisches Programmieren! mad4media Development Abteilung 4 08.07.2003 20:02


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:17 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