Mode X und EGA Parrallax

  • Die Figuren sind auch toll!

    386SX- 20 Mhz "Erster eigener Rechner!2" NoName Komponenten

    486DX -30 "Industrie PC" auf Steckkarte

    Super Sockel 7 Gigabyte GA-5AA 3Dfx Voodoo 3500 TV

    AMD "Geode" ebenfalls Steckkarte für Backplane

    3x IBM Netvista 8364 "ThinRetroSystem" 1-2 von denen würde ich tauschen...


    "und noch so einiges mehr... "

  • die Figur habe ich der einfach heit halber von einer grossen einfach aufs format geschrumpft und mit meinem geschriebenen 32x32Pixel 256Farben umwandler auf texturformat umgewandelt. War eine Open Source sache wo ich die abgegriffen habe.

    Ich werde später aber selber komplette Figuren dazu erstellen, gefällt mir besser wenn möglichst alles eigen ist.

    Und es macht auch irgendwie spaß das alles zu erstellen.


    Bisher habe ich nur Final Fantasy Mods für 3D Drucke gemacht. Und ein paar komplette Figuren zum drucken ohne Texturen.

    Da sollte iso mit nur 32x32 Pixel doch einfacher sein.

  • Die letzten Tage nicht so die Zeit gehabt, aber immerhin etwas den Code aufgeräumt.


    PA0X0001.CPP


    wenn sich 4 charaktere überm Bildschirm bewegen, bricht die Geschwindigkeit ordentlich weg bei kleineren Rechnern.

    Erst ab einem 486 DX2-66 komme ich auf konstannte 20FPS. Der 486 DX50 ist spürbar langsamer trotz des 50MHZ FSB.

    Also denkte ich wird vermutlich doch die CPU so stark ausgelastet???


    Auf einem 133MHZ System mit Isa Grafikkarte schafft er deutlich mehr FPS, also ist nicht der ISA Bus am Bremsen.

    Ich denke die "Ebenen" Prüfung Vordergrund / Hintergrund mit seinen sehr vielen RAM zugriffen und vergleichen bremmst sehr stark ab.

    Muss mal schauen wo ich Rechenleistung einsparen kann.

  • Ich denke immer noch, dass ein Switch auf einen 32 Bit Compiler einiges an Performance heben könnte. Keine Verdopplung, aber gewiss messbar.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • welche gescheiten gibt es denn da unter DOS.

    Watcom und DJGPP sind das beide für DOS lauffähige?


    DJGPP hatte ich schonmal runter geladen über links auf der Seite die du verlinkt hattest, da funktionieren aber nicht mehr alle Links. Und er meckerte immer das Dateien fehlen.

    gibt es da keinen kompletten Download in nur einer Datei der zusammen passt.


    Wenn ich da nicht alles extrem ändern muss im Code würde ich das mal versuchen.

  • Ja doch, da es Protected Mode wird musst du egal wie du es drehst einiges ändern. Ich überlege gerade ob es einen 32 Bit Real Mode Compiler gibt. Alternativ könntest du auf 32 Bit Inline Assembler umstellen... oder halt 32 Bit Assembly Sourcen für die teuersten Routinen daneben legen und zum Programm linken.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Der 486 DX50 ist spürbar langsamer trotz des 50MHZ FSB.

    Also denkte ich wird vermutlich doch die CPU so stark ausgelastet???


    Auf einem 133MHZ System mit Isa Grafikkarte schafft er deutlich mehr FPS, also ist nicht der ISA Bus am Bremsen.

    Ich denke die "Ebenen" Prüfung Vordergrund / Hintergrund mit seinen sehr vielen RAM zugriffen und vergleichen bremmst sehr stark ab.

    Muss mal schauen wo ich Rechenleistung einsparen kann.

    Das ist ja sehr interessant! Historisch gilt ja der ISA bus als Engstelle, ohne dir zu nahe treten zu wollen, würde das bedeuten das es im Programm noch größere Optimierungsmöglichkeiten gibt. Auf der anderen Seite gab es damals überhaupt ein vergleichbares Spiel das auf dem 386er lief? Wenn nein muss auch das einen Grund gehabt haben...

    386SX- 20 Mhz "Erster eigener Rechner!2" NoName Komponenten

    486DX -30 "Industrie PC" auf Steckkarte

    Super Sockel 7 Gigabyte GA-5AA 3Dfx Voodoo 3500 TV

    AMD "Geode" ebenfalls Steckkarte für Backplane

    3x IBM Netvista 8364 "ThinRetroSystem" 1-2 von denen würde ich tauschen...


    "und noch so einiges mehr... "

  • Die Grafik ist ähnlich wie Ultima 7 vom Aufbau, sowohl der Map Aufbau als auch die Kachelgrösse ist vermutlich ähnlich / gleich.

    Auf einem 386DX40 läuft Ultima eigentlich ganz gut, wobei ich schätze das das auch nicht über 10FPS sind im schnitt.

    Wenn auf dem Bildschirm ein Rudel Wölfe auftaucht scheint es auch ganz gut ein zu brechen unter der Grafiklast.

    Generell waren die spiele früher alle ziemlich "leer" da liefen nicht so extrem viele Charaktere gleichzeitig über die Map.


    Heute sind >30FPS und kurze Ladezeiten ja schon selbstverständlich, in den 80/90er Jahren waren es selten 30FPS und Ladezeiten waren oft extrem lang.

  • Zumindest auf PCs! Wer auf Konsolen in den 80ern und 90ern weniger als 50Hz gemacht hat galt als ruckelig. Daher ja die ganzen Custom Chips um das sicherzustellen… auf dem PC muss die CPU das ja quasi alleine machen.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • ich hatte jetzt zum vergleichen mehrere DX50 und DX2-66 Boards genommen, wenn der DX50 jetzt schneller gewesen wäre, hätte ich darauf schließen können das die bremse irgendwo auf dem Board Eventuel RAM gewesen wäre. Da der DX2-66 aber schon spürbar schneller war, gehe ich davon aus das wirklich die CPU so viel Rechnen muss das sie am ende ist.

    Ich kann noch ein paar Prüf Routinen versuchen ein zu sparen. Wenn ich vor dem darstellen der Kreaturen prüfe ob es überhaupt überlagernde Texturen irgendwo gibt, dann braucht die CPU nicht jeden Pixel prüfen.

    Im Grunde muss ich hierzu ja nur an den 4 äußeren ecken prüfen ob es eine überlagernde Textur gibt, ist da keine, was sehr häufig der fall sein wird, dann könnte ich in eine andere Funktion für das Zeichnen erstellen die geladen wird, die sämtliche Prüfungen weg lässt.


    Die "Pixelweise" Prüfung liegt in einer separaten Funktion aktuell, frage ist halt ob es schneller wird wenn nicht ständig zwischen den Funktionen gesprungen wird?

  • Also ich könnte mir vorstellen, dass man Transparenztests und solche Sachen auf 32 Bit erweitern könnte und eventuell vier Pixel auf einmal testen könnte. Das gleiche kann man vermutlich auch erstmal mit 16 Bit und zwei Pixeln machen. Zum Beispiel wenn beide Pixel (also das gesamte Register) 0 sind (transparent) kann man direkt skippen zu den nächsten zwei Pixeln. Das sollte am Rand von Sprites ja öfter vorkommen. Da muss man mal genau auf die Funktionen schauen. Und ja, Inlining würde da auch ein bisserl was bringen. Und auch mal schauen ob es Invarianten gibt, die sich in den Schleifen nie ändern und dann eventuell aus der Schleife rausziehen.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • kann grad auf der Simulation DOSbox was arbeiten.

    um das ganze etwas zu übertreiben habe ich dem System 150 Figuren zeichnen lassen und ich habe jetzt eine abfrage die prüft ob an einem der 4 Eckpunkte eine überlagernde textur ist vorhanden ist, wenn ja wird pixelweise geprüft und dann gezeichnet.

    Wenn keine überlagernde Textur vorhanden ist, wird sofort gezeichnet.

    bei 150 Figuren in der Dosbox sind es 6 zu 9 FPS... mal schauen eventuell kann ich das heute Abend noch was verfeinern und auf dem "kleinen" testen.

  • Ja sehr coole Idee. DOSBox ist natürlich immer herrlich inakkurat, weil die VGA Karte dort sehr viel Bandbreite hat. 86Box ist da schon realistischer... Bin mal gespannt, wieviel es in Echt bringt.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

  • Da das spiel so gut es geht open world sein soll, habe ich natürlich ein speicher problem wenn es zu viele texturen werden und wenn die Map zu gross ist.


    Daher habe ich die komplette Welt in Kartenausschnitte von 16x16 Kacheln unterteilt, welche in einzelnen dateien abgelegt werden XXYY.txt.


    Der Texturspeicher für die umgebung ist aktuell auf 200 Texturen reserviert. hinzu kommen 200 texturen für Kreaturen/Chars, alle sind 32x32Pixel gross 1024byte, somit bleibt nicht mehr so extrem viel von den 640kb über.


    Der Texturspeicher wird später in Textur Sets unterteilt welche ich überlege auf ca. 20 Stück zu setzen, somit sind immer 10Sets a 20 Texturen geladen.

    in der Kartenausschnittdatei wird hinterlegt welches texturen "Set" benötigt wird.


    Ändert sich die Lanschaft können nicht mehr benötigte Sets ersetzt werden durch andere Textursets, somit kann ich im grunde unbegrenzt Texturen für die gesamte Welt nutzen und auf einen Bereich von einem Kartenausschnitt 16x16 Kacheln aber maximal 200 verschiedene.

    Es muss halt nur immer sichergestellt sein das für die angrenzenden Kartenabschnitten immer alle texturen richtig geladen sind.


    Bisher ist es teilweise nur theorie, technisch lässt es sich so definitiv umsetzen...frage ist nur wie lange die Ladezeiten sind beim Setwechsel.

  • Wenn du im Realmode bleibst wäre immer noch EMS eine coole Erweiterung. Da kannst du die Texturen zwischenlagern und reinpagen, wenn sie gebraucht werden. Dürfte schneller sein als von Platte zu holen. Ich bin unsicher ob es sich mehr lohnt die Daten dann in einen konventionellen Puffer zu kopieren, oder ob du direkt aus dem eingeblendeten EMS Segment heraus zeichnest. Müsstest du mal ausprobieren.

    root42 auf YouTube


    80486DX@33 MHz, 16 MiB RAM, Tseng ET4000 1 MiB, GUSar Lite & TNDY & SnarkBarker, PC MIDI Card + SC55 + MT-32, XT CF Lite, OSSC 1.6

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!