# MSXBUILD Utils to use openMSX in build pipelines. You can use these scripts as-is. But as always, feel free to extend it for your specific needs or contribute a fix or feature. ## OpenMSX missing automation documentation * Don't use DirAsDisk, it is slow * Wrap all TCL commands in catch+stderr+exit1 * Use TCL script for auto HD import/export * Use stdio mode for headless and/or fast boot * Disable throttling for automation steps * Use fail_after TCL script to run openMSX safely * Control openMSX from inside with TCL+command * Enable SDL just before command is addictive fast * TODO: Use TCL for BASIC/ASM/C lcov (Cobertura) code coverage The files in this repro try to handle these steps for you. ## Features * Allows parallel headless openMSX build pipeline * openMSX safe exit failure guards * Automatic disk image import + export per build step * Downloads and caches resources from msxhub.com * Auto magic openMSX extensions and machine rom's setup * SDCC msx build steps ## Dependencies * make + wget + tar + dos2unix * sdcc * openmsx * ffmpeg (optional, see `srv/assert-all/0module.mk` howto merge videos) For debian use; apt-get install make wget tar dos2unix sdcc openmsx ffmpeg ## Usage Include the `lib/make/msxbuild.mk` file from your Makefile. And override the paths if needed; * PATH_SDCC=/usr/bin * PATH_OPENMSX=/usr/bin Then build result based compile rules see an example in; `src/ahello-m80/0module.mk` When you want to see whats happening do a debug run; normal run; time make assert-all real 0m3.223s debug run at 11 Mhz; time MB_OPENMSX_HEADLESS=off MB_OPENMSX_THROTTLE=on make assert-all real 1m4.856s debug run real msx speed; time MB_OPENMSX_HEADLESS=off MB_OPENMSX_THROTTLE=on MB_OPENMSX_SPEED=100 make assert-all real 2m37.379s debug run with screenshot on exit; (Segfaults if using (old) SDL, or/and black screens without throttle) time MB_OPENMSX_HEADLESS=off MB_OPENMSX_THROTTLE=on MB_FLIGHT_SCREEN=on make -s assert-all real 1m14.043s debug run with video recorder and merge to one video file; time MB_OPENMSX_HEADLESS=off MB_FLIGHT_VIDEO=on make -s assert-all real 0m7.136s build parallel; time make -s -j4 assert-all real 0m1.817s ## Functions Current set is WIP. * mb_autoexec_append_cmd * mb_autoexec_append_echo * mb_autoexec_append_rem * mb_autoexec_append_show_gui * mb_autoexec_append_stop_fail * mb_autoexec_append_exit * mb_autoexec_append_joyporta_mouse * mb_autoexec_append_save_screenshot * mb_autoexec_append_save_video * mb_autoexec_append_safe_test * mb_autoexec_append_safe_cmd * mb_autoexec_write_default * mb_autoexec_show_gui40 * mb_autoexec_show_gui40_mouse * mb_autoexec_show_gui80 * mb_autoexec_show_gui80_mouse * mb_autoexec_safe_cmd * mb_autoexec_safe_test * mb_msxhub_file * mb_msxhub_get_dos1_boot * mb_msxhub_get_dos2_boot * mb_msxhub_get_dos2_utils * mb_msxhub_get_nextor_boot * mb_msxhub_get_nextor_utils * mb_msxhub_get_macro80 * mb_msxhub_get_z80asmuk * mb_msxhub_get_wbass2 * mb_msxhub_get_konpass * mb_msxhub_get_pmarc * mb_msxhub_get_lhpack * mb_msxhub_get_lhext * mb_msxhub_get_gunzip * mb_msxhub_get_tunzip * mb_msxhub_get_popcom * mb_msxhub_get_make * mb_msxhub_get_adir * mb_msxhub_get_turbo * mb_msxhub_get_baskom * mb_msxhub_get_binldr * mb_msxhub_get_dmphex * mb_msxhub_get_zd * mb_msxhub_get_msxdos2t * mb_msxhub_get_gfxage * mb_msxrom_file * mb_msxrom_setup * mb_msxrom_extension_ide * mb_msxrom_extension_ide_nextor * mb_msxrom_extension_scsi_novaxis * mb_msxrom_extension_msxdos22 * mb_msxrom_extension_rs232 * mb_msxrom_extension_fmpac * mb_msxrom_extension_fmpac_en * mb_msxrom_extension_moonsound * mb_msxrom_extension_basickun * mb_msxrom_machine_Canon_V-20 * mb_msxrom_machine_Mitsubishi_ML-F80 * mb_msxrom_machine_Mitsubishi_ML-FX1 * mb_msxrom_machine_Mitsubishi_ML-G3_ES * mb_msxrom_machine_Philips_VG_8000 * mb_msxrom_machine_Philips_VG_8230 * mb_msxrom_machine_Philips_NMS_8250 * mb_msxrom_machine_Toshiba_HX-21.xml * mb_msxrom_machine_Yamaha_AX200 * mb_msxrom_machine_Yamaha_YIS-503IIIR * mb_msxrom_machine_Panasonic_FS-A1WSX * mb_msxrom_machine_Boosted_MSX2_EN * mb_msxrom_machine_Boosted_MSX2+_JP * mb_openmsx_setup * mb_openmsx_dosctl * mb_sdcc_compile_asm * mb_sdcc_link_asm_lib * mb_sdcc_link_asm * mb_sdcc_link_asm_0000 = calls mb_sdcc_link_asm,$(1),$(2),0x0000 * mb_sdcc_link_asm_0100 * mb_sdcc_link_asm_1000 * mb_sdcc_link_asm_4000 * mb_sdcc_link_asm_8000 * mb_sdcc_link_asm_C000 * mb_sdcc_link_asm_dos = calls mb_sdcc_link_asm_0100 * mb_sdcc_hex2bin * mb_clean * mb_mkdir * mb_delete * mb_copy * mb_unix2dos * mb_dos2unix * mb_create_dist * mb_create_flight_video ## Errata * Imported folders in openMSX; `cd utils;cd ..;dir` breaks, use `cd utils:cd a:\;dir` as workaround * Saving screenshots sometimes lets openMSX segfaults if using SDL * Doesn't work on windows * Missing C and mixed support * If no SDL or SDLGL-PP than screenshots or videos don't work