msxbuild/README.md
Willem Cazander 230331d9a5
All checks were successful
Run test asserts / Test-Asserts (push) Successful in 0s
Cleanup of path variables.
2024-06-25 15:57:13 +02:00

120 lines
2.8 KiB
Markdown

# 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
* SDCC msx build steps.
* Allows headless openMSX buildpipe.
* openMSX safe exit failure guards.
* Automatic disk image import + export per build step.
* Downloads and caches resources from msxhub.com
## Dependencies
* make + wget + tar + dos2unix
* sdcc
* openmsx
For debian use;
apt-get install make wget tar dos2unix sdcc openmsx
## 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; `test/ahello-m80/0module.mk`
When you want to see whats happening do a debug run;
normal run;
time make clean assert-all
real 0m1.938s
debug run;
time MB_OPENMSX_RENDERER=SDL MB_OPENMSX_THROTTLE=ON make clean assert-all
real 0m32.977s
debug run real msx speed;
time MB_OPENMSX_RENDERER=SDL MB_OPENMSX_THROTTLE=ON MB_OPENMSX_SPEED=100 make clean assert-all
real 1m44.184s
## Functions
Current set is WIP.
* mb_compile_asm
* mb_link_asm_lib
* mb_link_asm
* mb_link_asm_0000 = call mb_link_asm,$(1),$(2),0x0000
* mb_link_asm_0100
* mb_link_asm_1000
* mb_link_asm_4000
* mb_link_asm_8000
* mb_link_asm_C000
* mb_link_asm_dos = alias for mb_link_asm_0100
* mb_hex2bin
* mb_openmsx_dosctl
* mb_msxhub_file
* mb_package_emuctl
* mb_package_dos1
* mb_package_dos2
* mb_package_nextor
* mb_package_macro80
* mb_package_z80asmuk
* mb_package_popcom
* mb_package_dmphex
* mb_package_baskom
* mb_package_pmarc
* mb_package_lhpack
* mb_package_lhext
* mb_package_gunzip
* mb_package_tunzip
* mb_package_turbo
* mb_package_binldr
* mb_package_gfxage
* mb_autoexec_append_cmd
* mb_autoexec_append_echo
* mb_autoexec_append_rem
* mb_autoexec_append_gui_mode
* mb_autoexec_append_stop_fail
* mb_autoexec_append_exit
* mb_autoexec_write_default
* mb_autoexec_open_gui
* mb_autoexec_open_gui_cmd
* mb_autoexec_cmd
* mb_autoexec_cmd_test
* mb_clean
* mb_mkdir
* mb_delete
* mb_copy
* mb_create_dist
## Errata
* Doesn't work on windows
* Missing C and mixed support
* If no SDL than screenshot in fail_after doesn't work