diff --git a/README.md b/README.md
index 99eb57b..4eb79c9 100644
--- a/README.md
+++ b/README.md
@@ -126,7 +126,7 @@ When you want to see whats happening do a debug run;
real 2m40.784s
record run with video per session and merge to one video file;
- time make @flight-video-package-qa
+ time make @flight-video-all
real 0m18.184s
build parallel;
diff --git a/lib/make/mb_flight.mk b/lib/make/mb_flight.mk
index 991e936..a92f69b 100644
--- a/lib/make/mb_flight.mk
+++ b/lib/make/mb_flight.mk
@@ -20,10 +20,10 @@ $(call mb_make_call,mb_doc_variable,MB_FLIGHT_VIDEO_NAME,"Video file name of the
define mb_flight_video_merge
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_check_arg1,mb_flight_video_merge,$(1))
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_os_echo_good,Indexing flight videos)
-$(MB_ᕽᕽᕽ )ls -1tr $(1)/*-omsx/videos/*.avi | awk -F "$(1)/" -v s="file '" -v e="'" '{print s$$2e}' > $(1)/$(MB_FLIGHT_VIDEO_NAME).lst
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_os_echo_command,Indexing flight videos)
+$(MB_ᕽᕽᕽ )find $(1) -type f -name '*.avi' -printf '%T@ %Tc %p\n' | sort -n | awk -F "$(1)/" -v s="file '" -v e="'" '{print s$$2e}' > $(1)/$(MB_FLIGHT_VIDEO_NAME).lst
$(MB_ᕽᕽᕽ )ffmpeg -v quiet -y -f concat -i $(1)/$(MB_FLIGHT_VIDEO_NAME).lst -c copy $(1)/$(MB_FLIGHT_VIDEO_NAME).avi
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_os_echo_good,Flight video completed)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_os_echo_remark,Flight video completed)
endef
$(call mb_make_call,mb_doc_function,mb_flight_video_merge,"Merged all flight videos to one.","
")
@@ -49,7 +49,7 @@ $(MB_@RECIPE)$$(if $$(filter on,$$(MB_FLIGHT_VIDEO)),$$(call mb_make_call,mb_fli
@flight-video-test: @clean
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_before)
-$(MB_@RECIPE)MB_OPENMSX_HEADLESS$(MB_MAKE_EQUALS)off MB_FLIGHT_VIDEO$(MB_MAKE_EQUALS)on $$(MAKE) -s @@flight-video-test
+$(MB_@RECIPE)MB_OPENMSX_HEADLESS$(MB_MAKE_EQUALS)off MB_FLIGHT_VIDEO$(MB_MAKE_EQUALS)on $$(MAKE) @@flight-video-test
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target_help,@flight-video-test,"Runs @clean and @test with recorder and merges flight videos to one.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,@flight-video-test)
@@ -61,11 +61,23 @@ $(MB_@RECIPE)$$(if $$(filter on,$$(MB_FLIGHT_VIDEO)),$$(call mb_make_call,mb_fli
@flight-video-package-qa: @clean
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_before)
-$(MB_@RECIPE)MB_OPENMSX_HEADLESS$(MB_MAKE_EQUALS)ff MB_FLIGHT_VIDEO$(MB_MAKE_EQUALS)on $$(MAKE) -s @@flight-video-package-qa
+$(MB_@RECIPE)MB_OPENMSX_HEADLESS$(MB_MAKE_EQUALS)off MB_FLIGHT_VIDEO$(MB_MAKE_EQUALS)on $$(MAKE) @@flight-video-package-qa
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target_help,@flight-video-package-qa,"Runs @clean and @package-qa with recorder and merges flight videos to one.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,@flight-video-package-qa)
+
+@@flight-video-all: @all
+$(MB_@RECIPE)$$(if $$(filter on,$$(MB_FLIGHT_VIDEO)),$$(call mb_make_call,mb_flight_video_merge,$(1)))
+
+
+@flight-video-all: @clean
+$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_before)
+$(MB_@RECIPE)MB_OPENMSX_HEADLESS$(MB_MAKE_EQUALS)off MB_FLIGHT_VIDEO$(MB_MAKE_EQUALS)on $$(MAKE) @@flight-video-all
+$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target_help,@flight-video-all,"Runs @clean and @all with recorder and merges flight videos to one.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,@flight-video-all)
+
.RECIPEPREFIX := $(MB_@RECIPEPREFIX)
endef
define mb_flight_proj_flow_video
diff --git a/lib/make/ i18n/mb_i18n.mk b/lib/make/ i18n/mb_i18n.mk
index 19eb6ae..5d8cdfb 100644
--- a/lib/make/ i18n/mb_i18n.mk
+++ b/lib/make/ i18n/mb_i18n.mk
@@ -62,6 +62,9 @@ $(call mb_make_call,mb_doc_variable_i18n,MB_I18N_PROJ_DIR_CREATE,"Message for cr
MB_I18N_PROJ_DIR_DELETE ?= Removing folder
$(call mb_make_call,mb_doc_variable_i18n,MB_I18N_PROJ_DIR_DELETE,"Message for deleting a folder.")
+MB_I18N_PROJ_ASSERT_COUNT ?= Total assertions done
+$(call mb_make_call,mb_doc_variable_i18n,MB_I18N_PROJ_ASSERT_COUNT,"Message for reporting the assertion count of a phase.")
+
MB_I18N_FLOW_CLONE_REPORT ?= Clone troopers
$(call mb_make_call,mb_doc_variable_i18n,MB_I18N_FLOW_CLONE_REPORT,"Message for total amount of cloned files.")
diff --git a/lib/make/ i18n/mb_i18n_BASIC.mk b/lib/make/ i18n/mb_i18n_BASIC.mk
index bda1fc5..f6fb1dd 100644
--- a/lib/make/ i18n/mb_i18n_BASIC.mk
+++ b/lib/make/ i18n/mb_i18n_BASIC.mk
@@ -19,6 +19,7 @@ MB_I18N_PROJ_STEP_AFTER = $(MB_MAKE_HASH)$(MB_MAKE_HASH)$(MB_MAKE_HASH)$(MB_MAKE
MB_I18N_PROJ_STEP_DONE = BASIC RUN COMPLETED:
MB_I18N_PROJ_DIR_CREATE = FOLDER CREATE:
MB_I18N_PROJ_DIR_DELETE = FOLDER DELETE:
+MB_I18N_PROJ_ASSERT_COUNT = TOTAL ASSERT OK:
MB_I18N_FLOW_CLONE_REPORT = GEM⁴ TROOPERS:
MB_I18N_SDCC_COMPILE = ATARI COMPILE:
MB_I18N_SDCC_ARLIB = ATARI ARLIB:
diff --git a/lib/make/ i18n/mb_i18n_iu.mk b/lib/make/ i18n/mb_i18n_iu.mk
index 0abb70a..3f32cc7 100644
--- a/lib/make/ i18n/mb_i18n_iu.mk
+++ b/lib/make/ i18n/mb_i18n_iu.mk
@@ -19,6 +19,7 @@ MB_I18N_PROJ_STEP_AFTER = ᑭᖑᓂᖓᓂ
MB_I18N_PROJ_STEP_DONE = ᐱᓕᕆᐊᖅ ᐱᐊᓂᒃᑕᐅᔪᖅ
MB_I18N_PROJ_DIR_CREATE = ᑐᖅᑯᐃᕝᕕᓕᐅᕐᓂᖅ
MB_I18N_PROJ_DIR_DELETE = ᑐᖅᑯᖅᓯᓯᒪᕝᕕᖓ ᐲᔭᖅᑕᐅᓗᓂ
+MB_I18N_PROJ_ASSERT_COUNT = ᑲᑎᖦᖢᒋᑦ ᑕᐃᒪᐃᓐᓂᕋᖅᑕᐅᔪᑦ
MB_I18N_FLOW_CLONE_REPORT = ᐃᓐᓈᕈᐃᑦ
MB_I18N_SDCC_COMPILE = ᖃᕆᑕᐅᔭᕋᓛᖅᓄᐊᑦᓯᓂᖅ
MB_I18N_SDCC_ARLIB = ᖃᕆᑕᐅᔭᕋᓛᖅᑐᖅᑯᖅᑕᐅᓯᒪᔪᑦ
diff --git a/lib/make/ i18n/mb_i18n_ja.mk b/lib/make/ i18n/mb_i18n_ja.mk
index b85145e..34bde50 100644
--- a/lib/make/ i18n/mb_i18n_ja.mk
+++ b/lib/make/ i18n/mb_i18n_ja.mk
@@ -19,6 +19,7 @@ MB_I18N_PROJ_STEP_AFTER = フェーズ後
MB_I18N_PROJ_STEP_DONE = プライムパイターゲットの実行を終了しました
MB_I18N_PROJ_DIR_CREATE = フォルダーの作成
MB_I18N_PROJ_DIR_DELETE = フォルダーの削除
+MB_I18N_PROJ_ASSERT_COUNT = 完了したアサーションの合計
MB_I18N_FLOW_CLONE_REPORT = クローン・トルーパー
MB_I18N_SDCC_COMPILE = 標準マイクロコンパイラ
MB_I18N_SDCC_ARLIB = 標準マイクロビルドライブラリ
diff --git a/lib/make/天房系統擴展/mb_msxrom.mk b/lib/make/天房系統擴展/mb_msxrom.mk
index 8515417..404b895 100644
--- a/lib/make/天房系統擴展/mb_msxrom.mk
+++ b/lib/make/天房系統擴展/mb_msxrom.mk
@@ -22,150 +22,150 @@ $(call mb_make_call,mb_doc_function_deep,mb_msxrom_file,"Installs msxroms from s
define mb_msxrom_setup
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx/share))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/systemroms),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx/share/systemroms))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/systemroms/machines),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx/share/systemroms/machines))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/systemroms/extensions),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx/share/systemroms/extensions))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))/share))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/systemroms),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions))
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_setup,"Creates needed systemrom folders.","")
define mb_msxrom_extension_ide
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,extensions/ide240.dat)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,extensions/ide240.dat)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_ide,"Installs sunrise IDE classic rom.","")
define mb_msxrom_extension_ide_nextor
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,extensions/Nextor-2.1.1.SunriseIDE.ROM)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,extensions/Nextor-2.1.1.SunriseIDE.ROM)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_ide_nextor,"Installs sunrise IDE nextor rom.","")
define mb_msxrom_extension_scsi_novaxis
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,extensions/novaxis.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,extensions/novaxis.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_scsi_novaxis,"Installs Gouda SCSI novaxis rom.","")
define mb_msxrom_extension_msxdos22
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,extensions/msxdos22.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,extensions/msxdos22.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_msxdos22,"Installs msxdos 2.20 rom.","")
define mb_msxrom_extension_rs232
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,extensions/rs232.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,extensions/rs232.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_rs232,"Installs rs232 rom.","")
define mb_msxrom_extension_fmpac
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,extensions/fmpac.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,extensions/fmpac.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_fmpac,"Installs fmpac rom.","")
define mb_msxrom_extension_fmpac_en
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,extensions/fmpac_en.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,extensions/fmpac_en.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_fmpac_en,"Installs fmpac english rom.","")
define mb_msxrom_extension_moonsound
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,extensions/yrw801.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,extensions/yrw801.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_moonsound,"Installs moonsound rom.","")
define mb_msxrom_extension_basickun
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/extensions,machines/sanyo/phc-70fd2_basickun.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/extensions,machines/sanyo/phc-70fd2_basickun.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_extension_basickun,"Installs basickun compiler rom.","")
define mb_msxrom_machine_Canon_V-20
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/canon/v-20_basic-bios1.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/canon/v-20_basic-bios1.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Canon_V-20,"Installs machine roms.","")
define mb_msxrom_machine_Mitsubishi_ML-F80
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/mitsubishi/ml-f80_basic-bios1.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/mitsubishi/ml-f80_basic-bios1.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Mitsubishi_ML-F80,"Installs machine roms.","")
define mb_msxrom_machine_Mitsubishi_ML-FX1
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/mitsubishi/ml-fx1_basic-bios1.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/mitsubishi/ml-fx1_basic-bios1.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Mitsubishi_ML-FX1,"Installs machine roms.","")
define mb_msxrom_machine_Mitsubishi_ML-G3_ES
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/mitsubishi/ml-g3_es_basic-bios2.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/mitsubishi/ml-g3_es_disk.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/mitsubishi/ml-g3_es_msx2sub.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/mitsubishi/ml-g3_es_rs232.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/mitsubishi/ml-g3_es_basic-bios2.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/mitsubishi/ml-g3_es_disk.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/mitsubishi/ml-g3_es_msx2sub.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/mitsubishi/ml-g3_es_rs232.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Mitsubishi_ML-G3_ES,"Installs machine roms.","")
define mb_msxrom_machine_Philips_VG_8000
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/philips/vg8000_basic-bios1.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/philips/vg8000_basic-bios1.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Philips_VG_8000,"Installs machine roms.","")
define mb_msxrom_machine_Philips_VG_8230
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/philips/vg8230_basic-bios2.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/philips/vg8230_disk.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/philips/vg8230_msx2sub.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/philips/vg8230_basic-bios2.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/philips/vg8230_disk.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/philips/vg8230_msx2sub.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Philips_VG_8230,"Installs machine roms.","")
define mb_msxrom_machine_Philips_NMS_8250
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/philips/nms8250_basic-bios2.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/philips/nms8250_msx2sub.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/philips/nms8250_disk.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/philips/nms8250_basic-bios2.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/philips/nms8250_msx2sub.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/philips/nms8250_disk.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Philips_NMS_8250,"Installs machine roms.","")
define mb_msxrom_machine_Toshiba_HX-21
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/toshiba/HX21-IC2.BIN)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/toshiba/HX21-IC3.BIN)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/toshiba/HX21-IC2.BIN)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/toshiba/HX21-IC3.BIN)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Toshiba_HX-21,"Installs machine roms.","")
define mb_msxrom_machine_Yamaha_AX200
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/yamaha/ax200_basic-bios1.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/yamaha/ax200_arabic.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/yamaha/ax200_music.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/yamaha/ax200_basic-bios1.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/yamaha/ax200_arabic.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/yamaha/ax200_music.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Yamaha_AX200,"Installs machine roms.","")
define mb_msxrom_machine_Yamaha_YIS-503IIIR
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/yamaha/yis503iii_basic-bios2.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/yamaha/yis503iii_msx2sub.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/yamaha/yis503iii_cpm.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/yamaha/yis503iii_net_2.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/yamaha/yis503iii_basic-bios2.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/yamaha/yis503iii_msx2sub.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/yamaha/yis503iii_cpm.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/yamaha/yis503iii_net_2.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Yamaha_YIS-503IIIR,"Installs machine roms.","")
define mb_msxrom_machine_Panasonic_FS-A1WSX
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/panasonic/fs-a1wsx_basic-bios2p.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/panasonic/fs-a1wsx_disk.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/panasonic/fs-a1wsx_firmware.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/panasonic/fs-a1wsx_fmbasic.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/panasonic/fs-a1wsx_kanjibasic.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/panasonic/fs-a1wsx_kanjifont.rom)
-$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)-omsx/share/systemroms/machines,machines/panasonic/fs-a1wsx_msx2psub.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/panasonic/fs-a1wsx_basic-bios2p.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/panasonic/fs-a1wsx_disk.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/panasonic/fs-a1wsx_firmware.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/panasonic/fs-a1wsx_fmbasic.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/panasonic/fs-a1wsx_kanjibasic.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/panasonic/fs-a1wsx_kanjifont.rom)
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_file,$(1)$(MB_@WORK)$(notdir $(1))/share/systemroms/machines,machines/panasonic/fs-a1wsx_msx2psub.rom)
endef
$(call mb_make_call,mb_doc_function_deep,mb_msxrom_machine_Panasonic_FS-A1WSX,"Installs machine roms.","")
diff --git a/lib/make/天房系統擴展/mb_openmsx.mk b/lib/make/天房系統擴展/mb_openmsx.mk
index f9463b6..04b493a 100644
--- a/lib/make/天房系統擴展/mb_openmsx.mk
+++ b/lib/make/天房系統擴展/mb_openmsx.mk
@@ -44,19 +44,19 @@ $(call mb_make_call,mb_doc_variable_deep,MB_OPENMSX_STDERR_IGNORE,"Kills logging
define mb_openmsx_setup
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_check_arg2,$(0),$(1),$(2))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/stdio.xml),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/stdio.xml,$(1)-omsx))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx/share))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/settings.xml),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/settings.xml,$(1)-omsx/share))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/scripts),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx/share/scripts))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/scripts/boot_exec.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/boot_exec.tcl,$(1)-omsx/share/scripts))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/scripts/fail_after.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/fail_after.tcl,$(1)-omsx/share/scripts))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/scripts/fire_hdd.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/fire_hdd.tcl,$(1)-omsx/share/scripts))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/scripts/headless.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/headless.tcl,$(1)-omsx/share/scripts))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/scripts/night_flight.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/night_flight.tcl,$(1)-omsx/share/scripts))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/scripts/omsxctl.tcl),,$(call mb_msxhub_file,$(1)-omsx/share/scripts,OMSXCTL/1.0-1/get/OMSXCTL/omsxctl.tcl))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/extensions),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx/share/extensions))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/share/extensions/fire-hdd.xml),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/extensions/fire-hdd.xml,$(1)-omsx/share/extensions))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/stdio.xml),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/stdio.xml,$(1)$(MB_@WORK)$(notdir $(1))))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))/share))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/settings.xml),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/settings.xml,$(1)$(MB_@WORK)$(notdir $(1))/share))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/scripts),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))/share/scripts))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/scripts/boot_exec.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/boot_exec.tcl,$(1)$(MB_@WORK)$(notdir $(1))/share/scripts))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/scripts/fail_after.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/fail_after.tcl,$(1)$(MB_@WORK)$(notdir $(1))/share/scripts))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/scripts/fire_hdd.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/fire_hdd.tcl,$(1)$(MB_@WORK)$(notdir $(1))/share/scripts))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/scripts/headless.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/headless.tcl,$(1)$(MB_@WORK)$(notdir $(1))/share/scripts))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/scripts/night_flight.tcl),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/scripts/night_flight.tcl,$(1)$(MB_@WORK)$(notdir $(1))/share/scripts))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/scripts/omsxctl.tcl),,$(call mb_msxhub_file,$(1)$(MB_@WORK)$(notdir $(1))/share/scripts,OMSXCTL/1.0-1/get/OMSXCTL/omsxctl.tcl))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/extensions),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))/share/extensions))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/share/extensions/fire-hdd.xml),,$(call mb_make_call,mb_os_file_copy,$(MB_@BASEPATH)openmsx/share/extensions/fire-hdd.xml,$(1)$(MB_@WORK)$(notdir $(1))/share/extensions))
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_setup,$(1))
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_extension_ide_nextor,$(1))
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_msxrom_machine_$(2),$(1))
@@ -71,12 +71,12 @@ endef
define _mb_openmsx_run
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_os_echo_command,$(MB_I18N_OPENMSX_STARTUP) $@ - $(2))
-$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)-omsx/persistent/fire-hdd/untitled1/sync),,$(call mb_make_call,mb_os_dir_create,$(1)-omsx/persistent/fire-hdd/untitled1/sync))
+$(MB_ᕽᕽᕽ )$(if $(wildcard $(1)$(MB_@WORK)$(notdir $(1))/persistent/fire-hdd/untitled1/sync),,$(call mb_make_call,mb_os_dir_create,$(1)$(MB_@WORK)$(notdir $(1))/persistent/fire-hdd/untitled1/sync))
$(MB_ᕽᕽᕽ )BOOT_WATCHDOG=$(MB_OPENMSX_BOOT_TIMEOUT) \
$(MB_ᕽᕽᕽ )FIRE_HDD_PATH="$(1)" \
$(MB_ᕽᕽᕽ )FIRE_HDD_SIZE=$(MB_OPENMSX_HDD_SIZE) \
-$(MB_ᕽᕽᕽ )FIRE_HDD_IMAGE="$(1)-omsx/persistent/fire-hdd/untitled1/image-hda.dsk" \
-$(MB_ᕽᕽᕽ )FIRE_HDD_PATH_EXPORT="$(1)-omsx/persistent/fire-hdd/untitled1/sync" \
+$(MB_ᕽᕽᕽ )FIRE_HDD_IMAGE="$(1)$(MB_@WORK)$(notdir $(1))/persistent/fire-hdd/untitled1/image-hda.dsk" \
+$(MB_ᕽᕽᕽ )FIRE_HDD_PATH_EXPORT="$(1)$(MB_@WORK)$(notdir $(1))/persistent/fire-hdd/untitled1/sync" \
$(MB_ᕽᕽᕽ )SCALE_FACTOR=$(MB_OPENMSX_SCALE_FACTOR) \
$(MB_ᕽᕽᕽ )SPEED=$(MB_OPENMSX_SPEED) \
$(MB_ᕽᕽᕽ )HEADLESS=$(MB_OPENMSX_HEADLESS) \
@@ -85,7 +85,7 @@ $(MB_ᕽᕽᕽ )THROTTLE=$(MB_OPENMSX_THROTTLE) \
$(MB_ᕽᕽᕽ )NF_PREFIX=$(MB_FLIGHT_PREFIX) \
$(MB_ᕽᕽᕽ )NF_SEPERATOR=$(MB_FLIGHT_SEPERATOR) \
$(MB_ᕽᕽᕽ )NF_RECORD_FLAG=$(MB_FLIGHT_RECORD_FLAG) \
-$(MB_ᕽᕽᕽ )OPENMSX_HOME="$(1)-omsx" \
+$(MB_ᕽᕽᕽ )OPENMSX_HOME="$(1)$(MB_@WORK)$(notdir $(1))" \
$(MB_ᕽᕽᕽ )$(call mb_make_call,_mb_openmsx_path,openmsx) \
$(MB_ᕽᕽᕽ )-machine $(2) \
$(MB_ᕽᕽᕽ )-ext slotexpander \
@@ -97,10 +97,10 @@ $(MB_ᕽᕽᕽ )$(if $(filter ram1mb,$(3)),-ext ram1mb) \
$(MB_ᕽᕽᕽ )$(if $(filter ram4mb,$(3)),-ext ram2mb) \
$(MB_ᕽᕽᕽ )$(if $(filter ram4mb,$(3)),-ext ram4mb) \
$(MB_ᕽᕽᕽ )$(MB_OPENMSX_ARGS) \
-$(MB_ᕽᕽᕽ )-control stdio < $(1)-omsx/stdio.xml \
+$(MB_ᕽᕽᕽ )-control stdio < $(1)$(MB_@WORK)$(notdir $(1))/stdio.xml \
$(MB_ᕽᕽᕽ )$(if $(filter on,$(MB_OPENMSX_STDOUT_IGNORE)),$(MB_OS_STDOUT_IGNORE)) \
$(MB_ᕽᕽᕽ )$(if $(filter on,$(MB_OPENMSX_STDERR_IGNORE)),$(MB_OS_STDERR_IGNORE))
-$(MB_ᕽᕽᕽ )rsync --checksum --recursive "$(1)-omsx/persistent/fire-hdd/untitled1/sync/" "$(1)/"
+$(MB_ᕽᕽᕽ )rsync --checksum --recursive "$(1)$(MB_@WORK)$(notdir $(1))/persistent/fire-hdd/untitled1/sync/" "$(1)/"
endef
diff --git a/lib/make/𓃬𓍄𓋹𓀭/mb_flow_assert.mk b/lib/make/𓃬𓍄𓋹𓀭/mb_flow_assert.mk
index b6dee1e..8360ac1 100644
--- a/lib/make/𓃬𓍄𓋹𓀭/mb_flow_assert.mk
+++ b/lib/make/𓃬𓍄𓋹𓀭/mb_flow_assert.mk
@@ -7,6 +7,7 @@ $(1)/@@$(5)-deps:: $(1)/@assert/$(5)/$(2)
$(1)/@assert/$(5)/$(2): $(1)/@build
$(MB_@RECIPE)grep -q -U $(4) $(1)/$(3)
$(MB_@RECIPE)$$(call mb_make_call,mb_os_echo_assert,$$(MB_I18N_ASSERT_SUCCESS) $(1)/@assert/$(2)/$(5))
+$(MB_@RECIPE)$$(call mb_make_call,mb_proj_grow_assert_success,$(5))
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target,$(1)/@assert/$(5)/$(2),"Asserts that $(3) output matches.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(1)/@assert/$(5)/$(2))
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_proj_grow_deps_phase,$(5),$(1)/@assert/$(5)/$(2))
@@ -40,6 +41,7 @@ $(MB_@RECIPE)$$(if $$(wildcard $(7)/$(3).out),,$$(call mb_make_call,mb_os_file_d
$(MB_@RECIPE)$$(call mb_make_call,mb_msxpipe_safe_assert,$(7),$(3) > $(3).out,$(6))
$(MB_@RECIPE)grep -q $(4) $(7)/$(3).out
$(MB_@RECIPE)$$(call mb_make_call,mb_os_echo_assert,$$(MB_I18N_ASSERT_SUCCESS) $(1)/@assert/$(2)/$(5))
+$(MB_@RECIPE)$$(call mb_make_call,mb_proj_grow_assert_success,$(5))
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target,$(1)/@assert/$(5)/$(2),"Asserts that $(3) output matches.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(1)/@assert/$(5)/$(2))
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_proj_grow_deps_phase,$(5),$(1)/@assert/$(5)/$(2))
@@ -48,14 +50,14 @@ $(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_proj_grow_deps_phase,$(5),$(1)/@
endef
define mb_flow_assert_msxpipe_grep_test
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_check_arg5,$(0),$(1),$(2),$(3),$(4),$(5))
-$(MB_ᕽᕽᕽ )$(eval $(call mb_make_call,mb_flow_clone_deps,$(1)-assert/@test-$(3),$(1),$(2),$(6),$(7)))
-$(MB_ᕽᕽᕽ )$(eval $(call mb_make_call,__mb_flow_assert_msxpipe_grep_x,$(1),$(3),$(4),$(5),@test,$(7),$(1)-assert/@test-$(3)))
+$(MB_ᕽᕽᕽ )$(eval $(call mb_make_call,mb_flow_clone_deps,$(1)$(MB_@WORK)_assert/$(notdir $(1))/test-$(3),$(1),$(2),$(6),$(7)))
+$(MB_ᕽᕽᕽ )$(eval $(call mb_make_call,__mb_flow_assert_msxpipe_grep_x,$(1),$(3),$(4),$(5),@test,$(7),$(1)$(MB_@WORK)_assert/$(notdir $(1))/test-$(3)))
endef
$(call mb_make_call,mb_doc_function_flow,mb_flow_assert_msxpipe_grep_test,"Inject flow of single grep assert."," [packages] [machine]")
define mb_flow_assert_msxpipe_grep_package_qa
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_check_arg5,$(0),$(1),$(2),$(3),$(4),$(5))
-$(MB_ᕽᕽᕽ )$(eval $(call mb_make_call,mb_flow_clone_deps,$(1)-assert/@package-qa-$(3),$(1),$(2),$(6),$(7)))
-$(MB_ᕽᕽᕽ )$(eval $(call mb_make_call,__mb_flow_assert_msxpipe_grep_x,$(1),$(3),$(4),$(5),@package-qa,$(7),$(1)-assert/@package-qa-$(3)))
+$(MB_ᕽᕽᕽ )$(eval $(call mb_make_call,mb_flow_clone_deps,$(1)$(MB_@WORK)_assert/$(notdir $(1))/package-qa-$(3),$(1),$(2),$(6),$(7)))
+$(MB_ᕽᕽᕽ )$(eval $(call mb_make_call,__mb_flow_assert_msxpipe_grep_x,$(1),$(3),$(4),$(5),@package-qa,$(7),$(1)$(MB_@WORK)_assert/$(notdir $(1))/package-qa-$(3)))
endef
$(call mb_make_call,mb_doc_function_flow,mb_flow_assert_msxpipe_grep_package_qa,"Inject flow of single grep assert."," [packages] [machine]")
diff --git a/lib/make/𓃬𓍄𓋹𓀭/mb_flow_proj.mk b/lib/make/𓃬𓍄𓋹𓀭/mb_flow_proj.mk
index 3cfd71d..780cadb 100644
--- a/lib/make/𓃬𓍄𓋹𓀭/mb_flow_proj.mk
+++ b/lib/make/𓃬𓍄𓋹𓀭/mb_flow_proj.mk
@@ -26,12 +26,24 @@ $(call mb_make_call,mb_doc_variable_flow,MB_PROJ_FIRE_MODULE_INIT,"List of uniqu
MB_PROJ_FIRE_MODULE_RUN ?=
$(call mb_make_call,mb_doc_variable_flow,MB_PROJ_FIRE_MODULE_RUN,"List of unique module project modules run targets.")
+MB_PROJ_FIRE_ASSERT_SUCCESS ?=
+$(call mb_make_call,mb_doc_variable_flow,MB_PROJ_FIRE_ASSERT_SUCCESS,"Word count of total asserts successes.")
+
+
+define mb_proj_grow_assert_success
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_check_arg1,$(0),$(1))
+$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_check_value_valid,$(0),$(1),@test @package-qa)
+$(MB_ᕽᕽᕽ )$(eval MB_PROJ_FIRE_ASSERT_SUCCESS $(MB_MAKE_APPEND) $(1))
+endef
+$(call mb_make_call,mb_doc_function_deep,mb_proj_grow_assert_success,"Grow the success counter of assertions.","")
+
+
define mb_proj_grow_deps_phase
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_check_arg2,$(0),$(1),$(2))
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_check_value_valid,$(0),$(1),$(MB_PROJ_PHASE_ALL))
$(MB_ᕽᕽᕽ )$(eval @$(1)-deps:: $(2))
endef
-$(call mb_make_call,mb_doc_function_deep,mb_proj_grow_deps_phase_clean,"Grow the deps of the selected phase.."," ")
+$(call mb_make_call,mb_doc_function_deep,mb_proj_grow_deps_phase_clean,"Grow the deps of the selected phase."," ")
define _mb_proj_flow_step_before
@@ -55,7 +67,7 @@ $(3)@clean: $(3)@@clean $(3)@@clean-deps
$(MB_@RECIPE)$$(if $$(wildcard $(1)),$$(call mb_make_call,mb_os_echo_command,$$(MB_I18N_PROJ_DIR_DELETE) $(1)))
$(MB_@RECIPE)$$(if $$(wildcard $(1)),$$(call mb_make_call,mb_os_dir_delete,$(1)))
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@clean,"Clean's the project build folders.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@clean,"Clean's the project build folders.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@clean)
$(3)@@init: $(2)
@@ -67,7 +79,7 @@ $(3)@init: $(3)@@init $(3)@@init-deps
$(MB_@RECIPE)$$(if $$(wildcard $(1)),,$$(call mb_make_call,mb_os_echo_command,$$(MB_I18N_PROJ_DIR_CREATE) $(1)))
$(MB_@RECIPE)$$(if $$(wildcard $(1)),,$$(call mb_make_call,mb_os_dir_create,$(1)))
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@init,"Create the project output folders.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@init,"Create the project output folders.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@init)
$(3)@@prepare: $(3)@init
@@ -77,7 +89,7 @@ $(3)@@prepare-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@prepare-deps)
$(3)@prepare: $(3)@@prepare $(3)@@prepare-deps
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@prepare,"Prepare sources before processing.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@prepare,"Prepare sources before processing.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@prepare)
$(3)@@process: $(3)@prepare
@@ -87,7 +99,7 @@ $(3)@@process-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@process-deps)
$(3)@process: $(3)@@process $(3)@@process-deps
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@process,"Process sources before compiling.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@process,"Process sources before compiling.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@process)
$(3)@@compile: $(3)@process
@@ -97,7 +109,7 @@ $(3)@@compile-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@compile-deps)
$(3)@compile: $(3)@@compile $(3)@@compile-deps
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@compile,"Compiles all project sources.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@compile,"Compiles all project sources.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@compile)
$(3)@@link: $(3)@compile
@@ -107,7 +119,7 @@ $(3)@@link-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@link-deps)
$(3)@link: $(3)@@link $(3)@@link-deps
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@link,"Link all project intermediate files.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@link,"Link all project intermediate files.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@link)
$(3)@@build: $(3)@link
@@ -117,7 +129,7 @@ $(3)@@build-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@build-deps)
$(3)@build: $(3)@@build $(3)@@build-deps
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@build,"Build all project artifacts.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@build,"Build all project artifacts.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@build)
$(3)@@test: $(3)@build
@@ -126,8 +138,9 @@ $(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@test)
$(3)@@test-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@test-deps)
$(3)@test: $(3)@@test $(3)@@test-deps
+$(MB_@RECIPE)$$(if $(3),,$$(call mb_make_call,mb_os_echo_fail,$$(MB_I18N_PROJ_ASSERT_COUNT) @test: $$(words $$(filter @test,$$(MB_PROJ_FIRE_ASSERT_SUCCESS)))))
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@test,"Run all assertion tests.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@test,"Run all assertion tests.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@test)
$(3)@@package: $(3)@test
@@ -137,7 +150,7 @@ $(3)@@package-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@package-deps)
$(3)@package: $(3)@@package $(3)@@package-deps
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@package,"Create all packages of project.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@package,"Create all packages of project.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@package)
$(3)@@package-qa: $(3)@package
@@ -146,8 +159,9 @@ $(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@package-
$(3)@@package-qa-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@package-qa-deps)
$(3)@package-qa: $(3)@@package-qa $(3)@@package-qa-deps
+$(MB_@RECIPE)$$(if $(3),,$$(call mb_make_call,mb_os_echo_fail,$$(MB_I18N_PROJ_ASSERT_COUNT) @package-qa: $$(words $$(filter @package-qa,$$(MB_PROJ_FIRE_ASSERT_SUCCESS)))))
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@package-qa,"Run all packages QA of project.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@package-qa,"Run all packages QA of project.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@package-qa)
$(3)@@package-deploy: $(3)@package-qa
@@ -157,7 +171,7 @@ $(3)@@package-deploy-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@package-deploy-deps)
$(3)@package-deploy: $(3)@@package-deploy $(3)@@package-deploy-deps
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@package-deploy,"Deploy all the packages.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@package-deploy,"Deploy all the packages.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@package-deploy)
$(3)@@all: $(3)@package-qa
@@ -167,7 +181,7 @@ $(3)@@all-deps::
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@@all-deps)
$(3)@all: $(3)@@all $(3)@@all-deps
$(MB_@RECIPE)$$(call mb_make_call,_mb_proj_flow_step_done)
-$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$(if $(3),,_help),$(3)@all,"Run full build and package QA tests.")
+$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_doc_target$$(if $(3),,_help),$(3)@all,"Run full build and package QA tests.")
$(MB_ᕽᕽᕽ )$$(call mb_make_call,mb_make_target_phony,$(3)@all)
.RECIPEPREFIX := $(MB_@RECIPEPREFIX)
diff --git a/lib/msxbuild.mk b/lib/msxbuild.mk
index 3860717..34821c1 100644
--- a/lib/msxbuild.mk
+++ b/lib/msxbuild.mk
@@ -19,6 +19,7 @@ endif
MB_@RECIPE := ]
MB_@RECIPEPREFIX := $(.RECIPEPREFIX)
MB_@BASEPATH := $(dir $(lastword $(MAKEFILE_LIST)))
+MB_@WORK := /../_work/
MB_@INCLUDE_CHAIN :=
# Build multiple groups of chains of includes
@@ -81,6 +82,8 @@ MB_@INCLUDE_CHAIN :=
$(call mb_make_call,mb_doc_variable_rock,MB_@RECIPE,"Recipe prefix to set and indent flow eval rules.")
$(call mb_make_call,mb_doc_variable_rock,MB_@RECIPEPREFIX,"Recipe prefix to restore to after flow eval rules.")
$(call mb_make_call,mb_doc_variable_rock,MB_@BASEPATH,"Path where msxbuild lib folder is located.")
+$(call mb_make_call,mb_doc_variable_rock,MB_@WORK,"Shorthand to move to the work folder of module.")
+$(call mb_make_call,mb_doc_variable_rock,MB_@INCLUDE_CHAIN,"Helper to chain includes into groups.")
# Provider+doc easy single function start point for user
define mb_setup_default
diff --git a/src/assert/msxhub/0module.mk b/src/assert/msxhub/0module.mk
index 300d236..30e3fa9 100644
--- a/src/assert/msxhub/0module.mk
+++ b/src/assert/msxhub/0module.mk
@@ -49,6 +49,8 @@ _$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_openmsx_dosctl,$(ASSERT_MSXHUB_BIN)
_$(MB_ᕽᕽᕽ )grep -q "KONPASS COM" $(ASSERT_MSXHUB_BIN)/utils.out
_$(MB_ᕽᕽᕽ )grep -q "MAKE COM" $(ASSERT_MSXHUB_BIN)/utils.out
_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_os_echo_assert,$(MB_I18N_ASSERT_SUCCESS) $(ASSERT_MSXHUB_BIN)/@assert)
+_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_assert_success,@test)
+_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_assert_success,@test)
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_doc_target,$(ASSERT_MSXHUB_BIN)/@assert,"Asserts that all dist artifacts execute results.")
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_deps_phase,@test,$(ASSERT_MSXHUB_BIN)/@assert)
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_target_phony,$(ASSERT_MSXHUB_BIN)/@assert)
diff --git a/src/example/dist-hello-qa-dos2/0module.mk b/src/example/dist-hello-qa-dos2/0module.mk
index 687ed17..d5e101e 100644
--- a/src/example/dist-hello-qa-dos2/0module.mk
+++ b/src/example/dist-hello-qa-dos2/0module.mk
@@ -19,6 +19,9 @@ _$(MB_ᕽᕽᕽ )grep -q "M80: Hello MSX" $(EXAMPLE_DIST_HELLO_QA_DOS2_BIN)
_$(MB_ᕽᕽᕽ )grep -q "SDCC: Hello MSX" $(EXAMPLE_DIST_HELLO_QA_DOS2_BIN)/hello2.out
_$(MB_ᕽᕽᕽ )grep -q "MAKE: Hello MSX" $(EXAMPLE_DIST_HELLO_QA_DOS2_BIN)/hello3.out
_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_os_echo_assert,$(MB_I18N_ASSERT_SUCCESS) $(EXAMPLE_DIST_HELLO_QA_DOS2_BIN)/@assert)
+_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_assert_success,@package-qa)
+_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_assert_success,@package-qa)
+_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_assert_success,@package-qa)
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_doc_target,$(EXAMPLE_DIST_HELLO_QA_DOS2_BIN)/@assert,"Assert binaries on msxdos2.")
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_deps_phase,@package-qa,$(EXAMPLE_DIST_HELLO_QA_DOS2_BIN)/@assert)
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_target_phony,$(EXAMPLE_DIST_HELLO_QA_DOS2_BIN)/@assert)
diff --git a/src/example/dist-hello-qa-msx1/0module.mk b/src/example/dist-hello-qa-msx1/0module.mk
index e7614c6..ca6dd38 100644
--- a/src/example/dist-hello-qa-msx1/0module.mk
+++ b/src/example/dist-hello-qa-msx1/0module.mk
@@ -22,6 +22,9 @@ _$(MB_ᕽᕽᕽ )grep -q "M80: Hello MSX" $(EXAMPLE_DIST_HELLO_QA_MSX1_BIN)
_$(MB_ᕽᕽᕽ )grep -q "SDCC: Hello MSX" $(EXAMPLE_DIST_HELLO_QA_MSX1_BIN)/hello2.out
_$(MB_ᕽᕽᕽ )grep -q "MAKE: Hello MSX" $(EXAMPLE_DIST_HELLO_QA_MSX1_BIN)/hello3.out
_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_os_echo_assert,$(MB_I18N_ASSERT_SUCCESS) $(EXAMPLE_DIST_HELLO_QA_MSX1_BIN)/@assert)
+_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_assert_success,@package-qa)
+_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_assert_success,@package-qa)
+_$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_assert_success,@package-qa)
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_doc_target,$(EXAMPLE_DIST_HELLO_QA_MSX1_BIN)/@assert,"Assert binaries on MSX1 machine.")
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_proj_grow_deps_phase,@package-qa,$(EXAMPLE_DIST_HELLO_QA_MSX1_BIN)/@assert)
$(MB_ᕽᕽᕽ )$(call mb_make_call,mb_make_target_phony,$(EXAMPLE_DIST_HELLO_QA_MSX1_BIN)/@assert)
diff --git a/src/example/dist-hello/0module.mk b/src/example/dist-hello/0module.mk
index 2bb31d0..065dbed 100644
--- a/src/example/dist-hello/0module.mk
+++ b/src/example/dist-hello/0module.mk
@@ -1,7 +1,7 @@
EXAMPLE_DIST_HELLO_SRC := $(call mb_make_call,mb_make_module_path_src,$(PATH_SRC))
EXAMPLE_DIST_HELLO_BIN := $(call mb_make_call,mb_make_module_path_bin,$(PATH_SRC),$(PATH_BIN))
-EXAMPLE_DIST_HELLO_OUT := $(PATH_BIN)/dist-hello.tar.gz
+EXAMPLE_DIST_HELLO_OUT := $(PATH_BIN)/example-dist-hello.tar.gz
EXAMPLE_DIST_HELLO_DEPS := $(EXAMPLE_DIST_HELLO_BIN)/readme.txt \
$(EXAMPLE_DIST_HELLO_BIN)/hello1.com \
$(EXAMPLE_DIST_HELLO_BIN)/hello2.com \