cmake_minimum_required(VERSION 3.13) set(PROJECT HappySpectrum) include(pico_sdk_import.cmake) include(pico_extras_import.cmake) project(${PROJECT} C CXX) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 20) set(PICO_CXX_ENABLE_EXCEPTIONS 1) set(PICO_CXX_ENABLE_RTTI 1) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DRELEASE -DNDEBUG") pico_sdk_init() add_executable(${PROJECT} main.cpp settings.h globals.cpp globals.h custom_errors.h about_text.h core0_runner.cpp core1_runner.cpp lib/templates/NVPtr.h lib/templates/RCPtr.h lib/templates/Array.h lib/templates/template_helpers.h lib/cdefs.h lib/errors.h lib/errors.cpp lib/standard_types.h lib/auto_config.h lib/detect_configuration.h lib/cstrings/cstrings.h lib/cstrings/cstrings.cpp lib/cstrings/tempmem.h lib/cstrings/tempmem.cpp lib/pico/helpers.h lib/pico/helpers.cpp lib/pico/Mutex.h lib/pico/Led.h lib/pico/PwmLoadSensor.h lib/pico/PwmLoadSensor.cpp lib/pico/logline.h lib/pico/logline.cpp lib/kio/msbit.h lib/kio/peekpoke.h lib/zlib/compress.c lib/zlib/uncompr.c lib/zlib/inflate.c lib/zlib/deflate.c lib/zlib/adler32.c lib/zlib/crc32.c lib/zlib/infback.c lib/zlib/zutil.c lib/zlib/inftrees.c lib/zlib/trees.c lib/zlib/inffast.c dev/dev.h dev/Audio/i2s_audio.pio dev/Audio/Audio.h dev/Video/VGAController.h dev/Video/VGAController.cpp dev/Video/scanline_renderers.h dev/Video/scanline_renderers.cpp dev/Audio/I2sAudio.h dev/Audio/I2sAudio.cpp dev/Buttons.h dev/Joysticks.h dev/Keyboard.h dev/Mouse.h dev/FlashFileSystem.h dev/FlashFileSystem.cpp dev/FatFileSystem.h dev/FatFileSystem.cpp dev/FileSystem.h dev/FileSystem.cpp zx/zx_globals.h zx/zx_globals.cpp zx/model_info.h zx/zx_types.h zx/zx_time.h zx/ModelInfo.h zx/ModelInfo.cpp zx/IoInfo.h zx/IoInfo.cpp zx/Object.h zx/MachineConfig.h zx/zx_utilities.h zx/zx_utilities.cpp zx/Z80Head.cpp zx/Z80Head.h zx/Machines/Machine.h zx/Machines/Machine.cpp zx/Machines/MachineZxsp.h zx/Machines/MachineZxsp.cpp zx/roms/roms.h zx/roms/roms.cpp zx/Items/Z80/Z80.h zx/Items/Z80/Z80.cpp zx/Items/Z80/Z80codes.h zx/Items/Z80/Z80codesCB.h zx/Items/Z80/Z80codesED.h zx/Items/Z80/Z80codesXY.h zx/Items/Z80/Z80opcodes.h zx/Items/Z80/Z80macros.h zx/Items/Z80/z80_types.h zx/Items/Multiface/Multiface.h zx/Items/Multiface/Multiface.cpp zx/Items/Item.h zx/Items/Item.cpp zx/Items/Ula/Crtc.h zx/Items/Ula/Crtc.cpp zx/Items/Ula/Ula.h zx/Items/Ula/Ula.cpp zx/Items/Ula/UlaZxsp.h zx/Items/Ula/UlaZxsp.cpp zx/Items/Ula/Mmu.h zx/Items/Ula/Mmu.cpp zx/Items/Ula/MmuZxsp.h zx/Items/Ula/MmuZxsp.cpp "flashfs/flashfs.h" "flashfs/flashfs.cpp" #dev/FS/Device.h dev/FS/Device.cpp #dev/FS/SerialDevice.h dev/FS/SerialDevice.cpp #dev/FS/BlockDevice.h dev/FS/BlockDevice.cpp #dev/FS/File.h dev/FS/File.cpp #dev/FS/BufferedBlockDevice.h dev/FS/BufferedBlockDevice.cpp #dev/FS/WBufferedBlockDevice.h dev/FS/WBufferedBlockDevice.cpp #dev/FS/I2cEeprom.h dev/FS/I2cEeprom.cpp #dev/FS/QspiFlash.h dev/FS/QspiFlash.cpp #dev/FS/SDCard.h dev/FS/SDCard.cpp #dev/FS/RamDisk.h #dev/FS/crc.h dev/FS/crc.cpp #dev/FS/CSD.h dev/FS/CSD.cpp #dev/FS/IoCtl.h #dev/FS/ff_glue.cpp #dev/FS/FileSystem.h #dev/FS/FatFileSystem.h dev/FS/FatFileSystem.cpp #dev/crc.cppxxx dev/crc.hxxx dev/CSD.hxxx #dev/File.cppxxx dev/File.hxxx #dev/BlockDevice.cppxxx dev/BlockDevice.hxxx #dev/QspiFlash.cppxxx dev/QspiFlash.hxxx #dev/SDCard.cppxxx dev/SDCard.hxxx #dev/ff14b/diskio.cpp #dev/ff14b/diskio.h #dev/ff14b/ff.c #dev/ff14b/ff.h #dev/ff14b/ffconf.h #dev/ff14b/ffsystem.c #dev/ff14b/ffunicode.c #HappySpectrum/MachineController.cpp #HappySpectrum/Screen.cpp #HappySpectrum/Settings.cpp #HappySpectrum/ConfigureKeyboardJoystickDialog.cpp #HappySpectrum/ConfigDialog.cpp #HappySpectrum/Mouse.cpp #HappySpectrum/Dsp.cpp #lib/kio/kio.cpp #lib/kio/exceptions.cpp #lib/cstrings/tempmem.cpp #lib/unix/FD.cpp #zx/Memory.cpp #zx/util.cpp ##zx/Audio/AudioDecoder.cpp #zx/Audio/TapeFile.cpp #zx/Files/bestModelForFile.cpp #zx/Files/file_z80.cpp #zx/Files/FloppyDisk.cpp #zx/Files/RzxBlock.cpp #zx/Files/RzxFile.cpp #zx/Files/TccRom.cpp #zx/Files/Z80Head.cpp #zx/Items/AmxMouse.cpp #zx/Items/CurrahMicroSpeech.cpp #zx/Items/KempstonMouse.cpp #zx/Items/Keyboard.cpp #zx/Items/MassStorage.cpp #zx/Items/SP0256.cpp #zx/Items/TapeRecorder.cpp #zx/Items/Ay/Ay.cpp #zx/Items/Ay/AySubclasses.cpp #zx/Items/Fdc/Fdc.cpp #zx/Items/Fdc/Fdc765.cpp #zx/Items/Fdc/FdcPlus3.cpp #zx/Items/Fdc/FloppyDiskDrive.cpp #zx/Items/Fdc/IdeDevice.cpp #zx/Items/Fdc/DivIDE.cpp #zx/Items/Joy/CursorJoy.cpp #zx/Items/Joy/DktronicsDualJoy.cpp #zx/Items/Joy/InvesJoy.cpp #zx/Items/Joy/Joy.cpp #zx/Items/Joy/KempstonJoy.cpp #zx/Items/Joy/SinclairJoy.cpp #zx/Items/Joy/Tc2048Joy.cpp #zx/Items/Joy/Tk85Joy.cpp #zx/Items/Joy/ZxIf2.cpp #zx/Items/Multiface/Multiface.cpp #zx/Items/Multiface/Multiface1.cpp #zx/Items/Multiface/Multiface3.cpp #zx/Items/Multiface/Multiface128.cpp #zx/Items/Ula/Mmu128k.cpp #zx/Items/Ula/MmuInves.cpp #zx/Items/Ula/MmuPlus3.cpp #zx/Items/Ula/MmuJupiter.cpp #zx/Items/Ula/MmuTk85.cpp #zx/Items/Ula/MmuTs1500.cpp #zx/Items/Ula/MmuZx80.cpp #zx/Items/Ula/MmuZx81.cpp #zx/Items/Ula/MmuTc2048.cpp #zx/Items/Ula/MmuTc2068.cpp #zx/Items/Ula/Ula128k.cpp #zx/Items/Ula/UlaInves.cpp #zx/Items/Ula/UlaJupiter.cpp #zx/Items/Ula/UlaMono.cpp #zx/Items/Ula/UlaZx80.cpp #zx/Items/Ula/UlaZx81.cpp #zx/Items/Ula/UlaPlus3.cpp #zx/Items/Ula/UlaTc2048.cpp #zx/Machine/MachineInves.cpp #zx/Machine/MachineJupiter.cpp #zx/Machine/MachinePentagon128.cpp #zx/Machine/MachineTc2048.cpp #zx/Machine/MachineTc2068.cpp #zx/Machine/MachineTk85.cpp #zx/Machine/MachineTk90x.cpp #zx/Machine/MachineTk95.cpp #zx/Machine/MachineTs1000.cpp #zx/Machine/MachineTs1500.cpp #zx/Machine/MachineZx80.cpp #zx/Machine/MachineZx81.cpp #zx/Machine/MachineZx128.cpp #zx/Machine/MachineZxPlus2.cpp #zx/Machine/MachineZxPlus2a.cpp #zx/Machine/MachineZxPlus3.cpp #zx/Renderer/MonoRenderer.cpp #zx/Renderer/Renderer.cpp #zx/Renderer/Tc2048Renderer.cpp #zx/Renderer/ZxspRenderer.cpp ) target_compile_definitions(${PROJECT} PRIVATE PICO_MALLOC_PANIC=0 PICO_SCANVIDEO_48MHZ=0 PICO_SCANVIDEO_MAX_SCANLINE_BUFFER_WORDS=322 #PICO_SCANVIDEO_PLANE1_VARIABLE_FRAGMENT_DMA=1 PICO_AUDIO_I2S_PIO=1 PICO_AUDIO_I2S_DMA_CHANNEL=1 PICO_AUDIO_I2S_DMA_IRQ=1 FLASH_DISK_SIZE=512*1024 SDCARD_PIN_RX=4 SDCARD_PIN_CS=5 SDCARD_PIN_CLK=6 SDCARD_PIN_TX=7 ZX_TURBO_BOOST=4 # 3 .. 6 ZX_GUI_THREAD=0 ZX_VGA_THREAD=1 ZX_Z80_THREAD=0 ZX_WORKER_THREAD=1 ) target_include_directories(${PROJECT} PRIVATE ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/lib ${PROJECT_SOURCE_DIR}/zx ${PROJECT_SOURCE_DIR}/zx/Items ) # if there is a PIO assembler file: pico_generate_pio_header(${PROJECT} ${CMAKE_CURRENT_LIST_DIR}/dev/Audio/i2s_audio.pio) pico_enable_stdio_usb(${PROJECT} 1) pico_enable_stdio_uart(${PROJECT} 0) # Pull in libraries: (whatever you need, this also adds the header file search path!) target_link_libraries(${PROJECT} PRIVATE pico_multicore pico_stdlib pico_scanvideo_dpi hardware_pio hardware_dma hardware_irq hardware_spi #hardware_interp #hardware_rtc #hardware_i2c #hardware_adc hardware_pwm hardware_flash ) # create map/bin/hex/uf2 file etc. pico_add_extra_outputs(${PROJECT}) # add url via pico_set_program_url # example_auto_set_url(${PROJECT})