MZ2000 persona, Z80 April 2026, bug fixes and z80 timing fixes

This commit is contained in:
Philip Smart
2026-05-13 20:55:04 +01:00
parent 516426a8c7
commit 5bbb3bcf5f
257 changed files with 13634 additions and 4193 deletions

View File

@@ -4,8 +4,8 @@ _Describe your pull request here._
### Legal notice _(do not delete)_
It is required that contributors assign copyright to the original author so that he retains full ownership of the project. This makes it easier for other entities to use the software because they only have to deal with one copyright holder. It also gives the original author assurance that he will be able to make decisions in the future without gathering and consulting all contributors.
Contributors are required to assign copyright to the original author of the project so that he retains full ownership. This ensures that other entities can use the software more easily, as they only need to deal with a single copyright holder. It also provides the original author with the assurance that he can make decisions in the future without needing to consult or obtain consent from all contributors.
By submitting this PR, you agree to the following:
By submitting this pull request (PR), you agree to the following:
> You hereby assign copyright in this PR's code to the original author of the Z80 library, Manuel Sainz de Baranda y Goñi, to be licensed under the same terms as the rest of the code. You agree to relinquish any and all copyright interest in the software, to the detriment of your heirs and successors.
> You hereby assign the copyright in the code included in this pull request to the original author of the Z80 library, Manuel Sainz de Baranda y Goñi, to be licensed under the same terms as the rest of the code. You also agree to relinquish any and all copyright interest in the software, to the detriment of your heirs and successors.

View File

@@ -6,8 +6,11 @@ on:
- '.github/workflows/build-and-test-library.yml'
- 'API/**'
- 'CMake/FindZeta.cmake'
- 'sources/*.c'
- 'sources/*.rc.in'
- 'sources/generate-daa-af-table.c'
- 'sources/generate-pf-parity-table.c'
- 'sources/test-Z80.c'
- 'sources/Z80.c'
- 'sources/Z80.rc.in'
- 'support/*.sha3-512'
- 'CMakeLists.txt'
pull_request:
@@ -15,8 +18,11 @@ on:
- '.github/workflows/build-and-test-library.yml'
- 'API/**'
- 'CMake/FindZeta.cmake'
- 'sources/*.c'
- 'sources/*.rc.in'
- 'sources/generate-daa-af-table.c'
- 'sources/generate-pf-parity-table.c'
- 'sources/test-Z80.c'
- 'sources/Z80.c'
- 'sources/Z80.rc.in'
- 'support/*.sha3-512'
- 'CMakeLists.txt'
@@ -26,15 +32,20 @@ env:
CMAKE_BUILD_TYPE: Release
Z80_FETCH_TEST_FILES: YES
Z80_NOSTDLIB_FLAGS: Auto
Z80_WITH_CMAKE_SUPPORT: NO
Z80_OBJECT_LIBS: NO
Z80_WITH_CMAKE_SUPPORT: YES
Z80_WITH_CODE_GENERATION_TOOLS: YES
Z80_WITH_HTML_DOCUMENTATION: NO
Z80_WITH_PDF_DOCUMENTATION: NO
Z80_WITH_PKGCONFIG_SUPPORT: NO
Z80_WITH_PKGCONFIG_SUPPORT: YES
Z80_WITH_STANDARD_DOCUMENTS: NO
Z80_WITH_TESTS: YES
Z80_WITH_STEP_TESTING_TOOL: NO
Z80_WITH_TESTING_TOOL: YES
Z80_WITH_EXECUTE: YES
Z80_WITH_FULL_IM0: YES
Z80_WITH_IM0_RETX_NOTIFICATIONS: YES
Z80_WITH_PARITY_COMPUTATION: NO
Z80_WITH_PRECOMPUTED_DAA: NO
Z80_WITH_Q: YES
Z80_WITH_SPECIAL_RESET: YES
Z80_WITH_UNOFFICIAL_RETI: NO
@@ -42,7 +53,7 @@ env:
jobs:
build-and-test-library:
runs-on: ${{matrix.os}}
runs-on: ${{ matrix.os }}
strategy:
matrix:
@@ -54,42 +65,47 @@ jobs:
- name: Install dependencies (POSIX)
if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')
run: |
mkdir -p "${{github.workspace}}/build"
curl -L "${{env.ZETA_TARBALL_URL}}" | xz -cd | tar -C "${{github.workspace}}/build" --strip-components=2 -xvf - Zeta/API/Z
mkdir -p "${{ github.workspace }}/build"
curl -L "${{ env.ZETA_TARBALL_URL }}" | xz -cd | tar -C "${{ github.workspace }}/build" --strip-components=2 -xf - Zeta/API/Z
- name: Install dependencies (Windows)
if: startsWith(matrix.os, 'windows')
shell: cmd
run: |
mkdir "${{github.workspace}}\build"
curl -L "${{env.ZETA_TARBALL_URL}}" | 7z x -txz -si -so | 7z x -si -ttar -o"${{github.workspace}}\build" Zeta/API/Z
mkdir "${{ github.workspace }}\build"
curl -L "${{ env.ZETA_TARBALL_URL }}" | 7z x -txz -si -so | 7z x -si -ttar -o"${{ github.workspace }}\build" Zeta/API/Z
- name: Configure CMake
run: >-
cmake
-DBUILD_SHARED_LIBS=${{env.BUILD_SHARED_LIBS}}
-DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}}
-DZ80_FETCH_TEST_FILES=${{env.Z80_FETCH_TEST_FILES}}
-DZ80_NOSTDLIB_FLAGS=${{env.Z80_NOSTDLIB_FLAGS}}
-DZ80_WITH_CMAKE_SUPPORT=${{env.Z80_WITH_CMAKE_SUPPORT}}
-DZ80_WITH_HTML_DOCUMENTATION=${{env.Z80_WITH_HTML_DOCUMENTATION}}
-DZ80_WITH_PDF_DOCUMENTATION=${{env.Z80_WITH_PDF_DOCUMENTATION}}
-DZ80_WITH_PKGCONFIG_SUPPORT=${{env.Z80_WITH_PKGCONFIG_SUPPORT}}
-DZ80_WITH_STANDARD_DOCUMENTS=${{env.Z80_WITH_STANDARD_DOCUMENTS}}
-DZ80_WITH_TESTS=${{env.Z80_WITH_TESTS}}
-DZ80_WITH_EXECUTE=${{env.Z80_WITH_EXECUTE}}
-DZ80_WITH_FULL_IM0=${{env.Z80_WITH_FULL_IM0}}
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=${{env.Z80_WITH_IM0_RETX_NOTIFICATIONS}}
-DZ80_WITH_Q=${{env.Z80_WITH_Q}}
-DZ80_WITH_SPECIAL_RESET=${{env.Z80_WITH_SPECIAL_RESET}}
-DZ80_WITH_UNOFFICIAL_RETI=${{env.Z80_WITH_UNOFFICIAL_RETI}}
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=${{env.Z80_WITH_ZILOG_NMOS_LD_A_IR_BUG}}
-B "${{github.workspace}}/build"
-S "${{github.workspace}}"
-DBUILD_SHARED_LIBS=${{ env.BUILD_SHARED_LIBS }}
-DCMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }}
-DZ80_FETCH_TEST_FILES=${{ env.Z80_FETCH_TEST_FILES }}
-DZ80_NOSTDLIB_FLAGS=${{ env.Z80_NOSTDLIB_FLAGS }}
-DZ80_OBJECT_LIBS=${{ env.Z80_OBJECT_LIBS }}
-DZ80_WITH_CMAKE_SUPPORT=${{ env.Z80_WITH_CMAKE_SUPPORT }}
-DZ80_WITH_CODE_GENERATION_TOOLS=${{ env.Z80_WITH_CODE_GENERATION_TOOLS }}
-DZ80_WITH_HTML_DOCUMENTATION=${{ env.Z80_WITH_HTML_DOCUMENTATION }}
-DZ80_WITH_PDF_DOCUMENTATION=${{ env.Z80_WITH_PDF_DOCUMENTATION }}
-DZ80_WITH_PKGCONFIG_SUPPORT=${{ env.Z80_WITH_PKGCONFIG_SUPPORT }}
-DZ80_WITH_STANDARD_DOCUMENTS=${{ env.Z80_WITH_STANDARD_DOCUMENTS }}
-DZ80_WITH_STEP_TESTING_TOOL=${{ env.Z80_WITH_STEP_TESTING_TOOL }}
-DZ80_WITH_TESTING_TOOL=${{ env.Z80_WITH_TESTING_TOOL }}
-DZ80_WITH_EXECUTE=${{ env.Z80_WITH_EXECUTE }}
-DZ80_WITH_FULL_IM0=${{ env.Z80_WITH_FULL_IM0 }}
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=${{ env.Z80_WITH_IM0_RETX_NOTIFICATIONS }}
-DZ80_WITH_PARITY_COMPUTATION=${{ env.Z80_WITH_PARITY_COMPUTATION }}
-DZ80_WITH_PRECOMPUTED_DAA=${{ env.Z80_WITH_PRECOMPUTED_DAA }}
-DZ80_WITH_Q=${{ env.Z80_WITH_Q }}
-DZ80_WITH_SPECIAL_RESET=${{ env.Z80_WITH_SPECIAL_RESET }}
-DZ80_WITH_UNOFFICIAL_RETI=${{ env.Z80_WITH_UNOFFICIAL_RETI }}
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=${{ env.Z80_WITH_ZILOG_NMOS_LD_A_IR_BUG }}
-B "${{ github.workspace }}/build"
-S "${{ github.workspace }}"
- name: Build
run: cmake --build "${{github.workspace}}/build" --config ${{env.CMAKE_BUILD_TYPE}} --verbose
run: cmake --build "${{ github.workspace }}/build" --config ${{ env.CMAKE_BUILD_TYPE }} --verbose
- name: Test
working-directory: ${{github.workspace}}/build
run: ctest --build-config ${{env.CMAKE_BUILD_TYPE}} --output-on-failure
working-directory: ${{ github.workspace }}/build
run: ctest --build-config ${{ env.CMAKE_BUILD_TYPE }} --output-on-failure

View File

@@ -22,11 +22,13 @@ env:
CMAKE_BUILD_TYPE: Release
Z80_FETCH_TEST_FILES: NO
Z80_WITH_CMAKE_SUPPORT: NO
Z80_WITH_CODE_GENERATION_TOOLS: NO
Z80_WITH_HTML_DOCUMENTATION: YES
Z80_WITH_PDF_DOCUMENTATION: YES
Z80_WITH_PKGCONFIG_SUPPORT: NO
Z80_WITH_STANDARD_DOCUMENTS: NO
Z80_WITH_TESTS: NO
Z80_WITH_STEP_TESTING_TOOL: NO
Z80_WITH_TESTING_TOOL: NO
jobs:
build-documentation:
@@ -45,26 +47,28 @@ jobs:
- name: Install dependencies
run: |
mkdir -p "${{github.workspace}}/build"
curl -L "${{env.ZETA_TARBALL_URL}}" | xz -cd | tar -C "${{github.workspace}}/build" --strip-components=2 -xvf - Zeta/API/Z
mkdir -p "${{ github.workspace }}/build"
curl -L "${{ env.ZETA_TARBALL_URL }}" | xz -cd | tar -C "${{ github.workspace }}/build" --strip-components=2 -xf - Zeta/API/Z
- name: Configure CMake
run: >-
cmake
-DBUILD_SHARED_LIBS=${{env.BUILD_SHARED_LIBS}}
-DCMAKE_BUILD_TYPE=${{env.CMAKE_BUILD_TYPE}}
-DZ80_FETCH_TEST_FILES=${{env.Z80_FETCH_TEST_FILES}}
-DZ80_WITH_CMAKE_SUPPORT=${{env.Z80_WITH_CMAKE_SUPPORT}}
-DZ80_WITH_HTML_DOCUMENTATION=${{env.Z80_WITH_HTML_DOCUMENTATION}}
-DZ80_WITH_PDF_DOCUMENTATION=${{env.Z80_WITH_PDF_DOCUMENTATION}}
-DZ80_WITH_PKGCONFIG_SUPPORT=${{env.Z80_WITH_PKGCONFIG_SUPPORT}}
-DZ80_WITH_STANDARD_DOCUMENTS=${{env.Z80_WITH_STANDARD_DOCUMENTS}}
-DZ80_WITH_TESTS=${{env.Z80_WITH_TESTS}}
-B "${{github.workspace}}/build"
-S "${{github.workspace}}"
-DBUILD_SHARED_LIBS=${{ env.BUILD_SHARED_LIBS }}
-DCMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }}
-DZ80_FETCH_TEST_FILES=${{ env.Z80_FETCH_TEST_FILES }}
-DZ80_WITH_CMAKE_SUPPORT=${{ env.Z80_WITH_CMAKE_SUPPORT }}
-DZ80_WITH_CODE_GENERATION_TOOLS=${{ env.Z80_WITH_CODE_GENERATION_TOOLS }}
-DZ80_WITH_HTML_DOCUMENTATION=${{ env.Z80_WITH_HTML_DOCUMENTATION }}
-DZ80_WITH_PDF_DOCUMENTATION=${{ env.Z80_WITH_PDF_DOCUMENTATION }}
-DZ80_WITH_PKGCONFIG_SUPPORT=${{ env.Z80_WITH_PKGCONFIG_SUPPORT }}
-DZ80_WITH_STANDARD_DOCUMENTS=${{ env.Z80_WITH_STANDARD_DOCUMENTS }}
-DZ80_WITH_STEP_TESTING_TOOL=${{ env.Z80_WITH_STEP_TESTING_TOOL }}
-DZ80_WITH_TESTING_TOOL=${{ env.Z80_WITH_TESTING_TOOL }}
-B "${{ github.workspace }}/build"
-S "${{ github.workspace }}"
- name: Build HTML documentation
run: cmake --build "${{github.workspace}}/build" --config ${{env.CMAKE_BUILD_TYPE}} --target Z80-Documentation-HTML --verbose
run: cmake --build "${{ github.workspace }}/build" --config ${{ env.CMAKE_BUILD_TYPE }} --target Z80-Documentation-HTML --verbose
- name: Build PDF documentation
run: cmake --build "${{github.workspace}}/build" --config ${{env.CMAKE_BUILD_TYPE}} --target Z80-Documentation-PDF --verbose
run: cmake --build "${{ github.workspace }}/build" --config ${{ env.CMAKE_BUILD_TYPE }} --target Z80-Documentation-PDF --verbose

View File

@@ -0,0 +1,116 @@
name: Step tests
on:
push:
paths:
- '.github/workflows/step-tests.yml'
- 'API/**'
- 'CMake/FindZeta.cmake'
- 'sources/step-test-Z80.c'
- 'sources/Z80.c'
- 'CMakeLists.txt'
pull_request:
paths:
- '.github/workflows/step-tests.yml'
- 'API/**'
- 'CMake/FindZeta.cmake'
- 'sources/step-test-Z80.c'
- 'sources/Z80.c'
- 'CMakeLists.txt'
env:
TEST_FILES_QUERY_URL: 'https://api.github.com/repos/SingleStepTests/z80/releases/latest'
TEST_FILES_PATH: '*/v1'
BUILD_SHARED_LIBS: YES
CMAKE_BUILD_TYPE: Release
Z80_FETCH_TEST_FILES: NO
Z80_NOSTDLIB_FLAGS: Auto
Z80_OBJECT_LIBS: NO
Z80_WITH_CMAKE_SUPPORT: NO
Z80_WITH_CODE_GENERATION_TOOLS: NO
Z80_WITH_HTML_DOCUMENTATION: NO
Z80_WITH_PDF_DOCUMENTATION: NO
Z80_WITH_PKGCONFIG_SUPPORT: NO
Z80_WITH_STANDARD_DOCUMENTS: NO
Z80_WITH_STEP_TESTING_TOOL: YES
Z80_WITH_TESTING_TOOL: NO
Z80_WITH_EXECUTE: YES
Z80_WITH_FULL_IM0: YES
Z80_WITH_IM0_RETX_NOTIFICATIONS: YES
Z80_WITH_PARITY_COMPUTATION: NO
Z80_WITH_PRECOMPUTED_DAA: NO
Z80_WITH_Q: YES
Z80_WITH_SPECIAL_RESET: YES
Z80_WITH_UNOFFICIAL_RETI: NO
Z80_WITH_ZILOG_NMOS_LD_A_IR_BUG: YES
jobs:
step-tests:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v4
- name: Install dependencies (macOS)
if: startsWith(matrix.os, 'macos')
run: |
brew install cjson
brew install redcode/zxe/z80insnclock
- name: Install dependencies (Ubuntu)
if: startsWith(matrix.os, 'ubuntu')
run: |
curl -L https://zxe.io/scripts/add-zxe-apt-repo.sh | sudo sh
sudo apt-get update
sudo apt-get -y install libcjson-dev
sudo apt-get -y install libz80insnclock-dev
- name: Fetch test files
run: |
mkdir -p "${{ github.workspace }}/build/step-tests"
curl -L $(curl -sL "${{ env.TEST_FILES_QUERY_URL }}" | jq -r .tarball_url) |
gzip -cd |
tar -C "${{ github.workspace }}/build/step-tests" --strip-components=2 -xf - $([[ $(tar --version | head -n 1 | cut -d " " -f 1) = tar ]] && echo --wildcards) "${{ env.TEST_FILES_PATH }}"
- name: Configure CMake
run: >-
cmake
-DBUILD_SHARED_LIBS=${{ env.BUILD_SHARED_LIBS }}
-DCMAKE_BUILD_TYPE=${{ env.CMAKE_BUILD_TYPE }}
-DZ80_FETCH_TEST_FILES=${{ env.Z80_FETCH_TEST_FILES }}
-DZ80_NOSTDLIB_FLAGS=${{ env.Z80_NOSTDLIB_FLAGS }}
-DZ80_OBJECT_LIBS=${{ env.Z80_OBJECT_LIBS }}
-DZ80_WITH_CMAKE_SUPPORT=${{ env.Z80_WITH_CMAKE_SUPPORT }}
-DZ80_WITH_CODE_GENERATION_TOOLS=${{ env.Z80_WITH_CODE_GENERATION_TOOLS }}
-DZ80_WITH_HTML_DOCUMENTATION=${{ env.Z80_WITH_HTML_DOCUMENTATION }}
-DZ80_WITH_PDF_DOCUMENTATION=${{ env.Z80_WITH_PDF_DOCUMENTATION }}
-DZ80_WITH_PKGCONFIG_SUPPORT=${{ env.Z80_WITH_PKGCONFIG_SUPPORT }}
-DZ80_WITH_STANDARD_DOCUMENTS=${{ env.Z80_WITH_STANDARD_DOCUMENTS }}
-DZ80_WITH_STEP_TESTING_TOOL=${{ env.Z80_WITH_STEP_TESTING_TOOL }}
-DZ80_WITH_TESTING_TOOL=${{ env.Z80_WITH_TESTING_TOOL }}
-DZ80_WITH_EXECUTE=${{ env.Z80_WITH_EXECUTE }}
-DZ80_WITH_FULL_IM0=${{ env.Z80_WITH_FULL_IM0 }}
-DZ80_WITH_IM0_RETX_NOTIFICATIONS=${{ env.Z80_WITH_IM0_RETX_NOTIFICATIONS }}
-DZ80_WITH_PARITY_COMPUTATION=${{ env.Z80_WITH_PARITY_COMPUTATION }}
-DZ80_WITH_PRECOMPUTED_DAA=${{ env.Z80_WITH_PRECOMPUTED_DAA }}
-DZ80_WITH_Q=${{ env.Z80_WITH_Q }}
-DZ80_WITH_SPECIAL_RESET=${{ env.Z80_WITH_SPECIAL_RESET }}
-DZ80_WITH_UNOFFICIAL_RETI=${{ env.Z80_WITH_UNOFFICIAL_RETI }}
-DZ80_WITH_ZILOG_NMOS_LD_A_IR_BUG=${{ env.Z80_WITH_ZILOG_NMOS_LD_A_IR_BUG }}
-B "${{ github.workspace }}/build"
-S "${{ github.workspace }}"
- name: Build
run: cmake --build "${{ github.workspace }}/build" --config ${{ env.CMAKE_BUILD_TYPE }} --verbose
- name: Test
working-directory: ${{ github.workspace }}/build
run: ./step-test-Z80 step-tests/*.json
- name: Test with `--run`
working-directory: ${{ github.workspace }}/build
run: ./step-test-Z80 --run step-tests/*.json