D
@Quiche-Lorraine sagte in monotonic_buffer_resource sorgt für DMA Interrupt Error:
Mein Tipp. Mache mal einen Belastungstest. Jage mal ordentlich Daten über den DMA und schaue ob die Daten stimmen.
Der Tipp ist gut, aber ich bombardiere den Grafikchip schon derartig, dass mir schon der VIF FIFO voll läuft.
Und das ist das Problem. Durch die monotonic buffer resource schränke ich den restlichen Heap weiter ein.
Beim ersten Match ist noch alles Schick, nachdem das erste Match vorbei ist, geht es wider in das Menü zurück.
Da werden wider die Sprites und Texturen für das Menü geladen, schön mit new uint16_t usw.
Zu beginn des zweiten Kampfes werden die Menü Texturen wider gelöscht.
Dadurch, das der VIF FIFO voll ist, klaut er mir RAM und ich bin schon am RAM Limit angekommen mit 28Mb von 32.
2Mb gehen schon durch kernel und IOP RAM Hops, und der VU Micro code liegt auch im RAM.
Irwas Fragmentiert also noch immer meinen HEAP, sodass der VIF Fifo irgendwann außerhalb des Speichers liegt.
Wenn ich den unique_ptr nutze findet die CPU wahrscheinlich genug Lücken wo sie die Strukturen hin Pakt, ohne das es knallt.
Einige Sachen habe ich schon gefundene,d ie HEAP Fresser sind, unordered_map und vor allem
unordered_map<int, std::vector> sind absolute heap Killer.
std::vector ist auch schon problematisch, std::function, cout, alles heap Killer.
Von Modernen c++ kann man nur die Smartpointer und std::array verwenden, der Rest ist problematisch.
@Finnegan sagte in monotonic_buffer_resource sorgt für DMA Interrupt Error:
Ich bin da sowas von nicht drin und kann nichts wertvolles beitragen, aber dennoch: Playstation 2? Alle Achtung! Nach dem, was ich gehört habe, gibt es wohl nur wenige Computersysteme, die dermaßen kompliziert korrekt und nicht zuletzt effizient zu programmieren sind. Viel Erfolg bei der Fehlersuche!
Es geht eigentlich, dank sdk auf github und google und KI kommt an recht schnell rein. Datenblätter gibt es auch irwo auf github. Und das Original Sony sdk findet man auch wenn man will. Mit einem Haufen Beispiel-Code.
Am Anfang war ich auch recht überfordert, vor allem die Grafikkonfiguration war der Hass.
Wenn du ein PC Spiel auf die PS2 Portierst, muss du dich gedanklich davon lösen, dass es Auflösungen wie 800x600 oder 1024x768 nicht gibt auf der PS2, es seiden man konfiguriert PS2 auf VGA output, was Grütze ist, weil die keinen V_Sync ausgibt nur sync on green. Und ein VGA Adpter für die PS2 sind ohnehin Goldstaub.
Beim Röhren TV muss alles ein ganzes teilbares von 64 sein.
Zum debuggen ist PCSX2 recht gut. Aber bei manchen Problemen schließt sich das Programm einfach oder es bootet ins BIOS. Das booten ins bios ist noch ok, weil man kann noch ein Register dump ausgeben. Wenn aber PCSX2 abstützt tapst man im Dunkeln. Aber PCSX2 speichert einen stack trace, das ist ultra nützlich
Wo PCSX2 gar nichts nützt ist das Timing bei DMA oder beim PSCRT Register Einstellungen, die werden komplett ignoriert.
Dann muss man sich mit FreeMcBoot und PS2-client und einer Retail Konsole helfen.
Oder man hat das Glück (so wie ich) und hat ein PS2 DEV Tool (DTL-T10000H) zu hause.
Das DEV Tool hat aber einen Nachteil, es speichert keinen Stack Trace, da ist einfach die Hard- und Software(dsedb) zu alt.
Es ist nicht schwer Playstation 2 zu programmieren aber definitiv anspruchsvoll.