Die Z80 -Bibliothek implementiert einen schnellen, kleinen und genauen Emulator des Zilog Z80. Es emuliert alles, was bisher über diese CPU bekannt ist, einschließlich der undokumentierten Verhaltensweisen, Memptr, Q und dem besonderen Reset. Es hat auch die Ehre, das erste Open-Source-Projekt gewesen zu sein, das den Interrupt-Modus 0 vollständig nachahmt.
Der Quellcode ist in ANSI C für maximale Portabilität geschrieben und wird ausgiebig kommentiert. Ziel war es, ein gut strukturiertes, leicht verständliches Stück Software zu schreiben. Etwas Solides und Elegantes, das den Test der Zeit bestehen kann, ohne wesentliche Veränderungen erforderlich zu machen.
Dieser Z80-CPU-Emulator verfügt über ein klassisches Design mit Granularität auf Befehlsebene, das die beste Leistung liefert und gleichzeitig eine angemessene Flexibilität bietet, um Genauigkeit auf das T-St-State-Level zu erreichen.
Die Granularität auf Befehlsebene impliziert, dass die Ausführung einer bestimmten Anweisung außer in einigen gut definierten Fällen erst aufhören kann, wenn alle internen M-Zykle verarbeitet wurden (dh Anweisungen werden nicht in Mikrooperationen unterteilt). Darüber hinaus werden Register nur einmal pro Anweisung geändert und der T-State-Zähler wird normalerweise aktualisiert, nachdem eine vollständige Anweisung ausgeführt wurde.
Anweisungen, Flaggen, Speicherzugriffe, Interrupts, Taktzyklen usw. werden jedoch entsprechend den verfügbaren technischen Dokumentationen, den nach Jahrzehnten der Forschung an Z80 und elektronischen Simulationen vorgenommenen Ergebnisse genau emuliert. Und natürlich führt der Emulator die bisher umfassendsten Tests durch, einschließlich aller drei Haupttestsuiten:
Diese Programmgruppe soll den Autoren der Emulator helfen, die gewünschte Ebene der CPU -Emulationsauthentizität zu erreichen. Jedes der eingeschlossenen Programme führt eine erschöpfende Berechnung mit jeder der getesteten Z80 -Anweisungen durch, vergleicht die Ergebnisse mit Werten, die aus einem realen Sinclair -ZX -Spektrum 48K mit Zilog Z80 -CPU erhalten wurden, und meldet alle erkannten Abweichungen.
z80full.tap Tests alle Flaggen und Register. | Z80DOC.TAP Tests alle Register, aber nur offiziell dokumentierte Flaggen. |
Z80FLAGS.TAP Tests alle Flaggen, ignoriert Register. | Z80DOCFLAGS.TAP Tests nur dokumentierte Flags, ignoriert Register. |
Z80CCF.TAP Testen Sie alle Flags nach der Ausführung von ccf nach jedem getesteten Befehl. | Z80Memptr.tap Testen Sie alle Flags nach der Ausführung von bit N,(hl) nach jedem getesteten Befehl. |
z80full.tap Tests alle Flaggen und Register. | Z80DOC.TAP Tests alle Register, aber nur offiziell dokumentierte Flaggen. |
Z80FLAGS.TAP Tests alle Flaggen, ignoriert Register. | Z80DOCFLAGS.TAP Tests nur dokumentierte Flags, ignoriert Register. |
Z80CCF.TAP Testen Sie alle Flags nach der Ausführung von ccf nach jedem getesteten Befehl. | Z80Memptr.tap Testen Sie alle Flags nach der Ausführung von bit N,(hl) nach jedem getesteten Befehl. |
Diese Suite führt eine Reihe von Tests durch, um die MEMPTR -Dokumente (englisch, russisch) zu überprüfen, die genau richtig sind, sowie einen kurzen Lauf durch einige der CBh/DDh/FDh -Opcode -Bereiche. Die Testergebnisse im Programm werden mit denen einer NEC D780C-1-CPU verglichen, aber Simon Conway testete freundlicherweise mehrere andere Z80-Klone und bestätigte dieselben Ergebnisse.
Z80Tests.tap | |
Der Z80 -Befehlssatz von Frank Cringle versucht, jeden Z80 -Opcode auszuführen, sie durch einen Testzyklus zu setzen und die Ergebnisse mit den tatsächlichen Ergebnissen zu vergleichen, indem sie den Code auf einem echten Z80 ausführen. Der Trainer wird mit Franks Yaze (noch einem Z80 -Emulator) geliefert. Es ist oft schwierig, aufzuspüren, also hat Jonathan Graham Harston es hier zusammengestellt, sowie einige Konvertierungen. Die neueste Veröffentlichung von Yaze ist auf der Website von Andreas Gerlich erhältlich.
zexdoc.tap Tests dokumentierten offiziell Flag -Effekte. | zexall.tap Tests alle Flaggenänderungen. |
zexfix.tap Tests alle Flaggenänderungen. | zexbit.tap Tests alle Flag -Änderungen der bit -Anweisungen. |
zexall2.tap |
Fügen Sie zunächst das zxe -Repository hinzu und aktualisieren Sie den Paketindex:
sudo mkdir -pm700 /root/.gnupg
sudo mkdir -pm755 /etc/apt/keyrings
sudo gpg --no-default-keyring --keyring /etc/apt/keyrings/zxe-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys FE214A38D6A0C01D9AF514EE841EA3BD3A7E1487
echo " deb [arch= $( dpkg --print-architecture ) signed-by=/etc/apt/keyrings/zxe-archive-keyring.gpg] https://zxe.io/repos/apt stable main " | sudo tee /etc/apt/sources.list.d/zxe.list
sudo apt updateInstallieren Sie als nächstes das Bibliothekspaket:
sudo apt install libz80Wenn Sie Software erstellen müssen, für die die Z80 -Bibliothek erforderlich ist, installieren Sie auch das Entwicklungspaket:
sudo apt install libz80-dev Fügen Sie zuerst die zxe -Overlay hinzu und synchronisieren Sie:
eselect repository add zxe git https://github.com/redcode/zxe-gentoo-overlay.git
emaint sync --repo zxeDann installieren Sie die Bibliothek:
emerge emulation-libs/z80brew install redcode/zxe/z80Vorgefertigte Binärdateien für Windows sind auf der Download-Seite verfügbar.
Sie benötigen CMake v3.14 oder später, um das Paket zu erstellen, und optional aktuelle Versionen von Doxygen, Sphinx und Atem, um die Dokumentation zu erstellen. Stellen Sie außerdem sicher, dass Sie Latex mit PDF -Support auf Ihrem System installiert haben, wenn Sie die Dokumentation im PDF -Format generieren möchten.
Der Emulator benötigt einige Typen und Makros, die in Zeta enthalten sind, einer Abhängigkeitsfreien, die nur mit Header-Nur-Header-Bibliothek verwendet wird, um die Kompatibilität bei den meisten C-Compilern beizubehalten. Installieren Sie Zeta oder extrahieren Sie seinen Quellcode -Tarball in das Stammverzeichnis des Z80 -Projekts oder des übergeordneten Verzeichnisses. Zeta ist die einzige Abhängigkeit; Der Emulator ist eine freistehende Implementierung und hängt als solche nicht von der C -Standardbibliothek ab.
Sobald die Voraussetzungen erfüllt sind, erstellen Sie ein Verzeichnis und führen Sie cmake von dort aus, um das Build -System vorzubereiten:
mkdir build
cd build
cmake [options] < Z80-project-directory > Die resultierenden Build -Dateien können konfiguriert werden, indem Optionen an cmake übergeben werden. Geben Sie Folgendes ein:
cmake -LAH -N -B .Lesen Sie im Zweifelsfall die CMAKE -Dokumentation für weitere Informationen zu Konfigurationsoptionen. Im Folgenden sind einige der relevantesten Standardoptionen von CMake aufgeführt:
Generieren Sie gemeinsame Bibliotheken anstatt statische Bibliotheken.
Der Standard ist NO .
-DCMAKE_BUILD_TYPE=(Debug|Release|RelWithDebInfo|MinSizeRel)
Wählen Sie den zu generierenden Buildtyp (Konfiguration).
Die Standardeinstellung ist Release .
-DCMAKE_INSTALL_NAME_DIR="<path>"
Geben Sie den Verzeichnisanteil der dynamischen Bibliotheksnamen auf Apple -Plattformen (für installierte freigegebene Bibliotheken) an.
Standardmäßig nicht definiert.
-DCMAKE_INSTALL_PREFIX="<path>"
Geben Sie das Installationspräfix an.
Die Standardeinstellung ist "/usr/local" (auf UNIX- und UNIX-ähnlichen Betriebssystemen).
Paketspezifische Optionen werden mit Z80_ vorangestellt und können in zwei Gruppen unterteilt werden. Der erste steuert Aspekte, die sich nicht mit dem Quellcode der Bibliothek beziehen:
-DZ80_DEPOT_LOCATION="<location>"
Geben Sie das Verzeichnis oder die URL des Depots an, das die Testdateien enthält (dh die vom Test -Tool erforderliche Firmware und Software).
Der Standardwert ist "http://zxe.io/depot" .
-DZ80_FETCH_TEST_FILES=(YES|NO)
Kopieren oder laden Sie die Testdateien aus dem Depot in das Build -Verzeichnis.
Der Standard ist NO .
-DZ80_INSTALL_CMAKEDIR="<path>"
Geben Sie das Verzeichnis an, in dem das CMAKE-Konfigurations-File-Paket installiert werden soll.
Der Standardwert ist "${CMAKE_INSTALL_LIBDIR}/cmake/Z80" .
-DZ80_INSTALL_PKGCONFIGDIR="<path>"
Geben Sie das Verzeichnis an, in dem die PKG-Config-Datei installiert werden soll.
Der Standardwert ist "${CMAKE_INSTALL_LIBDIR}/pkgconfig" .
-DZ80_NOSTDLIB_FLAGS=(Auto|"[<flag>[;<flag>...]]")
Geben Sie die Linker -Flags an, die verwendet werden, um die Verknüpfung mit Systembibliotheken zu vermeiden.
Die Standardeinstellung ist Auto (Autoconfigure -Flags). Wenn Sie Linker -Fehler erhalten, setzen Sie diese Option auf "" .
-DZ80_OBJECT_LIBS=(YES|NO)
Erstellen Sie den Emulator als Objektbibliothek.
Diese Option hat Vorrang vor BUILD_SHARED_LIBS und Z80_SHARED_LIBS . Wenn aktiviert, ignoriert das Build -System Z80_WITH_CMAKE_SUPPORT und Z80_WITH_PKGCONFIG_SUPPORT , da keine Bibliotheken oder Support -Dateien installiert werden.
Der Standard ist NO .
Erstellen Sie den Emulator eher als gemeinsame Bibliothek als als statisch.
Diese Option hat Vorrang vor BUILD_SHARED_LIBS .
Standardmäßig nicht definiert.
-DZ80_SPHINX_HTML_THEME="[<name>]"
Geben Sie das Sphinx -Thema für die Dokumentation im HTML -Format an.
Die Standardeinstellung ist "" (verwenden Sie das Standardthema).
-DZ80_WITH_CMAKE_SUPPORT=(YES|NO)
Generieren und installieren Sie das CMAKE-Konfigurationsfilmpaket.
Der Standard ist NO .
-DZ80_WITH_HTML_DOCUMENTATION=(YES|NO)
Erstellen und installieren Sie die Dokumentation im HTML -Format.
Es erfordert Doxygen, Sphinx und Atem.
Der Standard ist NO .
-DZ80_WITH_PDF_DOCUMENTATION=(YES|NO)
Erstellen und installieren Sie die Dokumentation im PDF -Format.
Es erfordert Doxygen, Sphinx, Atem und Latex mit PDF -Unterstützung.
Der Standard ist NO .
-DZ80_WITH_PKGCONFIG_SUPPORT=(YES|NO)
Generieren und installieren Sie die PKG-Config-Datei.
Der Standard ist NO .
-DZ80_WITH_STANDARD_DOCUMENTS=(YES|NO)
Installieren README die mit dem Paket verteilten HISTORY : AUTHORS , COPYING , COPYING.LESSER THANKS
Der Standard ist NO .
-DZ80_WITH_TESTS=(YES|NO)
Erstellen Sie das Testwerkzeug.
Der Standard ist NO .
Die zweite Gruppe von paketspezifischen Optionen konfiguriert den Quellcode der Bibliothek, indem sie Makros vordefinieren, die optionale Funktionen ermöglichen:
-DZ80_WITH_EXECUTE=(YES|NO)
Erstellen Sie die Implementierung der Funktion z80_execute .
Der Standard ist NO .
-DZ80_WITH_FULL_IM0=(YES|NO)
Erstellen Sie die vollständige Implementierung des Interrupt -Modus 0 anstelle des reduzierten.
Der Standard ist NO .
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=(YES|NO)
Aktivieren Sie optionale Benachrichtigungen für eine reti oder retn -Anweisung, die während der Reaktion des Interrupt -Modus 0 ausgeführt wird.
Der Standard ist NO .
-DZ80_WITH_Q=(YES|NO)
Erstellen Sie die Implementierung von Q.
Der Standard ist NO .
-DZ80_WITH_SPECIAL_RESET=(YES|NO)
Erstellen Sie die Implementierung des Sonderrücksatzes.
Der Standard ist NO .
-DZ80_WITH_UNOFFICIAL_RETI=(YES|NO)
Konfigurieren Sie die undokumentierten Anweisungen ED5Dh , ED6Dh und ED7Dh als reti anstelle von retn .
Der Standard ist NO .
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=(YES|NO)
Erstellen Sie die Implementierung des Fehlers, der den Zilog Z80 -NMOs beeinflusst, wodurch das P/V -Flag zurückgesetzt wird, wenn während der Ausführung der ld a,{i|r} Anweisungen ein maskierbarer Interrupt angenommen wird.
Der Standard ist NO .
Paketwartenden werden aufgefordert, mindestens die folgenden Optionen für die freigegebene Bibliothek zu verwenden:
-DZ80_WITH_EXECUTE=YES
-DZ80_WITH_FULL_IM0=YES
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=YES
-DZ80_WITH_Q=YES
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=YES
Sobald das Build -System entsprechend Ihren Anforderungen konfiguriert ist, erstellen und installieren Sie das Paket:
cmake --build . [--config (Debug | Release | RelWithDebInfo | MinSizeRel)]
cmake --install . [--config < configuration > ] [--strip] Die Option --config ist nur für die CMake -Generatoren erforderlich, die CMAKE_BUILD_TYPE (z. B. Xcode und Visual Studio) ignorieren. Verwenden Sie --strip , um Debugging-Informationen und nicht öffentliche Symbole bei der Installation von Nicht-Debug-Builds der gemeinsam genutzten Bibliothek zu entfernen.
Verwenden Sie Folgendes, um den Emulator als gemeinsame Bibliothek zu erstellen und zusammen mit den Entwicklungsdateien in $HOME/.local : zu installieren:
mkdir work && cd work
git clone https://github.com/redcode/Zeta.git
git clone https://github.com/redcode/Z80.git
cd Zeta
mkdir build && cd build
cmake
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX= " $HOME /.local "
-DZeta_WITH_CMAKE_SUPPORT=YES
-DZeta_WITH_PKGCONFIG_SUPPORT=YES
..
cmake --install . --config Release
cd ../../Z80
mkdir build && cd build
cmake
-DBUILD_SHARED_LIBS=YES
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_NAME_DIR= " $HOME /.local/lib "
-DCMAKE_INSTALL_PREFIX= " $HOME /.local "
-DZ80_WITH_CMAKE_SUPPORT=YES
-DZ80_WITH_PKGCONFIG_SUPPORT=YES
-DZ80_WITH_EXECUTE=YES
-DZ80_WITH_FULL_IM0=YES
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=YES
-DZ80_WITH_Q=YES
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=YES
..
cmake --build . --config Release
cmake --install . --config Release --stripBuild-and-Install-Z80.sh
Das Paket enthält ein Tool namens test-Z80 , mit dem die relevantesten CP/M- und ZX-Spektrumversionen der Haupttestsuiten ausgeführt werden können. Konfigurieren Sie das Build -System mit -DZ80_WITH_TESTS=YES , um seine Kompilierung und -DZ80_FETCH_TEST_FILES=YES zu aktivieren, um die erforderliche Firmware und Software herunterzuladen. Beachten Sie auch, dass die Z80 -Bibliothek mit -DZ80_WITH_Q=YES erstellt werden muss, um die Tests von Patrik Rak bestehen zu können.
Sobald Sie das Paket erstellt haben, geben Sie Folgendes ein, um alle Tests auszuführen:
./test-Z80 -p depot/firmware -p depot/software/POSIX -p " depot/software/ZX Spectrum " -a Das Tool unterstützt Optionen und kann die Tests einzeln ausführen (Typ ./test-Z80 -h für Hilfe). Wenn Sie es vorziehen, alle Tests über Ctest auszuführen, verwenden Sie diesen Befehl:
ctest --verbose --build-config (Debug | Release | RelWithDebInfo | MinSizeRel) Die vollständigen Protokolle, die durch test-Z80 erzeugt werden, die verschiedene CPU-Varianten emulieren, finden Sie hier:
Notiz
Die CRC -Fehler in den Protokollen der NEC -NMOS -Variante sind normal und stimmen mit den auf realen Hardware erhaltenen Werten überein. Die ST CMOS -Variante wird derzeit untersucht.
Verwenden Sie Folgendes, um den Emulator zu erstellen und zu testen:
mkdir work && cd work
git clone https://github.com/redcode/Zeta.git
git clone https://github.com/redcode/Z80.git
cd Z80
mkdir build && cd build
cmake
-DCMAKE_BUILD_TYPE=Release
-DZ80_FETCH_TEST_FILES=YES
-DZ80_WITH_TESTS=YES
-DZ80_WITH_EXECUTE=YES
-DZ80_WITH_FULL_IM0=YES
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=YES
-DZ80_WITH_Q=YES
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=YES
..
cmake --build . --config Release
ctest --verbose --build-config Releasebau- und test-z80.sh Build-and-Test-Z80.bat
Die Z80-Bibliothek enthält ein Konfigurations-File-Paket zur Integration in CMake-basierte Projekte, die für die Entwicklung installiert werden müssen. Verwenden Sie find_package , um das Z80 -Paket zu finden. Dadurch werden das Z80 importierte Bibliotheksziel erstellt, das die erforderlichen transitiven Verbindungsabhängigkeiten enthält. Optional kann die Verknüpfungsmethode ausgewählt werden, indem entweder die Shared oder Static Komponente angegeben wird.
Beispiel:
find_package (Z80 REQUIRED Shared)
target_link_libraries (your- target Z80) Wenn nicht als Komponente angegeben ist, wird die Verknüpfungsmethode gemäß Z80_SHARED_LIBS ausgewählt. Wenn diese Option nicht definiert ist, verwendet das Config-File den auf dem System installierten Bibliothekstyp. Wenn er sowohl die gemeinsam genutzten als auch die statischen Versionen findet, bestimmt BUILD_SHARED_LIBS , gegen die man verknüpfen soll.
Um die Z80 -Bibliothek als CMake -Unterprojekt einzubetten, extrahieren Sie die Quellcode -Tarballs von Zeta und Z80 (oder klonen ihre jeweiligen Repositorys) in ein Unterverzeichnis eines anderen Projekts. Verwenden Sie dann add_subdirectory im übergeordneten Projekt, um den Z80 -Quellcode -Baum zum Build -Prozess hinzuzufügen (NB, das Z80 -Unterprojekt findet automatisch Zeta und importiert es als Schnittstellenbibliothek).
Es ist ratsam, die Z80 -Bibliothek im CMakeLists.txt des übergeordneten Projekts zu konfigurieren. Dies verhindert, dass der Benutzer Konfigurationsoptionen für das Z80 -Unterprojekt über die Befehlszeile beim Erstellen des Hauptprojekts angeben muss.
Beispiel:
set (Z80_SHARED_LIBS NO CACHE BOOL "" )
set (Z80_WITH_Q YES CACHE BOOL "" )
set (Z80_WITH_ZILOG_NMOS_LD_A_IR_BUG YES CACHE BOOL "" )
add_subdirectory (dependencies/Z80)
target_link_libraries (your- target Z80) Es ist wichtig, die Option Z80_SHARED_LIBS festzulegen. Andernfalls erstellt CMake den von BUILD_SHARED_LIBS angegebenen Bibliothekstyp, der möglicherweise nicht der gewünschte ist.
Der Quellcode des Emulators kann zur Kompilierung der Kompilierung durch Vordefinition einer Reihe von Makros konfiguriert werden. Sowohl Z80.h als auch Z80.c folgen den ersten beiden unten erklärten. Der Rest der Makros ist nur relevant, wenn Z80.c zusammengestellt wird:
#define Z80_EXTERNAL_HEADER "header-name.h"
Gibt den einzigen externen Header für #include an und ersetzt alle anderen.
Bestimmen Sie dieses Makro vor, um eine Header -Datei bereitzustellen, die die vom Emulator verwendeten externen Typen und Makros definiert, wodurch Ihr Projekt abhängig von Zeta abhängt. Sie können dies verwenden, wenn Sie Z80.c als Teil Ihres Projekts kompilieren oder (wenn Ihre Typen die binäre Kompatibilität nicht brechen), wenn Sie <Z80.h> mit einer vorgefertigten Z80-Bibliothek verknüpfen.
#define Z80_STATIC
Schränkt die Sichtbarkeit öffentlicher Symbole ein.
Dieses Makro ist erforderlich, wenn Sie Z80.c als statische Bibliothek erstellen, diese direkt als Teil Ihres Projekts zusammenstellen oder Ihr Programm mit der statischen Version der Z80 -Bibliothek verknüpfen. Stellen Sie in beiden Fällen sicher, dass dieses Makro definiert ist, bevor "Z80.h" oder <Z80.h> enthält.
#define Z80_WITH_LOCAL_HEADER
Sagt Z80.c zu #include "Z80.h" anstelle von <Z80.h> .
Die optionalen Merkmale des in "Installation aus Quellen" genannten Emulators sind standardmäßig deaktiviert. Wenn Sie Z80.c als Teil Ihres Projekts kompilieren, aktivieren Sie die Funktionen, die Sie benötigen, indem Sie ihre jeweiligen Aktivierungsmakros vordefinieren. Sie haben den gleichen Namen wie ihre CMake -Äquivalente:
#define Z80_WITH_EXECUTE#define Z80_WITH_FULL_IM0#define Z80_WITH_IM0_RETX_NOTIFICATIONS#define Z80_WITH_Q#define Z80_WITH_SPECIAL_RESET#define Z80_WITH_UNOFFICIAL_RETI#define Z80_WITH_ZILOG_NMOS_LD_A_IR_BUG Mit Ausnahme von Z80_EXTERNAL_HEADER können die obigen Makros leer sein. Der Quellcode prüft nur, ob sie definiert sind.
Notiz
Die Aktivierung einiger der optionalen Merkmale beeinflusst die Geschwindigkeit des Emulators aufgrund verschiedener Faktoren (finden Sie in der Dokumentation für weitere Details).
Dieser Emulator wurde von folgenden Projekten verwendet (in alphabetischer Reihenfolge aufgeführt):
Vielen Dank an die folgenden Personen (in alphabetischer Reihenfolge):
ccf/scf -Anweisungen.ccf/scf -Anweisungen auf echter Hardware. 2, 3ccf/scf -Anweisungen. 5, 6ccf/scf -Anweisungen. 12out (c),0 Anweisungen auf dem Zilog Z80 CMOS. 16ccf/scf -Anweisungen auf echter Hardware. 12, 23ccf/scf -Anweisungen.ccf/scf -Anweisungen.ccf/scf -Anweisungen. 15, 30ccf/scf -Anweisungen.ccf/scf -Anweisungen. 2, 3reti/retn -Anweisungen die Annahme des maskierbaren Interrupts aufschieben. 34ccf/scf -Anweisungen. 36Copyright © 1999-2024 Manuel Sainz de Baranda y Goñi.
Diese Bibliothek ist kostenlose Software: Sie können sie neu verteilt und/oder unter den Bedingungen der GNU Lesser allgemeinen öffentlichen Lizenz wie von der Free Software Foundation, entweder Version 3 der Lizenz, veröffentlicht oder (nach Ihrer Option) jede spätere Version veröffentlicht.
Diese Bibliothek ist in der Hoffnung verteilt, dass sie nützlich sein wird, jedoch ohne Garantie; Ohne die implizite Garantie für Handelsfähigkeit oder Eignung für einen bestimmten Zweck . Weitere Informationen finden Sie in der GNU Lesser General Public Lizenz.
Sie sollten zusammen mit dieser Bibliothek eine Kopie der GNU Lesser -allgemeinen öffentlichen Lizenz erhalten haben. Wenn nicht, siehe https://www.gnu.org/licenses/.
Projekte, bei denen die Bedingungen der gnu weniger allgemeinen öffentlichen Lizenz die Verwendung dieser Bibliothek verhindern oder eine unerwünschte Veröffentlichung des Quellcode für kommerzielle Produkte erfordern, können eine spezielle Lizenz beantragen.