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 II

Hardware 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 Board

Informationen

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 = yPos

Eingabe 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" ausgegeben

RESUME ( 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" ausgegeben

PRIORITY ( 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 sendet

GETMESSAGE ( 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 = yPos

Eingabe Beschreibung

xPos = Neue X-Position vom Hauptfenster
yPos = Neue Y-Position vom Hauptfenster

Rü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 aufgetreten

Informationen

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 = hSize

Eingabe Beschreibung

wSize = Neue Breite vom Hauptfenster
hSize = Neue Höhe vom Hauptfenster

Rü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 aufgetreten

Informationen

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