Z80 라이브러리는 Zilog Z80의 빠르고 작고 정확한 에뮬레이터를 구현합니다. 문서화되지 않은 동작, MEMPTR, Q 및 특별 재설정을 포함 하여이 CPU에 대해 알려진 모든 것을 모방합니다. 또한 인터럽트 모드 0의 전체 에뮬레이션을 제공 한 최초의 오픈 소스 프로젝트가 된 영광입니다.
소스 코드는 최대 이식성을 위해 ANSI C로 작성되며 광범위하게 주석을 달아야합니다. 목표는 잘 구조화되고 이해하기 쉬운 소프트웨어를 작성하는 것이 었습니다. 주요 변화가 필요없이 시간의 시험을 견딜 수있는 견고하고 우아한 것.
이 Z80 CPU 에뮬레이터는 최상의 성능을 제공하는 명령 수준의 세분성을 갖춘 고전적인 디자인을 보유하고 있으며 T- 상태 수준까지 정밀도를 달성 할 수있는 합리적인 유연성을 제공합니다.
지시 수준의 세분화는 몇 가지 잘 정의 된 경우를 제외하고 주어진 명령의 실행이 모든 내부 M- 사이클이 처리 될 때까지 중지 될 수 없음을 의미합니다 (즉, 지침은 미세 운영으로 나뉘어지지 않음). 또한, 레지스터는 명령 당 한 번만 수정되며 T-State 카운터는 전체 명령을 실행 한 후 일반적으로 업데이트됩니다.
즉, 지침, 플래그, 메모리 액세스, 인터럽트, 시계 사이클 등은 사용 가능한 기술 문서, Z80 및 전자 시뮬레이션에 대한 수십 년의 연구 후에 이루어진 결과에 따라 정확하게 모방됩니다. 물론 에뮬레이터는 3 개의 주요 테스트 스위트를 포함하여 현재까지 가장 철저한 테스트를 통과합니다.
이 프로그램 세트는 에뮬레이터 저자가 원하는 수준의 CPU 에뮬레이션 진위에 도달하도록 돕기위한 것입니다. 포함 된 각 프로그램은 테스트 된 각 Z80 명령을 사용하여 철저한 계산을 수행하고, 결과를 실제 Sinclair ZX Spectrum 48K에서 얻은 값과 Zilog Z80 CPU와 비교하고, 검출 된 편차를보고합니다.
z80full.tap 모든 플래그와 레지스터를 테스트합니다. | z80doc.tap 모든 레지스터를 테스트하지만 공식적으로 문서화 된 깃발 만 테스트합니다. |
z80flags.tap 모든 플래그를 테스트하고 레지스터를 무시합니다. | z80docflags.tap 문서화 된 플래그 만 테스트하면 레지스터를 무시합니다. |
z80ccf.tap 각 명령어 테스트 후 ccf 실행 한 후 모든 플래그를 테스트합니다. | z80memptr.tap 각 명령어를 테스트 한 후 bit N,(hl) 실행 한 후 모든 플래그를 테스트합니다. |
z80full.tap 모든 플래그와 레지스터를 테스트합니다. | z80doc.tap 모든 레지스터를 테스트하지만 공식적으로 문서화 된 깃발 만 테스트합니다. |
z80flags.tap 모든 플래그를 테스트하고 레지스터를 무시합니다. | z80docflags.tap 문서화 된 플래그 만 테스트하면 레지스터를 무시합니다. |
z80ccf.tap 각 명령어 테스트 후 ccf 실행 한 후 모든 플래그를 테스트합니다. | z80memptr.tap 각 명령어를 테스트 한 후 bit N,(hl) 실행 한 후 모든 플래그를 테스트합니다. |
이 제품군은 MEMPTR 문서 (영어, 러시아어) 를 확인하기 위해 일련의 테스트를 수행하고 CBh/DDh/FDh Opcode 범위를 여러 차례 간단히 실행합니다. 프로그램의 테스트 결과는 NEC D780C-1 CPU의 테스트와 비교되었지만 Simon Conway는 다른 Z80 클론을 친절하게 테스트하여 동일한 결과를 확인했습니다.
z80tests.tap | |
Frank Cringle의 Z80 명령 세트 연습기는 모든 Z80 Opcode를 실행하여 테스트주기를 통해 결과를 실제 Z80에서 코드를 실행 한 결과 결과와 결과를 비교합니다. 연습기에는 Frank 's Yaze (또 다른 Z80 에뮬레이터)가 제공됩니다. 추적하기가 종종 어렵 기 때문에 Jonathan Graham Harston은 일부 변환뿐만 아니라 여기에 합류했습니다. Yaze의 최신 릴리스는 Andreas Gerlich의 웹 사이트에서 제공됩니다.
zexdoc.tap 공식적으로 문서화 된 플래그 효과 테스트. | zexall.tap 모든 플래그 변경 사항을 테스트합니다. |
zexfix.tap 모든 플래그 변경 사항을 테스트합니다. | zexbit.tap bit 지침의 모든 플래그 변경 사항을 테스트합니다. |
zexall2.tap |
먼저 zxe 저장소를 추가하고 패키지 인덱스를 업데이트하십시오.
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 update다음으로 라이브러리 패키지를 설치하십시오.
sudo apt install libz80Z80 라이브러리가 필요한 소프트웨어를 구축 해야하는 경우 개발 패키지도 설치하십시오.
sudo apt install libz80-dev 먼저 zxe 오버레이를 추가하고 동기화합니다.
eselect repository add zxe git https://github.com/redcode/zxe-gentoo-overlay.git
emaint sync --repo zxe그런 다음 라이브러리를 설치하십시오.
emerge emulation-libs/z80brew install redcode/zxe/z80Windows 용 미리 제작 된 이진은 다운로드 페이지에서 확인할 수 있습니다.
패키지를 만들려면 CMake v3.14 이상이 필요하며, 선택적으로 Doxygen, Sphinx 및 Breathe의 최근 버전의 문서를 컴파일해야합니다. 또한 PDF 형식으로 문서를 생성하려면 시스템에 PDF 지원이 설치된 라텍스가 있는지 확인하십시오.
에뮬레이터에는 대부분의 C 컴파일러와의 호환성을 유지하는 데 사용되는 종속성 헤더 전용 라이브러리 인 Zeta에 포함 된 일부 유형과 매크로가 필요합니다. Zeta를 설치하거나 소스 코드 Tarball을 Z80 프로젝트의 루트 디렉토리 또는 부모 디렉토리로 추출하십시오. Zeta는 유일한 의존성입니다. 에뮬레이터는 독립형 구현이므로 C 표준 라이브러리에 의존하지 않습니다.
전제 조건이 충족되면 디렉토리를 만들고 cmake 실행하여 빌드 시스템을 준비하십시오.
mkdir build
cd build
cmake [options] < Z80-project-directory > 결과 빌드 파일은 cmake 옵션을 전달하여 구성 할 수 있습니다. 현재 설정과 함께 사용 가능한 것의 전체 목록을 보여 주려면 다음을 입력하십시오.
cmake -LAH -N -B .의심스러운 경우 구성 옵션에 대한 자세한 내용은 CMAKE 문서를 읽으십시오. 다음은 CMAKE의 가장 관련성있는 표준 옵션 중 일부입니다.
정적 라이브러리 대신 공유 라이브러리를 생성합니다.
기본값은 NO 입니다.
-DCMAKE_BUILD_TYPE=(Debug|Release|RelWithDebInfo|MinSizeRel)
생성 할 빌드 유형 (구성)을 선택하십시오.
기본값이 Release 됩니다.
-DCMAKE_INSTALL_NAME_DIR="<path>"
Apple 플랫폼 (설치된 공유 라이브러리의 경우)에서 동적 라이브러리 설치 이름의 디렉토리 부분을 지정하십시오.
기본적으로 정의되지 않습니다.
-DCMAKE_INSTALL_PREFIX="<path>"
설치 접두사를 지정하십시오.
기본값은 "/usr/local" (Unix 및 Unix와 같은 운영 체제)입니다.
패키지 별 옵션은 Z80_ 로 접두사로 표시되며 두 그룹으로 나눌 수 있습니다. 첫 번째는 라이브러리의 소스 코드와 관련이없는 측면을 제어합니다.
-DZ80_DEPOT_LOCATION="<location>"
테스트 파일 (예 : 테스트 도구에 필요한 펌웨어 및 소프트웨어)을 포함하는 창고의 디렉토리 또는 URL을 지정하십시오.
기본값은 "http://zxe.io/depot" 입니다.
-DZ80_FETCH_TEST_FILES=(YES|NO)
창고에서 빌드 디렉토리로 테스트 파일을 복사하거나 다운로드하십시오.
기본값은 NO 입니다.
-DZ80_INSTALL_CMAKEDIR="<path>"
CMAKE 구성 파일 패키지를 설치할 디렉토리를 지정하십시오.
기본값은 "${CMAKE_INSTALL_LIBDIR}/cmake/Z80" 입니다.
-DZ80_INSTALL_PKGCONFIGDIR="<path>"
PKG-Config 파일을 설치할 디렉토리를 지정하십시오.
기본값은 "${CMAKE_INSTALL_LIBDIR}/pkgconfig" 입니다.
-DZ80_NOSTDLIB_FLAGS=(Auto|"[<flag>[;<flag>...]]")
시스템 라이브러리와의 연결을 피하는 데 사용되는 링커 플래그를 지정하십시오.
기본값은 Auto (AutoConfigure 플래그)입니다. 링커 오류가 발생하면이 옵션을 "" 로 설정하십시오.
-DZ80_OBJECT_LIBS=(YES|NO)
에뮬레이터를 객체 라이브러리로 구축하십시오.
이 옵션은 BUILD_SHARED_LIBS 및 Z80_SHARED_LIBS 보다 우선합니다. 활성화 된 경우 빌드 시스템은 라이브러리 나 지원 파일이 설치되지 않으므로 Z80_WITH_CMAKE_SUPPORT 및 Z80_WITH_PKGCONFIG_SUPPORT 무시합니다.
기본값은 NO 입니다.
정적이 아닌 공유 라이브러리로 에뮬레이터를 구축하십시오.
이 옵션은 BUILD_SHARED_LIBS 보다 우선합니다.
기본적으로 정의되지 않습니다.
-DZ80_SPHINX_HTML_THEME="[<name>]"
문서의 Sphinx 테마를 HTML 형식으로 지정하십시오.
기본값은 "" (기본 테마 사용)입니다.
-DZ80_WITH_CMAKE_SUPPORT=(YES|NO)
Cmake 구성 파일 패키지를 생성하고 설치하십시오.
기본값은 NO 입니다.
-DZ80_WITH_HTML_DOCUMENTATION=(YES|NO)
문서를 HTML 형식으로 작성하고 설치하십시오.
독사, 스핑크스 및 호흡이 필요합니다.
기본값은 NO 입니다.
-DZ80_WITH_PDF_DOCUMENTATION=(YES|NO)
PDF 형식으로 문서를 작성하고 설치하십시오.
PDF 지원을받은 Doxygen, Sphinx, Breathe 및 Latex가 필요합니다.
기본값은 NO 입니다.
-DZ80_WITH_PKGCONFIG_SUPPORT=(YES|NO)
pkg-config 파일을 생성하고 설치하십시오.
기본값은 NO 입니다.
-DZ80_WITH_STANDARD_DOCUMENTS=(YES|NO)
패키지와 함께 배포 된 표준 텍스트 문서를 설치하십시오 : AUTHORS , COPYING , COPYING.LESSER , HISTORY , README 및 THANKS .
기본값은 NO 입니다.
-DZ80_WITH_TESTS=(YES|NO)
테스트 도구를 구축하십시오.
기본값은 NO 입니다.
두 번째 패키지 별 옵션 그룹은 선택적 기능을 활성화하는 매크로를 사전 정의하여 라이브러리의 소스 코드를 구성합니다.
-DZ80_WITH_EXECUTE=(YES|NO)
z80_execute 기능의 구현을 구축하십시오.
기본값은 NO 입니다.
-DZ80_WITH_FULL_IM0=(YES|NO)
감소 된 인터럽트 모드 0이 아닌 인터럽트 모드 0의 전체 구현을 구축하십시오.
기본값은 NO 입니다.
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=(YES|NO)
인터럽트 모드 0 응답 중에 실행 된 reti 또는 retn 명령에 대한 선택적 알림을 활성화합니다.
기본값은 NO 입니다.
-DZ80_WITH_Q=(YES|NO)
Q의 구현을 구축하십시오.
기본값은 NO 입니다.
-DZ80_WITH_SPECIAL_RESET=(YES|NO)
특별 재설정의 구현을 구축하십시오.
기본값은 NO 입니다.
-DZ80_WITH_UNOFFICIAL_RETI=(YES|NO)
문서화되지 않은 지침 ED5Dh , ED6Dh 및 ED7Dh retn 대신 reti 로 구성하십시오.
기본값은 NO 입니다.
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=(YES|NO)
Zilog Z80 NMOS에 영향을 미치는 버그의 구현을 구축하여 ld a,{i|r} 지침의 실행 중에 마스크 가능한 인터럽트가 허용 될 때 P/V 플래그가 재설정됩니다.
기본값은 NO 입니다.
패키지 관리자는 공유 라이브러리에 다음과 같은 옵션을 사용하는 것이 좋습니다.
-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 (Debug | Release | RelWithDebInfo | MinSizeRel)]
cmake --install . [--config < configuration > ] [--strip] --config 그 옵션은 CMAKE_BUILD_TYPE (예 : Xcode 및 Visual Studio)를 무시하는 CMAKE 생성기에만 필요합니다. --strip 사용하여 공유 라이브러리의 비 데그 빌드를 설치할 때 디버깅 정보 및 비 공개 기호를 제거하십시오.
다음을 사용하여 에뮬레이터를 공유 라이브러리로 구축하고 개발 파일과 함께 $HOME/.local 에 설치하십시오.
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 --strip빌드 앤 install-z80.sh
이 패키지에는 주요 테스트 스위트의 가장 관련성이 높은 CP/M 및 ZX 스펙트럼 버전을 실행할 수있는 test-Z80 이라는 도구가 포함되어 있습니다. -DZ80_WITH_TESTS=YES 로 빌드 시스템을 구성하여 컴파일 및 -DZ80_FETCH_TEST_FILES=YES . 또한 Z80 라이브러리는 Patrik Rak의 테스트를 통과 할 수 있도록 -DZ80_WITH_Q=YES 구축해야합니다.
패키지를 구축 한 후에는 다음을 입력하여 모든 테스트를 실행하십시오.
./test-Z80 -p depot/firmware -p depot/software/POSIX -p " depot/software/ZX Spectrum " -a 이 도구는 옵션을 지원하고 테스트를 개별적으로 실행할 수 있습니다 (유형 ./test-Z80 -h 도움을 요청합니다). CTEST를 통해 모든 테스트를 실행하려면이 명령을 사용하십시오.
ctest --verbose --build-config (Debug | Release | RelWithDebInfo | MinSizeRel) test-Z80 에 의해 생성 된 전체 로그는 다른 CPU 변형을 모방합니다.
메모
NEC NMOS 변형의 로그의 CRC 오류는 정상이며 실제 하드웨어에서 얻은 값과 일치합니다. ST CMOS 변형은 현재 조사 중입니다.
다음을 사용하여 에뮬레이터를 구축하고 테스트하십시오.
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 Release빌드 앤 테스트 -z80.sh 빌드 앤 테스트 -Z80.BAT
Z80 라이브러리에는 개발을 위해 설치 해야하는 CMAKE 기반 프로젝트에 통합 할 수있는 구성 파일 패키지가 포함되어 있습니다. find_package 사용하여 Z80 패키지를 찾으십시오. 이로 인해 Z80 가져 오기 라이브러리 대상이 생성되어 필요한 전이 링크 종속성이 전달됩니다. 선택적으로, Shared 요소 또는 Static 구성 요소를 지정하여 연결 방법을 선택할 수 있습니다.
예:
find_package (Z80 REQUIRED Shared)
target_link_libraries (your- target Z80) 구성 요소로 지정되지 않은 경우 링크 방법은 Z80_SHARED_LIBS 에 따라 선택됩니다. 이 옵션이 정의되지 않은 경우 구성 파일은 시스템에 설치된 라이브러리 유형을 사용하고 공유 버전과 정적 버전을 모두 찾으면 BUILD_SHARED_LIBS 가 링크 할 것을 결정합니다.
Z80 라이브러리를 CMAKE 하위 프로젝트로 포함 시키려면 Zeta 및 Z80의 소스 코드 Tarballs (또는 해당 리포지토리를 복제)를 다른 프로젝트의 하위 디렉토리로 추출하십시오. 그런 다음 부모 프로젝트에서 add_subdirectory 사용하여 Z80 소스 코드 트리를 빌드 프로세스에 추가합니다 (NB, Z80 하위 프로젝트는 자동으로 Zeta를 찾아 인터페이스 라이브러리로 가져옵니다).
부모 프로젝트의 CMakeLists.txt 에서 Z80 라이브러리를 구성하는 것이 좋습니다. 이렇게하면 메인 프로젝트를 구축 할 때 명령 줄을 통해 Z80 하위 프로젝트에 대한 구성 옵션을 지정하지 않아도됩니다.
예:
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) Z80_SHARED_LIBS 옵션을 설정하는 것이 중요합니다. 그렇지 않으면 Cmake는 BUILD_SHARED_LIBS 로 표시된 라이브러리 유형을 빌드합니다.
에뮬레이터의 소스 코드는 일련의 매크로를 사전 정의하여 컴파일 시간에 구성 할 수 있습니다. Z80.h 및 Z80.c 는 모두 아래에 설명 된 첫 두 가지를 준수합니다. 나머지 매크로는 Z80.c 컴파일 할 때만 관련이 있습니다.
#define Z80_EXTERNAL_HEADER "header-name.h"
#include 의 유일한 외부 헤더를 지정하여 다른 모든 것을 대체합니다.
이 매크로를 사전 정의하여 에뮬레이터에서 사용하는 외부 유형과 매크로를 정의하는 헤더 파일을 제공하여 프로젝트가 Zeta에 따라 방지하지 않습니다. Z80.c 프로젝트의 일부로 컴파일 할 때 또는 <Z80.h> 포함하고 사전 제작 된 Z80 라이브러리와 연결할 때 (유형이 이진 호환성을 깨뜨리지 않는 경우) 이것을 사용할 수 있습니다.
#define Z80_STATIC
공개 상징의 가시성을 제한합니다.
이 매크로는 정적 라이브러리로 Z80.c 구축하거나 프로젝트의 일부로 직접 컴파일하거나 Z80 라이브러리의 정적 버전과 연결하는 경우 필요합니다. 이들 중 어느 경우 에도이 매크로가 "Z80.h" 또는 <Z80.h> 포함하기 전에 정의되어 있는지 확인하십시오.
#define Z80_WITH_LOCAL_HEADER
<Z80.h> 대신 Z80.c 에게 #include "Z80.h" 알려줍니다.
"소스에서 설치"에 언급 된 에뮬레이터의 선택적 기능은 기본적으로 비활성화됩니다. 프로젝트의 일부로 Z80.c 컴파일하는 경우 각 활성화 매크로를 사전 정의하여 필요한 기능을 활성화하십시오. 그들은 그들의 cmake 동등한 이름과 동일한 이름을 가지고 있습니다.
#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 Z80_EXTERNAL_HEADER 를 제외하고 위의 매크로는 비어있을 수 있습니다. 소스 코드는 정의되었는지 여부 만 확인합니다.
메모
옵션 기능 중 일부의 활성화는 다양한 요인으로 인해 에뮬레이터의 속도에 영향을 미칩니다 (자세한 내용은 문서를 참조하십시오).
이 에뮬레이터는 다음 프로젝트 (알파벳 순서로 나열)에 사용되었습니다.
다음 개인에게 감사드립니다 (알파벳 순서로) :
ccf/scf 지침의 불안정한 동작을 발견합니다.ccf/scf 지침을 테스트합니다. 2, 3ccf/scf 지침에 대한 그의 연구를 위해. 5, 6ccf/scf 지침에 대한 그의 연구를 위해. 12out (c),0 명령이 zilog z80 cmos에서 어떻게 동작하는지 알아 봅니다. 16ccf/scf 지침을 테스트합니다. 12, 23ccf/scf 지침의 불안정한 행동에 대한 그의 연구.ccf/scf 지침의 불안정한 행동을 조사하는 데 도움을주었습니다.ccf/scf 지침의 동작을 해독하기 위해. 15, 30ccf/scf 지침의 불안정한 행동에 대한 그의 연구.ccf/scf 지침에 대한 그의 연구를 위해. 2, 3reti/retn 지침이 마스크 가능한 인터럽트의 수용을 연기한다는 것을 발견했습니다. 34ccf/scf 지침에 대한 그의 연구를 위해. 36Copyright © 1999-2024 Manuel Sainz de Baranda Y Goñi.
이 라이브러리는 무료 소프트웨어입니다. Free Software Foundation, 라이센스의 버전 3 또는 이후 버전에서 게시 한 GNU Lesser General License의 조건에 따라 재분배 및/또는 수정할 수 있습니다.
이 라이브러리는 유용 할 것이지만 보증이 없다는 희망으로 배포됩니다. 상업성 또는 특정 목적에 대한 적합성에 대한 묵시적 보증조차 없습니다 . 자세한 내용은 GNU Less General Public 라이센스를 참조하십시오.
이 라이브러리와 함께 GNU Lesser General Public License의 사본을 받았어야합니다. 그렇지 않은 경우 https://www.gnu.org/licenses/를 참조하십시오.
GNU가 적은 일반 공공 라이센스의 조건 이이 도서관의 사용을 방해하거나 상업용 제품의 소스 코드를 원치 않는 출판이 필요한 프로젝트 특별 라이센스를 신청할 수 있습니다.