Achtung : |
Diese Library ist mit dem PureBasic Debugger geprüft worden, trotz alle dem kann nicht ausgeschlossen werden das sich Fehler eingeschlichen haben !!! |
Daher übernimmt weder die WindowSystemCompany(r) noch Ronny Barthmann die Haftung für eventuelle Schäden !!! |
Information : |
Diese Library ist ursprünglich für den "MyCPU Emulator" gedacht gewesen jedoch kann die Library auch eigenständig verwendet werden ... |
Diese Library ist für den "No-Profit"-Einsatz bestimmt kommerzielle Projekte dagegen dürfen nur in Absprache mit der WindowSystemCompany(r) oder Ronny Barthmann durchgeführt werden !!! |
Information : |
Aus gründen Der Lesbarkeit und eines Konfliktes mit dem HTML-Format habe ich mich dazu entschieden anstatt eines Tab ein ° zu benutzen |
Wenn also irgendwo im Text ein ° auftaucht dann ersetzen sie das Zeichen in Ihren Quelltext bitte mit einem Tab |
DIE ADD-ONs FUNKTIONIEREN NUR MIT TABs EIN ° WÜRDE EIN FEHLER HERVORRUFEN RUFEN |
MyCPU Emulator -
LCD Board Add-On IIHardware Eigenschaften ( vom Realen Add-On )
Das LCD Board ist ein Add-On zur MyCPU und hat eine Auflösung von 128x64 Pixel ( 2 : 1 ) Hat eine Farbtiefe von 1 Bit und hat eine Schein Direkt-Adressierung ( Jeder Pixel ist mit den umliegenden Pixeln Verknüpfung , jedoch wird dieses Problem von der intelligenten On-Board-Software gelöst so das man per MyCPU jeden Pixel einzeln Steuern kann )
Die Befehle werden als Nummern übergeben und die Parameter als ASCII-String, wobei wehrend der Übertragung das "Send"-Pinn mit VCC belegt sein muss und auf die 8 Daten-Pinns der Daten-Block Übertragen werden muss ( High-Signal = VCC / Low-Signal = GND ). Es wird immer wenn der Takt-Pinn mit VCC belegt wird ein Byte aufgefangen, die maximale Geschwindigkeit beträgt 1 MHz ( auch wenn die Board-Software / Board-CPU schneller ist ). die Datenübertragung sieht wie folgt aus :
Funktion mit String-Parameter
1 Byte Funktions-Nummer X Byte Parameter-String Funktion mit Zahl-Parameter
1 Byte Funktions-Nummer 2 Byte 1. Parameter ( zuerst das High-Byte, dann das Low-Byte ) 2 Byte 2. Parameter ( zuerst das High-Byte, dann das Low-Byte ) sobald die Übertragung beendet ist ( vor allem bei String-Parametern ) muss das Send-Pinn wieder auf GND gezogen werden.
Die Rückgabe erfolgt sobald das Reci-Pinn mit VCC Belegt wird, sobald dies geschieht belegt das Board seinerseits das Reci-Pinn auch mit VCC und beginnt mit der Übertragung dabei sendet es auf dem Takt-Pinn immer ein Signal ( VCC ) und sendet Gleichzeitig auf dem Daten-Pinns die Daten ( High-Signal = VCC / Low-Signal = GND ) im folgenden Format :
Funktion mit String-Rückgabe
X Byte Rückgabe-String Funktion mit Zahl-Rückgabe
4 Byte Rückgabe-Zahl ( Erst das High-Byte und zum Schluss das Low-Byte ) sobald die Übertragung beendet ist gibt das Board das Reci-Pinn wieder frei ( wird mit Pull-down-Widerstand auf GND gezogen sodass beim setzen auch VCC kein Kurzschluss entsteht )
ACHTUNG : Die Rückgabe erfolgt über ein Buffer, das heißt wenn Eine Funktion gestartet wurde und eine neue gestartet wird
ohne vorher die alte Rückgabe abzufragen wird diese einfach überschrieben !!!
Software Eigenschaften ( vom Add-On-Emulator )
Dieser Emulator hat die Fähigkeit alle Funktionen und alle Bugs zu Emulieren sodass die Software die für den Emulator programmiert wurde auch auf einem Echten LCD-Board funktioniert
Die Farben für die Emulation des LCD-Board´s wurden wie Folgt bestimmt :
Ohne BoardLicht LCD Schwarz ( On ) 1518367 Ohne BoardLicht LCD Weiß ( Off ) 6989452 Mit BoardLicht LCD Schwarz ( On ) 3411201 Mit BoardLicht LCD Weiß ( Off ) 16608322
Funktionsübersicht
INIT ( Funktion 1 )
Result$ = PeekS(CallFunction(0,"init"))
Beschreibung
Initialisiert das LCD-Board
Rückgabe
Result$ = "Signatur°Name°Versions-Part 1°Versions-Part 2°Versions-Part 3°Versions-Part 4°Add-On-ID"
Rückgabe Beschreibung
Signatur = "MyCPU" = Name vom Emulator für den es gedacht ist "MyCPU Emulator"
Name = "LCD-Matrix-Board-Programm" = Name vom Board
Versions-Part 1 = "0" = Hauptversion ( X.0.0.0 )
Versions-Part 2 = "0" = Unterversion ( 0.X.0.0 )
Versions-Part 3 = "2" = Unterversion 2. Grades ( 0.0.X.0 )
Versions-Part 4 = "0" = Unterversion 3. Grades ( 0.0.0.X )
Add-On-ID = "" = Eindeutige Erkennungs-ID des Boardes ( Hex-Schreibweise )Informationen
Die ID sollte immer im HEX-Format gelesen werden da auch Zeichen von A-F vorkommen !!!
Die absolute Versionsnummer kann wie folgt ermittelt werden :
VersionNummer = VersionsPart1*16777216+VersionsPart2*65536+VersionsPart3*256+VersionsPart4
INFO ( Funktion 2 )
Result$ = PeekS(CallFunction(0,"info"))
Beschreibung
Gibt einen Informations-String zurück
Rückgabe
Result$ = "Information"
Rückgabe Beschreibung
Information = "LCD-Matrix-Board-Modull v0.0.2.0 for MyCPU Emulator "+Chr(10)+Chr(13)+"Created by WinSysCompany Ronny"
= Information zum BoardInformationen
Es kann auch vorkommen das im Informations-String Zeilenumbruche sind ( wie hier ) diese sind immer im Format "0D 0A" ( HEX-Format ) / "13 10" ( DEC-Format )
START ( Funktion 3 )
Result$ = PeekS(CallFunction(0,"start",x,y))
Beschreibung
Startet das Board ( und öffnet das Emulator Fenster )
Eingabe
x = xPos
y = yPosEingabe Beschreibung
xPos = Emulator Fenster X-Position ( gibt es nur beim Emulator )
yPos = Emulator Fenster Y-Position ( gibt es nur beim Emulator )Rückgabe
Result$ = "state"
Rückgabe Beschreibung
state = "ready" / "error" = Erfolgreich gestartet / Beim starten ist ein Fehler Aufgetreten ( z.B. Board defekt )
Informationen
ACHTUNG : Vor dieser Funktion muss UNBEDINGT die INIT Funktion aufgerufen werden !!!
STOP ( Funktion 4 )
Result$ = PeekS(CallFunction(0,"stop"))
Beschreibung
Fährt das Board herunter und schaltet es aus ...
Rückgabe
Result$ = "Message"
Rückgabe Beschreibung
Message = "LCD-Matrix-Board-Modull is closed ..." = Beendungs-Meldung
Informationen
Es wird nicht überprüft ob der Modull wirklich Beendet wurde !!!
Es kann also sein das wenn sich die Board-Software aufgehängt hat, dass das Board dann nicht heruntergefahren wird !!!
Beim Emulator wird hierfür die PureBasic-KillThread() benutzt, die das Boardsoftware-Thread in diesem Fall abwürgt da es sonnst zu einem Systemabsturz kommen würde !!!PAUSE ( Funktion 5 )
Result$ = PeekS(CallFunction(0,"pause"))
Beschreibung
Pausiert die Board-Software
Rückgabe
Result$ = "Message"
Rückgabe Beschreibung
Message = "LCD-Matrix-Board-Modull is paused ..." / "error"
= Pausierungs-Meldung / Es ist ein Fehler beim Pausieren aufgetreten !Informationen
Es wird nicht überprüft ob das Modull wirklich Pausiert wurde ( da es bei dem Echten Board nicht nötig ist, weil es mit dem ASM-Befehl "hlt" pausiert wird )
Es wird nur Überprüft ob das Modull überhaupt aktiv ( gestartet / Initialisiert ) ist und wenn nicht ein "error" ausgegebenRESUME ( Funktion 6 )
Result$ = PeekS(CallFunction(0,"resume"))
Beschreibung
Läst die Board-Software nach einer PAUSE-Funktion wieder Fortfahren ...
Rückgabe
Result$ = "Message"
Rückgabe Beschreibung
Message = "LCD-Matrix-Board-Modull is resumed ..." / "error"
= Pausierungs-Meldung / Es ist ein Fehler beim Pausieren ausgetreten !Informationen
Es wird nicht überprüft ob das Modull Pausiert war und ob es wirklich Fortgefahren wird ( da es bei dem Echten Board nicht nötig ist, weil es keine Fehler gibt wenn es nicht Pausiert war und es beim Echten nicht nötig ist zu prüfen ob die Board-Software Fortgeführt wird da es eine Treffsichere Routine ist die Dort ins Spiel kommt. )
Es wird nur Überprüft ob das Modull überhaupt aktiv ( gestartet / Initialisiert ) ist und wenn nicht ein "error" ausgegebenPRIORITY ( Funktion 0 )
Result$ = PeekS(CallFunction(0,"priority",newpriority))
Beschreibung
Ändert die PRIORITY vom Boardsoftware-Thread
Eingabe
newpriority = Neue PRIORITY
Eingabe Beschreibung
Neue PRIORITY = Die neue Priorität die das Boardsoftware-Thread haben soll
Rückgabe
Result$ = "oldpriority"
Rückgabe Beschreibung
oldpriority = Alte Priorität von der Boardsoftware-Thread
Informationen
ACHTUNG : Diese Funktion gibt es nur beim Emulator
STATUS ( Funktion 7 )
Result$ = PeekS(CallFunction(0,"Status"))
Beschreibung
Ermittelt den Status vom Board ...
Rückgabe
Result$ = "Message"
Rückgabe Beschreibung
Message = "LCD-Matrix-Board-Modull is paused ..." / "LCD-Matrix-Board-Modull is runing ..." / "LCD-Matrix-Board-Modull is stoped ..."
= Board ist Initialisiert und Gestartet aber Pausiert / Board ist Initialisiert und Gestartet / Board ist nicht Initialisiert und Gestartet ( also Gestoppt )SENDCOMMAND ( Funktion 8 )
Result$ = PeekS(CallFunction(0,"setcommand",@String$))
Beschreibung
Sendet ein Befehl an das Board
Eingabe
@String$ = Befehl
Eingabe Beschreibung
Befehl = Befehl der ausgeführt werden soll ( siehe INFORMATIONEN )
Informationen
ACHTUNG : Bitte verwenden sie vor diese Funktion IMMER READY, da das Senden bei nicht bereiten Boards zu Board-Software-Abstürzen kommen kann und im schlimmsten fall ( nur bei echten Boards ) das Board zerstört werden kann !!! VERLETZUNGSGEFAHR
- Der Befehlsstring wird direkt als ASCII-Code an die Funktionsnummer gehangen
- Siehe weiter unten welsche Befehle es alles gibt
- Siehe weiter oben wie man String sendetGETMESSAGE ( Funktion 9 )
Result$ = PeekS(CallFunction(0,"getmessage"))
Beschreibung
Gibt eine ( Debug- ) Meldung die in der Warteschlange ist zurück
Informationen
- Diese Funktion wird von dem Board nicht unterstützt ist aber aus Kompatibilitätsgründen trotzdem vorhanden
Wenn er aufgerufen wird passiert einfach nichts ( es wird beim echten Board nicht einmal ein Interrupt ausgelöst ) ...READY ( Funktion 10 )
Result$ = PeekS(CallFunction(0,"ready"))
Beschreibung
Ermittelt ob das Board fertig ist neue Befehle zu senden ...
Rückgabe
Result$ = "Status"
Rückgabe Beschreibung
Status = "yes" / "no" / "error" = Ist bereit / Ist nicht bereit / Ist nicht Initialisiert bzw. Gestartet
Informationen
ACHTUNG : Bitte verwenden sie diese Funktion IMMER vor SENDCOMMAND, da das Senden bei nicht bereiten Boards zu Board-Software-Abstürzen kommen kann und im schlimmsten fall ( nur bei echten Boards ) das Board zerstört werden kann !!! VERLETZUNGSGEFAHR
PROGRESSSTATUS ( Funktion 11 )
Result$ = PeekS(CallFunction(0,"progress"))
Beschreibung
Zeigt ( in Prozent ( mit zwei Kommastellen )) wie weit der Aktuelle Prozess ist
Informationen
Wird nicht unterstützt ( siehe GETMESSAGE ) und gibt einfach nur "100.00" als Result$ zurück
REMOVE ( Funktion 0 )
Result$ = PeekS(CallFunction(0,"remove",x,y))
Beschreibung
Verschiebt das Emulator-Hauptfenster
Eingabe
x = xPos
y = yPosEingabe Beschreibung
xPos = Neue X-Position vom Hauptfenster
yPos = Neue Y-Position vom HauptfensterRückgabe
Result$ = "Message"
Rückgabe Beschreibung
Message = "LCD-Matrix-Board is removed ..." / "error" = Fenster wurde verschoben / Es ist ein Fehler aufgetreten
Informationen
ACHTUNG : Diese Funktion gibt es nur beim Emulator
Es wird nicht überprüft ob das Fenster wirklich verschoben wurde sondern nur ob es das Boardsoftware-Thread gibt ( also gestartet wurde )
POSITION ( Funktion 0 )
Result$ = PeekS(CallFunction(0,"move"))
Beschreibung
Gibt die Position vom Hauptfenster zurück
Rückgabe
Result$ = "x°y" / "error"
Rückgabe Beschreibung
x = X-Position vom Fenster
y = Y-Position vom Fenster
error = Es ist ein Fehler aufgetretenInformationen
ACHTUNG : Diese Funktion gibt es nur beim Emulator
Es wird nicht überprüft ob das Fenster wirklich ermittelbar ist sondern nur ob es das Boardsoftware-Thread gibt ( also gestartet wurde )
RESIZE ( Funktion 0 )
Result$ = PeekS(CallFunction(0,"resize",w,h))
Beschreibung
Verzerrt das Emulator-Hauptfenster
Eingabe
w = wSize
h = hSizeEingabe Beschreibung
wSize = Neue Breite vom Hauptfenster
hSize = Neue Höhe vom HauptfensterRückgabe
Result$ = "Message"
Rückgabe Beschreibung
Message = "LCD-Matrix-Board-Modull cannot resize ..." / "error" = Fenster kann nicht verzerrt werden / Es ist ein anderer Fehler aufgetreten
Informationen
ACHTUNG : Diese Funktion gibt es nur beim Emulator
Diese Funktion wird von dem Board nicht unterstützt ( daher die merkwürdige Meldung : "LCD-Matrix-Board-Modull cannot resize ..." )
GETSIZE ( Funktion 0 )
Result$ = PeekS(CallFunction(0,"size"))
Beschreibung
Ermittelt die Größe vom Hauptfenster
Rückgabe
Result$ = "w°h" / "error"
Rückgabe Beschreibung
w = Breite vom Fenster
h = Höhe vom Fenster
error = Es ist ein Fehler aufgetretenInformationen
ACHTUNG : Diese Funktion gibt es nur beim Emulator
Es wird nicht überprüft ob die Größe wirklich ermittelbar ist sondern nur ob es das Boardsoftware-Thread gibt ( also gestartet wurde )
Befehlsübersicht
Information : |
Bitte denken Sie daran : |
Aus gründen Der Lesbarkeit und eines Konfliktes mit dem HTML-Format habe ich mich dazu entschieden anstatt eines Tab ein ° zu benutzen |
Wenn also irgendwo im Text ein ° auftaucht dann ersetzen sie das Zeichen in Ihren Quelltext bitte mit einem Tab |
DIE ADD-ONs FUNKTIONIEREN NUR MIT TABs EIN ° WÜRDE EIN FEHLER HERVORRUFEN |
Die Befehle gelten für SENDCOMMAND und werden wie Folgt Verschlüsselt
Befehle ohne Parameter
String$ = "Befehl" Befehle mit String-Parametern
String$ = "Befehl°"+ParaA$+"°Examples Text°"+ParaB$+"°"+ParaC$ Befehle mit Zahl-Parametern
String$ = "Befehl°"+Str(ParaA)+"°152°"+Str(ParaB)+"°"+Str(ParaC) Befehle mit gemischten Parametern
String$ = "Befehl°"+ParaA$+"°"+Str(ParaB)+"°Hello World°152" Befehlsliste:
Die Befehlsliste ist in Sechs Untergruppen Aufgeteilt, wobei alle immer dieselben Ordnung haben ( Befehl , 1. Parameter , 2. Parameter , usw. )
Die Parameter die mit einem "$" gefolgt sind, sind Strings ( Also Zeichenketten )Befehle für LCD-Board-Drawing :
SetArrayPixel x y c SetMatrixPixel x y c WriteMAXArrayByte pos byte Befehle für LCD-Board-Scrolling :
ScrollLCDArrayUp count ScrollLCDArrayDown count ScrollLCDBoardUp count ScrollLCDBoardDown count Befehle für die Geometrie des LCD-Boardes :
DrawArrayLine x y w h c DrawArrayLineX x y l c DrawArrayLineY x y l c DrawArrayBox x y w h c DrawMatrixLine x y w h c DrawMatrixLineX x y l c DrawMatrixLineY x y l c DrawMatrixBox x y w h c Befehle für die Text-Unterstützung :
WriteArrayText x y t$ c WriteMatrixText x y t$ c Andere Befehle :
ClearMatrixArray ClearMatrixBoard UpdateMatrixBoard EnableLCDBoardLight DisableLCDBoardLight Befehle mit dem neuen 3DNow ( siehe weiter unten ) :
DrawArrayPoint3D x y z c DrawArrayLine3D x y w h d c DrawArrayBox3D x y z w h d c DrawMatrixPoint3D x y z c DrawMatrixLine3D x y w h d c DrawMatrixBox3D x y z w h d c Parameterbeschreibung :
pos Position im Grafig-RAM byte Byte das Geschrieben werden soll count Anzahl der Pixel x X-Position y Y-Position z Z-Position ( Tiefe bei 3D ) w Breite h Höhe d Länge ( bei 3D ) c Modus ( 0 = es wird Weiß gezeichnet / 1 = es wird Schwarz gezeichnet ) l Länge der Linie t$ Text ( ACHTUNG : ist ein String !!! ) Liste der Modelle :
LCD Board Add-On II Offizielles Erweiterungs-Modull ( 4x Vergrößerung ) LCD Board Add-On II Copy Modull ohne Vergrößerung ( also 1x Vergrößerung ) LCD Board Add-On II Size Modull mit Variabler Vergrößerung ( Fenster ist streckbar ) LCD Board Add-On II 3DNow Modull mit 3DNow-Funktionen und 4x Vergrößerung 3DNow-Infoemationen :
Nur die 3dNow-Version kann die "Befehle mit dem neuen 3DNow" alle anderen NICHT ...
wenn sie nicht wissen was für ein ( Emuliertes ) Board sie Haben können sie einfach mit den Befehlen arbeiten, denn die anderen erkennen diese Befehle nicht als Fehler sonder haben diese Befehle Gar nicht implementiert sodass sie, sie schlicht weg "übersehen" ;-)Board-Informationen :
Es wurde bis jetzt nur die Normale Version als echtes Board nachgebaut die 3 anderen Versionen ( "Copy" / "Size" / "3DNow" ) gibt es NUR als Emulator
Über : |
Diese Library und dieses Hilfe-Dokument wurden von Ronny Barthmann erstellt und sind teil des WinSysCompany-Archiv und können daher immer gedownloadet werden auch wenn es dieses Board nicht mehr gibt !!! |
Der Add-On-Emulator wurde in PureBasic v4.40 erstellt und daher basiert dieses Hilfedokument auf den PureBasic-Befehlen und dem PureBasic-Dialekt |