Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249692 (11128)
  Suchen
 Zurück zur Übersicht
 AutorThema: Neue Assembler Dll -> ProSpeed.dll
Frank Abbing
Datum:24.05.01 20:19 Antwortenals Email verschicken (frankabbing@12move.de) 


Obwohl ich unten schon mal gepostet hatte, schreibe ich hier nochmal einen eigenen Beitrag, um Gelegenheit zu geben, eigene Ideen mitzuteilen:

Ich plane eine DLL in Assembler zu schreiben. Diese soll >> ProSpeed.dll << heißen, und einigen Profan-Befehlen kräftig Feuer unterm Hintern machen, speziell die Befehle, die man für Spieleprogrammierung in Profan dringend benötigt.
Ich habe da schon ganz konkrete Ideen (hallo Roland, du kennst ja schon einige!).

Wer noch Ideen hat, und diese umgesetzt haben möchte, der melde sich bei mir bitte unter meiner Email-Adresse oder postet hier unter diesem Beitrag.

Ich hoffe trotz des Sommerloches auf rege Beteiligung!

Bis dahin,

Frank


Sascha
Datum:24.05.01 21:16 Antwortenals Email verschicken (sascha@willecke-net.de) 


Hallo Frank,

was meinst du denn eingentlich mit Funktionen die man für die Spiele Programmierung benötigt!?

also die ganzen funktionen zum rechnen könnten noch schneller sein! besonders mit floats! aber sonst weiß ich nix!

gruß
sascha


Frank Abbing
Datum:24.05.01 22:46 Antwortenals Email verschicken (frankabbing@12move.de) 


Hallo Sascha!

Byte, Word u. Long-Befehle die wesentlich schneller arbeiten, um Tabellen (Bereiche) zu beschreiben z.B.
In meinen Spielen benutze ich sehr häufig solche Tabellen, um Level zu speichern, Computergegner mit KI auszustatten usw.
Wenn die Spiele dann auch noch in Echtzeit ablaufen sollen, ist das mit den herkömmlichen Profan-Befehlen fast unmöglich. Z.B. um einen Wordbereich nach bestimmten Words zu durchsuchen (mit sagen wir mal 4000 Words) dauert es 2-3 Sekunden. Da bleibt die Echtzeit natürlich auf der Strecke !!!
Versuch mal einen Bereich mit 10000 Bytes zu generieren (zufallsmäßig, für einen Level z.B.), wie lange dauert das bei dir ?
Und ein Level mit 10000 ist noch ein kleines Spielfeld (100x100 Kästchen)...

Reicht dir das als Antwort?

P.S. Schade, das du auf meine letzte Email nicht geantwortet hast, Sascha. Aber ich warte noch...


Roland G. Hülsmann
Datum:25.05.01 12:46 Antwortenals Email verschicken (rgh-soft@t-online.de) 


>> Z.B. um einen Wordbereich nach bestimmten Words zu durchsuchen (mit sagen wir mal 4000 Words) dauert es 2-3 Sekunden

Hier ließe sich sehr zeitsparend die Funktion @MemPos einsetzen! Da auch Null-Bytes und Sonderzeichen im Suchstring vorkommen dürfen, kann hier nach einer beliebigen (!) Anzahl von Bytes mit beliebigem Wert sehr schnell gesucht werden. Diese Funktion ist zwar "nur" in Delphi programmiert und nicht in Assembler, aber ich denke, für die meisten Fälle ist es schnell genug.

(Falls jemand genau diese Funktion mit diesen Parametern in Assembler programmiert, kann ich diese natürlich gerne in PROFAN einbinden. Es wäre nicht die erste Funktion, die in Assembler programmiert ist. Das gilt auch für andere Funktionen: Wenn jemand einen schnelleren Code für die Funktion hat, einfach mir zusenden und ich werde es austesten und ggf. übernehmen.)

Prinzipiell finde ich die Idee Deiner DLL begrüßenswert. Weiter so!

Roland


Frank Abbing
Datum:25.05.01 14:05 Antwortenals Email verschicken (frankabbing@12move.de) 


Hier ließe sich sehr zeitsparend die Funktion @MemPos einsetzen! Da auch Null-Bytes und Sonderzeichen im Suchstring vorkommen dürfen, kann hier nach einer beliebigen (!) Anzahl von Bytes mit beliebigem Wert sehr schnell gesucht werden. Diese Funktion ist zwar "nur" in Delphi programmiert und nicht in Assembler, aber ich denke, für die meisten Fälle ist es schnell genug.

Danke, die Funktion hatte ich noch gar nicht entdeckt; hast du auch noch eine schnelle Lösung für das Beschreiben von Bereichen parat?

Ich muß meine Assembler-Kenntnisse noch arg trainieren, ist doch ein bischen anders als am Amiga...

Mal sehen was kommt, bin ganz optimistisch!

Frank



Frank Abbing
Datum:25.05.01 21:41 Antwortenals Email verschicken (frankabbing@12move.de) 


MemPos findet ja nur eine Bytefolge!
Das bringt mir noch nicht viel, hier die erste Alternative meiner neuen ProSpeed.DLL, sie testet einen Teil eines Bereiches (oder den ganzen) auf ein bestimmtes Byte und meldet, wie oft das Byte in dem Bereich vorkommt.

CountBytes (V,A,N,B)


V : Bereichsvariable
A : Long - Offsetadresse
N : Long - Anzahl zu durchsuchender Bytes
B : Zu testendes Byte

Ergebnisse: Long - Anzahl gefundener Bytes

Superschnell die Routine!!!! Ein Test mit einem Bereich von 10000 dauerte in Assembler nicht mal 1 Mikrosekunde, mit Profan geschrieben ca. 1230 Mikrosekunden...

Hier meine getestete Profan Variante:

Clear zahl2&
WhileLoop 10000
by%=Byte(bereich#,&loop)
Case by%=111:Inc zahl2%
EndWhile
anzahl&=zahl2%

Demnächst geplant:

CountWords(...)
CountLongs(...)

Frank


Roland G. Hülsmann
Datum:26.05.01 00:34 Antwortenals Email verschicken (rgh-soft@t-online.de) 


Ein paar Ideen habe ich noch:

Char Bereich#,0ffset& = Chr$(45)+Chr$(78)+Chr$(16)+Chr$(234)+...

Hiermit kann man in EINER Zeile mehrere Bytes in eine Bereichsvariable schreiben. Ist deutlich schneller als mehrere Byte-Befehle.

Char Bereich#,Offset&=MkStr$(Chr$(14),18000)

Hiermit kann man recht schnell einen Bereich (oder einen Teil) mit einem bestimmten Wert (oder Muster) füllen.




Frank Abbing
Datum: 26.05.01 00:51 Antwortenals Email verschicken (frankabbing@12move.de) 


Danke Roland,

du hast mir einige Anregungen gegeben !

Vielleicht fällt den anderen Profanern ja auch noch was ein, trotz des guten Wetters ;)

Frank


 Zurück zur Übersicht