## AltairZ80 simulator
##
## Update this file as the local simulator sources and build metadata
## change. Keep shared target-construction logic in the common CMake helpers.
##
## Not yet: if this directory later gets a local unit-test subtree, declare
## it explicitly here with add_subdirectory(unit-tests).

zimh_find_bison(BISON_COMMAND BISON_JOB_POOL)

set(altairz80_m68kasm_c "${CMAKE_CURRENT_BINARY_DIR}/m68k/m68kasm.c")

add_custom_command(
    OUTPUT
        "${altairz80_m68kasm_c}"
    COMMAND "${CMAKE_COMMAND}" -E make_directory
        "${CMAKE_CURRENT_BINARY_DIR}/m68k"
    COMMAND "${BISON_COMMAND}"
        -o "${altairz80_m68kasm_c}"
        "${CMAKE_CURRENT_SOURCE_DIR}/m68k/m68kasm.y"
    DEPENDS
        "${CMAKE_CURRENT_SOURCE_DIR}/m68k/m68kasm.y"
    ${BISON_JOB_POOL}
    VERBATIM
)

add_simulator(altairz80
    SOURCES
        altairz80_cpu.c
        altairz80_cpu_nommu.c
        s100_tuart.c
        s100_dazzler.c
        s100_jair.c
        sol20.c
        s100_vdm1.c
        mmd.c
        s100_dj2d.c
        s100_djhdc.c
        altairz80_dsk.c
        disasm.c
        altairz80_sio.c
        altairz80_sys.c
        altairz80_hdsk.c
        altairz80_net.c
        s100_hayes.c
        s100_2sio.c
        s100_pmmi.c
        flashwriter2.c
        i86_decode.c
        i86_ops.c
        i86_prim_ops.c
        i8272.c
        insnsd.c
        altairz80_mhdsk.c
        ibc.c
        ibc_mcc_hdc.c
        ibc_smd_hdc.c
        mfdc.c
        n8vem.c
        vfdhd.c
        s100_disk1a.c
        s100_disk2.c
        s100_disk3.c
        s100_fif.c
        s100_mdriveh.c
        s100_icom.c
        s100_jadedd.c
        s100_mdsa.c
        s100_mdsad.c
        s100_selchan.c
        s100_ss1.c
        s100_64fdc.c
        s100_scp300f.c
        s100_tarbell.c
        s100_tdd.c
        wd179x.c
        s100_hdc1001.c
        s100_if3.c
        s100_adcs6.c
        m68k/m68kcpu.c
        m68k/m68kdasm.c
        ${altairz80_m68kasm_c}
        m68k/m68kopac.c
        m68k/m68kopdm.c
        m68k/softfloat/softfloat.c
        m68k/m68kopnz.c
        m68k/m68kops.c
        m68ksim.c
    INCLUDES
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_BINARY_DIR}
    FEATURE_VIDEO
    LABEL AltairZ80
    PKG_FAMILY altairz80_family
    TEST altairz80)

set(altairz80_boot_rom_choice_output_dir
    "${CMAKE_CURRENT_BINARY_DIR}/tests/altairz80-boot-rom-choice")
set(altairz80_wd179x_index_pulse_output_dir
    "${CMAKE_CURRENT_BINARY_DIR}/tests/altairz80-wd179x-index-pulse")

find_package(Python3 COMPONENTS Interpreter)
if (Python3_Interpreter_FOUND)
    add_test(
        NAME zimh-altairz80-boot-rom-choice
        COMMAND
            ${Python3_EXECUTABLE}
            "${CMAKE_CURRENT_SOURCE_DIR}/tests/boot_rom_choice_test.py"
            $<TARGET_FILE:altairz80>
            --work-dir
            "${altairz80_boot_rom_choice_output_dir}")

    set_tests_properties(
        zimh-altairz80-boot-rom-choice
        PROPERTIES
            LABELS "zimh;integration;zimh-AltairZ80"
            ENVIRONMENT
            "SIMH_TEST_OUTPUT_DIR=${altairz80_boot_rom_choice_output_dir}")

    add_test(
        NAME zimh-altairz80-wd179x-index-pulse
        COMMAND
            ${Python3_EXECUTABLE}
            "${CMAKE_CURRENT_SOURCE_DIR}/tests/wd179x_index_pulse_test.py"
            $<TARGET_FILE:altairz80>
            --work-dir
            "${altairz80_wd179x_index_pulse_output_dir}")

    set_tests_properties(
        zimh-altairz80-wd179x-index-pulse
        PROPERTIES
            LABELS "zimh;integration;zimh-AltairZ80"
            ENVIRONMENT
            "SIMH_TEST_OUTPUT_DIR=${altairz80_wd179x_index_pulse_output_dir}")
endif ()
