# MSXBUILD Utils to use openMSX in build pipelines. You can use these scripts as-is. the files in the `lib` are all you need. But as always, feel free to extend it for your specific needs or contribute a fix or feature. ## 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 * Screenshot and/or video output of full build ## Dependencies * make + wget + tar + dos2unix * sdcc * openmsx * ffmpeg For debian use; apt-get install make wget tar dos2unix sdcc openmsx ffmpeg ## Usage Classic Have access or copy the `lib` folder in your project and start writing make files. Include the `lib/make/msxbuild.mk` and override the paths if needed; * PATH_SDCC=/usr/bin * PATH_OPENMSX=/usr/bin ## Usage Docker TODO ## Example Project 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 manual test msxhub on machine; make DIST_QA_MSXHUB_MACHINE=Philips_VG_8000 bin/dist-qa-msxhub/@run ## 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 ` [prefix]` * mb_autoexec_append_save_video ` [prefix]` * mb_autoexec_append_safe_test ` [timeout] [exit-code]` * mb_autoexec_append_safe_cmd ` [timeout] [exit-code]` * mb_autoexec_write_default ` [text-mode]` * mb_autoexec_show_gui40 ` [cmd]` * mb_autoexec_show_gui40_mouse ` [cmd]` * mb_autoexec_show_gui80 ` [cmd]` * mb_autoexec_show_gui80_mouse ` [cmd]` * mb_autoexec_safe_cmd ` [text-mode]` * mb_autoexec_safe_test ` [text-mode]` * 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 `` * 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 ` [machine] [mem-argu]` * mb_sdcc_compile_asm ` ` * mb_sdcc_link_asm_lib ` ` * mb_sdcc_link_asm ` ` * mb_sdcc_link_asm_0000 ` ` * 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_bdos ` ` * mb_sdcc_hex2bin ` ` * mb_clean `` * mb_mkdir `` * mb_delete `` * mb_copy ` ` * mb_unix2dos ` ` * mb_dos2unix ` ` * mb_create_dist ` ` * mb_create_flight_video `` ## Errata * Doesn't work on windows * TODO: Missing C and mixed support * TODO: Use TCL for BASIC/ASM/C lcov (Cobertura) code coverage ## OpenMSX backlog issues * Bug: screenshots sometimes segfaults when using SDL renderer * Bug: screenshots don't work without throttle * Bug: Imported folders in openMSX; `cd utils;cd ..;dir` breaks, use `cd utils:cd a:\;dir` as workaround * Audio+midi device init option + warning messages on computer without sound card * Enhancing the IDE CD-ROM support * Command setcolor does not work on MSX1 vdp TMS9918 * Diskmanipulator export fully non-cased filename compare (duplicates) * Diskmanipulator reuse the device defined filename * run instance-id or run/process-label to replace hardcoded "untitled1" path * Remove msg or add ignore sram-fully or blank setting: SRAM file nms8250.cmos not found, assuming blank SRAM content. * Video record append mode + optional multiple previds to glue videos as one * SDL-NULL as window less renderer so that screenshot and/or video works headless * DocUpdate: Add speed note because it is slow + add example "after quit {export hdd}" * DocUpdate: Wrap all TCL commands in catch+stderr+exit1 * DocUpdate: Add 'headless' example via stdio+new + link to control omsxctl