diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_post.bin b/bgfx/shaders/dx11/chains/hlsl/fs_post.bin index 927c16d8057..b22fb024fb8 100644 Binary files a/bgfx/shaders/dx11/chains/hlsl/fs_post.bin and b/bgfx/shaders/dx11/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin b/bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin index c9c91235392..15b190e62a2 100644 Binary files a/bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin and b/bgfx/shaders/dx9/chains/blurs/fs_smart-blur.bin differ diff --git a/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin b/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin index de5213e137f..377bfbc3c2d 100644 Binary files a/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin and b/bgfx/shaders/dx9/chains/blurs/vs_smart-blur.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.bin index 5d1afeb8efa..ef3976f44b0 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.bin and b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom-deluxe.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin index 0b63f55a585..05aaa9f7e4c 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin and b/bgfx/shaders/dx9/chains/crt-geom/fs_crt-geom.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.bin index f6ae9a161f3..bdb39172c33 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.bin and b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussx.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin index 125ab63828d..7c5bc439ce8 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin and b/bgfx/shaders/dx9/chains/crt-geom/fs_gaussy.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.bin index b4b4839d8b5..17230ddc8a9 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.bin and b/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_apply.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.bin b/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.bin index 384d2ddd48d..d0ba05e36cb 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.bin and b/bgfx/shaders/dx9/chains/crt-geom/fs_phosphor_update.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin index 95d0b78bff4..36c933e9717 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin and b/bgfx/shaders/dx9/chains/crt-geom/vs_crt-geom.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.bin index 878a259f8ab..727d93d6405 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.bin and b/bgfx/shaders/dx9/chains/crt-geom/vs_gaussx.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.bin index 3b1bbf6e556..4a579425b7b 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.bin and b/bgfx/shaders/dx9/chains/crt-geom/vs_gaussy.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin index 9f489e233ec..c9d8ff66ade 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin and b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_apply.bin differ diff --git a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin index 9f489e233ec..c9d8ff66ade 100644 Binary files a/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin and b/bgfx/shaders/dx9/chains/crt-geom/vs_phosphor_update.bin differ diff --git a/bgfx/shaders/dx9/chains/default/fs_blit.bin b/bgfx/shaders/dx9/chains/default/fs_blit.bin index ef8fa0730c3..f66f62415b5 100644 Binary files a/bgfx/shaders/dx9/chains/default/fs_blit.bin and b/bgfx/shaders/dx9/chains/default/fs_blit.bin differ diff --git a/bgfx/shaders/dx9/chains/default/vs_blit.bin b/bgfx/shaders/dx9/chains/default/vs_blit.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/default/vs_blit.bin and b/bgfx/shaders/dx9/chains/default/vs_blit.bin differ diff --git a/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin b/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin index 7f099756105..2b1f3e81678 100644 Binary files a/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin and b/bgfx/shaders/dx9/chains/eagle/fs_eagle.bin differ diff --git a/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin b/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin index 6bf98d22532..24ff4189204 100644 Binary files a/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin and b/bgfx/shaders/dx9/chains/eagle/vs_eagle.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_color.bin b/bgfx/shaders/dx9/chains/hlsl/fs_color.bin index 985cf1bc91a..678416acf92 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_color.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_color.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_deconverge.bin b/bgfx/shaders/dx9/chains/hlsl/fs_deconverge.bin index 8f85b74868b..58a53f099d2 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_deconverge.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_deconverge.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_defocus.bin b/bgfx/shaders/dx9/chains/hlsl/fs_defocus.bin index fe909ee1f26..12ed2624d0b 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_defocus.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_defocus.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin b/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin index d009657e88c..445bad83f41 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_distortion.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.bin b/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.bin index ec66f2a38a9..5fd29e8f5a6 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_decode.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.bin b/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.bin index ad313e3da19..0a27c1edcea 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_ntsc_encode.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_phosphor.bin b/bgfx/shaders/dx9/chains/hlsl/fs_phosphor.bin index cfbdd71f188..7cdf7e686a9 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_phosphor.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_phosphor.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_post.bin b/bgfx/shaders/dx9/chains/hlsl/fs_post.bin index 451ddc62b05..8cc13a336da 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_post.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_prescale.bin b/bgfx/shaders/dx9/chains/hlsl/fs_prescale.bin index ef8fa0730c3..f66f62415b5 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_prescale.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_prescale.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_color.bin b/bgfx/shaders/dx9/chains/hlsl/vs_color.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_color.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_color.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_deconverge.bin b/bgfx/shaders/dx9/chains/hlsl/vs_deconverge.bin index 3d90ec3803a..53984f1f26d 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_deconverge.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_deconverge.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin b/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_defocus.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_distortion.bin b/bgfx/shaders/dx9/chains/hlsl/vs_distortion.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_distortion.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_distortion.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.bin b/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_decode.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.bin b/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_ntsc_encode.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin b/bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_phosphor.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_post.bin b/bgfx/shaders/dx9/chains/hlsl/vs_post.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_post.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_post.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin b/bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin and b/bgfx/shaders/dx9/chains/hlsl/vs_prescale.bin differ diff --git a/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin index 7bebafd9962..16ea8fbd6c5 100644 Binary files a/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin and b/bgfx/shaders/dx9/chains/hqx/fs_hq2x.bin differ diff --git a/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin index 6151be64f23..5fbbfcac454 100644 Binary files a/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin and b/bgfx/shaders/dx9/chains/hqx/fs_hq3x.bin differ diff --git a/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin b/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin index 55d09ab2827..61414e50dbb 100644 Binary files a/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin and b/bgfx/shaders/dx9/chains/hqx/fs_hq4x.bin differ diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin index de5213e137f..377bfbc3c2d 100644 Binary files a/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin and b/bgfx/shaders/dx9/chains/hqx/vs_hq2x.bin differ diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin index de5213e137f..377bfbc3c2d 100644 Binary files a/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin and b/bgfx/shaders/dx9/chains/hqx/vs_hq3x.bin differ diff --git a/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin b/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin index de5213e137f..377bfbc3c2d 100644 Binary files a/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin and b/bgfx/shaders/dx9/chains/hqx/vs_hq4x.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/fs_blit.bin b/bgfx/shaders/dx9/chains/misc/fs_blit.bin index ef8fa0730c3..f66f62415b5 100644 Binary files a/bgfx/shaders/dx9/chains/misc/fs_blit.bin and b/bgfx/shaders/dx9/chains/misc/fs_blit.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.bin index 8eebd096fef..3ec84814aa9 100644 Binary files a/bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.bin and b/bgfx/shaders/dx9/chains/misc/fs_bob-and-ghost-deinterlace.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.bin b/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.bin index de4521b235d..4ef2fa92cda 100644 Binary files a/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.bin and b/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.bin b/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.bin index acd2c9c61d7..d1910084a74 100644 Binary files a/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.bin and b/bgfx/shaders/dx9/chains/misc/fs_deposterize-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/fs_saturation.bin b/bgfx/shaders/dx9/chains/misc/fs_saturation.bin index 5fe87a15fb5..245d75a425c 100644 Binary files a/bgfx/shaders/dx9/chains/misc/fs_saturation.bin and b/bgfx/shaders/dx9/chains/misc/fs_saturation.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/vs_blit.bin b/bgfx/shaders/dx9/chains/misc/vs_blit.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/misc/vs_blit.bin and b/bgfx/shaders/dx9/chains/misc/vs_blit.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.bin b/bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.bin and b/bgfx/shaders/dx9/chains/misc/vs_bob-and-ghost-deinterlace.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.bin b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.bin index c8cf8f27b41..6a62a9444a0 100644 Binary files a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.bin and b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin index 9576d95be24..edc64925c27 100644 Binary files a/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin and b/bgfx/shaders/dx9/chains/misc/vs_deposterize-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/misc/vs_saturation.bin b/bgfx/shaders/dx9/chains/misc/vs_saturation.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/misc/vs_saturation.bin and b/bgfx/shaders/dx9/chains/misc/vs_saturation.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.bin index 222205d0983..d6217975cbe 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.bin and b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_gaussian.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.bin index 5fe87a15fb5..245d75a425c 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.bin and b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/fs_offset_sat.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.bin and b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_gaussian.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.bin index b9b18b7ac1a..2af6a1cf674 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.bin and b/bgfx/shaders/dx9/chains/pillarbox_left_horizontal/vs_offset_sat.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.bin index 222205d0983..d6217975cbe 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.bin and b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_gaussian.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.bin index 5fe87a15fb5..245d75a425c 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.bin and b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/fs_offset_sat.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin and b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_gaussian.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.bin index 0b92c5f50bc..bb382663de9 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.bin and b/bgfx/shaders/dx9/chains/pillarbox_left_vertical/vs_offset_sat.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.bin index 222205d0983..d6217975cbe 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.bin and b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_gaussian.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.bin index 5fe87a15fb5..245d75a425c 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.bin and b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/fs_offset_sat.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin and b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_gaussian.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.bin index e9bfb3062de..730a75702f9 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.bin and b/bgfx/shaders/dx9/chains/pillarbox_right_horizontal/vs_offset_sat.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.bin index 222205d0983..d6217975cbe 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.bin and b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_gaussian.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.bin index 5fe87a15fb5..245d75a425c 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.bin and b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/fs_offset_sat.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin and b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_gaussian.bin differ diff --git a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.bin b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.bin index 55774bb38ab..d9b06211b3f 100644 Binary files a/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.bin and b/bgfx/shaders/dx9/chains/pillarbox_right_vertical/vs_offset_sat.bin differ diff --git a/bgfx/shaders/dx9/chains/unfiltered/fs_blit.bin b/bgfx/shaders/dx9/chains/unfiltered/fs_blit.bin index ef8fa0730c3..f66f62415b5 100644 Binary files a/bgfx/shaders/dx9/chains/unfiltered/fs_blit.bin and b/bgfx/shaders/dx9/chains/unfiltered/fs_blit.bin differ diff --git a/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin b/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin and b/bgfx/shaders/dx9/chains/unfiltered/vs_blit.bin differ diff --git a/bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin b/bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin index d1b4cb47ea5..1da9ac3c2aa 100644 Binary files a/bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin and b/bgfx/shaders/dx9/chains/warp/fs_dilation-horizontal-fast.bin differ diff --git a/bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin b/bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin index 7b02905e0fb..6443f74baa9 100644 Binary files a/bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin and b/bgfx/shaders/dx9/chains/warp/vs_dilation-horizontal-fast.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.bin index 835ecae48ad..57021335a60 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.bin and b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv1-noblend.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.bin index 5d3c63a1179..28cf2738913 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.bin and b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-3d.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.bin index 97e82ad7584..3f04275f5ba 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.bin and b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-fast.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin index 3e43fd1ae5c..9cbbdd173c7 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin and b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2-noblend.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.bin index 53b70afd89e..8274e8aa4d8 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.bin and b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin index d34d1a48025..6a3de661a08 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin and b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3-noblend.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin index 217dff88088..a6c9393e207 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin and b/bgfx/shaders/dx9/chains/xbr/fs_xbr-lv3.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin index 1bd16aff210..c71b0a6a573 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_custom-jinc2-sharper.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin index 663ca437f49..cd007f6a3d2 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin index 28f508a31f6..77321f29e98 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin index 63dd5937863..43b4cde7342 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-2xbr-3d-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin index 2fc641bc90c..e0b79e3f63a 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin index 501d317cb1e..1abd100f303 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin index 5b5fae14973..5c21575c5e1 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass1f.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin index 663ca437f49..cd007f6a3d2 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin index 599c1d3ba3f..ef64f27d31f 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin index 63dd5937863..43b4cde7342 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-4xbr-3d-pass3f.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin index df939770a6e..e7e92f5e3e0 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin index a63b9bd2aaa..2e00ef9b7eb 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin index 9df5faa4beb..cd31c0e129e 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-fast-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.bin index 6df91a67542..5bdb3e128b0 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.bin index 2613ba72823..ddd1f714bf9 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.bin index 7fa43cddf5d..b70a8df3435 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/fs_super-xbr-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_custom-jinc2-sharper.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin index ac97172504e..588d7e46cbe 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-2xbr-3d-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin index ac97172504e..588d7e46cbe 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass1f.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin index ac97172504e..588d7e46cbe 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-4xbr-3d-pass3f.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-fast-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.bin index fbf3ac8bbd5..4796e8501e2 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.bin index ac97172504e..588d7e46cbe 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin index ac97172504e..588d7e46cbe 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin and b/bgfx/shaders/dx9/chains/xbr/super-xbr/vs_super-xbr-pass3.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin index 30e1aa8bbfe..925058d93b8 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin and b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv1-noblend.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin index a35d9978cdb..2f3ac8db667 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin and b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-3d.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin index de5213e137f..377bfbc3c2d 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin and b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-fast.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin and b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2-noblend.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin and b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin and b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3-noblend.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin and b/bgfx/shaders/dx9/chains/xbr/vs_xbr-lv3.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin index 74e32bffacc..24a27609a31 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-sharp.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin index c76166bf10a..30a4c55b65f 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2-gamma.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin index abd1066c35b..c7cc2fc82a1 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin index 2676fe0cc09..9e2550f57ec 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4-gamma.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin index 5eb65f9a32c..a6c19ad3e8f 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin index b6a0e6ce5c3..225a9b5153a 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v4b.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin index 71b03d4f663..1502bb2e616 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid-v5-gamma.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin index 9ae18d96ba8..88468d9d426 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/fs_2xbr-hybrid.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-sharp.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2-gamma.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4-gamma.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v4b.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid-v5-gamma.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-hybrid/vs_2xbr-hybrid.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin index 2790a5c711c..f166b9b7280 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-a-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin index 468f1445574..e25fe757422 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin index b310e4253ad..d65050a8c2d 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-accuracy-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin index e214f705832..99e20dca476 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-b-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin index 1ebc1cbfe8d..d2fa174d4ac 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-c-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin index 4062e123149..e8e5f7a63ef 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-d-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin index 955a0dee2af..9be14713aac 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-noblend-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin index bdc3067c871..3bb8f5e2797 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/fs_xbr-lv2-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-a-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin index 1f32f0408f3..883aef80923 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-accuracy-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-b-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-c-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-d-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin index 1f32f0408f3..883aef80923 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-noblend-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin index 1f32f0408f3..883aef80923 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv2-multipass/vs_xbr-lv2-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin index 5ab510f69fc..86d2d2370ab 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin index b1322b52e47..ea423d79d5f 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/fs_xbr-lv3-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass0.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin index 73046f14321..194216a1bd4 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-lv3-multipass/vs_xbr-lv3-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin index 845601063f6..906f9bba449 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin index f571926e712..b4bf9e05f72 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin index b63c5230085..5ff71edeabb 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass3.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin index 555b9dd1d80..c289df02b91 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/fs_xbr-mlv4-pass4.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin index b8876ee9611..abfa3c30897 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass1.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin index 73a4c5231fd..54fe076a487 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass2.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin index 2ca8ce88528..f9cb26d2be0 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass3.bin differ diff --git a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin index 2ca8ce88528..f9cb26d2be0 100644 Binary files a/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin and b/bgfx/shaders/dx9/chains/xbr/xbr-mlv4-multipass/vs_xbr-mlv4-pass4.bin differ diff --git a/bgfx/shaders/dx9/fs_gui.bin b/bgfx/shaders/dx9/fs_gui.bin index ef8fa0730c3..f66f62415b5 100644 Binary files a/bgfx/shaders/dx9/fs_gui.bin and b/bgfx/shaders/dx9/fs_gui.bin differ diff --git a/bgfx/shaders/dx9/fs_screen.bin b/bgfx/shaders/dx9/fs_screen.bin index ef8fa0730c3..f66f62415b5 100644 Binary files a/bgfx/shaders/dx9/fs_screen.bin and b/bgfx/shaders/dx9/fs_screen.bin differ diff --git a/bgfx/shaders/dx9/vs_gui.bin b/bgfx/shaders/dx9/vs_gui.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/vs_gui.bin and b/bgfx/shaders/dx9/vs_gui.bin differ diff --git a/bgfx/shaders/dx9/vs_screen.bin b/bgfx/shaders/dx9/vs_screen.bin index ea94c83e62d..84f72cdd03c 100644 Binary files a/bgfx/shaders/dx9/vs_screen.bin and b/bgfx/shaders/dx9/vs_screen.bin differ diff --git a/bgfx/shaders/gles/chains/hlsl/fs_post.bin b/bgfx/shaders/gles/chains/hlsl/fs_post.bin index f7039993aac..a48adbecf4f 100644 Binary files a/bgfx/shaders/gles/chains/hlsl/fs_post.bin and b/bgfx/shaders/gles/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_post.bin b/bgfx/shaders/glsl/chains/hlsl/fs_post.bin index 49f23896de7..2bfa4c7145f 100644 Binary files a/bgfx/shaders/glsl/chains/hlsl/fs_post.bin and b/bgfx/shaders/glsl/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/metal/chains/hlsl/fs_post.bin b/bgfx/shaders/metal/chains/hlsl/fs_post.bin index ad8382250a9..ab0fc156fd5 100644 Binary files a/bgfx/shaders/metal/chains/hlsl/fs_post.bin and b/bgfx/shaders/metal/chains/hlsl/fs_post.bin differ diff --git a/hash/gba_ereader.xml b/hash/gba_ereader.xml index bade30f1a25..a4792c0da8a 100644 --- a/hash/gba_ereader.xml +++ b/hash/gba_ereader.xml @@ -666,4 +666,764 @@ + + Animal Crossing-e - Series 2 - Aurora (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Ava (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Baabara (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Boots (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Boy (USA) (1) (Strip 1) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Boy (USA) (1) (Strip 2) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Boy (USA) (2) (Strip 1) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Boy (USA) (2) (Strip 2) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Bubbles (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Butch (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Buzz (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Camofrog (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Chief (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Chuck (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Coco (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Cookie (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Copper (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Curly (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Cyrano (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Derwin (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Dobie (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Doc (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Dozer (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Elina (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Elmer (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Eloise (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Eunice (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Filbert (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Franklin (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Girl (USA) (1) (Strip 1) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Girl (USA) (1) (Strip 2) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Girl (USA) (2) (Strip 1) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Girl (USA) (2) (Strip 2) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Grizzly (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Iggy (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Jay (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Jingle (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Joan (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - K.K. Aria (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - K.K. Country (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - K.K. Parade (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - K.K. Tour Tee (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Kitt (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Leigh (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Lily (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Limberg (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Lucy (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Marcy (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Midge (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Mr. Resetti & Don (USA) (Strip 1) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Mr. Resetti & Don (USA) (Strip 2) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Olive (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Olivia (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Patty (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Peaches (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Peewee (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Pelly (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Pikmin Pattern (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Pompom (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Poncho (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Puddles (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Purrl (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Redd (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Roald (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Saharah (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Sally (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Samson (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Samus's Suit (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Senor K.K. (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Sprocket (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Star Fox Emblem (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Stinky (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Tom Nook (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Tybalt (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Vladimir (USA) + 200? + Nintendo + + + + + + + + Animal Crossing-e - Series 2 - Yuka (USA) + 200? + Nintendo + + + + + + diff --git a/hash/pc98_cd.xml b/hash/pc98_cd.xml index 232bb8a450c..2bedddd3b3c 100644 --- a/hash/pc98_cd.xml +++ b/hash/pc98_cd.xml @@ -354,6 +354,26 @@ + + + + Angel Halo + 1996 + アクティブ (Active) + + + + + + + + + Ayumi-chan Monogatari Jissha-ban + 1995 + 白夜書房 (Byakuya-Shobo) + + + + + + + + + Brandish 2 - The Planet Buster - Campaign-ban + 1996 + 日本ファルコム (Nihon Falcom) + + + + + + + + + + Classic Road 4 + 1996 + ビクターエンタテインメント (Victor Entertainment) + + + + + + + + + + + + Crystal Rinal + 1994 + ディー・オー (D.O.) + + + + + + + + + + + D.O. Kanshuu Premium Box - Touch My Heart + 1995 + ディー・オー (D.O.) + + + + + + + + + + + Eimmy to Yobanaide + 1995 + シーズウェア (C's Ware) + + + + + + + + + + + Etsuraku no Gakuen + 1994 + シーズウェア (C's Ware) + + + + + + + + + + + + Uchuu Kaitou Funny Bee + 1994 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + Gunblaze + 1994 + アクティブ (Active) + + + + + + + + + + + Hanafuda de Pon! + 1996 + アクティブ (Active) + + + + + + + + + + + + Heart de Ron!! + 1995 + ディー・オー (D.O.) + + + + + + + + + + + + Hoshi no Suna Monogatari 3 + 1995 + ディー・オー (D.O.) + + + + + + + + + + + Kindan no Ketsuzoku + 1993 + シーズウェア (C's Ware) + + + + + + + + + + + + Koko wa Rakuensou + 1996 + フォスター (Foster) + + + + + + + + + + + + Koko wa Rakuensou 2 + 1996 + フォスター (Foster) + + + + + + + + + Magical Panic + 1996 + パールソフト (Pearl Soft) + + + + + + + + + + + + Mahjong de Pon! + 1994 + アクティブ (Active) + + + + + + + + + My Home Dream 2 + 1995 + ビクターエンタテインメント (Victor Entertainment) + + + + + + + + + + + Ikazuchi no Senshi Raidy + 1994 + ジックス (ZyX) + + + + + + + + + + + Ikazuchi no Senshi Raidy 2 + 1996 + ジックス (ZyX) + + + + + + + + + Rance 4.1 / 4.2 Hint Disk + 1995 + アリスソフト (AliceSoft) + + + + + + + + + + + + Rance 4.1 - Okusuri Koujou wo Sukue! + 1995 + アリスソフト (AliceSoft) + + + + + + + + + + + + + Rance 4.2 - Angel-gumi + 1995 + アリスソフト (AliceSoft) + + + + + + + + + + + + Ring Out!! + 1995 + ジックス (ZyX) + + + + + + + + + Revival Xanadu 2 Remix + 1996 + 日本ファルコム (Nihon Falcom) + + + + + + + + + + + Star Cruiser II - The Odysseus Project + 1994 + JHV + + + + + + + + + + + Takamizawa Kyosuke - Nekketsu!! Kyouiku Kenshuu + 1995 + ジックス (ZyX) + + + + + + + + + + + Xenon + 1995 + シーズウェア (C's Ware) + + + + + + + + + + + Zatsuon Ryouiki + 1995 + ディー・オー (D.O.) + + + + + + + - + - + - + diff --git a/hlsl/bloom.fx b/hlsl/bloom.fx index db23995d55b..42c65e6a45b 100644 --- a/hlsl/bloom.fx +++ b/hlsl/bloom.fx @@ -273,14 +273,11 @@ VS_OUTPUT vs_main(VS_INPUT Input) Output.Color = Input.Color; - float2 TexCoord = Input.TexCoord; - TexCoord += 0.5f / TargetDims; // half texel offset correction (DX9) + Output.TexCoord = Input.TexCoord; + Output.TexCoord += 0.5f / TargetDims; // half texel offset correction (DX9) - Output.TexCoord = TexCoord.xy; - - TexCoord += 0.5f / SourceDims; - - Output.BloomCoord = TexCoord.xy; + Output.BloomCoord = Output.TexCoord; + Output.BloomCoord += 0.5f / SourceDims; return Output; } diff --git a/hlsl/post.fx b/hlsl/post.fx index 6d8077e2037..717c919d8a7 100644 --- a/hlsl/post.fx +++ b/hlsl/post.fx @@ -253,9 +253,13 @@ float4 ps_main(PS_INPUT Input) : COLOR float ColorBrightness = 0.299f * BaseColor.r + 0.587f * BaseColor.g + 0.114 * BaseColor.b; float ScanlineCoord = SourceCoord.y; - ScanlineCoord += QuadDims.y <= SourceDims.y * 2.0f - ? 0.5f / QuadDims.y // uncenter scanlines if the quad is less than twice the size of the source - : 0.0f; + ScanlineCoord += SwapXY + ? QuadDims.x <= SourceDims.x * 2.0f + ? 0.5f / QuadDims.x // uncenter scanlines if the quad is less than twice the size of the source + : 0.0f + : QuadDims.y <= SourceDims.y * 2.0f + ? 0.5f / QuadDims.y // uncenter scanlines if the quad is less than twice the size of the source + : 0.0f; ScanlineCoord *= SourceDims.y * ScanlineScale * PI; diff --git a/makefile b/makefile index f22bbf54a37..3c8f8d30c5c 100644 --- a/makefile +++ b/makefile @@ -774,6 +774,7 @@ SCRIPTS = scripts/genie.lua \ scripts/src/video.lua \ scripts/src/bus.lua \ scripts/src/netlist.lua \ + scripts/src/formats.lua \ scripts/toolchain.lua \ scripts/src/osd/modules.lua \ $(wildcard src/osd/$(OSD)/$(OSD).mak) \ diff --git a/scripts/build/makedep.py b/scripts/build/makedep.py index b1278879d77..cf4a97f1af0 100644 --- a/scripts/build/makedep.py +++ b/scripts/build/makedep.py @@ -10,7 +10,7 @@ import sys files_included = ['src/emu/emu.h'] -include_dirs = ['src/emu/', 'src/devices/', 'src/mame/'] +include_dirs = ['src/emu/', 'src/devices/', 'src/mame/', 'src/lib/'] mappings = dict() @@ -201,6 +201,7 @@ parse_lua_file(root +'scripts/src/cpu.lua') parse_lua_file(root +'scripts/src/machine.lua') parse_lua_file(root +'scripts/src/sound.lua') parse_lua_file(root +'scripts/src/video.lua') +parse_lua_file(root +'scripts/src/formats.lua') for filename in sys.argv[2].rsplit(',') : deps_files_included.append(filename.replace('\\','/')) diff --git a/scripts/genie.lua b/scripts/genie.lua index 83f484d2984..3f6455a5cf8 100644 --- a/scripts/genie.lua +++ b/scripts/genie.lua @@ -94,6 +94,7 @@ SOUNDS = {} MACHINES = {} VIDEOS = {} BUSES = {} +FORMATS = {} newoption { trigger = "with-tools", @@ -1320,6 +1321,13 @@ if (not os.isfile(path.join("src", "osd", _OPTIONS["osd"] .. ".lua"))) then end dofile(path.join("src", "osd", _OPTIONS["osd"] .. ".lua")) dofile(path.join("src", "lib.lua")) +if (MACHINES["NETLIST"]~=null or _OPTIONS["with-tools"]) then +dofile(path.join("src", "netlist.lua")) +end +--if (STANDALONE~=true) then +dofile(path.join("src", "formats.lua")) +formatsProject(_OPTIONS["target"],_OPTIONS["subtarget"]) +--end group "3rdparty" dofile(path.join("src", "3rdparty.lua")) diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index d15d71fee78..65ce22d8b8d 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -2865,3 +2865,17 @@ if (BUSES["HP_OPTROM"]~=null) then MAME_DIR .. "src/devices/bus/hp_optroms/hp_optrom.cpp", } end + +--------------------------------------------------- +-- +--@src/devices/bus/compis/graphics.h,BUSES["COMPIS_GRAPHICS"] = true +--------------------------------------------------- + +if (BUSES["COMPIS_GRAPHICS"]~=null) then + files { + MAME_DIR .. "src/devices/bus/compis/graphics.cpp", + MAME_DIR .. "src/devices/bus/compis/graphics.h", + MAME_DIR .. "src/devices/bus/compis/hrg.cpp", + MAME_DIR .. "src/devices/bus/compis/hrg.h", + } +end diff --git a/scripts/src/emu.lua b/scripts/src/emu.lua index dc2a7a46a56..4dbdb38f191 100644 --- a/scripts/src/emu.lua +++ b/scripts/src/emu.lua @@ -82,6 +82,8 @@ files { MAME_DIR .. "src/emu/dioutput.h", MAME_DIR .. "src/emu/dipty.cpp", MAME_DIR .. "src/emu/dipty.h", + MAME_DIR .. "src/emu/dirom.cpp", + MAME_DIR .. "src/emu/dirom.h", MAME_DIR .. "src/emu/dirtc.cpp", MAME_DIR .. "src/emu/dirtc.h", MAME_DIR .. "src/emu/diserial.cpp", diff --git a/scripts/src/formats.lua b/scripts/src/formats.lua new file mode 100644 index 00000000000..f5f1a253a19 --- /dev/null +++ b/scripts/src/formats.lua @@ -0,0 +1,1722 @@ +-- license:BSD-3-Clause +-- copyright-holders:MAMEdev Team + +--------------------------------------------------------------------------- +-- +-- formats.lua +-- +-- Rules for building formats +-- +--------------------------------------------------------------------------- +function formatsProject(_target, _subtarget) +project "formats" + uuid (os.uuid("formats-" .. _target .."_" .. _subtarget)) + kind (LIBTYPE) + targetsubdir(_target .."_" .. _subtarget) + addprojectflags() + + options { + "ArchiveSplit", + } + + includedirs { + MAME_DIR .. "src/osd", + MAME_DIR .. "src/emu", + MAME_DIR .. "src/lib", + MAME_DIR .. "src/lib/util", + MAME_DIR .. "3rdparty", + ext_includedir("zlib"), + } + + files { + MAME_DIR .. "src/lib/formats/ioprocs.cpp", + MAME_DIR .. "src/lib/formats/ioprocs.h", + MAME_DIR .. "src/lib/formats/imageutl.cpp", + MAME_DIR .. "src/lib/formats/imageutl.h", + + MAME_DIR .. "src/lib/formats/cassimg.cpp", + MAME_DIR .. "src/lib/formats/cassimg.h", + MAME_DIR .. "src/lib/formats/wavfile.cpp", + MAME_DIR .. "src/lib/formats/wavfile.h", + + MAME_DIR .. "src/lib/formats/flopimg.cpp", + MAME_DIR .. "src/lib/formats/flopimg.h", + + MAME_DIR .. "src/lib/formats/cqm_dsk.cpp", + MAME_DIR .. "src/lib/formats/cqm_dsk.h", + MAME_DIR .. "src/lib/formats/dsk_dsk.cpp", + MAME_DIR .. "src/lib/formats/dsk_dsk.h", + MAME_DIR .. "src/lib/formats/td0_dsk.cpp", + MAME_DIR .. "src/lib/formats/td0_dsk.h", + MAME_DIR .. "src/lib/formats/hxcmfm_dsk.cpp", + MAME_DIR .. "src/lib/formats/hxcmfm_dsk.h", + MAME_DIR .. "src/lib/formats/mfi_dsk.cpp", + MAME_DIR .. "src/lib/formats/mfi_dsk.h", + MAME_DIR .. "src/lib/formats/imd_dsk.cpp", + MAME_DIR .. "src/lib/formats/imd_dsk.h", + MAME_DIR .. "src/lib/formats/ipf_dsk.cpp", + MAME_DIR .. "src/lib/formats/ipf_dsk.h", + MAME_DIR .. "src/lib/formats/d88_dsk.cpp", + MAME_DIR .. "src/lib/formats/d88_dsk.h", + MAME_DIR .. "src/lib/formats/dfi_dsk.cpp", + MAME_DIR .. "src/lib/formats/dfi_dsk.h", + MAME_DIR .. "src/lib/formats/fdi_dsk.cpp", + } + +-------------------------------------------------- +-- +--@src/lib/formats/2d_dsk.h,FORMATS["2D_DSK"] = true +-------------------------------------------------- + +if (FORMATS["2D_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/2d_dsk.cpp", + MAME_DIR.. "src/lib/formats/2d_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/a26_cas.h,FORMATS["A26_CAS"] = true +-------------------------------------------------- + +if (FORMATS["A26_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/a26_cas.cpp", + MAME_DIR.. "src/lib/formats/a26_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/a5105_dsk.h,FORMATS["A5105_DSK"] = true +-------------------------------------------------- + +if (FORMATS["A5105_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/a5105_dsk.cpp", + MAME_DIR.. "src/lib/formats/a5105_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/abc800_dsk.h,FORMATS["ABC800_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ABC800_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/abc800_dsk.cpp", + MAME_DIR.. "src/lib/formats/abc800_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/abcfd2_dsk.h,FORMATS["ABCFD2_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ABCFD2_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/abcfd2_dsk.cpp", + MAME_DIR.. "src/lib/formats/abcfd2_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/ace_tap.h,FORMATS["ACE_TAP"] = true +-------------------------------------------------- + +if (FORMATS["ACE_TAP"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/ace_tap.cpp", + MAME_DIR.. "src/lib/formats/ace_tap.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/acorn_dsk.h,FORMATS["ACORN_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ACORN_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/acorn_dsk.cpp", + MAME_DIR.. "src/lib/formats/acorn_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/adam_cas.h,FORMATS["ADAM_CAS"] = true +-------------------------------------------------- + +if (FORMATS["ADAM_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/adam_cas.cpp", + MAME_DIR.. "src/lib/formats/adam_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/adam_dsk.h,FORMATS["ADAM_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ADAM_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/adam_dsk.cpp", + MAME_DIR.. "src/lib/formats/adam_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/afs_dsk.h,FORMATS["AFS_DSK"] = true +-------------------------------------------------- + +if (FORMATS["AFS_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/afs_dsk.cpp", + MAME_DIR.. "src/lib/formats/afs_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/ami_dsk.h,FORMATS["AMI_DSK"] = true +-------------------------------------------------- + +if (FORMATS["AMI_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/ami_dsk.cpp", + MAME_DIR.. "src/lib/formats/ami_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/ap2_dsk.h,FORMATS["AP2_DSK"] = true +-------------------------------------------------- + +if (FORMATS["AP2_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/ap2_dsk.cpp", + MAME_DIR.. "src/lib/formats/ap2_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/apf_apt.h,FORMATS["APF_APT"] = true +-------------------------------------------------- + +if (FORMATS["APF_APT"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/apf_apt.cpp", + MAME_DIR.. "src/lib/formats/apf_apt.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/apollo_dsk.h,FORMATS["APOLLO_DSK"] = true +-------------------------------------------------- + +if (FORMATS["APOLLO_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/apollo_dsk.cpp", + MAME_DIR.. "src/lib/formats/apollo_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/applix_dsk.h,FORMATS["APPLIX_DSK"] = true +-------------------------------------------------- + +if (FORMATS["APPLIX_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/applix_dsk.cpp", + MAME_DIR.. "src/lib/formats/applix_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/apridisk.h,FORMATS["APRIDISK"] = true +-------------------------------------------------- + +if (FORMATS["APRIDISK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/apridisk.cpp", + MAME_DIR.. "src/lib/formats/apridisk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/ap_dsk35.h,FORMATS["AP_DSK35"] = true +-------------------------------------------------- + +if (FORMATS["AP_DSK35"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/ap_dsk35.cpp", + MAME_DIR.. "src/lib/formats/ap_dsk35.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/asst128_dsk.h,FORMATS["ASST128_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ASST128_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/asst128_dsk.cpp", + MAME_DIR.. "src/lib/formats/asst128_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/atari_dsk.h,FORMATS["ATARI_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ATARI_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/atari_dsk.cpp", + MAME_DIR.. "src/lib/formats/atari_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/atom_dsk.h,FORMATS["ATOM_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ATOM_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/atom_dsk.cpp", + MAME_DIR.. "src/lib/formats/atom_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/atom_tap.h,FORMATS["ATOM_TAP"] = true +-------------------------------------------------- + +if (FORMATS["ATOM_TAP"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/atom_tap.cpp", + MAME_DIR.. "src/lib/formats/atom_tap.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/basicdsk.h,FORMATS["BASICDSK"] = true +-------------------------------------------------- + +if (FORMATS["BASICDSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/basicdsk.cpp", + MAME_DIR.. "src/lib/formats/basicdsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/bw12_dsk.h,FORMATS["BW12_DSK"] = true +-------------------------------------------------- + +if (FORMATS["BW12_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/bw12_dsk.cpp", + MAME_DIR.. "src/lib/formats/bw12_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/bw2_dsk.h,FORMATS["BW2_DSK"] = true +-------------------------------------------------- + +if (FORMATS["BW2_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/bw2_dsk.cpp", + MAME_DIR.. "src/lib/formats/bw2_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/c3040_dsk.h,FORMATS["C3040_DSK"] = true +-------------------------------------------------- + +if (FORMATS["C3040_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/c3040_dsk.cpp", + MAME_DIR.. "src/lib/formats/c3040_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/c4040_dsk.h,FORMATS["C4040_DSK"] = true +-------------------------------------------------- + +if (FORMATS["C4040_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/c4040_dsk.cpp", + MAME_DIR.. "src/lib/formats/c4040_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/c8280_dsk.h,FORMATS["C8280_DSK"] = true +-------------------------------------------------- + +if (FORMATS["C8280_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/c8280_dsk.cpp", + MAME_DIR.. "src/lib/formats/c8280_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/camplynx_cas.h,FORMATS["CAMPLYNX_CAS"] = true +-------------------------------------------------- + +if (FORMATS["CAMPLYNX_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/camplynx_cas.cpp", + MAME_DIR.. "src/lib/formats/camplynx_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/camplynx_dsk.h,FORMATS["CAMPLYNX_DSK"] = true +-------------------------------------------------- + +if (FORMATS["CAMPLYNX_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/camplynx_dsk.cpp", + MAME_DIR.. "src/lib/formats/camplynx_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/cbm_crt.h,FORMATS["CBM_CRT"] = true +-------------------------------------------------- + +if (FORMATS["CBM_CRT"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/cbm_crt.cpp", + MAME_DIR.. "src/lib/formats/cbm_crt.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/cbm_tap.h,FORMATS["CBM_TAP"] = true +-------------------------------------------------- + +if (FORMATS["CBM_TAP"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/cbm_tap.cpp", + MAME_DIR.. "src/lib/formats/cbm_tap.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/ccvf_dsk.h,FORMATS["CCVF_DSK"] = true +-------------------------------------------------- + +if (FORMATS["CCVF_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/ccvf_dsk.cpp", + MAME_DIR.. "src/lib/formats/ccvf_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/cd90_640_dsk.h,FORMATS["CD90_640_DSK"] = true +-------------------------------------------------- + +if (FORMATS["CD90_640_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/cd90_640_dsk.cpp", + MAME_DIR.. "src/lib/formats/cd90_640_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/cgenie_dsk.h,FORMATS["CGENIE_DSK"] = true +-------------------------------------------------- + +if (FORMATS["CGENIE_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/cgenie_dsk.cpp", + MAME_DIR.. "src/lib/formats/cgenie_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/cgen_cas.h,FORMATS["CGEN_CAS"] = true +-------------------------------------------------- + +if (FORMATS["CGEN_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/cgen_cas.cpp", + MAME_DIR.. "src/lib/formats/cgen_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/coco_cas.h,FORMATS["COCO_CAS"] = true +-------------------------------------------------- + +if (FORMATS["COCO_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/coco_cas.cpp", + MAME_DIR.. "src/lib/formats/coco_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/comx35_dsk.h,FORMATS["COMX35_DSK"] = true +-------------------------------------------------- + +if (FORMATS["COMX35_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/comx35_dsk.cpp", + MAME_DIR.. "src/lib/formats/comx35_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/concept_dsk.h,FORMATS["CONCEPT_DSK"] = true +-------------------------------------------------- + +if (FORMATS["CONCEPT_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/concept_dsk.cpp", + MAME_DIR.. "src/lib/formats/concept_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/coupedsk.h,FORMATS["COUPEDSK"] = true +-------------------------------------------------- + +if (FORMATS["COUPEDSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/coupedsk.cpp", + MAME_DIR.. "src/lib/formats/coupedsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/cpis_dsk.h,FORMATS["CPIS_DSK"] = true +-------------------------------------------------- + +if (FORMATS["CPIS_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/cpis_dsk.cpp", + MAME_DIR.. "src/lib/formats/cpis_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/csw_cas.h,FORMATS["CSW_CAS"] = true +-------------------------------------------------- + +if (FORMATS["CSW_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/csw_cas.cpp", + MAME_DIR.. "src/lib/formats/csw_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/d64_dsk.h,FORMATS["D64_DSK"] = true +-------------------------------------------------- + +if (FORMATS["D64_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/d64_dsk.cpp", + MAME_DIR.. "src/lib/formats/d64_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/d71_dsk.h,FORMATS["D71_DSK"] = true +-------------------------------------------------- + +if (FORMATS["D71_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/d71_dsk.cpp", + MAME_DIR.. "src/lib/formats/d71_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/d80_dsk.h,FORMATS["D80_DSK"] = true +-------------------------------------------------- + +if (FORMATS["D80_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/d80_dsk.cpp", + MAME_DIR.. "src/lib/formats/d80_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/d81_dsk.h,FORMATS["D81_DSK"] = true +-------------------------------------------------- + +if (FORMATS["D81_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/d81_dsk.cpp", + MAME_DIR.. "src/lib/formats/d81_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/d82_dsk.h,FORMATS["D82_DSK"] = true +-------------------------------------------------- + +if (FORMATS["D82_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/d82_dsk.cpp", + MAME_DIR.. "src/lib/formats/d82_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/dcp_dsk.h,FORMATS["DCP_DSK"] = true +-------------------------------------------------- + +if (FORMATS["DCP_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/dcp_dsk.cpp", + MAME_DIR.. "src/lib/formats/dcp_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/dim_dsk.h,FORMATS["DIM_DSK"] = true +-------------------------------------------------- + +if (FORMATS["DIM_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/dim_dsk.cpp", + MAME_DIR.. "src/lib/formats/dim_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/dip_dsk.h,FORMATS["DIP_DSK"] = true +-------------------------------------------------- + +if (FORMATS["DIP_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/dip_dsk.cpp", + MAME_DIR.. "src/lib/formats/dip_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/dmk_dsk.h,FORMATS["DMK_DSK"] = true +-------------------------------------------------- + +if (FORMATS["DMK_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/dmk_dsk.cpp", + MAME_DIR.. "src/lib/formats/dmk_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/ep64_dsk.h,FORMATS["EP64_DSK"] = true +-------------------------------------------------- + +if (FORMATS["EP64_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/ep64_dsk.cpp", + MAME_DIR.. "src/lib/formats/ep64_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/dmv_dsk.h,FORMATS["DMV_DSK"] = true +-------------------------------------------------- + +if (FORMATS["DMV_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/dmv_dsk.cpp", + MAME_DIR.. "src/lib/formats/dmv_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/esq16_dsk.h,FORMATS["ESQ16_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ESQ16_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/esq16_dsk.cpp", + MAME_DIR.. "src/lib/formats/esq16_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/esq8_dsk.h,FORMATS["ESQ8_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ESQ8_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/esq8_dsk.cpp", + MAME_DIR.. "src/lib/formats/esq8_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/excali64_dsk.h,FORMATS["EXCALI64_DSK"] = true +-------------------------------------------------- + +if (FORMATS["EXCALI64_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/excali64_dsk.cpp", + MAME_DIR.. "src/lib/formats/excali64_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/fc100_cas.h,FORMATS["FC100_CAS"] = true +-------------------------------------------------- + +if (FORMATS["FC100_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/fc100_cas.cpp", + MAME_DIR.. "src/lib/formats/fc100_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/fdd_dsk.h,FORMATS["FDD_DSK"] = true +-------------------------------------------------- + +if (FORMATS["FDD_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/fdd_dsk.cpp", + MAME_DIR.. "src/lib/formats/fdd_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/flex_dsk.h,FORMATS["FLEX_DSK"] = true +-------------------------------------------------- + +if (FORMATS["FLEX_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/flex_dsk.cpp", + MAME_DIR.. "src/lib/formats/flex_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/fm7_cas.h,FORMATS["FM7_CAS"] = true +-------------------------------------------------- + +if (FORMATS["FM7_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/fm7_cas.cpp", + MAME_DIR.. "src/lib/formats/fm7_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/fmsx_cas.h,FORMATS["FMSX_CAS"] = true +-------------------------------------------------- + +if (FORMATS["FMSX_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/fmsx_cas.cpp", + MAME_DIR.. "src/lib/formats/fmsx_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/fmtowns_dsk.h,FORMATS["FMTOWNS_DSK"] = true +-------------------------------------------------- + +if (FORMATS["FMTOWNS_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/fmtowns_dsk.cpp", + MAME_DIR.. "src/lib/formats/fmtowns_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/fsd_dsk.h,FORMATS["FSD_DSK"] = true +-------------------------------------------------- + +if (FORMATS["FSD_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/fsd_dsk.cpp", + MAME_DIR.. "src/lib/formats/fsd_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/g64_dsk.h,FORMATS["G64_DSK"] = true +-------------------------------------------------- + +if (FORMATS["G64_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/g64_dsk.cpp", + MAME_DIR.. "src/lib/formats/g64_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/gtp_cas.h,FORMATS["GTP_CAS"] = true +-------------------------------------------------- + +if (FORMATS["GTP_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/gtp_cas.cpp", + MAME_DIR.. "src/lib/formats/gtp_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/guab_dsk.h,FORMATS["GUAB_DSK"] = true +-------------------------------------------------- + +if (FORMATS["GUAB_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/guab_dsk.cpp", + MAME_DIR.. "src/lib/formats/guab_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/hector_minidisc.h,FORMATS["HECTOR_MINIDISC"] = true +-------------------------------------------------- + +if (FORMATS["HECTOR_MINIDISC"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/hector_minidisc.cpp", + MAME_DIR.. "src/lib/formats/hector_minidisc.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/hect_dsk.h,FORMATS["HECT_DSK"] = true +-------------------------------------------------- + +if (FORMATS["HECT_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/hect_dsk.cpp", + MAME_DIR.. "src/lib/formats/hect_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/hect_tap.h,FORMATS["HECT_TAP"] = true +-------------------------------------------------- + +if (FORMATS["HECT_TAP"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/hect_tap.cpp", + MAME_DIR.. "src/lib/formats/hect_tap.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/iq151_dsk.h,FORMATS["IQ151_DSK"] = true +-------------------------------------------------- + +if (FORMATS["IQ151_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/iq151_dsk.cpp", + MAME_DIR.. "src/lib/formats/iq151_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/itt3030_dsk.h,FORMATS["ITT3030_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ITT3030_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/itt3030_dsk.cpp", + MAME_DIR.. "src/lib/formats/itt3030_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/jvc_dsk.h,FORMATS["JVC_DSK"] = true +-------------------------------------------------- + +if (FORMATS["JVC_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/jvc_dsk.cpp", + MAME_DIR.. "src/lib/formats/jvc_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/kaypro_dsk.h,FORMATS["KAYPRO_DSK"] = true +-------------------------------------------------- + +if (FORMATS["KAYPRO_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/kaypro_dsk.cpp", + MAME_DIR.. "src/lib/formats/kaypro_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/kc85_dsk.h,FORMATS["KC85_DSK"] = true +-------------------------------------------------- + +if (FORMATS["KC85_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/kc85_dsk.cpp", + MAME_DIR.. "src/lib/formats/kc85_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/kc_cas.h,FORMATS["KC_CAS"] = true +-------------------------------------------------- + +if (FORMATS["KC_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/kc_cas.cpp", + MAME_DIR.. "src/lib/formats/kc_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/kim1_cas.h,FORMATS["KIM1_CAS"] = true +-------------------------------------------------- + +if (FORMATS["KIM1_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/kim1_cas.cpp", + MAME_DIR.. "src/lib/formats/kim1_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/lviv_lvt.h,FORMATS["LVIV_LVT"] = true +-------------------------------------------------- + +if (FORMATS["LVIV_LVT"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/lviv_lvt.cpp", + MAME_DIR.. "src/lib/formats/lviv_lvt.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/m20_dsk.h,FORMATS["M20_DSK"] = true +-------------------------------------------------- + +if (FORMATS["M20_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/m20_dsk.cpp", + MAME_DIR.. "src/lib/formats/m20_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/m5_dsk.h,FORMATS["M5_DSK"] = true +-------------------------------------------------- + +if (FORMATS["M5_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/m5_dsk.cpp", + MAME_DIR.. "src/lib/formats/m5_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/mbee_cas.h,FORMATS["MBEE_CAS"] = true +-------------------------------------------------- + +if (FORMATS["MBEE_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/mbee_cas.cpp", + MAME_DIR.. "src/lib/formats/mbee_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/mfm_hd.h,FORMATS["MFM_HD"] = true +-------------------------------------------------- + +if (FORMATS["MFM_HD"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/mfm_hd.cpp", + MAME_DIR.. "src/lib/formats/mfm_hd.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/mm_dsk.h,FORMATS["MM_DSK"] = true +-------------------------------------------------- + +if (FORMATS["MM_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/mm_dsk.cpp", + MAME_DIR.. "src/lib/formats/mm_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/msx_dsk.h,FORMATS["MSX_DSK"] = true +-------------------------------------------------- + +if (FORMATS["MSX_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/msx_dsk.cpp", + MAME_DIR.. "src/lib/formats/msx_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/mz_cas.h,FORMATS["MZ_CAS"] = true +-------------------------------------------------- + +if (FORMATS["MZ_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/mz_cas.cpp", + MAME_DIR.. "src/lib/formats/mz_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/nanos_dsk.h,FORMATS["NANOS_DSK"] = true +-------------------------------------------------- + +if (FORMATS["NANOS_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/nanos_dsk.cpp", + MAME_DIR.. "src/lib/formats/nanos_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/nascom_dsk.h,FORMATS["NASCOM_DSK"] = true +-------------------------------------------------- + +if (FORMATS["NASCOM_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/nascom_dsk.cpp", + MAME_DIR.. "src/lib/formats/nascom_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/naslite_dsk.h,FORMATS["NASLITE_DSK"] = true +-------------------------------------------------- + +if (FORMATS["NASLITE_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/naslite_dsk.cpp", + MAME_DIR.. "src/lib/formats/naslite_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/nes_dsk.h,FORMATS["NES_DSK"] = true +-------------------------------------------------- + +if (FORMATS["NES_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/nes_dsk.cpp", + MAME_DIR.. "src/lib/formats/nes_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/nfd_dsk.h,FORMATS["NFD_DSK"] = true +-------------------------------------------------- + +if (FORMATS["NFD_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/nfd_dsk.cpp", + MAME_DIR.. "src/lib/formats/nfd_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/orao_cas.h,FORMATS["ORAO_CAS"] = true +-------------------------------------------------- + +if (FORMATS["ORAO_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/orao_cas.cpp", + MAME_DIR.. "src/lib/formats/orao_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/oric_dsk.h,FORMATS["ORIC_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ORIC_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/oric_dsk.cpp", + MAME_DIR.. "src/lib/formats/oric_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/oric_tap.h,FORMATS["ORIC_TAP"] = true +-------------------------------------------------- + +if (FORMATS["ORIC_TAP"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/oric_tap.cpp", + MAME_DIR.. "src/lib/formats/oric_tap.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/p6001_cas.h,FORMATS["P6001_CAS"] = true +-------------------------------------------------- + +if (FORMATS["P6001_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/p6001_cas.cpp", + MAME_DIR.. "src/lib/formats/p6001_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/pasti_dsk.h,FORMATS["PASTI_DSK"] = true +-------------------------------------------------- + +if (FORMATS["PASTI_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/pasti_dsk.cpp", + MAME_DIR.. "src/lib/formats/pasti_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/pc98fdi_dsk.h,FORMATS["PC98FDI_DSK"] = true +-------------------------------------------------- + +if (FORMATS["PC98FDI_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/pc98fdi_dsk.cpp", + MAME_DIR.. "src/lib/formats/pc98fdi_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/pc98_dsk.h,FORMATS["PC98_DSK"] = true +-------------------------------------------------- + +if (FORMATS["PC98_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/pc98_dsk.cpp", + MAME_DIR.. "src/lib/formats/pc98_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/pc_dsk.h,FORMATS["PC_DSK"] = true +-------------------------------------------------- + +if (FORMATS["PC_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/pc_dsk.cpp", + MAME_DIR.. "src/lib/formats/pc_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/phc25_cas.h,FORMATS["PHC25_CAS"] = true +-------------------------------------------------- + +if (FORMATS["PHC25_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/phc25_cas.cpp", + MAME_DIR.. "src/lib/formats/phc25_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/pk8020_dsk.h,FORMATS["PK8020_DSK"] = true +-------------------------------------------------- + +if (FORMATS["PK8020_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/pk8020_dsk.cpp", + MAME_DIR.. "src/lib/formats/pk8020_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/pmd_cas.h,FORMATS["PMD_CAS"] = true +-------------------------------------------------- + +if (FORMATS["PMD_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/pmd_cas.cpp", + MAME_DIR.. "src/lib/formats/pmd_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/primoptp.h,FORMATS["PRIMOPTP"] = true +-------------------------------------------------- + +if (FORMATS["PRIMOPTP"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/primoptp.cpp", + MAME_DIR.. "src/lib/formats/primoptp.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/pyldin_dsk.h,FORMATS["PYLDIN_DSK"] = true +-------------------------------------------------- + +if (FORMATS["PYLDIN_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/pyldin_dsk.cpp", + MAME_DIR.. "src/lib/formats/pyldin_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/ql_dsk.h,FORMATS["QL_DSK"] = true +-------------------------------------------------- + +if (FORMATS["QL_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/ql_dsk.cpp", + MAME_DIR.. "src/lib/formats/ql_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/rk_cas.h,FORMATS["RK_CAS"] = true +-------------------------------------------------- + +if (FORMATS["RK_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/rk_cas.cpp", + MAME_DIR.. "src/lib/formats/rk_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/rx50_dsk.h,FORMATS["RX50_DSK"] = true +-------------------------------------------------- + +if (FORMATS["RX50_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/rx50_dsk.cpp", + MAME_DIR.. "src/lib/formats/rx50_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/sc3000_bit.h,FORMATS["SC3000_BIT"] = true +-------------------------------------------------- + +if (FORMATS["SC3000_BIT"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/sc3000_bit.cpp", + MAME_DIR.. "src/lib/formats/sc3000_bit.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/sf7000_dsk.h,FORMATS["SF7000_DSK"] = true +-------------------------------------------------- + +if (FORMATS["SF7000_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/sf7000_dsk.cpp", + MAME_DIR.. "src/lib/formats/sf7000_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/smx_dsk.h,FORMATS["SMX_DSK"] = true +-------------------------------------------------- + +if (FORMATS["SMX_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/smx_dsk.cpp", + MAME_DIR.. "src/lib/formats/smx_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/sol_cas.h,FORMATS["SOL_CAS"] = true +-------------------------------------------------- + +if (FORMATS["SOL_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/sol_cas.cpp", + MAME_DIR.. "src/lib/formats/sol_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/sorc_cas.h,FORMATS["SORC_CAS"] = true +-------------------------------------------------- + +if (FORMATS["SORC_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/sorc_cas.cpp", + MAME_DIR.. "src/lib/formats/sorc_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/sorc_dsk.h,FORMATS["SORC_DSK"] = true +-------------------------------------------------- + +if (FORMATS["SORC_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/sorc_dsk.cpp", + MAME_DIR.. "src/lib/formats/sorc_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/sord_cas.h,FORMATS["SORD_CAS"] = true +-------------------------------------------------- + +if (FORMATS["SORD_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/sord_cas.cpp", + MAME_DIR.. "src/lib/formats/sord_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/spc1000_cas.h,FORMATS["SPC1000_CAS"] = true +-------------------------------------------------- + +if (FORMATS["SPC1000_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/spc1000_cas.cpp", + MAME_DIR.. "src/lib/formats/spc1000_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/st_dsk.h,FORMATS["ST_DSK"] = true +-------------------------------------------------- + +if (FORMATS["ST_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/st_dsk.cpp", + MAME_DIR.. "src/lib/formats/st_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/svi_cas.h,FORMATS["SVI_CAS"] = true +-------------------------------------------------- + +if (FORMATS["SVI_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/svi_cas.cpp", + MAME_DIR.. "src/lib/formats/svi_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/svi_dsk.h,FORMATS["SVI_DSK"] = true +-------------------------------------------------- + +if (FORMATS["SVI_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/svi_dsk.cpp", + MAME_DIR.. "src/lib/formats/svi_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/tandy2k_dsk.h,FORMATS["TANDY2K_DSK"] = true +-------------------------------------------------- + +if (FORMATS["TANDY2K_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/tandy2k_dsk.cpp", + MAME_DIR.. "src/lib/formats/tandy2k_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/thom_cas.h,FORMATS["THOM_CAS"] = true +-------------------------------------------------- + +if (FORMATS["THOM_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/thom_cas.cpp", + MAME_DIR.. "src/lib/formats/thom_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/thom_dsk.h,FORMATS["THOM_DSK"] = true +-------------------------------------------------- + +if (FORMATS["THOM_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/thom_dsk.cpp", + MAME_DIR.. "src/lib/formats/thom_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/ti99_dsk.h,FORMATS["TI99_DSK"] = true +-------------------------------------------------- + +if (FORMATS["TI99_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/ti99_dsk.cpp", + MAME_DIR.. "src/lib/formats/ti99_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/tiki100_dsk.h,FORMATS["TIKI100_DSK"] = true +-------------------------------------------------- + +if (FORMATS["TIKI100_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/tiki100_dsk.cpp", + MAME_DIR.. "src/lib/formats/tiki100_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/trd_dsk.h,FORMATS["TRD_DSK"] = true +-------------------------------------------------- + +if (FORMATS["TRD_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/trd_dsk.cpp", + MAME_DIR.. "src/lib/formats/trd_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/trs80_dsk.h,FORMATS["TRS80_DSK"] = true +-------------------------------------------------- + +if (FORMATS["TRS80_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/trs80_dsk.cpp", + MAME_DIR.. "src/lib/formats/trs80_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/trs_cas.h,FORMATS["TRS_CAS"] = true +-------------------------------------------------- + +if (FORMATS["TRS_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/trs_cas.cpp", + MAME_DIR.. "src/lib/formats/trs_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/tvc_cas.h,FORMATS["TVC_CAS"] = true +-------------------------------------------------- + +if (FORMATS["TVC_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/tvc_cas.cpp", + MAME_DIR.. "src/lib/formats/tvc_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/tvc_dsk.h,FORMATS["TVC_DSK"] = true +-------------------------------------------------- + +if (FORMATS["TVC_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/tvc_dsk.cpp", + MAME_DIR.. "src/lib/formats/tvc_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/tzx_cas.h,FORMATS["TZX_CAS"] = true +-------------------------------------------------- + +if (FORMATS["TZX_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/tzx_cas.cpp", + MAME_DIR.. "src/lib/formats/tzx_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/uef_cas.h,FORMATS["UEF_CAS"] = true +-------------------------------------------------- + +if (FORMATS["UEF_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/uef_cas.cpp", + MAME_DIR.. "src/lib/formats/uef_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/upd765_dsk.h,FORMATS["UPD765_DSK"] = true +-------------------------------------------------- + +if (FORMATS["UPD765_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/upd765_dsk.cpp", + MAME_DIR.. "src/lib/formats/upd765_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/vdk_dsk.h,FORMATS["VDK_DSK"] = true +-------------------------------------------------- + +if (FORMATS["VDK_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/vdk_dsk.cpp", + MAME_DIR.. "src/lib/formats/vdk_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/vector06_dsk.h,FORMATS["VECTOR06_DSK"] = true +-------------------------------------------------- + +if (FORMATS["VECTOR06_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/vector06_dsk.cpp", + MAME_DIR.. "src/lib/formats/vector06_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/vg5k_cas.h,FORMATS["VG5K_CAS"] = true +-------------------------------------------------- + +if (FORMATS["VG5K_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/vg5k_cas.cpp", + MAME_DIR.. "src/lib/formats/vg5k_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/victor9k_dsk.h,FORMATS["VICTOR9K_DSK"] = true +-------------------------------------------------- + +if (FORMATS["VICTOR9K_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/victor9k_dsk.cpp", + MAME_DIR.. "src/lib/formats/victor9k_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/vt_cas.h,FORMATS["VT_CAS"] = true +-------------------------------------------------- + +if (FORMATS["VT_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/vt_cas.cpp", + MAME_DIR.. "src/lib/formats/vt_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/wd177x_dsk.h,FORMATS["WD177X_DSK"] = true +-------------------------------------------------- + +if (FORMATS["WD177X_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/wd177x_dsk.cpp", + MAME_DIR.. "src/lib/formats/wd177x_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/x07_cas.h,FORMATS["X07_CAS"] = true +-------------------------------------------------- + +if (FORMATS["X07_CAS"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/x07_cas.cpp", + MAME_DIR.. "src/lib/formats/x07_cas.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/x1_tap.h,FORMATS["X1_TAP"] = true +-------------------------------------------------- + +if (FORMATS["X1_TAP"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/x1_tap.cpp", + MAME_DIR.. "src/lib/formats/x1_tap.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/xdf_dsk.h,FORMATS["XDF_DSK"] = true +-------------------------------------------------- + +if (FORMATS["XDF_DSK"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/xdf_dsk.cpp", + MAME_DIR.. "src/lib/formats/xdf_dsk.h", + } +end + +-------------------------------------------------- +-- +--@src/lib/formats/zx81_p.h,FORMATS["ZX81_P"] = true +-------------------------------------------------- + +if (FORMATS["ZX81_P"]~=null or _OPTIONS["with-tools"]) then + files { + MAME_DIR.. "src/lib/formats/zx81_p.cpp", + MAME_DIR.. "src/lib/formats/zx81_p.h", + } +end + +end \ No newline at end of file diff --git a/scripts/src/lib.lua b/scripts/src/lib.lua index 7a97f1facbe..be96214139e 100644 --- a/scripts/src/lib.lua +++ b/scripts/src/lib.lua @@ -98,336 +98,3 @@ project "utils" MAME_DIR .. "src/lib/util/zippath.cpp", MAME_DIR .. "src/lib/util/zippath.h", } - - -project "formats" - uuid "f69636b1-fcce-45ce-b09a-113e371a2d7a" - kind (LIBTYPE) - - addprojectflags() - - options { - "ArchiveSplit", - } - - includedirs { - MAME_DIR .. "src/osd", - MAME_DIR .. "src/emu", - MAME_DIR .. "src/lib", - MAME_DIR .. "src/lib/util", - MAME_DIR .. "3rdparty", - ext_includedir("zlib"), - } - - files { - MAME_DIR .. "src/lib/formats/2d_dsk.cpp", - MAME_DIR .. "src/lib/formats/2d_dsk.h", - MAME_DIR .. "src/lib/formats/cassimg.cpp", - MAME_DIR .. "src/lib/formats/cassimg.h", - MAME_DIR .. "src/lib/formats/flopimg.cpp", - MAME_DIR .. "src/lib/formats/flopimg.h", - MAME_DIR .. "src/lib/formats/imageutl.cpp", - MAME_DIR .. "src/lib/formats/imageutl.h", - MAME_DIR .. "src/lib/formats/ioprocs.cpp", - MAME_DIR .. "src/lib/formats/ioprocs.h", - MAME_DIR .. "src/lib/formats/basicdsk.cpp", - MAME_DIR .. "src/lib/formats/basicdsk.h", - MAME_DIR .. "src/lib/formats/a26_cas.cpp", - MAME_DIR .. "src/lib/formats/a26_cas.h", - MAME_DIR .. "src/lib/formats/a5105_dsk.cpp", - MAME_DIR .. "src/lib/formats/a5105_dsk.h", - MAME_DIR .. "src/lib/formats/abc800_dsk.cpp", - MAME_DIR .. "src/lib/formats/abc800_dsk.h", - MAME_DIR .. "src/lib/formats/abcfd2_dsk.cpp", - MAME_DIR .. "src/lib/formats/abcfd2_dsk.h", - MAME_DIR .. "src/lib/formats/ace_tap.cpp", - MAME_DIR .. "src/lib/formats/ace_tap.h", - MAME_DIR .. "src/lib/formats/acorn_dsk.cpp", - MAME_DIR .. "src/lib/formats/acorn_dsk.h", - MAME_DIR .. "src/lib/formats/adam_cas.cpp", - MAME_DIR .. "src/lib/formats/adam_cas.h", - MAME_DIR .. "src/lib/formats/adam_dsk.cpp", - MAME_DIR .. "src/lib/formats/adam_dsk.h", - MAME_DIR .. "src/lib/formats/afs_dsk.cpp", - MAME_DIR .. "src/lib/formats/afs_dsk.h", - MAME_DIR .. "src/lib/formats/ami_dsk.cpp", - MAME_DIR .. "src/lib/formats/ami_dsk.h", - MAME_DIR .. "src/lib/formats/ap2_dsk.cpp", - MAME_DIR .. "src/lib/formats/ap2_dsk.h", - MAME_DIR .. "src/lib/formats/apf_apt.cpp", - MAME_DIR .. "src/lib/formats/apf_apt.h", - MAME_DIR .. "src/lib/formats/apridisk.cpp", - MAME_DIR .. "src/lib/formats/apridisk.h", - MAME_DIR .. "src/lib/formats/apollo_dsk.cpp", - MAME_DIR .. "src/lib/formats/apollo_dsk.h", - MAME_DIR .. "src/lib/formats/ap_dsk35.cpp", - MAME_DIR .. "src/lib/formats/ap_dsk35.h", - MAME_DIR .. "src/lib/formats/applix_dsk.cpp", - MAME_DIR .. "src/lib/formats/applix_dsk.h", - MAME_DIR .. "src/lib/formats/asst128_dsk.cpp", - MAME_DIR .. "src/lib/formats/asst128_dsk.h", - MAME_DIR .. "src/lib/formats/atari_dsk.cpp", - MAME_DIR .. "src/lib/formats/atari_dsk.h", - MAME_DIR .. "src/lib/formats/atom_dsk.cpp", - MAME_DIR .. "src/lib/formats/atom_dsk.h", - MAME_DIR .. "src/lib/formats/atom_tap.cpp", - MAME_DIR .. "src/lib/formats/atom_tap.h", - MAME_DIR .. "src/lib/formats/bw2_dsk.cpp", - MAME_DIR .. "src/lib/formats/bw2_dsk.h", - MAME_DIR .. "src/lib/formats/bw12_dsk.cpp", - MAME_DIR .. "src/lib/formats/bw12_dsk.h", - MAME_DIR .. "src/lib/formats/c3040_dsk.cpp", - MAME_DIR .. "src/lib/formats/c3040_dsk.h", - MAME_DIR .. "src/lib/formats/c4040_dsk.cpp", - MAME_DIR .. "src/lib/formats/c4040_dsk.h", - MAME_DIR .. "src/lib/formats/c8280_dsk.cpp", - MAME_DIR .. "src/lib/formats/c8280_dsk.h", - MAME_DIR .. "src/lib/formats/camplynx_cas.cpp", - MAME_DIR .. "src/lib/formats/camplynx_cas.h", - MAME_DIR .. "src/lib/formats/camplynx_dsk.cpp", - MAME_DIR .. "src/lib/formats/camplynx_dsk.h", - MAME_DIR .. "src/lib/formats/cbm_crt.cpp", - MAME_DIR .. "src/lib/formats/cbm_crt.h", - MAME_DIR .. "src/lib/formats/cbm_tap.cpp", - MAME_DIR .. "src/lib/formats/cbm_tap.h", - MAME_DIR .. "src/lib/formats/ccvf_dsk.cpp", - MAME_DIR .. "src/lib/formats/ccvf_dsk.h", - MAME_DIR .. "src/lib/formats/cd90_640_dsk.cpp", - MAME_DIR .. "src/lib/formats/cd90_640_dsk.h", - MAME_DIR .. "src/lib/formats/cgen_cas.cpp", - MAME_DIR .. "src/lib/formats/cgen_cas.h", - MAME_DIR .. "src/lib/formats/cgenie_dsk.cpp", - MAME_DIR .. "src/lib/formats/cgenie_dsk.h", - MAME_DIR .. "src/lib/formats/coco_cas.cpp", - MAME_DIR .. "src/lib/formats/coco_cas.h", - MAME_DIR .. "src/lib/formats/comx35_dsk.cpp", - MAME_DIR .. "src/lib/formats/comx35_dsk.h", - MAME_DIR .. "src/lib/formats/concept_dsk.cpp", - MAME_DIR .. "src/lib/formats/concept_dsk.h", - MAME_DIR .. "src/lib/formats/coupedsk.cpp", - MAME_DIR .. "src/lib/formats/coupedsk.h", - MAME_DIR .. "src/lib/formats/cpis_dsk.cpp", - MAME_DIR .. "src/lib/formats/cpis_dsk.h", - MAME_DIR .. "src/lib/formats/cqm_dsk.cpp", - MAME_DIR .. "src/lib/formats/cqm_dsk.h", - MAME_DIR .. "src/lib/formats/csw_cas.cpp", - MAME_DIR .. "src/lib/formats/csw_cas.h", - MAME_DIR .. "src/lib/formats/d64_dsk.cpp", - MAME_DIR .. "src/lib/formats/d64_dsk.h", - MAME_DIR .. "src/lib/formats/d71_dsk.cpp", - MAME_DIR .. "src/lib/formats/d71_dsk.h", - MAME_DIR .. "src/lib/formats/d80_dsk.cpp", - MAME_DIR .. "src/lib/formats/d80_dsk.h", - MAME_DIR .. "src/lib/formats/d81_dsk.cpp", - MAME_DIR .. "src/lib/formats/d81_dsk.h", - MAME_DIR .. "src/lib/formats/d82_dsk.cpp", - MAME_DIR .. "src/lib/formats/d82_dsk.h", - MAME_DIR .. "src/lib/formats/d88_dsk.cpp", - MAME_DIR .. "src/lib/formats/d88_dsk.h", - MAME_DIR .. "src/lib/formats/dcp_dsk.cpp", - MAME_DIR .. "src/lib/formats/dcp_dsk.h", - MAME_DIR .. "src/lib/formats/dfi_dsk.cpp", - MAME_DIR .. "src/lib/formats/dfi_dsk.h", - MAME_DIR .. "src/lib/formats/dim_dsk.cpp", - MAME_DIR .. "src/lib/formats/dim_dsk.h", - MAME_DIR .. "src/lib/formats/dip_dsk.cpp", - MAME_DIR .. "src/lib/formats/dip_dsk.h", - MAME_DIR .. "src/lib/formats/dmk_dsk.cpp", - MAME_DIR .. "src/lib/formats/dmk_dsk.h", - MAME_DIR .. "src/lib/formats/dmv_dsk.cpp", - MAME_DIR .. "src/lib/formats/dmv_dsk.h", - MAME_DIR .. "src/lib/formats/dsk_dsk.cpp", - MAME_DIR .. "src/lib/formats/dsk_dsk.h", - MAME_DIR .. "src/lib/formats/ep64_dsk.cpp", - MAME_DIR .. "src/lib/formats/ep64_dsk.h", - MAME_DIR .. "src/lib/formats/esq8_dsk.cpp", - MAME_DIR .. "src/lib/formats/esq8_dsk.h", - MAME_DIR .. "src/lib/formats/esq16_dsk.cpp", - MAME_DIR .. "src/lib/formats/esq16_dsk.h", - MAME_DIR .. "src/lib/formats/excali64_dsk.cpp", - MAME_DIR .. "src/lib/formats/excali64_dsk.h", - MAME_DIR .. "src/lib/formats/fc100_cas.cpp", - MAME_DIR .. "src/lib/formats/fc100_cas.h", - MAME_DIR .. "src/lib/formats/fdi_dsk.cpp", - MAME_DIR .. "src/lib/formats/fdd_dsk.cpp", - MAME_DIR .. "src/lib/formats/fdd_dsk.h", - MAME_DIR .. "src/lib/formats/flex_dsk.cpp", - MAME_DIR .. "src/lib/formats/flex_dsk.h", - MAME_DIR .. "src/lib/formats/fm7_cas.cpp", - MAME_DIR .. "src/lib/formats/fm7_cas.h", - MAME_DIR .. "src/lib/formats/fmsx_cas.cpp", - MAME_DIR .. "src/lib/formats/fmsx_cas.h", - MAME_DIR .. "src/lib/formats/fmtowns_dsk.cpp", - MAME_DIR .. "src/lib/formats/fmtowns_dsk.h", - MAME_DIR .. "src/lib/formats/fsd_dsk.cpp", - MAME_DIR .. "src/lib/formats/fsd_dsk.h", - MAME_DIR .. "src/lib/formats/g64_dsk.cpp", - MAME_DIR .. "src/lib/formats/g64_dsk.h", - MAME_DIR .. "src/lib/formats/gtp_cas.cpp", - MAME_DIR .. "src/lib/formats/gtp_cas.h", - MAME_DIR .. "src/lib/formats/guab_dsk.cpp", - MAME_DIR .. "src/lib/formats/guab_dsk.h", - MAME_DIR .. "src/lib/formats/hect_dsk.cpp", - MAME_DIR .. "src/lib/formats/hect_dsk.h", - MAME_DIR .. "src/lib/formats/hect_tap.cpp", - MAME_DIR .. "src/lib/formats/hect_tap.h", - MAME_DIR .. "src/lib/formats/hector_minidisc.cpp", - MAME_DIR .. "src/lib/formats/hector_minidisc.h", - MAME_DIR .. "src/lib/formats/iq151_dsk.cpp", - MAME_DIR .. "src/lib/formats/iq151_dsk.h", - MAME_DIR .. "src/lib/formats/imd_dsk.cpp", - MAME_DIR .. "src/lib/formats/imd_dsk.h", - MAME_DIR .. "src/lib/formats/ipf_dsk.cpp", - MAME_DIR .. "src/lib/formats/ipf_dsk.h", - MAME_DIR .. "src/lib/formats/jvc_dsk.cpp", - MAME_DIR .. "src/lib/formats/jvc_dsk.h", - MAME_DIR .. "src/lib/formats/kaypro_dsk.cpp", - MAME_DIR .. "src/lib/formats/kaypro_dsk.h", - MAME_DIR .. "src/lib/formats/kc_cas.cpp", - MAME_DIR .. "src/lib/formats/kc_cas.h", - MAME_DIR .. "src/lib/formats/kc85_dsk.cpp", - MAME_DIR .. "src/lib/formats/kc85_dsk.h", - MAME_DIR .. "src/lib/formats/kim1_cas.cpp", - MAME_DIR .. "src/lib/formats/kim1_cas.h", - MAME_DIR .. "src/lib/formats/lviv_lvt.cpp", - MAME_DIR .. "src/lib/formats/lviv_lvt.h", - MAME_DIR .. "src/lib/formats/m20_dsk.cpp", - MAME_DIR .. "src/lib/formats/m20_dsk.h", - MAME_DIR .. "src/lib/formats/m5_dsk.cpp", - MAME_DIR .. "src/lib/formats/m5_dsk.h", - MAME_DIR .. "src/lib/formats/mbee_cas.cpp", - MAME_DIR .. "src/lib/formats/mbee_cas.h", - MAME_DIR .. "src/lib/formats/mm_dsk.cpp", - MAME_DIR .. "src/lib/formats/mm_dsk.h", - MAME_DIR .. "src/lib/formats/msx_dsk.cpp", - MAME_DIR .. "src/lib/formats/msx_dsk.h", - MAME_DIR .. "src/lib/formats/mfi_dsk.cpp", - MAME_DIR .. "src/lib/formats/mfi_dsk.h", - MAME_DIR .. "src/lib/formats/mfm_hd.cpp", - MAME_DIR .. "src/lib/formats/mfm_hd.h", - MAME_DIR .. "src/lib/formats/mz_cas.cpp", - MAME_DIR .. "src/lib/formats/mz_cas.h", - MAME_DIR .. "src/lib/formats/nanos_dsk.cpp", - MAME_DIR .. "src/lib/formats/nanos_dsk.h", - MAME_DIR .. "src/lib/formats/nascom_dsk.cpp", - MAME_DIR .. "src/lib/formats/nascom_dsk.h", - MAME_DIR .. "src/lib/formats/naslite_dsk.cpp", - MAME_DIR .. "src/lib/formats/naslite_dsk.h", - MAME_DIR .. "src/lib/formats/nes_dsk.cpp", - MAME_DIR .. "src/lib/formats/nes_dsk.h", - MAME_DIR .. "src/lib/formats/nfd_dsk.cpp", - MAME_DIR .. "src/lib/formats/nfd_dsk.h", - MAME_DIR .. "src/lib/formats/orao_cas.cpp", - MAME_DIR .. "src/lib/formats/orao_cas.h", - MAME_DIR .. "src/lib/formats/oric_dsk.cpp", - MAME_DIR .. "src/lib/formats/oric_dsk.h", - MAME_DIR .. "src/lib/formats/oric_tap.cpp", - MAME_DIR .. "src/lib/formats/oric_tap.h", - MAME_DIR .. "src/lib/formats/p6001_cas.cpp", - MAME_DIR .. "src/lib/formats/p6001_cas.h", - MAME_DIR .. "src/lib/formats/pasti_dsk.cpp", - MAME_DIR .. "src/lib/formats/pasti_dsk.h", - MAME_DIR .. "src/lib/formats/pc_dsk.cpp", - MAME_DIR .. "src/lib/formats/pc_dsk.h", - MAME_DIR .. "src/lib/formats/pc98_dsk.cpp", - MAME_DIR .. "src/lib/formats/pc98_dsk.h", - MAME_DIR .. "src/lib/formats/pc98fdi_dsk.cpp", - MAME_DIR .. "src/lib/formats/pc98fdi_dsk.h", - MAME_DIR .. "src/lib/formats/phc25_cas.cpp", - MAME_DIR .. "src/lib/formats/phc25_cas.h", - MAME_DIR .. "src/lib/formats/pk8020_dsk.cpp", - MAME_DIR .. "src/lib/formats/pk8020_dsk.h", - MAME_DIR .. "src/lib/formats/pmd_cas.cpp", - MAME_DIR .. "src/lib/formats/pmd_cas.h", - MAME_DIR .. "src/lib/formats/primoptp.cpp", - MAME_DIR .. "src/lib/formats/primoptp.h", - MAME_DIR .. "src/lib/formats/pyldin_dsk.cpp", - MAME_DIR .. "src/lib/formats/pyldin_dsk.h", - MAME_DIR .. "src/lib/formats/ql_dsk.cpp", - MAME_DIR .. "src/lib/formats/ql_dsk.h", - MAME_DIR .. "src/lib/formats/rk_cas.cpp", - MAME_DIR .. "src/lib/formats/rk_cas.h", - MAME_DIR .. "src/lib/formats/rx50_dsk.cpp", - MAME_DIR .. "src/lib/formats/rx50_dsk.h", - MAME_DIR .. "src/lib/formats/sc3000_bit.cpp", - MAME_DIR .. "src/lib/formats/sc3000_bit.h", - MAME_DIR .. "src/lib/formats/sf7000_dsk.cpp", - MAME_DIR .. "src/lib/formats/sf7000_dsk.h", - MAME_DIR .. "src/lib/formats/smx_dsk.cpp", - MAME_DIR .. "src/lib/formats/smx_dsk.h", - MAME_DIR .. "src/lib/formats/sol_cas.cpp", - MAME_DIR .. "src/lib/formats/sol_cas.h", - MAME_DIR .. "src/lib/formats/sorc_dsk.cpp", - MAME_DIR .. "src/lib/formats/sorc_dsk.h", - MAME_DIR .. "src/lib/formats/sorc_cas.cpp", - MAME_DIR .. "src/lib/formats/sorc_cas.h", - MAME_DIR .. "src/lib/formats/sord_cas.cpp", - MAME_DIR .. "src/lib/formats/sord_cas.h", - MAME_DIR .. "src/lib/formats/spc1000_cas.cpp", - MAME_DIR .. "src/lib/formats/spc1000_cas.h", - MAME_DIR .. "src/lib/formats/st_dsk.cpp", - MAME_DIR .. "src/lib/formats/st_dsk.h", - MAME_DIR .. "src/lib/formats/svi_cas.cpp", - MAME_DIR .. "src/lib/formats/svi_cas.h", - MAME_DIR .. "src/lib/formats/svi_dsk.cpp", - MAME_DIR .. "src/lib/formats/svi_dsk.h", - MAME_DIR .. "src/lib/formats/tandy2k_dsk.cpp", - MAME_DIR .. "src/lib/formats/tandy2k_dsk.h", - MAME_DIR .. "src/lib/formats/td0_dsk.cpp", - MAME_DIR .. "src/lib/formats/td0_dsk.h", - MAME_DIR .. "src/lib/formats/thom_cas.cpp", - MAME_DIR .. "src/lib/formats/thom_cas.h", - MAME_DIR .. "src/lib/formats/thom_dsk.cpp", - MAME_DIR .. "src/lib/formats/thom_dsk.h", - MAME_DIR .. "src/lib/formats/ti99_dsk.cpp", - MAME_DIR .. "src/lib/formats/ti99_dsk.h", - MAME_DIR .. "src/lib/formats/tiki100_dsk.cpp", - MAME_DIR .. "src/lib/formats/tiki100_dsk.h", - MAME_DIR .. "src/lib/formats/trd_dsk.cpp", - MAME_DIR .. "src/lib/formats/trd_dsk.h", - MAME_DIR .. "src/lib/formats/trs_cas.cpp", - MAME_DIR .. "src/lib/formats/trs_cas.h", - MAME_DIR .. "src/lib/formats/trs80_dsk.cpp", - MAME_DIR .. "src/lib/formats/trs80_dsk.h", - MAME_DIR .. "src/lib/formats/tvc_cas.cpp", - MAME_DIR .. "src/lib/formats/tvc_cas.h", - MAME_DIR .. "src/lib/formats/tvc_dsk.cpp", - MAME_DIR .. "src/lib/formats/tvc_dsk.h", - MAME_DIR .. "src/lib/formats/tzx_cas.cpp", - MAME_DIR .. "src/lib/formats/tzx_cas.h", - MAME_DIR .. "src/lib/formats/uef_cas.cpp", - MAME_DIR .. "src/lib/formats/uef_cas.h", - MAME_DIR .. "src/lib/formats/upd765_dsk.cpp", - MAME_DIR .. "src/lib/formats/upd765_dsk.h", - MAME_DIR .. "src/lib/formats/vdk_dsk.cpp", - MAME_DIR .. "src/lib/formats/vdk_dsk.h", - MAME_DIR .. "src/lib/formats/vector06_dsk.cpp", - MAME_DIR .. "src/lib/formats/vector06_dsk.h", - MAME_DIR .. "src/lib/formats/victor9k_dsk.cpp", - MAME_DIR .. "src/lib/formats/victor9k_dsk.h", - MAME_DIR .. "src/lib/formats/vg5k_cas.cpp", - MAME_DIR .. "src/lib/formats/vg5k_cas.h", - MAME_DIR .. "src/lib/formats/vt_cas.cpp", - MAME_DIR .. "src/lib/formats/vt_cas.h", - MAME_DIR .. "src/lib/formats/wavfile.cpp", - MAME_DIR .. "src/lib/formats/wavfile.h", - MAME_DIR .. "src/lib/formats/wd177x_dsk.cpp", - MAME_DIR .. "src/lib/formats/wd177x_dsk.h", - MAME_DIR .. "src/lib/formats/x07_cas.cpp", - MAME_DIR .. "src/lib/formats/x07_cas.h", - MAME_DIR .. "src/lib/formats/x1_tap.cpp", - MAME_DIR .. "src/lib/formats/x1_tap.h", - MAME_DIR .. "src/lib/formats/xdf_dsk.cpp", - MAME_DIR .. "src/lib/formats/xdf_dsk.h", - MAME_DIR .. "src/lib/formats/zx81_p.cpp", - MAME_DIR .. "src/lib/formats/zx81_p.h", - MAME_DIR .. "src/lib/formats/hxcmfm_dsk.cpp", - MAME_DIR .. "src/lib/formats/hxcmfm_dsk.h", - MAME_DIR .. "src/lib/formats/itt3030_dsk.cpp", - MAME_DIR .. "src/lib/formats/itt3030_dsk.h", - } - -if (MACHINES["NETLIST"]~=null or _OPTIONS["with-tools"]) then --- netlist now defines a project -dofile("netlist.lua") -end diff --git a/scripts/src/main.lua b/scripts/src/main.lua index 4ee2229b8ef..4c460f1c212 100644 --- a/scripts/src/main.lua +++ b/scripts/src/main.lua @@ -205,8 +205,12 @@ end links { "optional", "emu", + } +--if (STANDALONE~=true) then + links { "formats", } +--end if #disasm_files > 0 then links { "dasm", diff --git a/scripts/src/video.lua b/scripts/src/video.lua index 95cccd99bfe..8958c7e3852 100644 --- a/scripts/src/video.lua +++ b/scripts/src/video.lua @@ -876,3 +876,15 @@ if (VIDEOS["GB_LCD"]~=null) then MAME_DIR .. "src/devices/video/gb_lcd.h", } end + +-------------------------------------------------- +-- +--@src/devices/video/gba_lcd.h,VIDEOS["GBA_LCD"] = true +-------------------------------------------------- + +if (VIDEOS["GBA_LCD"]~=null) then + files { + MAME_DIR .. "src/devices/video/gba_lcd.cpp", + MAME_DIR .. "src/devices/video/gba_lcd.h", + } +end diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index a119c3f18e7..210ad2fae7d 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -669,6 +669,16 @@ BUSES["VECTREX"] = true --BUSES["Z88"] = true --BUSES["ZORRO"] = true + +-------------------------------------------------- +-- specify used file formats +-------------------------------------------------- + +FORMATS["GUAB_DSK"] = true +FORMATS["AMI_DSK"] = true +FORMATS["SC3000_BIT"] = true +FORMATS["WD177X_DSK"] = true + -------------------------------------------------- -- this is the list of driver libraries that -- comprise MAME plus mamedriv.o which contains diff --git a/scripts/target/mame/mame.lua b/scripts/target/mame/mame.lua index b7360486042..d58bfab4595 100644 --- a/scripts/target/mame/mame.lua +++ b/scripts/target/mame/mame.lua @@ -11,13 +11,16 @@ dofile("arcade.lua") dofile("mess.lua") +dofile("virtual.lua") function createProjects_mame_mame(_target, _subtarget) createProjects_mame_arcade(_target, _subtarget) createProjects_mame_mess(_target, _subtarget) + createProjects_mame_virtual(_target, _subtarget) end function linkProjects_mame_mame(_target, _subtarget) linkProjects_mame_arcade(_target, _subtarget) linkProjects_mame_mess(_target, _subtarget) + linkProjects_mame_virtual(_target, _subtarget) end diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 3554b86e213..5e68ffc8105 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -333,6 +333,7 @@ VIDEOS["VIC4567"] = true --VIDEOS+= VOODOO"] = true VIDEOS["SCN2674"] = true VIDEOS["GB_LCD"] = true +VIDEOS["GBA_LCD"] = true -------------------------------------------------- -- specify available machine cores @@ -622,6 +623,7 @@ BUSES["CGENIE_PARALLEL"] = true BUSES["CHANNELF"] = true BUSES["COCO"] = true BUSES["COLECO"] = true +BUSES["COMPIS_GRAPHICS"] = true BUSES["COMPUCOLOR"] = true BUSES["COMX35"] = true BUSES["CPC"] = true @@ -705,6 +707,148 @@ BUSES["X68K"] = true BUSES["Z88"] = true BUSES["ZORRO"] = true +-------------------------------------------------- +-- specify used file formats +-------------------------------------------------- + +FORMATS["2D_DSK"] = true +FORMATS["A26_CAS"] = true +FORMATS["A5105_DSK"] = true +FORMATS["ABC800_DSK"] = true +FORMATS["ABCFD2_DSK"] = true +FORMATS["ACE_TAP"] = true +FORMATS["ACORN_DSK"] = true +FORMATS["ADAM_CAS"] = true +FORMATS["ADAM_DSK"] = true +FORMATS["AFS_DSK"] = true +FORMATS["AMI_DSK"] = true +FORMATS["AP2_DSK"] = true +FORMATS["APF_APT"] = true +FORMATS["APOLLO_DSK"] = true +FORMATS["APPLIX_DSK"] = true +FORMATS["APRIDISK"] = true +FORMATS["AP_DSK35"] = true +FORMATS["ASST128_DSK"] = true +FORMATS["ATARI_DSK"] = true +FORMATS["ATOM_DSK"] = true +FORMATS["ATOM_TAP"] = true +FORMATS["BASICDSK"] = true +FORMATS["BW12_DSK"] = true +FORMATS["BW2_DSK"] = true +FORMATS["C3040_DSK"] = true +FORMATS["C4040_DSK"] = true +FORMATS["C8280_DSK"] = true +FORMATS["CAMPLYNX_CAS"] = true +FORMATS["CAMPLYNX_DSK"] = true +FORMATS["CBM_CRT"] = true +FORMATS["CBM_TAP"] = true +FORMATS["CCVF_DSK"] = true +FORMATS["CD90_640_DSK"] = true +FORMATS["CGENIE_DSK"] = true +FORMATS["CGEN_CAS"] = true +FORMATS["COCO_CAS"] = true +FORMATS["COMX35_DSK"] = true +FORMATS["CONCEPT_DSK"] = true +FORMATS["COUPEDSK"] = true +FORMATS["CPIS_DSK"] = true +FORMATS["CSW_CAS"] = true +FORMATS["D64_DSK"] = true +FORMATS["D71_DSK"] = true +FORMATS["D80_DSK"] = true +FORMATS["D81_DSK"] = true +FORMATS["D82_DSK"] = true +FORMATS["DCP_DSK"] = true +FORMATS["DIM_DSK"] = true +FORMATS["DIP_DSK"] = true +FORMATS["DMK_DSK"] = true +FORMATS["EP64_DSK"] = true +FORMATS["DMV_DSK"] = true +FORMATS["ESQ16_DSK"] = true +FORMATS["ESQ8_DSK"] = true +FORMATS["EXCALI64_DSK"] = true +FORMATS["FC100_CAS"] = true +FORMATS["FDD_DSK"] = true +FORMATS["FLEX_DSK"] = true +FORMATS["FM7_CAS"] = true +FORMATS["FMSX_CAS"] = true +FORMATS["FMTOWNS_DSK"] = true +FORMATS["FSD_DSK"] = true +FORMATS["G64_DSK"] = true +FORMATS["GTP_CAS"] = true +FORMATS["HECTOR_MINIDISC"] = true +FORMATS["HECT_DSK"] = true +FORMATS["HECT_TAP"] = true +FORMATS["IQ151_DSK"] = true +FORMATS["ITT3030_DSK"] = true +FORMATS["JVC_DSK"] = true +FORMATS["KAYPRO_DSK"] = true +FORMATS["KC85_DSK"] = true +FORMATS["KC_CAS"] = true +FORMATS["KIM1_CAS"] = true +FORMATS["LVIV_LVT"] = true +FORMATS["M20_DSK"] = true +FORMATS["M5_DSK"] = true +FORMATS["MBEE_CAS"] = true +FORMATS["MFM_HD"] = true +FORMATS["MM_DSK"] = true +FORMATS["MSX_DSK"] = true +FORMATS["MZ_CAS"] = true +FORMATS["NANOS_DSK"] = true +FORMATS["NASCOM_DSK"] = true +FORMATS["NASLITE_DSK"] = true +FORMATS["NES_DSK"] = true +FORMATS["NFD_DSK"] = true +FORMATS["ORAO_CAS"] = true +FORMATS["ORIC_DSK"] = true +FORMATS["ORIC_TAP"] = true +FORMATS["P6001_CAS"] = true +FORMATS["PASTI_DSK"] = true +FORMATS["PC98FDI_DSK"] = true +FORMATS["PC98_DSK"] = true +FORMATS["PC_DSK"] = true +FORMATS["PHC25_CAS"] = true +FORMATS["PK8020_DSK"] = true +FORMATS["PMD_CAS"] = true +FORMATS["PRIMOPTP"] = true +FORMATS["PYLDIN_DSK"] = true +FORMATS["QL_DSK"] = true +FORMATS["RK_CAS"] = true +FORMATS["RX50_DSK"] = true +FORMATS["SC3000_BIT"] = true +FORMATS["SF7000_DSK"] = true +FORMATS["SMX_DSK"] = true +FORMATS["SOL_CAS"] = true +FORMATS["SORC_CAS"] = true +FORMATS["SORC_DSK"] = true +FORMATS["SORD_CAS"] = true +FORMATS["SPC1000_CAS"] = true +FORMATS["ST_DSK"] = true +FORMATS["SVI_CAS"] = true +FORMATS["SVI_DSK"] = true +FORMATS["TANDY2K_DSK"] = true +FORMATS["THOM_CAS"] = true +FORMATS["THOM_DSK"] = true +FORMATS["TI99_DSK"] = true +FORMATS["TIKI100_DSK"] = true +FORMATS["TRD_DSK"] = true +FORMATS["TRS80_DSK"] = true +FORMATS["TRS_CAS"] = true +FORMATS["TVC_CAS"] = true +FORMATS["TVC_DSK"] = true +FORMATS["TZX_CAS"] = true +FORMATS["UEF_CAS"] = true +FORMATS["UPD765_DSK"] = true +FORMATS["VDK_DSK"] = true +FORMATS["VECTOR06_DSK"] = true +FORMATS["VG5K_CAS"] = true +FORMATS["VICTOR9K_DSK"] = true +FORMATS["VT_CAS"] = true +FORMATS["WD177X_DSK"] = true +FORMATS["X07_CAS"] = true +FORMATS["X1_TAP"] = true +FORMATS["XDF_DSK"] = true +FORMATS["ZX81_P"] = true + -------------------------------------------------- -- this is the list of driver libraries that -- comprise MESS plus messdriv.*", which contains @@ -768,6 +912,7 @@ function linkProjects_mame_mess(_target, _subtarget) "epson", "exidy", "fairch", + "fairlight", "fidelity", "force", "fujitsu", @@ -1731,6 +1876,11 @@ files { MAME_DIR .. "src/mame/video/channelf.cpp", } +createMESSProjects(_target, _subtarget, "fairlight") +files { + MAME_DIR .. "src/mame/drivers/cmi.cpp", +} + createMESSProjects(_target, _subtarget, "fidelity") files { MAME_DIR .. "src/mame/drivers/fidelz80.cpp", @@ -2165,7 +2315,6 @@ files { MAME_DIR .. "src/mame/machine/gb.cpp", MAME_DIR .. "src/mame/drivers/gba.cpp", MAME_DIR .. "src/mame/includes/gba.h", - MAME_DIR .. "src/mame/video/gba.cpp", MAME_DIR .. "src/mame/drivers/n64.cpp", MAME_DIR .. "src/mame/includes/n64.h", MAME_DIR .. "src/mame/drivers/nes.cpp", @@ -2706,7 +2855,6 @@ files { createMESSProjects(_target, _subtarget, "telenova") files { MAME_DIR .. "src/mame/drivers/compis.cpp", - MAME_DIR .. "src/mame/includes/compis.h", MAME_DIR .. "src/mame/machine/compiskb.cpp", MAME_DIR .. "src/mame/machine/compiskb.h", } @@ -2887,6 +3035,7 @@ files { MAME_DIR .. "src/mame/includes/tandy2k.h", MAME_DIR .. "src/mame/machine/tandy2kb.cpp", MAME_DIR .. "src/mame/machine/tandy2kb.h", + MAME_DIR .. "src/mame/drivers/vis.cpp", } createMESSProjects(_target, _subtarget, "ultimachine") diff --git a/scripts/target/mame/virtual.lua b/scripts/target/mame/virtual.lua new file mode 100644 index 00000000000..5bec4adb607 --- /dev/null +++ b/scripts/target/mame/virtual.lua @@ -0,0 +1,73 @@ +-- license:BSD-3-Clause +-- copyright-holders:MAMEdev Team + +--------------------------------------------------------------------------- +-- +-- virtual.lua +-- +-- Virtual target makefile +-- +--------------------------------------------------------------------------- + +-------------------------------------------------- +-- specify available CPU cores +-------------------------------------------------- + + +-------------------------------------------------- +-- specify available sound cores; some of these are +-- only for MAME and so aren't included +-------------------------------------------------- + + +-------------------------------------------------- +-- specify available video cores +-------------------------------------------------- + + +-------------------------------------------------- +-- specify available machine cores +-------------------------------------------------- + + +-------------------------------------------------- +-- specify available bus cores +-------------------------------------------------- + + +-------------------------------------------------- +-- this is the driver library that +-- comprise the virtual drivers +-------------------------------------------------- +function linkProjects_mame_virtual(_target, _subtarget) + links { + "virtual", + } +end + +function createVirtualProjects(_target, _subtarget, _name) + project (_name) + targetsubdir(_target .."_" .. _subtarget) + kind (LIBTYPE) + uuid (os.uuid("drv-" .. _target .."_" .. _subtarget .. "_" .._name)) + addprojectflags() + precompiledheaders() + + includedirs { + MAME_DIR .. "src/osd", + MAME_DIR .. "src/emu", + MAME_DIR .. "src/devices", + MAME_DIR .. "src/mame", + MAME_DIR .. "src/lib", + MAME_DIR .. "src/lib/util", + MAME_DIR .. "src/lib/netlist", + MAME_DIR .. "3rdparty", + } +end + +function createProjects_mame_virtual(_target, _subtarget) +createVirtualProjects(_target, _subtarget, "virtual") +files { + MAME_DIR .. "src/mame/drivers/vgmplay.cpp", +} +end diff --git a/src/devices/bus/compis/graphics.cpp b/src/devices/bus/compis/graphics.cpp new file mode 100644 index 00000000000..b35b2cd9517 --- /dev/null +++ b/src/devices/bus/compis/graphics.cpp @@ -0,0 +1,72 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + TeleNova Compis graphics bus emulation + +**********************************************************************/ + +#include "graphics.h" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type COMPIS_GRAPHICS_SLOT = &device_creator; + + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// device_compis_graphics_card_interface - constructor +//------------------------------------------------- + +device_compis_graphics_card_interface::device_compis_graphics_card_interface(const machine_config &mconfig, device_t &device) : + device_slot_card_interface(mconfig, device) +{ + m_slot = dynamic_cast(device.owner()); +} + + +//------------------------------------------------- +// compis_graphics_slot_t - constructor +//------------------------------------------------- + +compis_graphics_slot_t::compis_graphics_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, COMPIS_GRAPHICS_SLOT, "Compis graphics slot", tag, owner, clock, "isbx_slot", __FILE__), + device_slot_interface(mconfig, *this), + m_write_dma_request(*this), + m_card(nullptr) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void compis_graphics_slot_t::device_start() +{ + m_card = dynamic_cast(get_card_device()); + + // resolve callbacks + m_write_dma_request.resolve_safe(); +} + + +//------------------------------------------------- +// SLOT_INTERFACE( compis_graphics_cards ) +//------------------------------------------------- + +// slot devices +#include "hrg.h" + +SLOT_INTERFACE_START( compis_graphics_cards ) + SLOT_INTERFACE("hrg", COMPIS_HRG) + SLOT_INTERFACE("uhrg", COMPIS_UHRG) +SLOT_INTERFACE_END diff --git a/src/devices/bus/compis/graphics.h b/src/devices/bus/compis/graphics.h new file mode 100644 index 00000000000..ce2fd9693b7 --- /dev/null +++ b/src/devices/bus/compis/graphics.h @@ -0,0 +1,109 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + TeleNova Compis graphics bus emulation + +********************************************************************** + +**********************************************************************/ + +#pragma once + +#ifndef __COMPIS_GRAPHICS_SLOT__ +#define __COMPIS_GRAPHICS_SLOT__ + +#include "emu.h" + + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_COMPIS_GRAPHICS_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, COMPIS_GRAPHICS_SLOT, _clock) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) + + +#define MCFG_COMPIS_GRAPHICS_SLOT_DMA_REQUEST_CALLBACK(_dma_request) \ + downcast(device)->set_dma_request_callback(DEVCB_##_dma_request); + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> device_compis_graphics_card_interface + +class compis_graphics_slot_t; + +class device_compis_graphics_card_interface : public device_slot_card_interface +{ +public: + // construction/destruction + device_compis_graphics_card_interface(const machine_config &mconfig, device_t &device); + + virtual UINT8 mcs0_r(address_space &space, offs_t offset) { return 0xff; } + virtual void mcs0_w(address_space &space, offs_t offset, UINT8 data) { } + virtual UINT8 mcs1_r(address_space &space, offs_t offset) { return 0xff; } + virtual void mcs1_w(address_space &space, offs_t offset, UINT8 data) { } + virtual UINT8 pcs3_r(address_space &space, offs_t offset) { return 0xff; } + virtual void pcs3_w(address_space &space, offs_t offset, UINT8 data) { } + virtual UINT8 pcs6_6_r(address_space &space, offs_t offset) { return 0xff; } + virtual void pcs6_6_w(address_space &space, offs_t offset, UINT8 data) { } + virtual UINT8 dma_ack_r(address_space &space, offs_t offset) { return 0xff; } + virtual void dma_ack_w(address_space &space, offs_t offset, UINT8 data) { } + +protected: + compis_graphics_slot_t *m_slot; +}; + + +// ======================> compis_graphics_slot_t + +class compis_graphics_slot_t : public device_t, + public device_slot_interface +{ +public: + // construction/destruction + compis_graphics_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + template void set_dma_request_callback(_dma_request dma_request) { m_write_dma_request.set_callback(dma_request); } + + // computer interface + DECLARE_READ8_MEMBER( mcs0_r ) { return m_card ? m_card->mcs0_r(space, offset) : 0xff; } + DECLARE_WRITE8_MEMBER( mcs0_w ) { if (m_card) m_card->mcs0_w(space, offset, data); } + DECLARE_READ8_MEMBER( mcs1_r ) { return m_card ? m_card->mcs1_r(space, offset) : 0xff; } + DECLARE_WRITE8_MEMBER( mcs1_w ) { if (m_card) m_card->mcs1_w(space, offset, data); } + DECLARE_READ8_MEMBER( pcs3_r ) { return m_card ? m_card->pcs3_r(space, offset) : 0xff; } + DECLARE_WRITE8_MEMBER( pcs3_w ) { if (m_card) m_card->pcs3_w(space, offset, data); } + DECLARE_READ8_MEMBER( pcs6_6_r ) { return m_card ? m_card->pcs6_6_r(space, offset) : 0xff; } + DECLARE_WRITE8_MEMBER( pcs6_6_w ) { if (m_card) m_card->pcs6_6_w(space, offset, data); } + DECLARE_READ8_MEMBER( dma_ack_r ) { return m_card ? m_card->dma_ack_r(space, offset) : 0xff; } + DECLARE_WRITE8_MEMBER( dma_ack_w ) { if (m_card) m_card->dma_ack_w(space, offset, data); } + + // card interface + DECLARE_WRITE_LINE_MEMBER( dma_request_w ) { m_write_dma_request(state); } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override { if (m_card) get_card_device()->reset(); } + + devcb_write_line m_write_dma_request; + + device_compis_graphics_card_interface *m_card; +}; + + +// device type definition +extern const device_type COMPIS_GRAPHICS_SLOT; + + +SLOT_INTERFACE_EXTERN( compis_graphics_cards ); + + + +#endif diff --git a/src/devices/bus/compis/hrg.cpp b/src/devices/bus/compis/hrg.cpp new file mode 100644 index 00000000000..c4bcf950061 --- /dev/null +++ b/src/devices/bus/compis/hrg.cpp @@ -0,0 +1,218 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + TeleNova Compis (Ultra) High Resolution Graphics adapter emulation + +**********************************************************************/ + +#include "hrg.h" + + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** + +#define UPD7220_TAG "upd7220" +#define SCREEN_TAG "screen" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type COMPIS_HRG = &device_creator; +const device_type COMPIS_UHRG = &device_creator; + + +//------------------------------------------------- +// ADDRESS_MAP( upd7220_map ) +//------------------------------------------------- + +static ADDRESS_MAP_START( hrg_map, AS_0, 16, compis_hrg_t ) + ADDRESS_MAP_GLOBAL_MASK(0x7fff) + AM_RANGE(0x00000, 0x7fff) AM_RAM AM_SHARE("video_ram") +ADDRESS_MAP_END + +static ADDRESS_MAP_START( uhrg_map, AS_0, 16, compis_uhrg_t ) + ADDRESS_MAP_GLOBAL_MASK(0x1ffff) + AM_RANGE(0x00000, 0x1ffff) AM_RAM AM_SHARE("video_ram") +ADDRESS_MAP_END + + +//------------------------------------------------- +// UPD7220_INTERFACE( hgdc_intf ) +//------------------------------------------------- + +UPD7220_DISPLAY_PIXELS_MEMBER( compis_hrg_t::display_pixels ) +{ + UINT16 i,gfx = m_video_ram[(address & 0x7fff) >> 1]; + const pen_t *pen = m_palette->pens(); + + for(i=0; i<16; i++) + bitmap.pix32(y, x + i) = pen[BIT(gfx, i)]; +} + + +//------------------------------------------------- +// MACHINE_CONFIG_FRAGMENT( hrg ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( hrg ) + MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green) + MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + MCFG_SCREEN_REFRESH_RATE(50) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate + MCFG_SCREEN_SIZE(640, 400) + MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1) + MCFG_SCREEN_UPDATE_DEVICE(UPD7220_TAG, upd7220_device, screen_update) + + MCFG_DEVICE_ADD(UPD7220_TAG, UPD7220, XTAL_4_433619MHz/2) // unknown clock + MCFG_DEVICE_ADDRESS_MAP(AS_0, hrg_map) + MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(compis_hrg_t, display_pixels) + MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) + + MCFG_PALETTE_ADD_MONOCHROME("palette") +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor compis_hrg_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( hrg ); +} + + +//------------------------------------------------- +// MACHINE_CONFIG_FRAGMENT( uhrg ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( uhrg ) + MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green) + MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) + MCFG_SCREEN_REFRESH_RATE(50) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate + MCFG_SCREEN_SIZE(1280, 800) + MCFG_SCREEN_VISIBLE_AREA(0, 1280-1, 0, 800-1) + MCFG_SCREEN_UPDATE_DEVICE(UPD7220_TAG, upd7220_device, screen_update) + + MCFG_DEVICE_ADD(UPD7220_TAG, UPD7220, XTAL_4_433619MHz/2) // unknown clock + MCFG_DEVICE_ADDRESS_MAP(AS_0, uhrg_map) + MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(compis_hrg_t, display_pixels) + MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) + + MCFG_PALETTE_ADD_MONOCHROME("palette") +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor compis_uhrg_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( uhrg ); +} + + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// compis_hrg_t - constructor +//------------------------------------------------- + +compis_hrg_t::compis_hrg_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : + device_t(mconfig, type, name, tag, owner, clock, shortname, source), + device_compis_graphics_card_interface(mconfig, *this), + m_crtc(*this, UPD7220_TAG), + m_palette(*this, "palette"), + m_video_ram(*this, "video_ram") +{ +} + +compis_hrg_t::compis_hrg_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + compis_hrg_t(mconfig, COMPIS_HRG, "Compis HRG", tag, owner, clock, "compis_hrg", __FILE__) +{ +} + +compis_uhrg_t::compis_uhrg_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + compis_hrg_t(mconfig, COMPIS_UHRG, "Compis UHRG", tag, owner, clock, "compis_uhrg", __FILE__) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void compis_hrg_t::device_start() +{ +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void compis_hrg_t::device_reset() +{ +} + + +//------------------------------------------------- +// pcs6_6_r - +//------------------------------------------------- + +UINT8 compis_hrg_t::pcs6_6_r(address_space &space, offs_t offset) +{ + UINT8 data = 0xff; + + if (offset < 2) + data = m_crtc->read(space, offset & 0x01); + else + // monochrome only, hblank? vblank? + if(offset == 2) + { + switch(m_unk_video) + { + case 0x04: + m_unk_video = 0x44; + break; + case 0x44: + m_unk_video = 0x64; + break; + default: + m_unk_video = 0x04; + break; + } + data = m_unk_video; + } + else + data = 0; + + logerror("%s PCS 6:6 read %04x : %02x\n", machine().describe_context(), offset, data); + + return data; +} + + +//------------------------------------------------- +// pcs6_6_w - +//------------------------------------------------- + +void compis_hrg_t::pcs6_6_w(address_space &space, offs_t offset, UINT8 data) +{ + logerror("%s PCS 6:6 write %04x : %02x\n", machine().describe_context(), offset, data); + + // 0x336 is likely the color plane register + if (offset < 2) m_crtc->write(space, offset & 0x01, data); +} diff --git a/src/devices/bus/compis/hrg.h b/src/devices/bus/compis/hrg.h new file mode 100644 index 00000000000..e62679f3d69 --- /dev/null +++ b/src/devices/bus/compis/hrg.h @@ -0,0 +1,76 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + TeleNova Compis (Ultra) High Resolution Graphics adapter emulation + +**********************************************************************/ + +#pragma once + +#ifndef __COMPIS_HRG__ +#define __COMPIS_HRG__ + +#include "emu.h" +#include "graphics.h" +#include "video/upd7220.h" + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> compis_hrg_t + +class compis_hrg_t : public device_t, + public device_compis_graphics_card_interface +{ +public: + // construction/destruction + compis_hrg_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + compis_hrg_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual machine_config_constructor device_mconfig_additions() const override; + + UPD7220_DISPLAY_PIXELS_MEMBER( display_pixels ); + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // device_compis_graphics_card_interface overrides + virtual UINT8 pcs6_6_r(address_space &space, offs_t offset) override; + virtual void pcs6_6_w(address_space &space, offs_t offset, UINT8 data) override; + +private: + required_device m_crtc; + required_device m_palette; + required_shared_ptr m_video_ram; + + UINT8 m_unk_video; +}; + + +// ======================> compis_uhrg_t + +class compis_uhrg_t : public compis_hrg_t +{ +public: + // construction/destruction + compis_uhrg_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual machine_config_constructor device_mconfig_additions() const override; +}; + + +// device type definition +extern const device_type COMPIS_HRG; +extern const device_type COMPIS_UHRG; + + + +#endif diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp index eb1f55eb682..5ab75da6644 100644 --- a/src/devices/bus/isa/hdc.cpp +++ b/src/devices/bus/isa/hdc.cpp @@ -366,6 +366,32 @@ int xt_hdc_device::dack_r() return result; } +int xt_hdc_device::dack_rs() +{ + UINT8 result; + + logerror("%s dack_rs(%d %d)\n", machine().describe_context(), hdcdma_read, hdcdma_size); + + if (hdcdma_read == 0) + { + hdcdma_read = 512; + hdcdma_size -= 512; + hdcdma_src = hdcdma_data; + } + + result = *(hdcdma_src++); + + hdcdma_read--; + + if (!no_dma()) + { + m_drq_handler((hdcdma_read) ? 1 : 0); + if(!(hdcdma_read)) pc_hdc_result(0); + } + + return result; +} + void xt_hdc_device::dack_w(int data) @@ -441,7 +467,7 @@ void xt_hdc_device::execute_read() if (!disk) return; - status |= STA_READY; // ready to recieve data + status |= STA_READY; // ready to receive data status &= ~STA_INPUT; status &= ~STA_COMMAND; @@ -456,6 +482,23 @@ void xt_hdc_device::execute_read() } } +void xt_hdc_device::execute_readsbuff() +{ + status |= STA_READY; // ready to receive data + status &= ~STA_INPUT; + status &= ~STA_COMMAND; + + hdcdma_src = hdcdma_data; + hdcdma_read = 512; + hdcdma_size = 512; + + if(!no_dma()) + { + m_drq_handler(1); + if(!hdcdma_size) pc_hdc_result(0); + } +} + void xt_hdc_device::execute_write() @@ -471,7 +514,7 @@ void xt_hdc_device::execute_write() if (!disk) return; - status |= STA_READY; // ready to recieve data + status |= STA_READY; // ready to receive data status |= STA_INPUT; status &= ~STA_COMMAND; @@ -493,7 +536,7 @@ void xt_hdc_device::execute_writesbuff() hdcdma_write = 512; hdcdma_size = 512; - status |= STA_READY; // ready to recieve data + status |= STA_READY; // ready to receive data status |= STA_INPUT; status &= ~STA_COMMAND; @@ -606,6 +649,15 @@ void xt_hdc_device::command() set_error_info = 0; break; + case CMD_READSBUFF: + if (LOG_HDC_STATUS) + { + logerror("%s hdc read sector buffer\n", machine().describe_context()); + } + + execute_readsbuff(); + break; + case CMD_WRITE: case CMD_WRITELONG: get_chsn(); @@ -644,7 +696,6 @@ void xt_hdc_device::command() if(no_dma()) pc_hdc_result(set_error_info); break; - case CMD_READSBUFF: case CMD_RAMDIAG: case CMD_INTERNDIAG: if(no_dma()) pc_hdc_result(set_error_info); @@ -826,7 +877,10 @@ UINT8 xt_hdc_device::data_r() { do { - buffer[data_cnt++] = dack_r(); + if (m_current_cmd == CMD_READSBUFF) + buffer[data_cnt++] = dack_rs(); + else + buffer[data_cnt++] = dack_r(); } while (hdcdma_read); data_cnt = 0; } @@ -957,7 +1011,7 @@ void isa8_hdc_device::device_reset() { dip = ioport("HDD")->read(); - if (ioport("ROM")->read() == 1) + if (ioport("ROM")->read() == 1 && m_hdc->install_rom()) m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc"); } @@ -1002,7 +1056,10 @@ WRITE8_MEMBER( isa8_hdc_device::pc_hdc_w ) UINT8 isa8_hdc_device::dack_r(int line) { - return m_hdc->dack_r(); + if (m_hdc->get_command() == CMD_READSBUFF) + return m_hdc->dack_rs(); + else + return m_hdc->dack_r(); } void isa8_hdc_device::dack_w(int line,UINT8 data) diff --git a/src/devices/bus/isa/hdc.h b/src/devices/bus/isa/hdc.h index e2f3a081624..fd1db1ad65d 100644 --- a/src/devices/bus/isa/hdc.h +++ b/src/devices/bus/isa/hdc.h @@ -38,6 +38,7 @@ public: template static devcb_base &set_drq_handler(device_t &device, _Object object) { return downcast(device).m_drq_handler.set_callback(object); } int dack_r(); + int dack_rs(); void dack_w(int data); void dack_ws(int data); @@ -50,6 +51,7 @@ public: UINT8 status_r(); void set_ready(); UINT8 get_command() { return buffer[0]; } + bool install_rom() { return (m_type != EC1841); } protected: // device-level overrides @@ -61,6 +63,7 @@ protected: int no_dma(void); int get_lbasector(); void execute_read(); + void execute_readsbuff(); void execute_write(); void execute_writesbuff(); void get_drive(); diff --git a/src/devices/bus/ti99x/datamux.cpp b/src/devices/bus/ti99x/datamux.cpp index 996096a1a49..1df66bc5c1e 100644 --- a/src/devices/bus/ti99x/datamux.cpp +++ b/src/devices/bus/ti99x/datamux.cpp @@ -237,8 +237,9 @@ UINT16 ti99_datamux_device::debugger_read(address_space& space, UINT16 addr) UINT8 lval = 0; UINT8 hval = 0; - if ((addr & 0xe000)==0x6000) + if ((addrb & 0xe000)==0x6000) { + m_gromport->romgq_line(ASSERT_LINE); m_gromport->readz(space, addrb+1, &lval); m_gromport->readz(space, addrb, &hval); } @@ -272,8 +273,9 @@ void ti99_datamux_device::debugger_write(address_space& space, UINT16 addr, UINT if (base32k != 0) m_ram16b[(addrb-base32k)>>1] = data; else { - if ((addr & 0xe000)==0x6000) + if ((addrb & 0xe000)==0x6000) { + m_gromport->romgq_line(ASSERT_LINE); m_gromport->write(space, addr+1, data & 0xff); m_gromport->write(space, addr, (data>>8) & 0xff); } diff --git a/src/devices/cpu/alto2/a2curt.cpp b/src/devices/cpu/alto2/a2curt.cpp index 1980408f2b5..cf334a287cf 100644 --- a/src/devices/cpu/alto2/a2curt.cpp +++ b/src/devices/cpu/alto2/a2curt.cpp @@ -37,31 +37,11 @@ void alto2_cpu_device::f2_late_load_csr() /** * @brief curt_activate: called by the CPU when the cursor task becomes active - * - * Shift CSR to xpreg % 16 position to make it easier to - * to handle the word xor in unload_word(). - *
- * xpreg % 16   cursor bits
- *              [ first word   ][  second word ]
- * ----------------------------------------------
- *     0        xxxxxxxxxxxxxxxx0000000000000000
- *     1        0xxxxxxxxxxxxxxxx000000000000000
- *     2        00xxxxxxxxxxxxxxxx00000000000000
- * ...
- *    14        00000000000000xxxxxxxxxxxxxxxx00
- *    15        000000000000000xxxxxxxxxxxxxxxx0
- * 
*/ void alto2_cpu_device::activate_curt() { m_task_wakeup &= ~(1 << m_task); m_dsp.curt_wakeup = false; - - int x = 01777 - m_dsp.xpreg; - UINT32 bits = m_dsp.csr << (16 - (x & 15)); - m_dsp.cursor0 = static_cast(bits >> 16); - m_dsp.cursor1 = static_cast(bits); - m_dsp.curxpos = x / 16; } /** @brief initialize the cursor task F1 and F2 functions */ @@ -79,6 +59,4 @@ void alto2_cpu_device::reset_curt() m_dsp.curt_blocks = false; m_dsp.xpreg = 0; m_dsp.csr = 0; - m_dsp.curxpos = 0; - m_dsp.cursor0 = m_dsp.cursor1 = 0; } diff --git a/src/devices/cpu/alto2/a2disp.cpp b/src/devices/cpu/alto2/a2disp.cpp index e7a0474ea7c..f2c5b06a77f 100644 --- a/src/devices/cpu/alto2/a2disp.cpp +++ b/src/devices/cpu/alto2/a2disp.cpp @@ -245,11 +245,12 @@ static const UINT16 double_bits[256] = { //! update the internal frame buffer and draw the scanline segment if changed void alto2_cpu_device::update_framebuf_word(UINT16* framebuf, int x, int y, UINT16 word) { + int xpword = (m_dsp.xpreg ^ 01777) / 16; // mixing with the cursor - if (x == m_dsp.curxpos + 0) - word ^= m_dsp.cursor0; - if (x == m_dsp.curxpos + 1) - word ^= m_dsp.cursor1; + if (x == xpword++) + word ^= (m_dsp.csr << (m_dsp.xpreg % 16)) >> 16; + if (x == xpword) + word ^= (m_dsp.csr << (m_dsp.xpreg % 16)) & 0xffff; // no change? if (word == framebuf[x]) return; @@ -263,14 +264,14 @@ void alto2_cpu_device::update_framebuf_word(UINT16* framebuf, int x, int y, UINT void alto2_cpu_device::unload_word() { int x = m_unload_word; - int y = ((m_dsp.hlc - m_dsp.vblank) & ~02001) ^ HLC1024; + int y = m_dsp.scanline; - if (y < 0 || y >= ALTO2_DISPLAY_HEIGHT || x >= ALTO2_DISPLAY_VISIBLE_WORDS) + if (y < 0 || y >= ALTO2_DISPLAY_TOTAL_HEIGHT || x >= ALTO2_DISPLAY_VISIBLE_WORDS) { m_unload_time = -1; return; } - UINT16* framebuf = m_dsp.framebuf.get() + y * ALTO2_DISPLAY_SCANLINE_WORDS; + UINT16* framebuf = m_dsp.framebuf.get() + y * ALTO2_DISPLAY_SCANLINE_WORDS; UINT16 word = m_dsp.inverse; UINT8 a38 = m_disp_a38[m_dsp.ra * 16 + m_dsp.wa]; if (FIFO_MBEMPTY(a38)) @@ -329,8 +330,14 @@ void alto2_cpu_device::display_state_machine() { // count horizontal line counters and wrap m_dsp.hlc += 1; - if (m_dsp.hlc > ALTO2_DISPLAY_HLC_END) + if (m_dsp.hlc > ALTO2_DISPLAY_HLC_END) { m_dsp.hlc = ALTO2_DISPLAY_HLC_START; + m_dsp.scanline = 30; + m_dsp.vsync = true; + } else if (m_dsp.hlc == 1024) { + m_dsp.vsync = true; + m_dsp.scanline = 31; + } // wake up the memory refresh task _twice_ on each scanline m_task_wakeup |= 1 << task_mrt; } @@ -342,9 +349,6 @@ void alto2_cpu_device::display_state_machine() if (A66_VBLANK(a66)) { - // Rising edge of VBLANK: remember HLC[1-10] where the VBLANK starts - m_dsp.vblank = m_dsp.hlc & ~(1 << 10); - LOG((this,LOG_DISPL,1, " VBLANK")); // VSYNC is always within VBLANK, thus we handle it only here @@ -357,6 +361,7 @@ void alto2_cpu_device::display_state_machine() */ m_task_wakeup |= 1 << task_dvt; } + m_dsp.inverse = 0xffff; } else { @@ -385,9 +390,10 @@ void alto2_cpu_device::display_state_machine() } if (!A63_HBLANK(a63) && A63_HBLANK(m_dsp.a63)) { + m_dsp.scanline += 2; // Falling edge of a63 HBLANK starts unloading of FIFO words LOG((this,LOG_DISPL,1, " HBLANK\\ UNLOAD")); - m_unload_time = ALTO2_DISPLAY_BITTIME(m_dsp.halfclock ? 32 : 16); + m_unload_time = ALTO2_DISPLAY_BITTIME(m_dsp.halfclock ? 40+32 : 40+16); m_unload_word = 0; } } @@ -470,7 +476,7 @@ void alto2_cpu_device::display_state_machine() */ void alto2_cpu_device::f2_late_evenfield() { - UINT16 r = HLC1024 ^ 1; + UINT16 r = m_dsp.odd ? 0 : 1; LOG((this,LOG_DISPL,2," EVENFIELD branch (%#o | %#o)\n", m_next2, r)); m_next2 |= r; } @@ -499,12 +505,8 @@ void alto2_cpu_device::init_disp() save_item(NAME(m_dsp.dwt_blocks)); save_item(NAME(m_dsp.curt_blocks)); save_item(NAME(m_dsp.curt_wakeup)); - save_item(NAME(m_dsp.vblank)); save_item(NAME(m_dsp.xpreg)); save_item(NAME(m_dsp.csr)); - save_item(NAME(m_dsp.curxpos)); - save_item(NAME(m_dsp.cursor0)); - save_item(NAME(m_dsp.cursor1)); m_disp_a38 = prom_load(machine(), &pl_displ_a38, memregion("displ_a38")->base()); m_disp_a63 = prom_load(machine(), &pl_displ_a63, memregion("displ_a63")->base()); @@ -512,7 +514,7 @@ void alto2_cpu_device::init_disp() m_dsp.hlc = ALTO2_DISPLAY_HLC_START; - m_dsp.framebuf = std::make_unique(ALTO2_DISPLAY_HEIGHT * ALTO2_DISPLAY_SCANLINE_WORDS); + m_dsp.framebuf = std::make_unique(ALTO2_DISPLAY_TOTAL_HEIGHT * ALTO2_DISPLAY_SCANLINE_WORDS); m_dsp.patterns = auto_alloc_array(machine(), UINT8, 65536 * 16); for (int y = 0; y < 65536; y++) { UINT8* dst = m_dsp.patterns + y * 16; @@ -520,7 +522,8 @@ void alto2_cpu_device::init_disp() *dst++ = (~y >> (15 - x)) & 1; } - m_dsp.bitmap = std::make_unique(ALTO2_DISPLAY_WIDTH, ALTO2_DISPLAY_HEIGHT); + // Allocate a bitmap including the V/H blank areas + m_dsp.bitmap = std::make_unique(ALTO2_DISPLAY_TOTAL_WIDTH, ALTO2_DISPLAY_TOTAL_HEIGHT); m_dsp.state = 0; } @@ -537,6 +540,7 @@ void alto2_cpu_device::reset_disp() m_dsp.a66 = 0; m_dsp.setmode = 0; m_dsp.inverse = 0; + m_dsp.scanline = 30; m_dsp.halfclock = false; m_dsp.wa = 0; m_dsp.ra = 0; @@ -544,12 +548,10 @@ void alto2_cpu_device::reset_disp() m_dsp.dwt_blocks = false; m_dsp.curt_blocks = false; m_dsp.curt_wakeup = false; - m_dsp.vblank = 0; + m_dsp.vsync = false; + m_dsp.odd = false; m_dsp.xpreg = 0; m_dsp.csr = 0; - m_dsp.curxpos = 0; - m_dsp.cursor0 = 0; - m_dsp.cursor1 = 0; memset(m_dsp.framebuf.get(), 1, sizeof(UINT16) * ALTO2_DISPLAY_HEIGHT * ALTO2_DISPLAY_SCANLINE_WORDS); } @@ -557,10 +559,7 @@ void alto2_cpu_device::reset_disp() UINT32 alto2_cpu_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { copybitmap(bitmap, *m_dsp.bitmap, 0, 0, 0, 0, cliprect); + m_dsp.vsync = false; + m_dsp.odd = !m_dsp.odd; return 0; } - -void alto2_cpu_device::screen_eof(screen_device &screen, bool state) -{ - // FIXME: do we need this in some way? -} diff --git a/src/devices/cpu/alto2/a2disp.h b/src/devices/cpu/alto2/a2disp.h index 282ccd94f56..823114e3066 100644 --- a/src/devices/cpu/alto2/a2disp.h +++ b/src/devices/cpu/alto2/a2disp.h @@ -39,7 +39,7 @@ * scanlines to the monitor. The frame rate is 60Hz, which is actually the rate * of the half-frames. The rate for full frames is thus 30Hz. */ -#define ALTO2_DISPLAY_TOTAL_HEIGHT ((ALTO2_DISPLAY_HLC_END - ALTO2_DISPLAY_HLC_START) / 2) +#define ALTO2_DISPLAY_TOTAL_HEIGHT ((ALTO2_DISPLAY_HLC_END + 1 - ALTO2_DISPLAY_HLC_START) / 2) /** * @brief display total width, including horizontal blanking @@ -80,7 +80,8 @@ #define ALTO2_DISPLAY_HEIGHT 808 //! Visible width of the display; 38 x 16 bit words - 2 pixels. -#define ALTO2_DISPLAY_WIDTH 606 +//#define ALTO2_DISPLAY_WIDTH 606 +#define ALTO2_DISPLAY_WIDTH 608 //! Visible words per scanline. #define ALTO2_DISPLAY_VISIBLE_WORDS ((ALTO2_DISPLAY_WIDTH+15)/16) @@ -197,7 +198,10 @@ struct { UINT32 hlc; //!< horizontal line counter UINT32 setmode; //!< value written by last SETMODE<- UINT32 inverse; //!< set to 0xffff if line is inverse, 0x0000 otherwise + UINT32 scanline; //!< current scanline bool halfclock; //!< false for normal pixel clock, true for half pixel clock + bool vsync; //!< true after vsync, false when end_of_frame was called + bool odd; //!< true if odd field UINT16 fifo[ALTO2_DISPLAY_FIFO]; //!< display word fifo UINT32 wa; //!< fifo input pointer (write address; 4-bit) UINT32 ra; //!< fifo output pointer (read address; 4-bit) @@ -207,12 +211,8 @@ struct { bool dwt_blocks; //!< set true, if the DWT executed BLOCK bool curt_blocks; //!< set true, if the CURT executed BLOCK bool curt_wakeup; //!< set true, if CURT wakeups are generated - UINT32 vblank; //!< most recent HLC with VBLANK still high (11-bit) UINT32 xpreg; //!< cursor cursor x position register (10-bit) UINT32 csr; //!< cursor shift register (16-bit) - UINT32 curxpos; //!< helper: first cursor word in scanline - UINT32 cursor0; //!< helper: shifted cursor data for left word - UINT32 cursor1; //!< helper: shifted cursor data for right word std::unique_ptr framebuf; //!< array of words of the raw bitmap that is displayed UINT8 *patterns; //!< array of 65536 patterns (16 bytes) with 1 byte per pixel std::unique_ptr bitmap; //!< MAME bitmap with 16 bit indices diff --git a/src/devices/cpu/alto2/a2dwt.cpp b/src/devices/cpu/alto2/a2dwt.cpp index 40bbe456a0e..c3ac954b432 100644 --- a/src/devices/cpu/alto2/a2dwt.cpp +++ b/src/devices/cpu/alto2/a2dwt.cpp @@ -42,25 +42,27 @@ #define FIFO_STOPWAKE(a38) (0 == (a38 & disp_a38_STOPWAKE) ? true : false) /** - * @brief block the display word task + * @brief Block the display word task. */ void alto2_cpu_device::f1_early_dwt_block() { m_dsp.dwt_blocks = true; - /* clear the wakeup for the display word task */ + // Clear the wakeup for the display word task m_task_wakeup &= ~(1 << m_task); LOG((this,LOG_DWT,2," BLOCK %s\n", task_name(m_task))); - /* wakeup the display horizontal task, if it didn't block itself */ + // Wakeup the display horizontal task, if it didn't block itself if (!m_dsp.dht_blocks) m_task_wakeup |= 1 << task_dht; } /** - * @brief load the display data register + * @brief Load the display data register + * Pushes the word on the bus to the display FIFO. + * If the FIFO becomes full, the wakeup flag for task_dwt is reset. */ -void alto2_cpu_device::f2_late_dwt_load_ddr() +void alto2_cpu_device::f2_late_load_ddr() { LOG((this,LOG_DWT,2," DDR<- BUS (%#o)\n", m_bus)); m_dsp.fifo[m_dsp.wa] = m_bus; diff --git a/src/devices/cpu/alto2/a2dwt.h b/src/devices/cpu/alto2/a2dwt.h index 74c6c94939b..788af460369 100644 --- a/src/devices/cpu/alto2/a2dwt.h +++ b/src/devices/cpu/alto2/a2dwt.h @@ -17,7 +17,7 @@ enum { }; void f1_early_dwt_block(); //!< F1 func: block the display word task -void f2_late_dwt_load_ddr(); //!< F2 func: load the display data register +void f2_late_load_ddr(); //!< F2 func: load the display data register void init_dwt(int task = task_dwt); //!< initialize the display word task void exit_dwt(); //!< deinitialize the display word task void reset_dwt(); //!< reset the display word task diff --git a/src/devices/cpu/alto2/a2hw.cpp b/src/devices/cpu/alto2/a2hw.cpp index 9c436433453..5a85c8c8083 100644 --- a/src/devices/cpu/alto2/a2hw.cpp +++ b/src/devices/cpu/alto2/a2hw.cpp @@ -230,7 +230,7 @@ WRITE16_MEMBER( alto2_cpu_device::mouse_buttons_w ) { X_WRBITS(m_hw.utilin,16,13 /** * @brief read the UTILIN port * - * @param addr memory mapped I/O address to be read + * @param offset memory mapped I/O address to be read * @return current value on the UTILIN port */ READ16_MEMBER( alto2_cpu_device::utilin_r ) @@ -250,7 +250,7 @@ READ16_MEMBER( alto2_cpu_device::utilin_r ) /** * @brief read the XBUS port * - * @param addr memory mapped I/O address to be read + * @param offset memory mapped I/O address to be read * @return current value on the XBUS port latch */ READ16_MEMBER( alto2_cpu_device::xbus_r ) diff --git a/src/devices/cpu/alto2/a2ram.cpp b/src/devices/cpu/alto2/a2ram.cpp index f482b82f94f..14fe24dd21e 100644 --- a/src/devices/cpu/alto2/a2ram.cpp +++ b/src/devices/cpu/alto2/a2ram.cpp @@ -7,16 +7,13 @@ *****************************************************************************/ #include "alto2cpu.h" -#define DEBUG_WRTRAM 0 //!< define to 1 to printf disassembled CRAM writes +#define DEBUG_WRTRAM 0 //!< define to 1 to print CRAM writes +#define DEBUG_RDRAM 0 //!< define to 1 to print CRAM reads +#define DEBUG_BRANCH 0 //!< define to 1 to print branching to ROM/RAM //! direct read access to the microcode CRAM #define RD_CRAM(addr) (*reinterpret_cast(m_ucode_cram.get() + addr * 4)) -//! direct write access to the microcode CRAM -#define WR_CRAM(addr,data) do { \ - *reinterpret_cast(m_ucode_cram.get() + addr * 4) = data; \ -} while (0) - /** * @brief read the microcode ROM/RAM halfword * @@ -88,17 +85,30 @@ void alto2_cpu_device::rdram() } m_rdram_flag = false; - if (ALTO2_UCODE_RAM_BASE + addr >= ALTO2_UCODE_SIZE) { + if (m_ucode_ram_base + addr >= m_ucode_size) { value = 0177777; /* ??? */ LOG((this,LOG_CPU,0,"invalid address (%06o)\n", addr)); +#if DEBUG_RDRAM + printf("RD CRAM_BANKSEL=%d RAM%d [%04o] invalid address!\n", + GET_CRAM_BANKSEL(m_cram_addr), bank, wordaddr); +#endif return; } - value = RD_CRAM(addr) ^ ALTO2_UCODE_INVERTED; + value = *reinterpret_cast(m_ucode_cram.get() + addr * 4) ^ ALTO2_UCODE_INVERTED; +#if DEBUG_RDRAM + char buffer[256]; + UINT8* oprom = m_ucode_cram.get() + 4 * wordaddr; + disasm_disassemble(buffer, wordaddr, oprom, oprom, 0); + printf("RD CRAM_BANKSEL=%d RAM%d [%04o] upper:%06o lower:%06o value:%011o '%s'\n", + GET_CRAM_BANKSEL(m_cram_addr), bank, wordaddr, m_myl, m_alu, + value, buffer); +#endif if (GET_CRAM_HALFSEL(m_cram_addr)) { - value = value >> 16; - LOG((this,LOG_CPU,0,"upper:%06o\n", value & 0177777)); + value >>= 16; + LOG((this,LOG_CPU,0,"upper:%06o\n", value)); } else { - LOG((this,LOG_CPU,0,"lower:%06o\n", value & 0177777)); + value &= 0177777; + LOG((this,LOG_CPU,0,"lower:%06o\n", value)); } m_bus &= value; } @@ -115,25 +125,29 @@ void alto2_cpu_device::rdram() */ void alto2_cpu_device::wrtram() { - UINT32 bank = GET_CRAM_BANKSEL(m_cram_addr); - UINT32 wordaddr = GET_CRAM_WORDADDR(m_cram_addr); - UINT32 value = ((m_myl << 16) | m_alu) ^ ALTO2_UCODE_INVERTED; + const UINT32 bank = GET_CRAM_BANKSEL(m_cram_addr); + const UINT32 wordaddr = GET_CRAM_WORDADDR(m_cram_addr); + const UINT32 addr = bank * ALTO2_UCODE_PAGE_SIZE + wordaddr; // write RAM 0,1,2 + const UINT32 value = (m_myl << 16) | m_alu; - UINT32 addr = bank * ALTO2_UCODE_PAGE_SIZE + wordaddr; // write RAM 0,1,2 LOG((this,LOG_CPU,0," wrtram: RAM%d [%04o] upper:%06o lower:%06o", bank, wordaddr, m_myl, m_alu)); -#if DEBUG_WRTRAM - printf("WR CRAM_BANKSEL=%d RAM%d [%04o] upper:%06o lower:%06o\n", - GET_CRAM_BANKSEL(m_cram_addr), bank, wordaddr, m_myl, m_alu); -#endif - m_wrtram_flag = false; - if (ALTO2_UCODE_RAM_BASE + addr >= ALTO2_UCODE_SIZE) { + if (m_ucode_ram_base + addr >= m_ucode_size) { LOG((this,LOG_CPU,0," invalid address %06o\n", addr)); return; } LOG((this,LOG_CPU,0,"\n")); - WR_CRAM(addr, value); + *reinterpret_cast(m_ucode_cram.get() + addr * 4) = value ^ ALTO2_UCODE_INVERTED; + +#if DEBUG_WRTRAM + char buffer[256]; + UINT8* oprom = m_ucode_cram.get() + 4 * wordaddr; + disasm_disassemble(buffer, wordaddr, oprom, oprom, 0); + printf("WR CRAM_BANKSEL=%d RAM%d [%04o] upper:%06o lower:%06o value:%011o '%s'\n", + GET_CRAM_BANKSEL(m_cram_addr), bank, wordaddr, m_myl, m_alu, + value, buffer); +#endif } /** @@ -183,6 +197,9 @@ void alto2_cpu_device::bs_late_load_sreg() void alto2_cpu_device::branch_ROM(const char *from, int page) { (void)from; +#if DEBUG_BRANCH + printf("SWMODE: branch from %s to ROM%d (%#o)\n", from, page, m_next2); +#endif m_next2 = (m_next2 & ALTO2_UCODE_PAGE_MASK) + page * ALTO2_UCODE_PAGE_SIZE; LOG((this,LOG_RAM,2," SWMODE: branch from %s to ROM%d (%#o)\n", from, page, m_next2)); } @@ -193,7 +210,10 @@ void alto2_cpu_device::branch_ROM(const char *from, int page) void alto2_cpu_device::branch_RAM(const char *from, int page) { (void)from; - m_next2 = (m_next2 & ALTO2_UCODE_PAGE_MASK) + ALTO2_UCODE_RAM_BASE + page * ALTO2_UCODE_PAGE_SIZE; +#if DEBUG_BRANCH + printf("SWMODE: branch from %s to RAM%d (%#o)\n", from, page, m_next2); +#endif + m_next2 = (m_next2 & ALTO2_UCODE_PAGE_MASK) + m_ucode_ram_base + page * ALTO2_UCODE_PAGE_SIZE; LOG((this,LOG_RAM,2," SWMODE: branch from %s to RAM%d\n", from, page, m_next2)); } @@ -211,147 +231,152 @@ void alto2_cpu_device::branch_RAM(const char *from, int page) */ void alto2_cpu_device::f1_late_swmode() { - /* currently executing in what page? */ - UINT16 current = m_mpc / ALTO2_UCODE_PAGE_SIZE; + // Currently executing in what CROM/CRAM page? + UINT16 page = m_mpc / ALTO2_UCODE_PAGE_SIZE; + UINT16 next; -#if (ALTO2_UCODE_ROM_PAGES == 1 && ALTO2_UCODE_RAM_PAGES == 1) - switch (current) { - case 0: - branch_RAM("ROM0", 0); - break; - case 1: - branch_ROM("RAM0", 0); - break; - default: - fatal(1, "Impossible current mpc %d\n", current); - } -#endif -#if (ALTO2_UCODE_ROM_PAGES == 2 && ALTO2_UCODE_RAM_PAGES == 1) - UINT16 next = X_RDBITS(m_next2,10,1,1); - - switch (current) { - case 0: /* ROM0 to RAM0 or ROM1 */ - switch (next) { + switch (m_cram_config) { + case 1: // 1K CROM, 1K CRAM + switch (page) { case 0: branch_RAM("ROM0", 0); break; case 1: - branch_ROM("ROM0", 1); - break; - default: - fatal(1, "Impossible next %d\n", next); - } - break; - case 1: /* ROM1 to ROM0 or RAM0 */ - switch (next) { - case 0: - branch_ROM("ROM1", 0); - break; - case 1: - branch_RAM("ROM1", 0); - break; - default: - fatal(1, "Impossible next %d\n", next); - } - break; - case 2: /* RAM0 to ROM0 or ROM1 */ - switch (next) { - case 0: branch_ROM("RAM0", 0); break; - case 1: - branch_ROM("RAM0", 1); - break; default: - fatal(1, "Impossible next %d\n", next); + fatal(1, "Impossible current mpc %u\n", page); } break; - default: - fatal(1, "Impossible current mpc %d\n", current); - } -#endif -#if (ALTO2_UCODE_ROM_PAGES == 1 && ALTO2_UCODE_RAM_PAGES == 3) - UINT16 next = X_RDBITS(m_next2,10,1,2); - switch (current) { - case 0: /* ROM0 to RAM0, RAM2, RAM1, RAM0 */ - switch (next) { - case 0: - branch_RAM("ROM0", 0); + case 2: // 2K CROM, 1K CRAM + next = X_RDBITS(m_next2,10,1,1); + switch (page) { + case 0: /* ROM0 to RAM0 or ROM1 */ + switch (next) { + case 0: + branch_RAM("ROM0", 0); + break; + case 1: + branch_ROM("ROM0", 1); + break; + default: + fatal(1, "Impossible next %u\n", next); + } break; - case 1: - branch_RAM("ROM0", 2); + case 1: /* ROM1 to ROM0 or RAM0 */ + switch (next) { + case 0: + branch_ROM("ROM1", 0); + break; + case 1: + branch_RAM("ROM1", 0); + break; + default: + fatal(1, "Impossible next %u\n", next); + } break; - case 2: - branch_RAM("ROM0", 1); - break; - case 3: - branch_RAM("ROM0", 0); + case 2: /* RAM0 to ROM0 or ROM1 */ + switch (next) { + case 0: + branch_ROM("RAM0", 0); + break; + case 1: + branch_ROM("RAM0", 1); + break; + default: + fatal(1, "Impossible next %u\n", next); + } break; default: - fatal(1, "Impossible next %d\n", next); + fatal(1, "Impossible current mpc %u\n", page); } break; - case 1: /* RAM0 to ROM0, RAM2, RAM1, RAM1 */ - switch (next) { - case 0: - branch_ROM("RAM0", 0); + + case 3: // 1K CROM, 3K CRAM + next = X_RDBITS(m_next2,10,1,2); + + switch (page) { + case 0: /* ROM0 to RAM0, RAM2, RAM1, RAM0 */ + switch (next) { + case 0: + branch_RAM("ROM0", 0); + break; + case 1: + branch_RAM("ROM0", 2); + break; + case 2: + branch_RAM("ROM0", 1); + break; + case 3: + branch_RAM("ROM0", 0); + break; + default: + fatal(1, "Impossible next %u\n", next); + } break; - case 1: - branch_RAM("RAM0", 2); + case 1: /* RAM0 to ROM0, RAM2, RAM1, RAM1 */ + switch (next) { + case 0: + branch_ROM("RAM0", 0); + break; + case 1: + branch_RAM("RAM0", 2); + break; + case 2: + branch_RAM("RAM0", 1); + break; + case 3: + branch_RAM("RAM0", 1); + break; + default: + fatal(1, "Impossible next %u\n", next); + } break; - case 2: - branch_RAM("RAM0", 1); + case 2: /* RAM1 to ROM0, RAM2, RAM0, RAM0 */ + switch (next) { + case 0: + branch_ROM("RAM1", 0); + break; + case 1: + branch_RAM("RAM1", 2); + break; + case 2: + branch_RAM("RAM1", 0); + break; + case 3: + branch_RAM("RAM1", 0); + break; + default: + fatal(1, "Impossible next %u\n", next); + } break; - case 3: - branch_RAM("RAM0", 1); + case 3: /* RAM2 to ROM0, RAM1, RAM0, RAM0 */ + switch (next) { + case 0: + branch_ROM("RAM2", 0); + break; + case 1: + branch_RAM("RAM2", 1); + break; + case 2: + branch_RAM("RAM2", 0); + break; + case 3: + branch_RAM("RAM2", 0); + break; + default: + fatal(1, "Impossible next %u\n", next); + } break; default: - fatal(1, "Impossible next %d\n", next); - } - break; - case 2: /* RAM1 to ROM0, RAM2, RAM0, RAM0 */ - switch (next) { - case 0: - branch_ROM("RAM1", 0); - break; - case 1: - branch_RAM("RAM1", 2); - break; - case 2: - branch_RAM("RAM1", 0); - break; - case 3: - branch_RAM("RAM1", 0); - break; - default: - fatal(1, "Impossible next %d\n", next); - } - break; - case 3: /* RAM2 to ROM0, RAM1, RAM0, RAM0 */ - switch (next) { - case 0: - branch_ROM("RAM2", 0); - break; - case 1: - branch_RAM("RAM2", 1); - break; - case 2: - branch_RAM("RAM2", 0); - break; - case 3: - branch_RAM("RAM2", 0); - break; - default: - fatal(1, "Impossible next %d\n", next); + fatal(1, "Impossible current mpc %u\n", page); } break; default: - fatal(1, "Impossible current mpc %d\n", current); + fatal(1, "Impossible control ROM/RAM config %u (%u CROM pages, %u CRAM pages)\n", + m_cram_config, m_ucode_rom_pages, m_ucode_ram_pages); } -#else - fatal(1, "Impossible control ROM/RAM combination %d/%d\n", ALTO2_UCODE_ROM_PAGES, ALTO2_UCODE_RAM_PAGES); -#endif } /** @@ -372,8 +397,6 @@ void alto2_cpu_device::f1_late_rdram() LOG((this,LOG_RAM,2," RDRAM\n")); } -#if (ALTO2_UCODE_RAM_PAGES == 3) - /** * @brief f1_load_rmr late: load the reset mode register * @@ -386,16 +409,17 @@ void alto2_cpu_device::f1_late_load_rmr() LOG((this,LOG_RAM,2," RMR<-; BUS (%#o)\n", m_bus)); m_reset_mode = m_bus; } -#else // ALTO2_UCODE_RAM_PAGES != 3 + /** * @brief f1_load_srb late: load the S register bank from BUS[12-14] + * F1=013 corresponds to SRB<- in the emulator, if the RAM size is + * just 1K. It sets the S register bank for the current task. */ void alto2_cpu_device::f1_late_load_srb() { - m_s_reg_bank[m_task] = X_RDBITS(m_bus,16,12,14) % ALTO2_SREG_BANKS; + m_s_reg_bank[m_task] = X_RDBITS(m_bus,16,12,14) % m_sreg_banks; LOG((this,LOG_RAM,2," SRB<-; srb[%d] := %#o\n", m_task, m_s_reg_bank[m_task])); } -#endif /** * @brief RAM related task slots initialization diff --git a/src/devices/cpu/alto2/a2ram.h b/src/devices/cpu/alto2/a2ram.h index 0077ded7a99..62745bdc5bd 100644 --- a/src/devices/cpu/alto2/a2ram.h +++ b/src/devices/cpu/alto2/a2ram.h @@ -7,35 +7,8 @@ *****************************************************************************/ #ifdef ALTO2_DEFINE_CONSTANTS -#if (ALTO2_CRAM_CONFIG==1) -#define ALTO2_UCODE_ROM_PAGES 1 //!< number of microcode ROM pages -#define ALTO2_UCODE_RAM_PAGES 1 //!< number of microcode RAM pages -#elif (ALTO2_CRAM_CONFIG==2) -#define ALTO2_UCODE_ROM_PAGES 2 //!< number of microcode ROM pages -#define ALTO2_UCODE_RAM_PAGES 1 //!< number of microcode RAM pages -#elif (ALTO2_CRAM_CONFIG==3) -#define ALTO2_UCODE_ROM_PAGES 1 //!< number of microcode ROM pages -#define ALTO2_UCODE_RAM_PAGES 3 //!< number of microcode RAM pages -#else -#error "Undefined CROM/CRAM configuration" -#endif - -/** - * \brief number of S register banks - * This depends on the number of RAM pages - * 8 pages in 3K CRAM configuration - * 1 page in 1K CRAM configurations - */ -#if (ALTO2_UCODE_RAM_PAGES == 3) -#define ALTO2_SREG_BANKS 8 -#else -#define ALTO2_SREG_BANKS 1 -#endif - #define ALTO2_UCODE_PAGE_SIZE 02000 //!< number of words of microcode #define ALTO2_UCODE_PAGE_MASK (ALTO2_UCODE_PAGE_SIZE-1) //!< mask for microcode ROM/RAM address -#define ALTO2_UCODE_SIZE ((ALTO2_UCODE_ROM_PAGES + ALTO2_UCODE_RAM_PAGES) * ALTO2_UCODE_PAGE_SIZE) //!< total number of words of microcode -#define ALTO2_UCODE_RAM_BASE (ALTO2_UCODE_ROM_PAGES * ALTO2_UCODE_PAGE_SIZE) //!< base offset for the RAM page(s) #else // ALTO2_DEFINE_CONSTANTS #ifndef _A2RAM_H_ @@ -51,11 +24,8 @@ enum { f1_ram_swmode = f1_task_10, //!< f1 10: switch mode to CROM/CRAM in same page f1_ram_wrtram = f1_task_11, //!< f1 11: start WRTRAM cycle f1_ram_rdram = f1_task_12, //!< f1 12: start RDRAM cycle -#if (ALTO2_UCODE_RAM_PAGES == 3) f1_ram_load_rmr = f1_task_13, //!< f1 13: load the reset mode register -#else // ALTO2_UCODE_RAM_PAGES != 3 - f1_ram_load_srb = f1_task_13 //!< f1 14: load the S register bank from BUS[12-14] -#endif + f1_ram_load_srb = f1_task_13 //!< f1 13: load the S register bank from BUS[12-14] }; void bs_early_read_sreg(); //!< bus source: drive bus by S register or M (MYL), if rsel is = 0 @@ -66,11 +36,8 @@ void branch_RAM(const char *from, int page); //!< branch to RAM page void f1_late_swmode(); //!< F1 func: switch to micro program counter BUS[6-15] in other bank void f1_late_wrtram(); //!< F1 func: start WRTRAM cycle void f1_late_rdram(); //!< F1 func: start RDRAM cycle -#if (ALTO2_UCODE_RAM_PAGES == 3) void f1_late_load_rmr(); //!< F1 func: load the reset mode register -#else // ALTO2_UCODE_RAM_PAGES != 3 void f1_late_load_srb(); //!< F1 func: load the S register bank from BUS[12-14] -#endif void init_ram(int task); //!< called by RAM related tasks void exit_ram(); //!< deinitialize the RAM related tasks void reset_ram(); //!< reset the RAM related tasks diff --git a/src/devices/cpu/alto2/alto2cpu.cpp b/src/devices/cpu/alto2/alto2cpu.cpp index ff9b98f66ab..6a4438c973c 100644 --- a/src/devices/cpu/alto2/alto2cpu.cpp +++ b/src/devices/cpu/alto2/alto2cpu.cpp @@ -60,8 +60,7 @@ alto2_log_t logprintf; //************************************************************************** DEVICE_ADDRESS_MAP_START( ucode_map, 32, alto2_cpu_device ) - AM_RANGE(0, ALTO2_UCODE_RAM_BASE - 1) AM_READ ( crom_r ) - AM_RANGE(ALTO2_UCODE_RAM_BASE, ALTO2_UCODE_SIZE - 1) AM_READWRITE( cram_r, cram_w ) + AM_RANGE(0, 4*ALTO2_UCODE_PAGE_SIZE - 1) AM_READWRITE( crom_cram_r, crom_cram_w ) ADDRESS_MAP_END DEVICE_ADDRESS_MAP_START( const_map, 16, alto2_cpu_device ) @@ -126,6 +125,12 @@ alto2_cpu_device::alto2_cpu_device(const machine_config& mconfig, const char* ta m_ucode_config("ucode", ENDIANNESS_BIG, 32, 12, -2 ), m_const_config("const", ENDIANNESS_BIG, 16, 8, -1 ), m_iomem_config("iomem", ENDIANNESS_BIG, 16, 17, -1 ), + m_cram_config(2), + m_ucode_rom_pages(1), + m_ucode_ram_pages(2), + m_ucode_ram_base(ALTO2_UCODE_PAGE_SIZE), + m_ucode_size(3*ALTO2_UCODE_PAGE_SIZE), + m_sreg_banks(1), m_ucode_crom(nullptr), m_const_data(nullptr), m_icount(0), @@ -471,10 +476,8 @@ static const prom_load_t pl_ucode[] = { /* dmap */ DMAP_DEFAULT, /* dand */ KEEP, /* type */ sizeof(UINT32) - } - -#if (ALTO2_UCODE_ROM_PAGES > 1) - , + }, + // NOTE: the Mesa 5.1 ucode PROM may be used as RAM, if m_cram_config == 3 { // 02000-03777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)' "xm51.u54", nullptr, @@ -595,7 +598,6 @@ static const prom_load_t pl_ucode[] = { /* dand */ KEEP, /* type */ sizeof(UINT32) } -#endif // (UCODE_ROM_PAGES > 1) }; /** @@ -811,13 +813,14 @@ void alto2_cpu_device::device_start() // get a pointer to the IO address space m_iomem = &space(AS_2); - // decode ALTO2_UCODE_PAGES = 1 or 2 pages of micro code PROMs to CROM - m_ucode_crom = prom_load(machine(), pl_ucode, memregion("ucode_proms")->base(), ALTO2_UCODE_ROM_PAGES, 8); + // Decode 2 pages of micro code PROMs to CROM + // If m_cram_config == 1 or 3, only the first page will be used + m_ucode_crom = prom_load(machine(), pl_ucode, memregion("ucode_proms")->base(), 2, 8); - // allocate micro code CRAM - m_ucode_cram = std::make_unique(sizeof(UINT32) * ALTO2_UCODE_RAM_PAGES * ALTO2_UCODE_PAGE_SIZE); + // allocate micro code CRAM for max 3 pages + m_ucode_cram = std::make_unique(sizeof(UINT32) * 3 * ALTO2_UCODE_PAGE_SIZE); // fill with the micro code inverted bits value - for (offs_t offset = 0; offset < ALTO2_UCODE_RAM_PAGES * ALTO2_UCODE_PAGE_SIZE; offset++) + for (offs_t offset = 0; offset < 3 * ALTO2_UCODE_PAGE_SIZE; offset++) *reinterpret_cast(m_ucode_cram.get() + offset * 4) = ALTO2_UCODE_INVERTED; // decode constant PROMs to m_const_data @@ -1015,22 +1018,20 @@ void alto2_cpu_device::state_string_export(const device_state_entry &entry, std: } } -//! read microcode CROM -READ32_MEMBER ( alto2_cpu_device::crom_r ) +//! read microcode CROM or CRAM +READ32_MEMBER ( alto2_cpu_device::crom_cram_r ) { - return *reinterpret_cast(m_ucode_crom + offset * 4); + if (offset < m_ucode_ram_base) + return *reinterpret_cast(m_ucode_crom + offset * 4); + return *reinterpret_cast(m_ucode_cram.get() + (offset - m_ucode_ram_base) * 4); } -//! read microcode CRAM -READ32_MEMBER ( alto2_cpu_device::cram_r ) +//! write microcode CROM or CRAM (CROM of course can't be written) +WRITE32_MEMBER( alto2_cpu_device::crom_cram_w ) { - return *reinterpret_cast(m_ucode_cram.get() + offset * 4); -} - -//! write microcode CRAM -WRITE32_MEMBER( alto2_cpu_device::cram_w ) -{ - *reinterpret_cast(m_ucode_cram.get() + offset * 4) = data; + if (offset < m_ucode_ram_base) + return; + *reinterpret_cast(m_ucode_cram.get() + (offset - m_ucode_ram_base) * 4) = data; } //! read constants PROM @@ -1040,9 +1041,9 @@ READ16_MEMBER ( alto2_cpu_device::const_r ) } //! direct read access to the microcode CROM or CRAM -#define RD_UCODE(addr) (addr < ALTO2_UCODE_RAM_BASE ? \ +#define RD_UCODE(addr) (addr < m_ucode_ram_base ? \ *reinterpret_cast(m_ucode_crom + addr * 4) : \ - *reinterpret_cast(m_ucode_cram.get() + (addr - ALTO2_UCODE_RAM_BASE) * 4)) + *reinterpret_cast(m_ucode_cram.get() + (addr - m_ucode_ram_base) * 4)) //------------------------------------------------- // device_reset - device-specific reset @@ -1055,6 +1056,7 @@ void alto2_cpu_device::device_reset() ioport_port* etherid = ioport(":ETHERID"); if (etherid) m_ether_id = etherid->read() & 0377; + // call all sub-devices' reset_... reset_memory(); reset_disp(); @@ -2268,13 +2270,18 @@ UINT32 alto2_cpu_device::alu_74181(UINT32 a, UINT32 b, UINT8 smc) /** @brief flag that tells wheter operation was 0: arithmetic (M=0) or 1: logic (M=1) */ #define ALUM A10_ALUM -/** @brief execute the CPU for at most nsecs nano seconds */ +/** @brief execute the CPU for the number of cycles in m_icount */ void alto2_cpu_device::execute_run() { m_next = m_task_mpc[m_task]; // get current task's next mpc and address modifier m_next2 = m_task_next2[m_task]; do { + if (m_dsp.vsync) { + // synchronizing to the vsync signal + continue; + } + m_mpc = m_next; // next instruction's micro program counter m_mir = RD_UCODE(m_mpc); // fetch the micro code @@ -2283,15 +2290,16 @@ void alto2_cpu_device::execute_run() debugger_instruction_hook(this, m_mpc); m_cycle++; - if (f1() == f1_load_mar && check_mem_load_mar_stall(m_rsel)) { LOG((this,LOG_CPU,3, " MAR<- stall\n")); continue; } + if (f2() == f2_load_md && check_mem_write_stall()) { LOG((this,LOG_CPU,3, " MD<- stall\n")); continue; } + /* * Bus source decoding is not performed if f1 == f1_const * or f2 == f2_const. These functions use the MIR BS field to @@ -2320,33 +2328,32 @@ void alto2_cpu_device::execute_run() // The constant memory is gated to the bus by F1 == f1_const, F2 == f2_const, or BS >= 4 if (!do_bs || bs() >= bs_task_4) { const UINT32 addr = 8 * m_rsel + bs(); - // FIXME: is the format of m_const_data endian safe? const UINT16 data = m_const_data[2*addr] | (m_const_data[2*addr+1] << 8); m_bus &= data; LOG((this,LOG_CPU,2," %#o; BUS &= %#o CONST[%03o]\n", m_bus, data, addr)); } /* - * early F2 function has to be called before early BS, + * Early F2 function has to be called before early BS, * because the emulator task F2 acsource or acdest may - * change the m_rsel + * change the value of m_rsel */ switch (f2()) { - case f2_task_12: // f2 12 task specific + case f2_task_12: // f2 12 task specific switch (m_task) { case task_emu: // emulator task f2_early_load_dns(); break; } break; - case f2_task_13: // f2 13 task specific + case f2_task_13: // f2 13 task specific switch (m_task) { case task_emu: // emulator task f2_early_acdest(); break; } break; - case f2_task_16: // f2 16 task specific + case f2_task_16: // f2 16 task specific switch (m_task) { case task_emu: // emulator task f2_early_acsource(); @@ -2366,22 +2373,22 @@ void alto2_cpu_device::execute_run() break; case bs_task_3: // BUS source is task specific switch (m_task) { - case task_emu: // emulator task + case task_emu: // emulator task bs_early_read_sreg(); break; - case task_ksec: // disk sector task - case task_kwd: // disk word task + case task_ksec: // disk sector task + case task_kwd: // disk word task bs_early_read_kstat(); break; - case task_ether: // ethernet task + case task_ether: // ethernet task bs_early_eidfct(); break; - case task_mrt: // memory refresh task - case task_dwt: // display word task - case task_curt: // cursor task - case task_dht: // display horizontal task - case task_dvt: // display vertical task - case task_part: // parity task + case task_mrt: // memory refresh task + case task_dwt: // display word task + case task_curt: // cursor task + case task_dht: // display horizontal task + case task_dvt: // display vertical task + case task_part: // parity task break; default: bs_early_bad(); @@ -2389,20 +2396,20 @@ void alto2_cpu_device::execute_run() break; case bs_task_4: // BUS source is task specific switch (m_task) { - case task_emu: // emulator task + case task_emu: // emulator task bs_early_load_sreg(); break; - case task_ksec: // disk sector task - case task_kwd: // disk word task + case task_ksec: // disk sector task + case task_kwd: // disk word task bs_early_read_kdata(); break; - case task_ether: // ethernet task - case task_mrt: // memory refresh task - case task_dwt: // display word task - case task_curt: // cursor task - case task_dht: // display horizontal task - case task_dvt: // display vertical task - case task_part: // parity task + case task_ether: // ethernet task + case task_mrt: // memory refresh task + case task_dwt: // display word task + case task_curt: // cursor task + case task_dht: // display horizontal task + case task_dvt: // display vertical task + case task_part: // parity task break; default: bs_early_bad(); @@ -2414,9 +2421,9 @@ void alto2_cpu_device::execute_run() case bs_mouse: // BUS source is mouse data bs_early_mouse(); break; - case bs_disp: // BUS source displacement (emulator task) + case bs_disp: // BUS source displacement (emulator task) switch (m_task) { - case task_emu: // emulator task + case task_emu: // emulator task bs_early_emu_disp(); break; default: @@ -2428,10 +2435,10 @@ void alto2_cpu_device::execute_run() // early F1 function switch (f1()) { - case f1_task: // f1 02 task switch + case f1_task: // f1 02 task switch f1_early_task(); break; - case f1_block: // f1 03 task block + case f1_block: // f1 03 task block switch (m_task) { case task_emu: // emulator task f1_early_emu_block(); @@ -2466,28 +2473,28 @@ void alto2_cpu_device::execute_run() } break; - case f1_task_13: // f1 13 task specific + case f1_task_13: // f1 13 task specific switch (m_task) { case task_ether: // ethernet task f1_early_eilfct(); break; } break; - case f1_task_14: // f1 14 task specific + case f1_task_14: // f1 14 task specific switch (m_task) { case task_ether: // ethernet task f1_early_epfct(); break; } break; - case f1_task_16: // f1 16 task specific + case f1_task_16: // f1 16 task specific switch (m_task) { case task_emu: // emulator task f1_early_rsnf(); break; } break; - case f1_task_17: // f1 17 task specific + case f1_task_17: // f1 17 task specific switch (m_task) { case task_emu: // emulator task f1_early_startf(); @@ -2520,27 +2527,27 @@ void alto2_cpu_device::execute_run() // late F1 function call now switch (f1()) { - case f1_load_mar: // f1 01 load memory address register + case f1_load_mar: // f1 01 load memory address register f1_late_load_mar(); break; - case f1_l_lsh_1: // f1 04 left shift L once + case f1_l_lsh_1: // f1 04 left shift L once f1_late_l_lsh_1(); break; - case f1_l_rsh_1: // f1 05 right shift L once + case f1_l_rsh_1: // f1 05 right shift L once f1_late_l_rsh_1(); break; - case f1_l_lcy_8: // f1 06 cycle L 8 times + case f1_l_lcy_8: // f1 06 cycle L 8 times f1_late_l_lcy_8(); break; - case f1_task_10: // f1 10 task specific + case f1_task_10: // f1 10 task specific switch (m_task) { case task_emu: // emulator task f1_late_swmode(); break; } break; - case f1_task_11: // f1 11 task specific + case f1_task_11: // f1 11 task specific switch (m_task) { case task_emu: // emulator task f1_late_wrtram(); @@ -2551,7 +2558,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f1_task_12: // f1 12 task specific + case f1_task_12: // f1 12 task specific switch (m_task) { case task_emu: // emulator task f1_late_rdram(); @@ -2562,14 +2569,13 @@ void alto2_cpu_device::execute_run() break; } break; - case f1_task_13: // f1 13 task specific + case f1_task_13: // f1 13 task specific switch (m_task) { case task_emu: // emulator task -#if (ALTO2_UCODE_RAM_PAGES == 3) - f1_late_load_rmr(); -#else - f1_late_load_srb(); -#endif + if (m_cram_config == 3) // 3K CRAM available? + f1_late_load_rmr(); + else + f1_late_load_srb(); break; case task_ksec: // disk sector task case task_kwd: // disk word task @@ -2577,7 +2583,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f1_task_14: // f1 14 task specific + case f1_task_14: // f1 14 task specific switch (m_task) { case task_ksec: // disk sector task case task_kwd: // disk word task @@ -2585,7 +2591,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f1_task_15: // f1 15 task specific + case f1_task_15: // f1 15 task specific switch (m_task) { case task_emu: // emulator task f1_late_emu_load_esrb(); @@ -2599,7 +2605,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f1_task_16: // f1 16 task specific + case f1_task_16: // f1 16 task specific switch (m_task) { case task_ksec: // disk sector task case task_kwd: // disk word task @@ -2607,7 +2613,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f1_task_17: // f1 17 task specific + case f1_task_17: // f1 17 task specific switch (m_task) { case task_ksec: // disk sector task case task_kwd: // disk word task @@ -2619,26 +2625,26 @@ void alto2_cpu_device::execute_run() // late F2 function call now switch (f2()) { - case f2_bus_eq_zero: // f2 01 branch on bus equals 0 + case f2_bus_eq_zero: // f2 01 branch on bus equals 0 f2_late_bus_eq_zero(); break; - case f2_shifter_lt_zero: // f2 02 branch on shifter less than 0 + case f2_shifter_lt_zero: // f2 02 branch on shifter less than 0 f2_late_shifter_lt_zero(); break; - case f2_shifter_eq_zero: // f2 03 branch on shifter equals 0 + case f2_shifter_eq_zero: // f2 03 branch on shifter equals 0 f2_late_shifter_eq_zero(); break; - case f2_bus: // f2 04 branch on BUS[6-15] + case f2_bus: // f2 04 branch on BUS[6-15] f2_late_bus(); break; - case f2_alucy: // f2 05 branch on (latched) ALU carry + case f2_alucy: // f2 05 branch on (latched) ALU carry f2_late_alucy(); break; - case f2_load_md: // f2 06 load memory data + case f2_load_md: // f2 06 load memory data f2_late_load_md(); break; - case f2_task_10: // f2 10 task specific + case f2_task_10: // f2 10 task specific switch (m_task) { case task_emu: // emulator task f2_late_busodd(); @@ -2651,7 +2657,7 @@ void alto2_cpu_device::execute_run() f2_late_eodfct(); break; case task_dwt: // display word task - f2_late_dwt_load_ddr(); + f2_late_load_ddr(); break; case task_curt: // cursor task f2_late_load_xpreg(); @@ -2664,7 +2670,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f2_task_11: // f2 11 task specific + case f2_task_11: // f2 11 task specific switch (m_task) { case task_emu: // emulator task f2_late_magic(); @@ -2684,7 +2690,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f2_task_12: // f2 12 task specific + case f2_task_12: // f2 12 task specific switch (m_task) { case task_emu: // emulator task f2_late_load_dns(); @@ -2698,7 +2704,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f2_task_13: // f2 13 task specific + case f2_task_13: // f2 13 task specific switch (m_task) { case task_ksec: // disk sector task case task_kwd: // disk word task @@ -2709,7 +2715,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f2_task_14: // f2 14 task specific + case f2_task_14: // f2 14 task specific switch (m_task) { case task_emu: // emulator task f2_late_load_ir(); @@ -2723,7 +2729,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f2_task_15: // f2 15 task specific + case f2_task_15: // f2 15 task specific switch (m_task) { case task_emu: // emulator task f2_late_idisp(); @@ -2737,7 +2743,7 @@ void alto2_cpu_device::execute_run() break; } break; - case f2_task_16: // f2 16 task specific + case f2_task_16: // f2 16 task specific switch (m_task) { case task_emu: // emulator task f2_late_acsource(); @@ -2761,7 +2767,7 @@ void alto2_cpu_device::execute_run() break; case bs_task_4: // BUS source is task specific switch (m_task) { - case task_emu: // emulator task + case task_emu: // emulator task bs_late_load_sreg(); break; } @@ -2771,7 +2777,7 @@ void alto2_cpu_device::execute_run() // update T register, if LOADT is set if (loadt()) { - m_cram_addr = m_alu; // latch CRAM address + m_cram_addr = m_alu; // latch CRAM address if (flags & TSELECT) { m_t = m_alu; // T source is ALU LOG((this,LOG_CPU,2, " T<- ALU (%#o)\n", m_alu)); @@ -2783,7 +2789,7 @@ void alto2_cpu_device::execute_run() // update L register and LALUC0 if LOADL is set if (loadl()) { - m_l = m_alu; // load L from ALU + m_l = m_alu; // load L from ALU if (flags & ALUM) { m_laluc0 = 0; // logic operation - put 0 into latched carry LOG((this,LOG_CPU,2, " L<- ALU (%#o); LALUC0<- %o\n", m_alu, 0)); @@ -2794,7 +2800,8 @@ void alto2_cpu_device::execute_run() // update M (MYL) register, if a RAM related task is active if (m_ram_related[m_task]) { m_myl = m_alu; // load M from ALU, if 'GOODTASK' - m_s[m_s_reg_bank[m_task]][0] = m_alu; // also writes to S[bank][0], which can't be read + // also writes to S[_task][0], which can't be read + m_s[m_s_reg_bank[m_task]][0] = m_alu; LOG((this,LOG_CPU,2, " M<- ALU (%#o)\n", m_alu)); } } @@ -2811,14 +2818,19 @@ void alto2_cpu_device::execute_run() m_task_next2[m_task] = m_next2; m_task = m_next_task; LOG((this,LOG_CPU,1, "task switch to %02o:%s (cycle %lld)\n", m_task, task_name(m_task), cycle())); - m_next = m_task_mpc[m_task]; // get new task's mpc - m_next2 = m_task_next2[m_task]; // get address modifier after task switch (needed?) + // Get the new task's mpc + m_next = m_task_mpc[m_task]; + // Get address modifier after task switch. + m_next2 = m_task_next2[m_task]; - // let the task know it becomes active now and (most probably) reset the wakeup + // Let the task know it becomes active now and + // (most probably) reset the wakeup switch (m_task) { case task_emu: // emulator task + // No activate_emu(); break; case task_ksec: // disk sector task + // No activate_ksec(); break; case task_ether: // ethernet task activate_eth(); @@ -2827,6 +2839,7 @@ void alto2_cpu_device::execute_run() activate_mrt(); break; case task_dwt: // display word task + // No activate_dwt(); break; case task_curt: // cursor task activate_curt(); @@ -2841,6 +2854,7 @@ void alto2_cpu_device::execute_run() activate_part(); break; case task_kwd: // disk word task + // No activate_kwd(); break; } } @@ -2849,8 +2863,8 @@ void alto2_cpu_device::execute_run() if (m_dsp_time >= 0) { /** * Subtract the microcycle time from the display time accu. - * If it underflows, call the display state machine and add - * the time for 32(!) pixel clocks to the accu. + * If it underflows, call the display state machine which + * adds the time for 32 pixel clocks to the accu. * This is very close to every seventh CPU cycle */ m_dsp_time -= ALTO2_UCYCLE; @@ -2863,7 +2877,7 @@ void alto2_cpu_device::execute_run() * Subtract the microcycle time from the unload time accu. * If it underflows, call the unload word function which adds * the time for 16 or 32 pixel clocks to the accu, or ends - * the unloading by leaving m_unload_time at -1. + * the FIFO unloading by leaving m_unload_time at -1. */ m_unload_time -= ALTO2_UCYCLE; if (m_unload_time < 0) @@ -2874,7 +2888,7 @@ void alto2_cpu_device::execute_run() /** * Subtract the microcycle time from the bitclk time accu. * If it underflows, call the disk bitclk function which adds - * the time for one bit as clocks to the accu, or ends + * the time for one bit as clock cycles to the accu, or ends * the bitclk sequence by leaving m_bitclk_time at -1. */ m_bitclk_time -= ALTO2_UCYCLE; @@ -2882,7 +2896,7 @@ void alto2_cpu_device::execute_run() } } while (m_icount-- > 0); - /* save this task's mpc and address modifier */ + // Save this task's mpc and address modifier m_task_mpc[m_task] = m_next; m_task_next2[m_task] = m_next2; } @@ -2900,7 +2914,7 @@ void alto2_cpu_device::hard_reset() // every task starts at mpc = task number, in either ROM0 or RAM0 m_task_mpc[task] = (m_ctl2k_u38[task] >> 4) ^ 017; if (0 == (m_reset_mode & (1 << task))) - m_task_mpc[task] |= ALTO2_UCODE_RAM_BASE; + m_task_mpc[task] |= m_ucode_ram_base; } init_memory(); @@ -2931,11 +2945,36 @@ void alto2_cpu_device::hard_reset() /** @brief software initiated reset (STARTF) */ void alto2_cpu_device::soft_reset() { + // Setup the CROM and CRAM configuration + ioport_port* config = ioport(":CONFIG"); + if (config) + m_cram_config = (config->read() >> 1) & 3; + switch (m_cram_config) { + case 0: // invalid, default to 1 + case 1: // 1K CROM, 1K CRAM, 1 S register bank + m_ucode_rom_pages = 1; + m_ucode_ram_pages = 1; + m_sreg_banks = 1; + break; + case 2: // 2K CROM, 1K CRAM, 1 S register bank + m_ucode_rom_pages = 2; + m_ucode_ram_pages = 1; + m_sreg_banks = 1; + break; + case 3: // 1K CROM, 3K CRAM, 8 S register banks + m_ucode_rom_pages = 1; + m_ucode_ram_pages = 3; + m_sreg_banks = 8; + break; + } + m_ucode_ram_base = m_ucode_rom_pages * ALTO2_UCODE_PAGE_SIZE; + m_ucode_size = (m_ucode_rom_pages + m_ucode_ram_pages) * ALTO2_UCODE_PAGE_SIZE; + for (int task = 0; task < ALTO2_TASKS; task++) { // every task starts at mpc = task number, in either ROM0 or RAM0 m_task_mpc[task] = (m_ctl2k_u38[task] >> 4) ^ 017; if (0 == (m_reset_mode & (1 << task))) - m_task_mpc[task] |= ALTO2_UCODE_RAM_BASE; + m_task_mpc[task] |= m_ucode_ram_base; } m_next2_task = task_emu; // switch to task 0 (emulator) m_reset_mode = 0xffff; // all tasks start in ROM0 again diff --git a/src/devices/cpu/alto2/alto2cpu.h b/src/devices/cpu/alto2/alto2cpu.h index 823500a56cd..3993e79d816 100644 --- a/src/devices/cpu/alto2/alto2cpu.h +++ b/src/devices/cpu/alto2/alto2cpu.h @@ -46,11 +46,6 @@ enum { #define ALTO2_DEBUG 1 #endif -#ifndef ALTO2_CRAM_CONFIG -//! Use default CROM/CRAM configuration 2. -#define ALTO2_CRAM_CONFIG 2 -#endif - //!< Define to 1 to use the F9318 priority encoder code (broken). #define USE_PRIO_F9318 0 @@ -200,9 +195,6 @@ public: //! update the screen bitmap UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - //! screen VBLANK handler - void screen_eof(screen_device &screen, bool state); - DECLARE_ADDRESS_MAP( ucode_map, 32 ); DECLARE_ADDRESS_MAP( const_map, 16 ); DECLARE_ADDRESS_MAP( iomem_map, 16 ); @@ -255,18 +247,22 @@ private: address_space* m_iomem; + UINT32 m_cram_config; //!< CROM/CRAM configuration (1 .. 3) + UINT32 m_ucode_rom_pages; //!< Number of CROM pages; derived from m_cram_config + UINT32 m_ucode_ram_pages; //!< Number of CRAM pages; derived from m_cram_config + UINT32 m_ucode_ram_base; //!< Base offset of the CRAM addresses + UINT32 m_ucode_size; //!< Size of both, CROM and CRAM together + UINT32 m_sreg_banks; //!< Number of S register banks; derived from m_cram_config + UINT8* m_ucode_crom; std::unique_ptr m_ucode_cram; UINT8* m_const_data; - //! read microcode CROM - DECLARE_READ32_MEMBER ( crom_r ); + //! read microcode CROM or CRAM, depending on m_ucode_ram_base + DECLARE_READ32_MEMBER ( crom_cram_r ); - //! read microcode CRAM - DECLARE_READ32_MEMBER ( cram_r ); - - //! write microcode CRAM - DECLARE_WRITE32_MEMBER( cram_w ); + //! write microcode CRAM, depending on m_ucode_ram_base (ignore writes to CROM) + DECLARE_WRITE32_MEMBER( crom_cram_w ); //! read constants PROM DECLARE_READ16_MEMBER ( const_r ); @@ -568,7 +564,7 @@ private: UINT16 m_next; //!< current micro instruction's next UINT16 m_next2; //!< next micro instruction's next UINT16 m_r[ALTO2_REGS]; //!< R register file - UINT16 m_s[ALTO2_SREG_BANKS][ALTO2_REGS]; //!< S register file(s) + UINT16 m_s[8][ALTO2_REGS]; //!< S register file(s) (1 or 8 are used) UINT16 m_bus; //!< wired-AND bus UINT16 m_t; //!< T register UINT16 m_alu; //!< the current ALU diff --git a/src/devices/cpu/alto2/alto2dsm.cpp b/src/devices/cpu/alto2/alto2dsm.cpp index d899cb4f8b5..57571352c53 100644 --- a/src/devices/cpu/alto2/alto2dsm.cpp +++ b/src/devices/cpu/alto2/alto2dsm.cpp @@ -344,7 +344,7 @@ offs_t alto2_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 break; case 7: // put the constant from PROM (RSELECT,BS) on the bus pa = (rsel << 3) | bs; - dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-%05o", const_prom[pa]); + dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-%05o ", const_prom[pa]); break; default: dst += snprintf(dst, len - (size_t)(dst - buffer), "F1_%02o ", f1); @@ -386,6 +386,8 @@ offs_t alto2_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-F2_%02o ", f2); break; } + if (dst > buffer && dst[-1] == ' ') + *--dst = '\0'; return result; } diff --git a/src/devices/cpu/g65816/g65816ds.cpp b/src/devices/cpu/g65816/g65816ds.cpp index 5965da2e3eb..d27dd67b1dc 100644 --- a/src/devices/cpu/g65816/g65816ds.cpp +++ b/src/devices/cpu/g65816/g65816ds.cpp @@ -23,18 +23,81 @@ All rights reserved. #define ADDRESS_65816(A) ((A)&0xffffff) -struct g65816_opcode_struct +namespace { + +class g65816_opcode_struct { - unsigned char name; +public: + const char *name() const + { + return s_opnames[unsigned(m_name)]; + } + + bool is_call() const + { + switch (m_name) + { + case op::JSR: + case op::JSL: + return true; + default: + return false; + } + } + + bool is_return() const + { + switch (m_name) + { + case op::RTI: + case op::RTL: + case op::RTS: + return true; + default: + return false; + } + } + + static const g65816_opcode_struct &get(unsigned char ins) + { + return s_opcodes[ins]; + } + unsigned char flag; unsigned char ea; + +protected: + enum class op : unsigned + { + ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA , + BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX , + CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML , + JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA , + PEA , PEI , PER , PHA , PHB , PHD , PHK , PHP , PHX , PHY , PLA , + PLB , PLD , PLP , PLX , PLY , REP , ROL , ROR , RTI , RTL , RTS , + SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX , + TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY , + TYA , TYX , WAI , WDM , XBA , XCE + }; + + g65816_opcode_struct(op n, unsigned char f, unsigned char e) + : flag(f) + , ea(e) + , m_name(n) + { + } + + op m_name; + + static const char *const s_opnames[]; + static const g65816_opcode_struct s_opcodes[256]; }; enum { IMP , ACC , RELB, RELW, IMM , A , AI , AL , ALX , AX , AXI , AY , D , DI , DIY , DLI , DLIY, DX , DXI , DY , S , SIY , - SIG /*, MVN , MVP , PEA , PEI , PER */ + SIG , MVN , MVP , PEA , PEI , PER }; enum @@ -44,20 +107,7 @@ enum X /* check x bit */ }; -enum -{ - ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA , - BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX , - CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML , - JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA , - PEA , PEI , PER , PHA , PHB , PHD , PHK , PHP , PHX , PHY , PLA , - PLB , PLD , PLP , PLX , PLY , REP , ROL , ROR , RTI , RTL , RTS , - SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX , - TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY , - TYA , TYX , WAI , WDM , XBA , XCE -}; - -static const char *const g_opnames[] = +const char *const g65816_opcode_struct::s_opnames[] = { "ADC", "AND", "ASL", "BCC", "BCS", "BEQ", "BIT", "BMI", "BNE", "BPL", "BRA", "BRK", "BRL", "BVC", "BVS", "CLC", "CLD", "CLI", "CLV", "CMP", "COP", "CPX", @@ -70,74 +120,76 @@ static const char *const g_opnames[] = "TYA", "TYX", "WAI", "WDM", "XBA", "XCE" }; -static const g65816_opcode_struct g_opcodes[256] = +const g65816_opcode_struct g65816_opcode_struct::s_opcodes[256] = { - {BRK, I, SIG }, {ORA, M, DXI }, {COP, I, SIG }, {ORA, M, S }, - {TSB, M, D }, {ORA, M, D }, {ASL, M, D }, {ORA, M, DLI }, - {PHP, I, IMP }, {ORA, M, IMM }, {ASL, M, ACC }, {PHD, I, IMP }, - {TSB, M, A }, {ORA, M, A }, {ASL, M, A }, {ORA, M, AL }, - {BPL, I, RELB}, {ORA, M, DIY }, {ORA, M, DI }, {ORA, M, SIY }, - {TRB, M, D }, {ORA, M, DX }, {ASL, M, DX }, {ORA, M, DLIY}, - {CLC, I, IMP }, {ORA, M, AY }, {INA, I, IMP }, {TCS, I, IMP }, - {TRB, M, A }, {ORA, M, AX }, {ASL, M, AX }, {ORA, M, ALX }, - {JSR, I, A }, {AND, M, DXI }, {JSL, I, AL }, {AND, M, S }, - {BIT, M, D }, {AND, M, D }, {ROL, M, D }, {AND, M, DLI }, - {PLP, I, IMP }, {AND, M, IMM }, {ROL, M, ACC }, {PLD, I, IMP }, - {BIT, M, A }, {AND, M, A }, {ROL, M, A }, {AND, M, AL }, - {BMI, I, RELB}, {AND, M, DIY }, {AND, M, DI }, {AND, M, SIY }, - {BIT, M, DX }, {AND, M, DX }, {ROL, M, DX }, {AND, M, DLIY}, - {SEC, I, IMP }, {AND, M, AY }, {DEA, I, IMP }, {TSC, I, IMP }, - {BIT, M, AX }, {AND, M, AX }, {ROL, M, AX }, {AND, M, ALX }, - {RTI, I, IMP }, {EOR, M, DXI }, {WDM, I, IMP }, {EOR, M, S }, - {MVP, I, MVP }, {EOR, M, D }, {LSR, M, D }, {EOR, M, DLI }, - {PHA, I, IMP }, {EOR, M, IMM }, {LSR, M, ACC }, {PHK, I, IMP }, - {JMP, I, A }, {EOR, M, A }, {LSR, M, A }, {EOR, M, AL }, - {BVC, I, RELB}, {EOR, M, DIY }, {EOR, M, DI }, {EOR, M, SIY }, - {MVN, I, MVN }, {EOR, M, DX }, {LSR, M, DX }, {EOR, M, DLIY}, - {CLI, I, IMP }, {EOR, M, AY }, {PHY, I, IMP }, {TCD, I, IMP }, - {JMP, I, AL }, {EOR, M, AX }, {LSR, M, AX }, {EOR, M, ALX }, - {RTS, I, IMP }, {ADC, M, DXI }, {PER, I, PER }, {ADC, M, S }, - {STZ, M, D }, {ADC, M, D }, {ROR, M, D }, {ADC, M, DLI }, - {PLA, I, IMP }, {ADC, M, IMM }, {ROR, M, ACC }, {RTL, I, IMP }, - {JMP, I, AI }, {ADC, M, A }, {ROR, M, A }, {ADC, M, AL }, - {BVS, I, RELB}, {ADC, M, DIY }, {ADC, M, DI }, {ADC, M, SIY }, - {STZ, M, DX }, {ADC, M, DX }, {ROR, M, DX }, {ADC, M, DLIY}, - {SEI, I, IMP }, {ADC, M, AY }, {PLY, I, IMP }, {TDC, I, IMP }, - {JMP, I, AXI }, {ADC, M, AX }, {ROR, M, AX }, {ADC, M, ALX }, - {BRA, I, RELB}, {STA, M, DXI }, {BRL, I, RELW}, {STA, M, S }, - {STY, X, D }, {STA, M, D }, {STX, X, D }, {STA, M, DLI }, - {DEY, I, IMP }, {BIT, M, IMM }, {TXA, I, IMP }, {PHB, I, IMP }, - {STY, X, A }, {STA, M, A }, {STX, X, A }, {STA, M, AL }, - {BCC, I, RELB}, {STA, M, DIY }, {STA, M, DI }, {STA, M, SIY }, - {STY, X, DX }, {STA, M, DX }, {STX, X, DY }, {STA, M, DLIY}, - {TYA, I, IMP }, {STA, M, AY }, {TXS, I, IMP }, {TXY, I, IMP }, - {STZ, M, A }, {STA, M, AX }, {STZ, M, AX }, {STA, M, ALX }, - {LDY, X, IMM }, {LDA, M, DXI }, {LDX, X, IMM }, {LDA, M, S }, - {LDY, X, D }, {LDA, M, D }, {LDX, X, D }, {LDA, M, DLI }, - {TAY, I, IMP }, {LDA, M, IMM }, {TAX, I, IMP }, {PLB, I, IMP }, - {LDY, X, A }, {LDA, M, A }, {LDX, X, A }, {LDA, M, AL }, - {BCS, I, RELB}, {LDA, M, DIY }, {LDA, M, DI }, {LDA, M, SIY }, - {LDY, X, DX }, {LDA, M, DX }, {LDX, X, DY }, {LDA, M, DLIY}, - {CLV, I, IMP }, {LDA, M, AY }, {TSX, I, IMP }, {TYX, I, IMP }, - {LDY, X, AX }, {LDA, M, AX }, {LDX, X, AY }, {LDA, M, ALX }, - {CPY, X, IMM }, {CMP, M, DXI }, {REP, I, IMM }, {CMP, M, S }, - {CPY, X, D }, {CMP, M, D }, {DEC, M, D }, {CMP, M, DLI }, - {INY, I, IMP }, {CMP, M, IMM }, {DEX, I, IMP }, {WAI, I, IMP }, - {CPY, X, A }, {CMP, M, A }, {DEC, M, A }, {CMP, M, AL }, - {BNE, I, RELB}, {CMP, M, DIY }, {CMP, M, DI }, {CMP, M, SIY }, - {PEI, I, PEI }, {CMP, M, DX }, {DEC, M, DX }, {CMP, M, DLIY}, - {CLD, I, IMP }, {CMP, M, AY }, {PHX, I, IMP }, {STP, I, IMP }, - {JML, I, AI }, {CMP, M, AX }, {DEC, M, AX }, {CMP, M, ALX }, - {CPX, X, IMM }, {SBC, M, DXI }, {SEP, I, IMM }, {SBC, M, S }, - {CPX, X, D }, {SBC, M, D }, {INC, M, D }, {SBC, M, DLI }, - {INX, M, IMP }, {SBC, M, IMM }, {NOP, I, IMP }, {XBA, I, IMP }, - {CPX, X, A }, {SBC, M, A }, {INC, M, A }, {SBC, M, AL }, - {BEQ, I, RELB}, {SBC, M, DIY }, {SBC, M, DI }, {SBC, M, SIY }, - {PEA, I, PEA }, {SBC, M, DX }, {INC, M, DX }, {SBC, M, DLIY}, - {SED, I, IMP }, {SBC, M, AY }, {PLX, I, IMP }, {XCE, I, IMP }, - {JSR, I, AXI }, {SBC, M, AX }, {INC, M, AX }, {SBC, M, ALX } + {op::BRK, I, SIG }, {op::ORA, M, DXI }, {op::COP, I, SIG }, {op::ORA, M, S }, + {op::TSB, M, D }, {op::ORA, M, D }, {op::ASL, M, D }, {op::ORA, M, DLI }, + {op::PHP, I, IMP }, {op::ORA, M, IMM }, {op::ASL, M, ACC }, {op::PHD, I, IMP }, + {op::TSB, M, A }, {op::ORA, M, A }, {op::ASL, M, A }, {op::ORA, M, AL }, + {op::BPL, I, RELB}, {op::ORA, M, DIY }, {op::ORA, M, DI }, {op::ORA, M, SIY }, + {op::TRB, M, D }, {op::ORA, M, DX }, {op::ASL, M, DX }, {op::ORA, M, DLIY}, + {op::CLC, I, IMP }, {op::ORA, M, AY }, {op::INA, I, IMP }, {op::TCS, I, IMP }, + {op::TRB, M, A }, {op::ORA, M, AX }, {op::ASL, M, AX }, {op::ORA, M, ALX }, + {op::JSR, I, A }, {op::AND, M, DXI }, {op::JSL, I, AL }, {op::AND, M, S }, + {op::BIT, M, D }, {op::AND, M, D }, {op::ROL, M, D }, {op::AND, M, DLI }, + {op::PLP, I, IMP }, {op::AND, M, IMM }, {op::ROL, M, ACC }, {op::PLD, I, IMP }, + {op::BIT, M, A }, {op::AND, M, A }, {op::ROL, M, A }, {op::AND, M, AL }, + {op::BMI, I, RELB}, {op::AND, M, DIY }, {op::AND, M, DI }, {op::AND, M, SIY }, + {op::BIT, M, DX }, {op::AND, M, DX }, {op::ROL, M, DX }, {op::AND, M, DLIY}, + {op::SEC, I, IMP }, {op::AND, M, AY }, {op::DEA, I, IMP }, {op::TSC, I, IMP }, + {op::BIT, M, AX }, {op::AND, M, AX }, {op::ROL, M, AX }, {op::AND, M, ALX }, + {op::RTI, I, IMP }, {op::EOR, M, DXI }, {op::WDM, I, IMP }, {op::EOR, M, S }, + {op::MVP, I, MVP }, {op::EOR, M, D }, {op::LSR, M, D }, {op::EOR, M, DLI }, + {op::PHA, I, IMP }, {op::EOR, M, IMM }, {op::LSR, M, ACC }, {op::PHK, I, IMP }, + {op::JMP, I, A }, {op::EOR, M, A }, {op::LSR, M, A }, {op::EOR, M, AL }, + {op::BVC, I, RELB}, {op::EOR, M, DIY }, {op::EOR, M, DI }, {op::EOR, M, SIY }, + {op::MVN, I, MVN }, {op::EOR, M, DX }, {op::LSR, M, DX }, {op::EOR, M, DLIY}, + {op::CLI, I, IMP }, {op::EOR, M, AY }, {op::PHY, I, IMP }, {op::TCD, I, IMP }, + {op::JMP, I, AL }, {op::EOR, M, AX }, {op::LSR, M, AX }, {op::EOR, M, ALX }, + {op::RTS, I, IMP }, {op::ADC, M, DXI }, {op::PER, I, PER }, {op::ADC, M, S }, + {op::STZ, M, D }, {op::ADC, M, D }, {op::ROR, M, D }, {op::ADC, M, DLI }, + {op::PLA, I, IMP }, {op::ADC, M, IMM }, {op::ROR, M, ACC }, {op::RTL, I, IMP }, + {op::JMP, I, AI }, {op::ADC, M, A }, {op::ROR, M, A }, {op::ADC, M, AL }, + {op::BVS, I, RELB}, {op::ADC, M, DIY }, {op::ADC, M, DI }, {op::ADC, M, SIY }, + {op::STZ, M, DX }, {op::ADC, M, DX }, {op::ROR, M, DX }, {op::ADC, M, DLIY}, + {op::SEI, I, IMP }, {op::ADC, M, AY }, {op::PLY, I, IMP }, {op::TDC, I, IMP }, + {op::JMP, I, AXI }, {op::ADC, M, AX }, {op::ROR, M, AX }, {op::ADC, M, ALX }, + {op::BRA, I, RELB}, {op::STA, M, DXI }, {op::BRL, I, RELW}, {op::STA, M, S }, + {op::STY, X, D }, {op::STA, M, D }, {op::STX, X, D }, {op::STA, M, DLI }, + {op::DEY, I, IMP }, {op::BIT, M, IMM }, {op::TXA, I, IMP }, {op::PHB, I, IMP }, + {op::STY, X, A }, {op::STA, M, A }, {op::STX, X, A }, {op::STA, M, AL }, + {op::BCC, I, RELB}, {op::STA, M, DIY }, {op::STA, M, DI }, {op::STA, M, SIY }, + {op::STY, X, DX }, {op::STA, M, DX }, {op::STX, X, DY }, {op::STA, M, DLIY}, + {op::TYA, I, IMP }, {op::STA, M, AY }, {op::TXS, I, IMP }, {op::TXY, I, IMP }, + {op::STZ, M, A }, {op::STA, M, AX }, {op::STZ, M, AX }, {op::STA, M, ALX }, + {op::LDY, X, IMM }, {op::LDA, M, DXI }, {op::LDX, X, IMM }, {op::LDA, M, S }, + {op::LDY, X, D }, {op::LDA, M, D }, {op::LDX, X, D }, {op::LDA, M, DLI }, + {op::TAY, I, IMP }, {op::LDA, M, IMM }, {op::TAX, I, IMP }, {op::PLB, I, IMP }, + {op::LDY, X, A }, {op::LDA, M, A }, {op::LDX, X, A }, {op::LDA, M, AL }, + {op::BCS, I, RELB}, {op::LDA, M, DIY }, {op::LDA, M, DI }, {op::LDA, M, SIY }, + {op::LDY, X, DX }, {op::LDA, M, DX }, {op::LDX, X, DY }, {op::LDA, M, DLIY}, + {op::CLV, I, IMP }, {op::LDA, M, AY }, {op::TSX, I, IMP }, {op::TYX, I, IMP }, + {op::LDY, X, AX }, {op::LDA, M, AX }, {op::LDX, X, AY }, {op::LDA, M, ALX }, + {op::CPY, X, IMM }, {op::CMP, M, DXI }, {op::REP, I, IMM }, {op::CMP, M, S }, + {op::CPY, X, D }, {op::CMP, M, D }, {op::DEC, M, D }, {op::CMP, M, DLI }, + {op::INY, I, IMP }, {op::CMP, M, IMM }, {op::DEX, I, IMP }, {op::WAI, I, IMP }, + {op::CPY, X, A }, {op::CMP, M, A }, {op::DEC, M, A }, {op::CMP, M, AL }, + {op::BNE, I, RELB}, {op::CMP, M, DIY }, {op::CMP, M, DI }, {op::CMP, M, SIY }, + {op::PEI, I, PEI }, {op::CMP, M, DX }, {op::DEC, M, DX }, {op::CMP, M, DLIY}, + {op::CLD, I, IMP }, {op::CMP, M, AY }, {op::PHX, I, IMP }, {op::STP, I, IMP }, + {op::JML, I, AI }, {op::CMP, M, AX }, {op::DEC, M, AX }, {op::CMP, M, ALX }, + {op::CPX, X, IMM }, {op::SBC, M, DXI }, {op::SEP, I, IMM }, {op::SBC, M, S }, + {op::CPX, X, D }, {op::SBC, M, D }, {op::INC, M, D }, {op::SBC, M, DLI }, + {op::INX, M, IMP }, {op::SBC, M, IMM }, {op::NOP, I, IMP }, {op::XBA, I, IMP }, + {op::CPX, X, A }, {op::SBC, M, A }, {op::INC, M, A }, {op::SBC, M, AL }, + {op::BEQ, I, RELB}, {op::SBC, M, DIY }, {op::SBC, M, DI }, {op::SBC, M, SIY }, + {op::PEA, I, PEA }, {op::SBC, M, DX }, {op::INC, M, DX }, {op::SBC, M, DLIY}, + {op::SED, I, IMP }, {op::SBC, M, AY }, {op::PLX, I, IMP }, {op::XCE, I, IMP }, + {op::JSR, I, AXI }, {op::SBC, M, AX }, {op::INC, M, AX }, {op::SBC, M, ALX } }; +} // anonymous namespace + static const UINT8 *base_oprom; static UINT32 base_pc; @@ -206,28 +258,17 @@ unsigned g65816_disassemble(char* buff, unsigned int pc, unsigned int pb, const base_pc = address; instruction = read_8(address); - opcode = g_opcodes + instruction; + opcode = &g65816_opcode_struct::get(instruction); - strcpy(buff, g_opnames[opcode->name]); + strcpy(buff, opcode->name()); ptr = buff + strlen(buff); - switch(opcode->name) - { - case JSR: - case JSL: - dasm_flags = DASMFLAG_STEP_OVER; - break; - - case RTI: - case RTL: - case RTS: - dasm_flags = DASMFLAG_STEP_OUT; - break; - - default: - dasm_flags = 0; - break; - } + if (opcode->is_call()) + dasm_flags = DASMFLAG_STEP_OVER; + else if (opcode->is_return()) + dasm_flags = DASMFLAG_STEP_OUT; + else + dasm_flags = 0; switch(opcode->ea) { diff --git a/src/devices/cpu/i86/i186.cpp b/src/devices/cpu/i86/i186.cpp index 6f26f9faabe..f79505f0353 100644 --- a/src/devices/cpu/i86/i186.cpp +++ b/src/devices/cpu/i86/i186.cpp @@ -1308,7 +1308,7 @@ READ16_MEMBER(i80186_cpu_device::internal_port_r) switch (offset) { case 0x11: - logerror("%05X:ERROR - read from 80186 EOI\n", pc()); + if (LOG_PORTS) logerror("%05X:ERROR - read from 80186 EOI\n", pc()); break; case 0x12: @@ -1397,7 +1397,7 @@ READ16_MEMBER(i80186_cpu_device::internal_port_r) case 0x2a: case 0x2e: - logerror("%05X:read 80186 Timer %d max B\n", pc(), (offset - 0x2a) / 4); + if (LOG_PORTS) logerror("%05X:read 80186 Timer %d max B\n", pc(), (offset - 0x2a) / 4); which = (offset - 0x2a) / 4; return m_timer[which].maxB; @@ -1468,7 +1468,7 @@ READ16_MEMBER(i80186_cpu_device::internal_port_r) return m_reloc; default: - logerror("%05X:read 80186 port %02X\n", pc(), offset); + if (LOG_PORTS) logerror("%05X:read 80186 port %02X\n", pc(), offset); break; } @@ -1494,11 +1494,11 @@ WRITE16_MEMBER(i80186_cpu_device::internal_port_w) break; case 0x12: - logerror("%05X:ERROR - write to 80186 interrupt poll = %04X\n", pc(), data); + if (LOG_PORTS) logerror("%05X:ERROR - write to 80186 interrupt poll = %04X\n", pc(), data); break; case 0x13: - logerror("%05X:ERROR - write to 80186 interrupt poll status = %04X\n", pc(), data); + if (LOG_PORTS) logerror("%05X:ERROR - write to 80186 interrupt poll status = %04X\n", pc(), data); break; case 0x14: @@ -1704,7 +1704,7 @@ WRITE16_MEMBER(i80186_cpu_device::internal_port_w) break; default: - logerror("%05X:80186 port %02X = %04X\n", pc(), offset, data); + if (LOG_PORTS) logerror("%05X:80186 port %02X = %04X\n", pc(), offset, data); break; } } diff --git a/src/devices/cpu/i86/i86.h b/src/devices/cpu/i86/i86.h index 978fa7d1690..f268c3c1671 100644 --- a/src/devices/cpu/i86/i86.h +++ b/src/devices/cpu/i86/i86.h @@ -130,7 +130,7 @@ protected: virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; virtual void interrupt(int int_num, int trap = 1); - bool common_op(UINT8 op); + virtual bool common_op(UINT8 op); // Accessing memory and io inline UINT8 read_byte(UINT32 addr); diff --git a/src/devices/cpu/lh5801/5801dasm.cpp b/src/devices/cpu/lh5801/5801dasm.cpp index bef5fb4df4b..11fb6d38f4e 100644 --- a/src/devices/cpu/lh5801/5801dasm.cpp +++ b/src/devices/cpu/lh5801/5801dasm.cpp @@ -13,82 +13,100 @@ #include "lh5801.h" -enum Adr -{ - Imp, - Reg, - Vec, // imm byte (vector at 0xffxx) - Vej, - Imm, - RegImm, - Imm16, - RegImm16, - ME0, - ME0Imm, - Abs, - AbsImm, - ME1, - ME1Imm, - ME1Abs, - ME1AbsImm, - RelP, - RelM -}; - -enum Regs -{ - RegNone, - A, - XL, XH, X, - YL, YH, Y, - UL, UH, U, - P, S -}; - -static const char *const RegNames[]= { - nullptr, "A", "XL", "XH", "X", "YL", "YH", "Y", "UL", "UH", "U", "P", "S" -}; - #if defined(SEC) #undef SEC #endif -enum Ins +namespace { + +class Entry { - ILL, ILL2, PREFD, NOP, +public: + enum Ins + { + ILL, ILL2, PREFD, NOP, - LDA, STA, LDI, LDX, STX, - LDE, SDE, LIN, SIN, - TIN, // (x++)->(y++) - ADC, ADI, ADR, SBC, SBI, - DCA, DCS, // bcd add and sub - CPA, CPI, CIN, // A compared with (x++) - AND, ANI, ORA, ORI, EOR, EAI, BIT, BII, - INC, DEC, - DRL, DRR, // digit rotates - ROL, ROR, - SHL, SHR, - AEX, // A nibble swap + LDA, STA, LDI, LDX, STX, + LDE, SDE, LIN, SIN, + TIN, // (x++)->(y++) + ADC, ADI, ADR, SBC, SBI, + DCA, DCS, // bcd add and sub + CPA, CPI, CIN, // A compared with (x++) + AND, ANI, ORA, ORI, EOR, EAI, BIT, BII, + INC, DEC, + DRL, DRR, // digit rotates + ROL, ROR, + SHL, SHR, + AEX, // A nibble swap - BCR, BCS, BHR, BHS, BZR, BZS, BVR, BVS, - BCH, LOP, // loop with ul - JMP, SJP, RTN, RTI, HLT, - VCR, VCS, VHR, VHS, VVS, VZR, VZS, - VMJ, VEJ, - PSH, POP, ATT, TTA, - REC, SEC, RIE, SIE, + BCR, BCS, BHR, BHS, BZR, BZS, BVR, BVS, + BCH, LOP, // loop with ul + JMP, SJP, RTN, RTI, HLT, + VCR, VCS, VHR, VHS, VVS, VZR, VZS, + VMJ, VEJ, + PSH, POP, ATT, TTA, + REC, SEC, RIE, SIE, - AM0, AM1, // load timer reg - ITA, // reads input port - ATP, // akku send to data bus - CDV, // clears internal divider - OFF, // clears bf flip flop - RDP, SDP,// reset display flip flop - RPU, SPU,// flip flop pu off - RPV, SPV // flip flop pv off + AM0, AM1, // load timer reg + ITA, // reads input port + ATP, // akku send to data bus + CDV, // clears internal divider + OFF, // clears bf flip flop + RDP, SDP,// reset display flip flop + RPU, SPU,// flip flop pu off + RPV, SPV // flip flop pv off + }; + + enum Adr + { + Imp, + Reg, + Vec, // imm byte (vector at 0xffxx) + Vej, + Imm, + RegImm, + Imm16, + RegImm16, + ME0, + ME0Imm, + Abs, + AbsImm, + ME1, + ME1Imm, + ME1Abs, + ME1AbsImm, + RelP, + RelM + }; + + enum Regs + { + RegNone, + A, + XL, XH, X, + YL, YH, Y, + UL, UH, U, + P, S + }; + + const char *ins_name() const { return ins_names[ins]; } + const char *reg_name() const { return reg_names[reg]; } + + Ins ins; + Adr adr; + Regs reg; + + static const Entry table[0x100]; + static const Entry table_fd[0x100]; + +protected: + Entry(Ins i, Adr a = Imp, Regs r = RegNone) : ins(i), adr(a), reg(r) { } + + static const char *const ins_names[]; + static const char *const reg_names[]; }; -static const char *const InsNames[]={ +const char *const Entry::ins_names[]={ "ILL", "ILL", nullptr, "NOP", "LDA", "STA", "LDI", "LDX", "STX", "LDE", "SDE", "LIN", "SIN", @@ -120,9 +138,11 @@ static const char *const InsNames[]={ "RPV", "SPV", }; -struct Entry { Ins ins; Adr adr; Regs reg; }; +const char *const Entry::reg_names[]= { + nullptr, "A", "XL", "XH", "X", "YL", "YH", "Y", "UL", "UH", "U", "P", "S" +}; -static const Entry table[0x100]={ +const Entry Entry::table[0x100]={ { SBC, Reg, XL }, // 0 { SBC, ME0, X }, { ADC, Reg, XL }, @@ -380,7 +400,8 @@ static const Entry table[0x100]={ { ILL }, { ILL } }; -static const Entry table_fd[0x100]={ + +const Entry Entry::table_fd[0x100]={ { ILL2 }, // 0x00 { SBC, ME1, X }, { ILL2 }, @@ -639,6 +660,9 @@ static const Entry table_fd[0x100]={ { ILL2 } }; +} // anonymous namespace + + CPU_DISASSEMBLE( lh5801 ) { int pos = 0; @@ -648,75 +672,75 @@ CPU_DISASSEMBLE( lh5801 ) int temp; oper=oprom[pos++]; - entry=table+oper; + entry=Entry::table+oper; - if (table[oper].ins==PREFD) { + if (Entry::table[oper].ins==Entry::PREFD) { oper=oprom[pos++]; - entry=table_fd+oper; + entry=Entry::table_fd+oper; } switch (entry->ins) { - case ILL: - sprintf(buffer,"%s %.2x", InsNames[entry->ins], oper);break; - case ILL2: - sprintf(buffer,"%s fd%.2x", InsNames[entry->ins], oper);break; + case Entry::ILL: + sprintf(buffer,"%s %.2x", entry->ins_name(), oper);break; + case Entry::ILL2: + sprintf(buffer,"%s fd%.2x", entry->ins_name(), oper);break; default: switch(entry->adr) { - case Imp: - sprintf(buffer,"%s", InsNames[entry->ins]);break; - case Reg: - sprintf(buffer,"%s %s", InsNames[entry->ins],RegNames[entry->reg]);break; - case RegImm: - sprintf(buffer,"%s %s,%.2x", InsNames[entry->ins], - RegNames[entry->reg], oprom[pos++]); + case Entry::Imp: + sprintf(buffer,"%s", entry->ins_name());break; + case Entry::Reg: + sprintf(buffer,"%s %s", entry->ins_name(),entry->reg_name());break; + case Entry::RegImm: + sprintf(buffer,"%s %s,%.2x", entry->ins_name(), + entry->reg_name(), oprom[pos++]); break; - case RegImm16: + case Entry::RegImm16: absolut=oprom[pos++]<<8; absolut|=oprom[pos++]; - sprintf(buffer,"%s %s,%.4x", InsNames[entry->ins],RegNames[entry->reg],absolut ); + sprintf(buffer,"%s %s,%.4x", entry->ins_name(),entry->reg_name(),absolut ); break; - case Vec: - sprintf(buffer,"%s (ff%.2x)", InsNames[entry->ins],oprom[pos++]);break; - case Vej: - sprintf(buffer,"%s (ff%.2x)", InsNames[entry->ins], oper);break; - case Imm: - sprintf(buffer,"%s %.2x", InsNames[entry->ins],oprom[pos++]);break; - case Imm16: + case Entry::Vec: + sprintf(buffer,"%s (ff%.2x)", entry->ins_name(),oprom[pos++]);break; + case Entry::Vej: + sprintf(buffer,"%s (ff%.2x)", entry->ins_name(), oper);break; + case Entry::Imm: + sprintf(buffer,"%s %.2x", entry->ins_name(),oprom[pos++]);break; + case Entry::Imm16: absolut=oprom[pos++]<<8; absolut|=oprom[pos++]; - sprintf(buffer,"%s %.4x", InsNames[entry->ins],absolut );break; - case RelP: + sprintf(buffer,"%s %.4x", entry->ins_name(),absolut );break; + case Entry::RelP: temp=oprom[pos++]; - sprintf(buffer,"%s %.4x", InsNames[entry->ins],pc+pos+temp );break; - case RelM: + sprintf(buffer,"%s %.4x", entry->ins_name(),pc+pos+temp );break; + case Entry::RelM: temp=oprom[pos++]; - sprintf(buffer,"%s %.4x", InsNames[entry->ins],pc+pos-temp );break; - case Abs: + sprintf(buffer,"%s %.4x", entry->ins_name(),pc+pos-temp );break; + case Entry::Abs: absolut=oprom[pos++]<<8; absolut|=oprom[pos++]; - sprintf(buffer,"%s (%.4x)", InsNames[entry->ins],absolut );break; - case ME1Abs: + sprintf(buffer,"%s (%.4x)", entry->ins_name(),absolut );break; + case Entry::ME1Abs: absolut=oprom[pos++]<<8; absolut|=oprom[pos++]; - sprintf(buffer,"%s #(%.4x)", InsNames[entry->ins],absolut );break; - case AbsImm: + sprintf(buffer,"%s #(%.4x)", entry->ins_name(),absolut );break; + case Entry::AbsImm: absolut=oprom[pos++]<<8; absolut|=oprom[pos++]; - sprintf(buffer,"%s (%.4x),%.2x", InsNames[entry->ins],absolut, + sprintf(buffer,"%s (%.4x),%.2x", entry->ins_name(),absolut, oprom[pos++]);break; - case ME1AbsImm: + case Entry::ME1AbsImm: absolut=oprom[pos++]<<8; absolut|=oprom[pos++]; - sprintf(buffer,"%s #(%.4x),%.2x", InsNames[entry->ins],absolut, + sprintf(buffer,"%s #(%.4x),%.2x", entry->ins_name(),absolut, oprom[pos++]);break; - case ME0: - sprintf(buffer,"%s (%s)", InsNames[entry->ins],RegNames[entry->reg] );break; - case ME0Imm: - sprintf(buffer,"%s (%s),%.2x", InsNames[entry->ins],RegNames[entry->reg],oprom[pos++] ); + case Entry::ME0: + sprintf(buffer,"%s (%s)", entry->ins_name(),entry->reg_name() );break; + case Entry::ME0Imm: + sprintf(buffer,"%s (%s),%.2x", entry->ins_name(),entry->reg_name(),oprom[pos++] ); break; - case ME1: - sprintf(buffer,"%s #(%s)", InsNames[entry->ins],RegNames[entry->reg] );break; - case ME1Imm: - sprintf(buffer,"%s #(%s),%.2x", InsNames[entry->ins],RegNames[entry->reg],oprom[pos++] ); + case Entry::ME1: + sprintf(buffer,"%s #(%s)", entry->ins_name(),entry->reg_name() );break; + case Entry::ME1Imm: + sprintf(buffer,"%s #(%s),%.2x", entry->ins_name(),entry->reg_name(),oprom[pos++] ); break; } } diff --git a/src/devices/cpu/m37710/m7700ds.cpp b/src/devices/cpu/m37710/m7700ds.cpp index 8ccf269dc46..b53980bd939 100644 --- a/src/devices/cpu/m37710/m7700ds.cpp +++ b/src/devices/cpu/m37710/m7700ds.cpp @@ -18,18 +18,59 @@ Based on G65C816 CPU Emulator by Karl Stenerud #define ADDRESS_24BIT(A) ((A)&0xffffff) -struct m7700_opcode_struct +namespace { + +class m7700_opcode_struct { - unsigned char name; +public: + bool is_call() const { return m_name == op::JSR; } + bool is_return() const { return (m_name == op::RTS) || (m_name == op::RTI); } + const char *name() const { return s_opnames[unsigned(m_name)]; } + + static const m7700_opcode_struct &get(unsigned char ins) { return s_opcodes[ins]; } + static const m7700_opcode_struct &get_prefix42(unsigned char ins) { return s_opcodes_prefix42[ins]; } + static const m7700_opcode_struct &get_prefix89(unsigned char ins) { return s_opcodes_prefix89[ins]; } + unsigned char flag; unsigned char ea; + +protected: + enum class op : unsigned + { + ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA , + BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX , + CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML , + JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA , + PEA , PEI , PER , PHA , PHT , PHD , PHK , PHP , PHX , PHY , PLA , + PLB , PLD , PLP , PLX , PLY , CLP , ROL , ROR , RTI , RTL , RTS , + SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX , + TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY , + TYA , TYX , WAI , WDM , XBA , XCE , MPY , DIV , MPYS, DIVS, RLA , + EXTS, EXTZ , LDT , LDM , UNK , SEB , SEM , CLM , STB , LDB , ADCB , + SBCB, EORB , TBX , CMPB, INB , DEB , TXB , TYB , LSRB, ORB , CLB , + BBC, BBS, TBY, ANDB, PUL , PSH , PLAB, XAB , PHB + }; + + m7700_opcode_struct(op n, unsigned char f, unsigned char e) + : flag(f) + , ea(e) + , m_name(n) + { + } + + op m_name; + + static const char *const s_opnames[]; + static const m7700_opcode_struct s_opcodes[256]; + static const m7700_opcode_struct s_opcodes_prefix42[256]; + static const m7700_opcode_struct s_opcodes_prefix89[256]; }; enum { IMP , ACC , RELB, RELW, IMM , A , AI , AL , ALX , AX , AXI , AY , D , DI , DIY , DLI , DLIY, DX , DXI , DY , S , SIY , - SIG /*, MVN , MVP , PEA , PEI , PER */, LDM4, LDM5, LDM4X, LDM5X, + SIG , MVN , MVP , PEA , PEI , PER , LDM4, LDM5, LDM4X, LDM5X, BBCD, BBCA, ACCB }; @@ -40,23 +81,7 @@ enum X /* check x bit */ }; -enum -{ - ADC , AND , ASL , BCC , BCS , BEQ , BIT , BMI , BNE , BPL , BRA , - BRK , BRL , BVC , BVS , CLC , CLD , CLI , CLV , CMP , COP , CPX , - CPY , DEA , DEC , DEX , DEY , EOR , INA , INC , INX , INY , JML , - JMP , JSL , JSR , LDA , LDX , LDY , LSR , MVN , MVP , NOP , ORA , - PEA , PEI , PER , PHA , PHT , PHD , PHK , PHP , PHX , PHY , PLA , - PLB , PLD , PLP , PLX , PLY , CLP , ROL , ROR , RTI , RTL , RTS , - SBC , SEC , SED , SEI , SEP , STA , STP , STX , STY , STZ , TAX , - TAY , TCS , TCD , TDC , TRB , TSB , TSC , TSX , TXA , TXS , TXY , - TYA , TYX , WAI , WDM , XBA , XCE , MPY , DIV , MPYS, DIVS, RLA , - EXTS, EXTZ , LDT , LDM , UNK , SEB , SEM , CLM , STB , LDB , ADCB , - SBCB, EORB , TBX , CMPB, INB , DEB , TXB , TYB , LSRB, ORB , CLB , - BBC, BBS, TBY, ANDB, PUL , PSH , PLAB, XAB , PHB -}; - -static const char *const g_opnames[] = +const char *const m7700_opcode_struct::s_opnames[] = { "ADC", "AND", "ASL", "BCC", "BCS", "BEQ", "BIT", "BMI", "BNE", "BPL", "BRA", "BRK", "BRL", "BVC", "BVS", "CLC", "CLD", "CLI", "CLV", "CMP", "COP", "CPX", @@ -66,261 +91,263 @@ static const char *const g_opnames[] = "PLT", "PLD", "PLP", "PLX", "PLY", "CLP", "ROL", "ROR", "RTI", "RTL", "RTS", "SBC", "SEC", "SED", "SEI", "SEP", "STA", "STP", "STX", "STY", "STZ", "TAX", "TAY", "TCS", "TCD", "TDC", "TRB", "TSB", "TSC", "TSX", "TXA", "TXS", "TXY", - "TYA", "TYX", "WAI", "WDM", "XBA", "XCE", "MPY", "DIV", "MPYS", "DIVS", "RLA", + "TYA", "TYX", "WAI", "WDM", "XBA", "XCE", "MPY", "DIV", "MPYS","DIVS","RLA", "EXTS","EXTZ","LDT", "LDM", "UNK", "SEB", "SEM", "CLM", "STB", "LDB", "ADCB", - "SBCB","EORB","TBX", "CMPB","INB", "DEB", "TXB", "TYB", "LSRB", "ORB", "CLB", + "SBCB","EORB","TBX", "CMPB","INB", "DEB", "TXB", "TYB", "LSRB","ORB", "CLB", "BBC", "BBS", "TBY", "ANDB","PUL", "PSH", "PLB", "XAB", "PHB", }; -static const m7700_opcode_struct g_opcodes[256] = +const m7700_opcode_struct m7700_opcode_struct::s_opcodes[256] = { - {BRK, I, SIG }, {ORA, M, DXI }, {UNK, I, SIG }, {ORA, M, S }, - {SEB, M, LDM4 }, {ORA, M, D }, {ASL, M, D }, {ORA, M, DLI }, - {PHP, I, IMP }, {ORA, M, IMM }, {ASL, M, ACC }, {PHD, I, IMP }, - {SEB, M, LDM5 }, {ORA, M, A }, {ASL, M, A }, {ORA, M, AL }, + {op::BRK, I, SIG }, {op::ORA, M, DXI }, {op::UNK, I, SIG }, {op::ORA, M, S }, + {op::SEB, M, LDM4 }, {op::ORA, M, D }, {op::ASL, M, D }, {op::ORA, M, DLI }, + {op::PHP, I, IMP }, {op::ORA, M, IMM }, {op::ASL, M, ACC }, {op::PHD, I, IMP }, + {op::SEB, M, LDM5 }, {op::ORA, M, A }, {op::ASL, M, A }, {op::ORA, M, AL }, // 0x10 - {BPL, I, RELB}, {ORA, M, DIY }, {ORA, M, DI }, {ORA, M, SIY }, - {CLB, M, LDM4}, {ORA, M, DX }, {ASL, M, DX }, {ORA, M, DLIY}, - {CLC, I, IMP }, {ORA, M, AY }, {DEA, I, IMP }, {TCS, I, IMP }, - {CLB, M, LDM5}, {ORA, M, AX }, {ASL, M, AX }, {ORA, M, ALX }, + {op::BPL, I, RELB }, {op::ORA, M, DIY }, {op::ORA, M, DI }, {op::ORA, M, SIY }, + {op::CLB, M, LDM4 }, {op::ORA, M, DX }, {op::ASL, M, DX }, {op::ORA, M, DLIY }, + {op::CLC, I, IMP }, {op::ORA, M, AY }, {op::DEA, I, IMP }, {op::TCS, I, IMP }, + {op::CLB, M, LDM5 }, {op::ORA, M, AX }, {op::ASL, M, AX }, {op::ORA, M, ALX }, // 0x20 - {JSR, I, A }, {AND, M, DXI }, {JSL, I, AL }, {AND, M, S }, - {BBS, M, BBCD}, {AND, M, D }, {ROL, M, D }, {AND, M, DLI }, - {PLP, I, IMP }, {AND, M, IMM }, {ROL, M, ACC }, {PLD, I, IMP }, - {BBS, M, BBCA}, {AND, M, A }, {ROL, M, A }, {AND, M, AL }, + {op::JSR, I, A }, {op::AND, M, DXI }, {op::JSL, I, AL }, {op::AND, M, S }, + {op::BBS, M, BBCD }, {op::AND, M, D }, {op::ROL, M, D }, {op::AND, M, DLI }, + {op::PLP, I, IMP }, {op::AND, M, IMM }, {op::ROL, M, ACC }, {op::PLD, I, IMP }, + {op::BBS, M, BBCA }, {op::AND, M, A }, {op::ROL, M, A }, {op::AND, M, AL }, // 0x30 - {BMI, I, RELB}, {AND, M, DIY }, {AND, M, DI }, {AND, M, SIY }, - {BBC, M, BBCD}, {AND, M, DX }, {ROL, M, DX }, {AND, M, DLIY}, - {SEC, I, IMP }, {AND, M, AY }, {INA, I, IMP }, {TSC, I, IMP }, - {BBC, M, BBCA}, {AND, M, AX }, {ROL, M, AX }, {AND, M, ALX }, + {op::BMI, I, RELB }, {op::AND, M, DIY }, {op::AND, M, DI }, {op::AND, M, SIY }, + {op::BBC, M, BBCD }, {op::AND, M, DX }, {op::ROL, M, DX }, {op::AND, M, DLIY }, + {op::SEC, I, IMP }, {op::AND, M, AY }, {op::INA, I, IMP }, {op::TSC, I, IMP }, + {op::BBC, M, BBCA }, {op::AND, M, AX }, {op::ROL, M, AX }, {op::AND, M, ALX }, // 0x40 - {RTI, I, IMP }, {EOR, M, DXI }, {WDM, I, IMP }, {EOR, M, S }, - {MVP, I, MVP }, {EOR, M, D }, {LSR, M, D }, {EOR, M, DLI }, - {PHA, I, IMP }, {EOR, M, IMM }, {LSR, M, ACC }, {PHK, I, IMP }, - {JMP, I, A }, {EOR, M, A }, {LSR, M, A }, {EOR, M, AL }, + {op::RTI, I, IMP }, {op::EOR, M, DXI }, {op::WDM, I, IMP }, {op::EOR, M, S }, + {op::MVP, I, MVP }, {op::EOR, M, D }, {op::LSR, M, D }, {op::EOR, M, DLI }, + {op::PHA, I, IMP }, {op::EOR, M, IMM }, {op::LSR, M, ACC }, {op::PHK, I, IMP }, + {op::JMP, I, A }, {op::EOR, M, A }, {op::LSR, M, A }, {op::EOR, M, AL }, // 0x50 - {BVC, I, RELB}, {EOR, M, DIY }, {EOR, M, DI }, {EOR, M, SIY }, - {MVN, I, MVN }, {EOR, M, DX }, {LSR, M, DX }, {EOR, M, DLIY}, - {CLI, I, IMP }, {EOR, M, AY }, {PHY, I, IMP }, {TCD, I, IMP }, - {JMP, I, AL }, {EOR, M, AX }, {LSR, M, AX }, {EOR, M, ALX }, + {op::BVC, I, RELB }, {op::EOR, M, DIY }, {op::EOR, M, DI }, {op::EOR, M, SIY }, + {op::MVN, I, MVN }, {op::EOR, M, DX }, {op::LSR, M, DX }, {op::EOR, M, DLIY }, + {op::CLI, I, IMP }, {op::EOR, M, AY }, {op::PHY, I, IMP }, {op::TCD, I, IMP }, + {op::JMP, I, AL }, {op::EOR, M, AX }, {op::LSR, M, AX }, {op::EOR, M, ALX }, // 0x60 - {RTS, I, IMP }, {ADC, M, DXI }, {PER, I, PER }, {ADC, M, S }, - {LDM, M, LDM4 }, {ADC, M, D }, {ROR, M, D }, {ADC, M, DLI }, - {PLA, I, IMP }, {ADC, M, IMM }, {ROR, M, ACC }, {RTL, I, IMP }, - {JMP, I, AI }, {ADC, M, A }, {ROR, M, A }, {ADC, M, AL }, + {op::RTS, I, IMP }, {op::ADC, M, DXI }, {op::PER, I, PER }, {op::ADC, M, S }, + {op::LDM, M, LDM4 }, {op::ADC, M, D }, {op::ROR, M, D }, {op::ADC, M, DLI }, + {op::PLA, I, IMP }, {op::ADC, M, IMM }, {op::ROR, M, ACC }, {op::RTL, I, IMP }, + {op::JMP, I, AI }, {op::ADC, M, A }, {op::ROR, M, A }, {op::ADC, M, AL }, // 0x70 - {BVS, I, RELB}, {ADC, M, DIY }, {ADC, M, DI }, {ADC, M, SIY }, - {LDM, M, LDM4X }, {ADC, M, DX }, {ROR, M, DX }, {ADC, M, DLIY}, - {SEI, I, IMP }, {ADC, M, AY }, {PLY, I, IMP }, {TDC, I, IMP }, - {JMP, I, AXI }, {ADC, M, AX }, {ROR, M, AX }, {ADC, M, ALX }, + {op::BVS, I, RELB }, {op::ADC, M, DIY }, {op::ADC, M, DI }, {op::ADC, M, SIY }, + {op::LDM, M, LDM4X}, {op::ADC, M, DX }, {op::ROR, M, DX }, {op::ADC, M, DLIY }, + {op::SEI, I, IMP }, {op::ADC, M, AY }, {op::PLY, I, IMP }, {op::TDC, I, IMP }, + {op::JMP, I, AXI }, {op::ADC, M, AX }, {op::ROR, M, AX }, {op::ADC, M, ALX }, // 0x80 - {BRA, I, RELB}, {STA, M, DXI }, {BRL, I, RELW}, {STA, M, S }, - {STY, X, D }, {STA, M, D }, {STX, X, D }, {STA, M, DLI }, - {DEY, I, IMP }, {BIT, M, IMM }, {TXA, I, IMP }, {PHT, I, IMP }, - {STY, X, A }, {STA, M, A }, {STX, X, A }, {STA, M, AL }, + {op::BRA, I, RELB }, {op::STA, M, DXI }, {op::BRL, I, RELW}, {op::STA, M, S }, + {op::STY, X, D }, {op::STA, M, D }, {op::STX, X, D }, {op::STA, M, DLI }, + {op::DEY, I, IMP }, {op::BIT, M, IMM }, {op::TXA, I, IMP }, {op::PHT, I, IMP }, + {op::STY, X, A }, {op::STA, M, A }, {op::STX, X, A }, {op::STA, M, AL }, // 0x90 - {BCC, I, RELB}, {STA, M, DIY }, {STA, M, DI }, {STA, M, SIY }, - {STY, X, DX }, {STA, M, DX }, {STX, X, DY }, {STA, M, DLIY}, - {TYA, I, IMP }, {STA, M, AY }, {TXS, I, IMP }, {TXY, I, IMP }, - {LDM, M, LDM5 }, {STA, M, AX }, {LDM, M, LDM5X }, {STA, M, ALX }, + {op::BCC, I, RELB }, {op::STA, M, DIY }, {op::STA, M, DI }, {op::STA, M, SIY }, + {op::STY, X, DX }, {op::STA, M, DX }, {op::STX, X, DY }, {op::STA, M, DLIY }, + {op::TYA, I, IMP }, {op::STA, M, AY }, {op::TXS, I, IMP }, {op::TXY, I, IMP }, + {op::LDM, M, LDM5 }, {op::STA, M, AX }, {op::LDM, M, LDM5X},{op::STA, M, ALX }, // 0xA0 - {LDY, X, IMM }, {LDA, M, DXI }, {LDX, X, IMM }, {LDA, M, S }, - {LDY, X, D }, {LDA, M, D }, {LDX, X, D }, {LDA, M, DLI }, - {TAY, I, IMP }, {LDA, M, IMM }, {TAX, I, IMP }, {PLB, I, IMP }, - {LDY, X, A }, {LDA, M, A }, {LDX, X, A }, {LDA, M, AL }, + {op::LDY, X, IMM }, {op::LDA, M, DXI }, {op::LDX, X, IMM }, {op::LDA, M, S }, + {op::LDY, X, D }, {op::LDA, M, D }, {op::LDX, X, D }, {op::LDA, M, DLI }, + {op::TAY, I, IMP }, {op::LDA, M, IMM }, {op::TAX, I, IMP }, {op::PLB, I, IMP }, + {op::LDY, X, A }, {op::LDA, M, A }, {op::LDX, X, A }, {op::LDA, M, AL }, // 0xB0 - {BCS, I, RELB}, {LDA, M, DIY }, {LDA, M, DI }, {LDA, M, SIY }, - {LDY, X, DX }, {LDA, M, DX }, {LDX, X, DY }, {LDA, M, DLIY}, - {CLV, I, IMP }, {LDA, M, AY }, {TSX, I, IMP }, {TYX, I, IMP }, - {LDY, X, AX }, {LDA, M, AX }, {LDX, X, AY }, {LDA, M, ALX }, + {op::BCS, I, RELB }, {op::LDA, M, DIY }, {op::LDA, M, DI }, {op::LDA, M, SIY }, + {op::LDY, X, DX }, {op::LDA, M, DX }, {op::LDX, X, DY }, {op::LDA, M, DLIY }, + {op::CLV, I, IMP }, {op::LDA, M, AY }, {op::TSX, I, IMP }, {op::TYX, I, IMP }, + {op::LDY, X, AX }, {op::LDA, M, AX }, {op::LDX, X, AY }, {op::LDA, M, ALX }, // 0xC0 - {CPY, X, IMM }, {CMP, M, DXI }, {CLP, I, IMM }, {CMP, M, S }, - {CPY, X, D }, {CMP, M, D }, {DEC, M, D }, {CMP, M, DLI }, - {INY, I, IMP }, {CMP, M, IMM }, {DEX, I, IMP }, {WAI, I, IMP }, - {CPY, X, A }, {CMP, M, A }, {DEC, M, A }, {CMP, M, AL }, + {op::CPY, X, IMM }, {op::CMP, M, DXI }, {op::CLP, I, IMM }, {op::CMP, M, S }, + {op::CPY, X, D }, {op::CMP, M, D }, {op::DEC, M, D }, {op::CMP, M, DLI }, + {op::INY, I, IMP }, {op::CMP, M, IMM }, {op::DEX, I, IMP }, {op::WAI, I, IMP }, + {op::CPY, X, A }, {op::CMP, M, A }, {op::DEC, M, A }, {op::CMP, M, AL }, // 0xD0 - {BNE, I, RELB}, {CMP, M, DIY }, {CMP, M, DI }, {CMP, M, SIY }, - {PEI, I, PEI }, {CMP, M, DX }, {DEC, M, DX }, {CMP, M, DLIY}, - {CLM, I, IMP }, {CMP, M, AY }, {PHX, I, IMP }, {STP, I, IMP }, - {JML, I, AI }, {CMP, M, AX }, {DEC, M, AX }, {CMP, M, ALX }, + {op::BNE, I, RELB }, {op::CMP, M, DIY }, {op::CMP, M, DI }, {op::CMP, M, SIY }, + {op::PEI, I, PEI }, {op::CMP, M, DX }, {op::DEC, M, DX }, {op::CMP, M, DLIY }, + {op::CLM, I, IMP }, {op::CMP, M, AY }, {op::PHX, I, IMP }, {op::STP, I, IMP }, + {op::JML, I, AI }, {op::CMP, M, AX }, {op::DEC, M, AX }, {op::CMP, M, ALX }, // 0xE0 - {CPX, X, IMM }, {SBC, M, DXI }, {SEP, I, IMM }, {SBC, M, S }, - {CPX, X, D }, {SBC, M, D }, {INC, M, D }, {SBC, M, DLI }, - {INX, M, IMP }, {SBC, M, IMM }, {NOP, I, IMP }, {PSH, I, IMM }, - {CPX, X, A }, {SBC, M, A }, {INC, M, A }, {SBC, M, AL }, + {op::CPX, X, IMM }, {op::SBC, M, DXI }, {op::SEP, I, IMM }, {op::SBC, M, S }, + {op::CPX, X, D }, {op::SBC, M, D }, {op::INC, M, D }, {op::SBC, M, DLI }, + {op::INX, M, IMP }, {op::SBC, M, IMM }, {op::NOP, I, IMP }, {op::PSH, I, IMM }, + {op::CPX, X, A }, {op::SBC, M, A }, {op::INC, M, A }, {op::SBC, M, AL }, // 0xF0 - {BEQ, I, RELB}, {SBC, M, DIY }, {SBC, M, DI }, {SBC, M, SIY }, - {PEA, I, PEA }, {SBC, M, DX }, {INC, M, DX }, {SBC, M, DLIY}, - {SEM, I, IMP }, {SBC, M, AY }, {PLX, I, IMP }, {PUL, I, IMM }, - {JSR, I, AXI }, {SBC, M, AX }, {INC, M, AX }, {SBC, M, ALX } + {op::BEQ, I, RELB }, {op::SBC, M, DIY }, {op::SBC, M, DI }, {op::SBC, M, SIY }, + {op::PEA, I, PEA }, {op::SBC, M, DX }, {op::INC, M, DX }, {op::SBC, M, DLIY }, + {op::SEM, I, IMP }, {op::SBC, M, AY }, {op::PLX, I, IMP }, {op::PUL, I, IMM }, + {op::JSR, I, AXI }, {op::SBC, M, AX }, {op::INC, M, AX }, {op::SBC, M, ALX } }; -static const m7700_opcode_struct g_opcodes_prefix42[256] = +const m7700_opcode_struct m7700_opcode_struct::s_opcodes_prefix42[256] = { - {BRK, I, SIG }, {ORB, M, DXI }, {COP, I, SIG }, {ORB, M, S }, - {TSB, M, D }, {ORB, M, D }, {ASL, M, D }, {ORB, M, DLI }, - {PHP, I, IMP }, {ORB, M, IMM }, {ASL, M, ACCB }, {PHD, I, IMP }, - {TSB, M, A }, {ORB, M, A }, {ASL, M, A }, {ORB, M, AL }, + {op::BRK, I, SIG }, {op::ORB, M, DXI }, {op::COP, I, SIG }, {op::ORB, M, S }, + {op::TSB, M, D }, {op::ORB, M, D }, {op::ASL, M, D }, {op::ORB, M, DLI }, + {op::PHP, I, IMP }, {op::ORB, M, IMM }, {op::ASL, M, ACCB}, {op::PHD, I, IMP }, + {op::TSB, M, A }, {op::ORB, M, A }, {op::ASL, M, A }, {op::ORB, M, AL }, // 0x10 - {BPL, I, RELB}, {ORB, M, DIY }, {ORB, M, DI }, {ORB, M, SIY }, - {TRB, M, D }, {ORB, M, DX }, {ASL, M, DX }, {ORB, M, DLIY}, - {CLC, I, IMP }, {ORB, M, AY }, {DEB, I, IMP }, {TCS, I, IMP }, - {TRB, M, A }, {ORB, M, AX }, {ASL, M, AX }, {ORB, M, ALX }, + {op::BPL, I, RELB }, {op::ORB, M, DIY }, {op::ORB, M, DI }, {op::ORB, M, SIY }, + {op::TRB, M, D }, {op::ORB, M, DX }, {op::ASL, M, DX }, {op::ORB, M, DLIY}, + {op::CLC, I, IMP }, {op::ORB, M, AY }, {op::DEB, I, IMP }, {op::TCS, I, IMP }, + {op::TRB, M, A }, {op::ORB, M, AX }, {op::ASL, M, AX }, {op::ORB, M, ALX }, // 0x20 - {JSR, I, A }, {ANDB, M, DXI }, {JSL, I, AL }, {ANDB, M, S }, - {BIT, M, D }, {ANDB, M, D }, {ROL, M, D }, {ANDB, M, DLI }, - {PLP, I, IMP }, {ANDB, M, IMM }, {ROL, M, ACCB }, {PLD, I, IMP }, - {BIT, M, A }, {ANDB, M, A }, {ROL, M, A }, {ANDB, M, AL }, + {op::JSR, I, A }, {op::ANDB,M, DXI }, {op::JSL, I, AL }, {op::ANDB, M, S }, + {op::BIT, M, D }, {op::ANDB,M, D }, {op::ROL, M, D }, {op::ANDB, M, DLI }, + {op::PLP, I, IMP }, {op::ANDB,M, IMM }, {op::ROL, M, ACCB}, {op::PLD, I, IMP }, + {op::BIT, M, A }, {op::ANDB,M, A }, {op::ROL, M, A }, {op::ANDB, M, AL }, // 0x30 - {BMI, I, RELB}, {AND, M, DIY }, {AND, M, DI }, {AND, M, SIY }, - {BIT, M, DX }, {AND, M, DX }, {ROL, M, DX }, {AND, M, DLIY}, - {SEC, I, IMP }, {AND, M, AY }, {INB, I, IMP }, {TSC, I, IMP }, - {BIT, M, AX }, {AND, M, AX }, {ROL, M, AX }, {AND, M, ALX }, + {op::BMI, I, RELB }, {op::AND, M, DIY }, {op::AND, M, DI }, {op::AND, M, SIY }, + {op::BIT, M, DX }, {op::AND, M, DX }, {op::ROL, M, DX }, {op::AND, M, DLIY}, + {op::SEC, I, IMP }, {op::AND, M, AY }, {op::INB, I, IMP }, {op::TSC, I, IMP }, + {op::BIT, M, AX }, {op::AND, M, AX }, {op::ROL, M, AX }, {op::AND, M, ALX }, // 0x40 - {RTI, I, IMP }, {EORB, M, DXI }, {WDM, I, IMP }, {EORB, M, S }, - {MVP, I, MVP }, {EORB, M, D }, {LSRB, M, D }, {EORB, M, DLI }, - {PHB, I, IMP }, {EORB, M, IMM }, {LSRB, M, ACC }, {PHK, I, IMP }, - {JMP, I, A }, {EORB, M, A }, {LSRB, M, A }, {EORB, M, AL }, + {op::RTI, I, IMP }, {op::EORB,M, DXI }, {op::WDM, I, IMP }, {op::EORB, M, S }, + {op::MVP, I, MVP }, {op::EORB,M, D }, {op::LSRB,M, D }, {op::EORB, M, DLI }, + {op::PHB, I, IMP }, {op::EORB,M, IMM }, {op::LSRB,M, ACC }, {op::PHK, I, IMP }, + {op::JMP, I, A }, {op::EORB,M, A }, {op::LSRB,M, A }, {op::EORB, M, AL }, // 0x50 - {BVC, I, RELB}, {EORB, M, DIY }, {EORB, M, DI }, {EORB, M, SIY }, - {MVN, I, MVN }, {EORB, M, DX }, {LSRB, M, DX }, {EORB, M, DLIY}, - {CLI, I, IMP }, {EORB, M, AY }, {PHY, I, IMP }, {TCD, I, IMP }, - {JMP, I, AL }, {EORB, M, AX }, {LSRB, M, AX }, {EORB, M, ALX }, + {op::BVC, I, RELB }, {op::EORB,M, DIY }, {op::EORB,M, DI }, {op::EORB, M, SIY }, + {op::MVN, I, MVN }, {op::EORB,M, DX }, {op::LSRB,M, DX }, {op::EORB, M, DLIY}, + {op::CLI, I, IMP }, {op::EORB,M, AY }, {op::PHY, I, IMP }, {op::TCD, I, IMP }, + {op::JMP, I, AL }, {op::EORB,M, AX }, {op::LSRB,M, AX }, {op::EORB, M, ALX }, // 0x60 - {RTS, I, IMP }, {ADCB, M, DXI }, {PER, I, PER }, {ADCB, M, S }, - {STZ, M, D }, {ADCB, M, D }, {ROR, M, D }, {ADCB, M, DLI }, - {PLAB,I, IMP }, {ADCB, M, IMM }, {ROR, M, ACC }, {RTL, I, IMP }, - {JMP, I, AI }, {ADCB, M, A }, {ROR, M, A }, {ADCB, M, AL }, + {op::RTS, I, IMP }, {op::ADCB,M, DXI }, {op::PER, I, PER }, {op::ADCB, M, S }, + {op::STZ, M, D }, {op::ADCB,M, D }, {op::ROR, M, D }, {op::ADCB, M, DLI }, + {op::PLAB,I, IMP }, {op::ADCB,M, IMM }, {op::ROR, M, ACC }, {op::RTL, I, IMP }, + {op::JMP, I, AI }, {op::ADCB,M, A }, {op::ROR, M, A }, {op::ADCB, M, AL }, // 0x70 - {BVS, I, RELB}, {ADCB, M, DIY }, {ADCB, M, DI }, {ADCB, M, SIY }, - {STZ, M, DX }, {ADCB, M, DX }, {ROR, M, DX }, {ADCB, M, DLIY}, - {SEI, I, IMP }, {ADCB, M, AY }, {PLY, I, IMP }, {TDC, I, IMP }, - {JMP, I, AXI }, {ADCB, M, AX }, {ROR, M, AX }, {ADCB, M, ALX }, + {op::BVS, I, RELB }, {op::ADCB,M, DIY }, {op::ADCB,M, DI }, {op::ADCB, M, SIY }, + {op::STZ, M, DX }, {op::ADCB,M, DX }, {op::ROR, M, DX }, {op::ADCB, M, DLIY}, + {op::SEI, I, IMP }, {op::ADCB,M, AY }, {op::PLY, I, IMP }, {op::TDC, I, IMP }, + {op::JMP, I, AXI }, {op::ADCB,M, AX }, {op::ROR, M, AX }, {op::ADCB, M, ALX }, // 0x80 - {BRA, I, RELB}, {STB, M, DXI }, {BRL, I, RELW}, {STB, M, S }, - {STY, X, D }, {STB, M, D }, {STX, X, D }, {STB, M, DLI }, - {DEY, I, IMP }, {BIT, M, IMM }, {TXB, I, IMP }, {PHB, I, IMP }, - {STY, X, A }, {STB, M, A }, {STX, X, A }, {STB, M, AL }, + {op::BRA, I, RELB }, {op::STB, M, DXI }, {op::BRL, I, RELW}, {op::STB, M, S }, + {op::STY, X, D }, {op::STB, M, D }, {op::STX, X, D }, {op::STB, M, DLI }, + {op::DEY, I, IMP }, {op::BIT, M, IMM }, {op::TXB, I, IMP }, {op::PHB, I, IMP }, + {op::STY, X, A }, {op::STB, M, A }, {op::STX, X, A }, {op::STB, M, AL }, // 0x90 - {BCC, I, RELB}, {STB, M, DIY }, {STB, M, DI }, {STB, M, SIY }, - {STY, X, DX }, {STB, M, DX }, {STX, X, DY }, {STB, M, DLIY}, - {TYB, I, IMP }, {STB, M, AY }, {TXS, I, IMP }, {TXY, I, IMP }, - {STZ, M, A }, {STB, M, AX }, {STZ, M, AX }, {STB, M, ALX }, + {op::BCC, I, RELB }, {op::STB, M, DIY }, {op::STB, M, DI }, {op::STB, M, SIY }, + {op::STY, X, DX }, {op::STB, M, DX }, {op::STX, X, DY }, {op::STB, M, DLIY}, + {op::TYB, I, IMP }, {op::STB, M, AY }, {op::TXS, I, IMP }, {op::TXY, I, IMP }, + {op::STZ, M, A }, {op::STB, M, AX }, {op::STZ, M, AX }, {op::STB, M, ALX }, // 0xA0 - {LDY, X, IMM }, {LDB, M, DXI }, {LDX, X, IMM }, {LDB, M, S }, - {LDY, X, D }, {LDB, M, D }, {LDX, X, D }, {LDB, M, DLI }, - {TBY, I, IMP }, {LDB, M, IMM }, {TBX, I, IMP }, {PLB, I, IMP }, - {LDY, X, A }, {LDB, M, A }, {LDX, X, A }, {LDB, M, AL }, + {op::LDY, X, IMM }, {op::LDB, M, DXI }, {op::LDX, X, IMM }, {op::LDB, M, S }, + {op::LDY, X, D }, {op::LDB, M, D }, {op::LDX, X, D }, {op::LDB, M, DLI }, + {op::TBY, I, IMP }, {op::LDB, M, IMM }, {op::TBX, I, IMP }, {op::PLB, I, IMP }, + {op::LDY, X, A }, {op::LDB, M, A }, {op::LDX, X, A }, {op::LDB, M, AL }, // 0xB0 - {BCS, I, RELB}, {LDB, M, DIY }, {LDB, M, DI }, {LDB, M, SIY }, - {LDY, X, DX }, {LDB, M, DX }, {LDX, X, DY }, {LDB, M, DLIY}, - {CLV, I, IMP }, {LDB, M, AY }, {TSX, I, IMP }, {TYX, I, IMP }, - {LDY, X, AX }, {LDB, M, AX }, {LDX, X, AY }, {LDB, M, ALX }, + {op::BCS, I, RELB }, {op::LDB, M, DIY }, {op::LDB, M, DI }, {op::LDB, M, SIY }, + {op::LDY, X, DX }, {op::LDB, M, DX }, {op::LDX, X, DY }, {op::LDB, M, DLIY}, + {op::CLV, I, IMP }, {op::LDB, M, AY }, {op::TSX, I, IMP }, {op::TYX, I, IMP }, + {op::LDY, X, AX }, {op::LDB, M, AX }, {op::LDX, X, AY }, {op::LDB, M, ALX }, // 0xC0 - {CPY, X, IMM }, {CMPB, M, DXI }, {CLP, I, IMM }, {CMPB, M, S }, - {CPY, X, D }, {CMPB, M, D }, {DEC, M, D }, {CMPB, M, DLI }, - {INY, I, IMP }, {CMPB, M, IMM }, {DEX, I, IMP }, {WAI, I, IMP }, - {CPY, X, A }, {CMPB, M, A }, {DEC, M, A }, {CMPB, M, AL }, + {op::CPY, X, IMM }, {op::CMPB,M, DXI }, {op::CLP, I, IMM }, {op::CMPB, M, S }, + {op::CPY, X, D }, {op::CMPB,M, D }, {op::DEC, M, D }, {op::CMPB, M, DLI }, + {op::INY, I, IMP }, {op::CMPB,M, IMM }, {op::DEX, I, IMP }, {op::WAI, I, IMP }, + {op::CPY, X, A }, {op::CMPB,M, A }, {op::DEC, M, A }, {op::CMPB, M, AL }, // 0xD0 - {BNE, I, RELB}, {CMPB, M, DIY }, {CMPB, M, DI }, {CMPB, M, SIY }, - {PEI, I, PEI }, {CMPB, M, DX }, {DEC, M, DX }, {CMPB, M, DLIY}, - {CLD, I, IMP }, {CMPB, M, AY }, {PHX, I, IMP }, {STP, I, IMP }, - {JML, I, AI }, {CMPB, M, AX }, {DEC, M, AX }, {CMPB, M, ALX }, + {op::BNE, I, RELB }, {op::CMPB,M, DIY }, {op::CMPB,M, DI }, {op::CMPB, M, SIY }, + {op::PEI, I, PEI }, {op::CMPB,M, DX }, {op::DEC, M, DX }, {op::CMPB, M, DLIY}, + {op::CLD, I, IMP }, {op::CMPB,M, AY }, {op::PHX, I, IMP }, {op::STP, I, IMP }, + {op::JML, I, AI }, {op::CMPB,M, AX }, {op::DEC, M, AX }, {op::CMPB, M, ALX }, // 0xE0 - {CPX, X, IMM }, {SBCB, M, DXI }, {SEP, I, IMM }, {SBCB, M, S }, - {CPX, X, D }, {SBCB, M, D }, {INC, M, D }, {SBCB, M, DLI }, - {INX, M, IMP }, {SBCB, M, IMM }, {NOP, I, IMP }, {XBA, I, IMP }, - {CPX, X, A }, {SBCB, M, A }, {INC, M, A }, {SBCB, M, AL }, + {op::CPX, X, IMM }, {op::SBCB,M, DXI }, {op::SEP, I, IMM }, {op::SBCB, M, S }, + {op::CPX, X, D }, {op::SBCB,M, D }, {op::INC, M, D }, {op::SBCB, M, DLI }, + {op::INX, M, IMP }, {op::SBCB,M, IMM }, {op::NOP, I, IMP }, {op::XBA, I, IMP }, + {op::CPX, X, A }, {op::SBCB,M, A }, {op::INC, M, A }, {op::SBCB, M, AL }, // 0xF0 - {BEQ, I, RELB}, {SBCB, M, DIY }, {SBCB, M, DI }, {SBCB, M, SIY }, - {PEA, I, PEA }, {SBCB, M, DX }, {INC, M, DX }, {SBCB, M, DLIY}, - {SED, I, IMP }, {SBCB, M, AY }, {PLX, I, IMP }, {XCE, I, IMP }, - {JSR, I, AXI }, {SBCB, M, AX }, {INC, M, AX }, {SBCB, M, ALX } + {op::BEQ, I, RELB }, {op::SBCB,M, DIY }, {op::SBCB,M, DI }, {op::SBCB, M, SIY }, + {op::PEA, I, PEA }, {op::SBCB,M, DX }, {op::INC, M, DX }, {op::SBCB, M, DLIY}, + {op::SED, I, IMP }, {op::SBCB,M, AY }, {op::PLX, I, IMP }, {op::XCE, I, IMP }, + {op::JSR, I, AXI }, {op::SBCB,M, AX }, {op::INC, M, AX }, {op::SBCB, M, ALX } }; -static const m7700_opcode_struct g_opcodes_prefix89[256] = +const m7700_opcode_struct m7700_opcode_struct::s_opcodes_prefix89[256] = { - {BRK, I, SIG }, {MPY, M, DXI }, {COP, I, SIG }, {MPY, M, S }, - {TSB, M, D }, {MPY, M, D }, {ASL, M, D }, {MPY, M, DLI }, - {PHP, I, IMP }, {MPY, M, IMM }, {ASL, M, ACC }, {PHD, I, IMP }, - {TSB, M, A }, {MPY, M, A }, {ASL, M, A }, {MPY, M, AL }, + {op::BRK, I, SIG }, {op::MPY, M, DXI }, {op::COP, I, SIG }, {op::MPY, M, S }, + {op::TSB, M, D }, {op::MPY, M, D }, {op::ASL, M, D }, {op::MPY, M, DLI }, + {op::PHP, I, IMP }, {op::MPY, M, IMM }, {op::ASL, M, ACC }, {op::PHD, I, IMP }, + {op::TSB, M, A }, {op::MPY, M, A }, {op::ASL, M, A }, {op::MPY, M, AL }, // 0x10 - {BPL, I, RELB}, {ORA, M, DIY }, {ORA, M, DI }, {ORA, M, SIY }, - {TRB, M, D }, {MPY, M, DX }, {ASL, M, DX }, {ORA, M, DLIY}, - {CLC, I, IMP }, {MPY, M, AY }, {INA, I, IMP }, {TCS, I, IMP }, - {TRB, M, A }, {ORA, M, AX }, {ASL, M, AX }, {ORA, M, ALX }, + {op::BPL, I, RELB }, {op::ORA, M, DIY }, {op::ORA, M, DI }, {op::ORA, M, SIY }, + {op::TRB, M, D }, {op::MPY, M, DX }, {op::ASL, M, DX }, {op::ORA, M, DLIY }, + {op::CLC, I, IMP }, {op::MPY, M, AY }, {op::INA, I, IMP }, {op::TCS, I, IMP }, + {op::TRB, M, A }, {op::ORA, M, AX }, {op::ASL, M, AX }, {op::ORA, M, ALX }, // 0x20 - {JSR, I, A }, {AND, M, DXI }, {JSL, I, AL }, {AND, M, S }, - {BIT, M, D }, {AND, M, D }, {ROL, M, D }, {AND, M, DLI }, - {XAB, I, IMP }, {AND, M, IMM }, {ROL, M, ACC }, {PLD, I, IMP }, - {BIT, M, A }, {AND, M, A }, {ROL, M, A }, {AND, M, AL }, + {op::JSR, I, A }, {op::AND, M, DXI }, {op::JSL, I, AL }, {op::AND, M, S }, + {op::BIT, M, D }, {op::AND, M, D }, {op::ROL, M, D }, {op::AND, M, DLI }, + {op::XAB, I, IMP }, {op::AND, M, IMM }, {op::ROL, M, ACC }, {op::PLD, I, IMP }, + {op::BIT, M, A }, {op::AND, M, A }, {op::ROL, M, A }, {op::AND, M, AL }, // 0x30 - {BMI, I, RELB}, {AND, M, DIY }, {AND, M, DI }, {AND, M, SIY }, - {BIT, M, DX }, {AND, M, DX }, {ROL, M, DX }, {AND, M, DLIY}, - {SEC, I, IMP }, {AND, M, AY }, {DEA, I, IMP }, {TSC, I, IMP }, - {BIT, M, AX }, {AND, M, AX }, {ROL, M, AX }, {AND, M, ALX }, + {op::BMI, I, RELB }, {op::AND, M, DIY }, {op::AND, M, DI }, {op::AND, M, SIY }, + {op::BIT, M, DX }, {op::AND, M, DX }, {op::ROL, M, DX }, {op::AND, M, DLIY }, + {op::SEC, I, IMP }, {op::AND, M, AY }, {op::DEA, I, IMP }, {op::TSC, I, IMP }, + {op::BIT, M, AX }, {op::AND, M, AX }, {op::ROL, M, AX }, {op::AND, M, ALX }, // 0x40 - {RTI, I, IMP }, {EOR, M, DXI }, {WDM, I, IMP }, {EOR, M, S }, - {MVP, I, MVP }, {EOR, M, D }, {LSR, M, D }, {EOR, M, DLI }, - {PHA, I, IMP }, {RLA, M, IMM }, {LSR, M, ACC }, {PHK, I, IMP }, - {JMP, I, A }, {EOR, M, A }, {LSR, M, A }, {EOR, M, AL }, + {op::RTI, I, IMP }, {op::EOR, M, DXI }, {op::WDM, I, IMP }, {op::EOR, M, S }, + {op::MVP, I, MVP }, {op::EOR, M, D }, {op::LSR, M, D }, {op::EOR, M, DLI }, + {op::PHA, I, IMP }, {op::RLA, M, IMM }, {op::LSR, M, ACC }, {op::PHK, I, IMP }, + {op::JMP, I, A }, {op::EOR, M, A }, {op::LSR, M, A }, {op::EOR, M, AL }, // 0x50 - {BVC, I, RELB}, {EOR, M, DIY }, {EOR, M, DI }, {EOR, M, SIY }, - {MVN, I, MVN }, {EOR, M, DX }, {LSR, M, DX }, {EOR, M, DLIY}, - {CLI, I, IMP }, {EOR, M, AY }, {PHY, I, IMP }, {TCD, I, IMP }, - {JMP, I, AL }, {EOR, M, AX }, {LSR, M, AX }, {EOR, M, ALX }, + {op::BVC, I, RELB }, {op::EOR, M, DIY }, {op::EOR, M, DI }, {op::EOR, M, SIY }, + {op::MVN, I, MVN }, {op::EOR, M, DX }, {op::LSR, M, DX }, {op::EOR, M, DLIY }, + {op::CLI, I, IMP }, {op::EOR, M, AY }, {op::PHY, I, IMP }, {op::TCD, I, IMP }, + {op::JMP, I, AL }, {op::EOR, M, AX }, {op::LSR, M, AX }, {op::EOR, M, ALX }, // 0x60 - {RTS, I, IMP }, {ADC, M, DXI }, {PER, I, PER }, {ADC, M, S }, - {STZ, M, D }, {ADC, M, D }, {ROR, M, D }, {ADC, M, DLI }, - {PLA, I, IMP }, {ADC, M, IMM }, {ROR, M, ACC }, {RTL, I, IMP }, - {JMP, I, AI }, {ADC, M, A }, {ROR, M, A }, {ADC, M, AL }, + {op::RTS, I, IMP }, {op::ADC, M, DXI }, {op::PER, I, PER }, {op::ADC, M, S }, + {op::STZ, M, D }, {op::ADC, M, D }, {op::ROR, M, D }, {op::ADC, M, DLI }, + {op::PLA, I, IMP }, {op::ADC, M, IMM }, {op::ROR, M, ACC }, {op::RTL, I, IMP }, + {op::JMP, I, AI }, {op::ADC, M, A }, {op::ROR, M, A }, {op::ADC, M, AL }, // 0x70 - {BVS, I, RELB}, {ADC, M, DIY }, {ADC, M, DI }, {ADC, M, SIY }, - {STZ, M, DX }, {ADC, M, DX }, {ROR, M, DX }, {ADC, M, DLIY}, - {SEI, I, IMP }, {ADC, M, AY }, {PLY, I, IMP }, {TDC, I, IMP }, - {JMP, I, AXI }, {ADC, M, AX }, {ROR, M, AX }, {ADC, M, ALX }, + {op::BVS, I, RELB }, {op::ADC, M, DIY }, {op::ADC, M, DI }, {op::ADC, M, SIY }, + {op::STZ, M, DX }, {op::ADC, M, DX }, {op::ROR, M, DX }, {op::ADC, M, DLIY }, + {op::SEI, I, IMP }, {op::ADC, M, AY }, {op::PLY, I, IMP }, {op::TDC, I, IMP }, + {op::JMP, I, AXI }, {op::ADC, M, AX }, {op::ROR, M, AX }, {op::ADC, M, ALX }, // 0x80 - {BRA, I, RELB}, {STA, M, DXI }, {BRL, I, RELW}, {STA, M, S }, - {STY, X, D }, {STA, M, D }, {STX, X, D }, {STA, M, DLI }, - {DEY, I, IMP }, {BIT, M, IMM }, {TXA, I, IMP }, {PHB, I, IMP }, - {STY, X, A }, {STA, M, A }, {STX, X, A }, {STA, M, AL }, + {op::BRA, I, RELB }, {op::STA, M, DXI }, {op::BRL, I, RELW}, {op::STA, M, S }, + {op::STY, X, D }, {op::STA, M, D }, {op::STX, X, D }, {op::STA, M, DLI }, + {op::DEY, I, IMP }, {op::BIT, M, IMM }, {op::TXA, I, IMP }, {op::PHB, I, IMP }, + {op::STY, X, A }, {op::STA, M, A }, {op::STX, X, A }, {op::STA, M, AL }, // 0x90 - {BCC, I, RELB}, {STA, M, DIY }, {STA, M, DI }, {STA, M, SIY }, - {STY, X, DX }, {STA, M, DX }, {STX, X, DY }, {STA, M, DLIY}, - {TYA, I, IMP }, {STA, M, AY }, {TXS, I, IMP }, {TXY, I, IMP }, - {STZ, M, A }, {STA, M, AX }, {STZ, M, AX }, {STA, M, ALX }, + {op::BCC, I, RELB }, {op::STA, M, DIY }, {op::STA, M, DI }, {op::STA, M, SIY }, + {op::STY, X, DX }, {op::STA, M, DX }, {op::STX, X, DY }, {op::STA, M, DLIY }, + {op::TYA, I, IMP }, {op::STA, M, AY }, {op::TXS, I, IMP }, {op::TXY, I, IMP }, + {op::STZ, M, A }, {op::STA, M, AX }, {op::STZ, M, AX }, {op::STA, M, ALX }, // 0xA0 - {LDY, X, IMM }, {LDA, M, DXI }, {LDX, X, IMM }, {LDA, M, S }, - {LDY, X, D }, {LDA, M, D }, {LDX, X, D }, {LDA, M, DLI }, - {TAY, I, IMP }, {LDA, M, IMM }, {TAX, I, IMP }, {PLB, I, IMP }, - {LDY, X, A }, {LDA, M, A }, {LDX, X, A }, {LDA, M, AL }, + {op::LDY, X, IMM }, {op::LDA, M, DXI }, {op::LDX, X, IMM }, {op::LDA, M, S }, + {op::LDY, X, D }, {op::LDA, M, D }, {op::LDX, X, D }, {op::LDA, M, DLI }, + {op::TAY, I, IMP }, {op::LDA, M, IMM }, {op::TAX, I, IMP }, {op::PLB, I, IMP }, + {op::LDY, X, A }, {op::LDA, M, A }, {op::LDX, X, A }, {op::LDA, M, AL }, // 0xB0 - {BCS, I, RELB}, {LDA, M, DIY }, {LDA, M, DI }, {LDA, M, SIY }, - {LDY, X, DX }, {LDA, M, DX }, {LDX, X, DY }, {LDA, M, DLIY}, - {CLV, I, IMP }, {LDA, M, AY }, {TSX, I, IMP }, {TYX, I, IMP }, - {LDY, X, AX }, {LDA, M, AX }, {LDX, X, AY }, {LDA, M, ALX }, + {op::BCS, I, RELB }, {op::LDA, M, DIY }, {op::LDA, M, DI }, {op::LDA, M, SIY }, + {op::LDY, X, DX }, {op::LDA, M, DX }, {op::LDX, X, DY }, {op::LDA, M, DLIY }, + {op::CLV, I, IMP }, {op::LDA, M, AY }, {op::TSX, I, IMP }, {op::TYX, I, IMP }, + {op::LDY, X, AX }, {op::LDA, M, AX }, {op::LDX, X, AY }, {op::LDA, M, ALX }, // 0xC0 - {CPY, X, IMM }, {CMP, M, DXI }, {LDT, I, IMM }, {CMP, M, S }, - {CPY, X, D }, {CMP, M, D }, {DEC, M, D }, {CMP, M, DLI }, - {INY, I, IMP }, {CMP, M, IMM }, {DEX, I, IMP }, {WAI, I, IMP }, - {CPY, X, A }, {CMP, M, A }, {DEC, M, A }, {CMP, M, AL }, + {op::CPY, X, IMM }, {op::CMP, M, DXI }, {op::LDT, I, IMM }, {op::CMP, M, S }, + {op::CPY, X, D }, {op::CMP, M, D }, {op::DEC, M, D }, {op::CMP, M, DLI }, + {op::INY, I, IMP }, {op::CMP, M, IMM }, {op::DEX, I, IMP }, {op::WAI, I, IMP }, + {op::CPY, X, A }, {op::CMP, M, A }, {op::DEC, M, A }, {op::CMP, M, AL }, // 0xD0 - {BNE, I, RELB}, {CMP, M, DIY }, {CMP, M, DI }, {CMP, M, SIY }, - {PEI, I, PEI }, {CMP, M, DX }, {DEC, M, DX }, {CMP, M, DLIY}, - {CLD, I, IMP }, {CMP, M, AY }, {PHX, I, IMP }, {STP, I, IMP }, - {JML, I, AI }, {CMP, M, AX }, {DEC, M, AX }, {CMP, M, ALX }, + {op::BNE, I, RELB }, {op::CMP, M, DIY }, {op::CMP, M, DI }, {op::CMP, M, SIY }, + {op::PEI, I, PEI }, {op::CMP, M, DX }, {op::DEC, M, DX }, {op::CMP, M, DLIY }, + {op::CLD, I, IMP }, {op::CMP, M, AY }, {op::PHX, I, IMP }, {op::STP, I, IMP }, + {op::JML, I, AI }, {op::CMP, M, AX }, {op::DEC, M, AX }, {op::CMP, M, ALX }, // 0xE0 - {CPX, X, IMM }, {SBC, M, DXI }, {SEP, I, IMM }, {SBC, M, S }, - {CPX, X, D }, {SBC, M, D }, {INC, M, D }, {SBC, M, DLI }, - {INX, M, IMP }, {SBC, M, IMM }, {NOP, I, IMP }, {XBA, I, IMP }, - {CPX, X, A }, {SBC, M, A }, {INC, M, A }, {SBC, M, AL }, + {op::CPX, X, IMM }, {op::SBC, M, DXI }, {op::SEP, I, IMM }, {op::SBC, M, S }, + {op::CPX, X, D }, {op::SBC, M, D }, {op::INC, M, D }, {op::SBC, M, DLI }, + {op::INX, M, IMP }, {op::SBC, M, IMM }, {op::NOP, I, IMP }, {op::XBA, I, IMP }, + {op::CPX, X, A }, {op::SBC, M, A }, {op::INC, M, A }, {op::SBC, M, AL }, // 0xF0 - {BEQ, I, RELB}, {SBC, M, DIY }, {SBC, M, DI }, {SBC, M, SIY }, - {PEA, I, PEA }, {SBC, M, DX }, {INC, M, DX }, {SBC, M, DLIY}, - {SEM, I, IMP }, {SBC, M, AY }, {PLX, I, IMP }, {XCE, I, IMP }, - {JSR, I, AXI }, {SBC, M, AX }, {INC, M, AX }, {SBC, M, ALX } + {op::BEQ, I, RELB }, {op::SBC, M, DIY }, {op::SBC, M, DI }, {op::SBC, M, SIY }, + {op::PEA, I, PEA }, {op::SBC, M, DX }, {op::INC, M, DX }, {op::SBC, M, DLIY }, + {op::SEM, I, IMP }, {op::SBC, M, AY }, {op::PLX, I, IMP }, {op::XCE, I, IMP }, + {op::JSR, I, AXI }, {op::SBC, M, AX }, {op::INC, M, AX }, {op::SBC, M, ALX } }; +} // anonymous namespace + static inline unsigned int read_8(const UINT8 *oprom, unsigned int offset) { return oprom[offset]; @@ -389,33 +416,33 @@ int m7700_disassemble(char* buff, unsigned int pc, unsigned int pb, const UINT8 // check for prefixes switch (instruction) { - case 0x42: - address++; - length++; - oprom++; - instruction = read_8(oprom,0); - opcode = g_opcodes_prefix42 + instruction; - break; + case 0x42: + address++; + length++; + oprom++; + instruction = read_8(oprom,0); + opcode = &m7700_opcode_struct::get_prefix42(instruction); + break; - case 0x89: - address++; - length++; - oprom++; - instruction = read_8(oprom,0); - opcode = g_opcodes_prefix89 + instruction; - break; + case 0x89: + address++; + length++; + oprom++; + instruction = read_8(oprom,0); + opcode = &m7700_opcode_struct::get_prefix89(instruction); + break; - default: - opcode = g_opcodes + instruction; - break; + default: + opcode = &m7700_opcode_struct::get(instruction); + break; } - if (opcode->name == JSR) + if (opcode->is_call()) flags = DASMFLAG_STEP_OVER; - else if (opcode->name == RTS || opcode->name == RTI) + else if (opcode->is_return()) flags = DASMFLAG_STEP_OUT; - sprintf(buff, "%s", g_opnames[opcode->name]); + sprintf(buff, "%s", opcode->name()); ptr = buff + strlen(buff); switch(opcode->ea) diff --git a/src/devices/cpu/tlcs90/tlcs90.cpp b/src/devices/cpu/tlcs90/tlcs90.cpp index 1ee24461666..5287425c320 100644 --- a/src/devices/cpu/tlcs90/tlcs90.cpp +++ b/src/devices/cpu/tlcs90/tlcs90.cpp @@ -16,7 +16,6 @@ #include "debugger.h" #include "tlcs90.h" -enum _e_op { UNKNOWN, NOP, EX, EXX, LD, LDW, LDA, LDI, LDIR, LDD, LDDR, CPI, CPIR, CPD, CPDR, PUSH, POP, JP, JR, CALL, CALLR, RET, RETI, HALT, DI, EI, SWI, DAA, CPL, NEG, LDAR, RCF, SCF, CCF, TSET, BIT, SET, RES, INC, DEC, INCX, DECX, INCW, DECW, ADD, ADC, SUB, SBC, AND, XOR, OR, CP, RLC, RRC, RL, RR, SLA, SRA, SLL, SRL, RLD, RRD, DJNZ, MUL, DIV }; static const char *const op_names[] = { "??", "nop", "ex", "exx", "ld", "ldw", "lda", "ldi", "ldir", "ldd", "lddr", "cpi", "cpir", "cpd", "cpdr", "push", "pop", "jp", "jr", "call", "callr", "ret", "reti", "halt", "di", "ei", "swi", "daa", "cpl", "neg", "ldar", "rcf", "scf", "ccf", "tset", "bit", "set", "res", "inc", "dec", "incx", "decx", "incw", "decw", "add", "adc", "sub", "sbc", "and", "xor", "or", "cp", "rlc", "rrc", "rl", "rr", "sla", "sra", "sll", "srl", "rld", "rrd", "djnz", "mul", "div" }; ALLOW_SAVE_TYPE(tlcs90_device::e_mode); // allow save_item on a non-fundamental type diff --git a/src/devices/cpu/tlcs90/tlcs90.h b/src/devices/cpu/tlcs90/tlcs90.h index 35c5cc15c77..68f853994e9 100644 --- a/src/devices/cpu/tlcs90/tlcs90.h +++ b/src/devices/cpu/tlcs90/tlcs90.h @@ -34,6 +34,8 @@ public: TIMER_CALLBACK_MEMBER( t90_timer4_callback ); protected: + enum _e_op { UNKNOWN, NOP, EX, EXX, LD, LDW, LDA, LDI, LDIR, LDD, LDDR, CPI, CPIR, CPD, CPDR, PUSH, POP, JP, JR, CALL, CALLR, RET, RETI, HALT, DI, EI, SWI, DAA, CPL, NEG, LDAR, RCF, SCF, CCF, TSET, BIT, SET, RES, INC, DEC, INCX, DECX, INCW, DECW, ADD, ADC, SUB, SBC, AND, XOR, OR, CP, RLC, RRC, RL, RR, SLA, SRA, SLL, SRL, RLD, RRD, DJNZ, MUL, DIV }; + // device-level overrides virtual void device_start() override; virtual void device_reset() override; diff --git a/src/devices/cpu/upd7810/upd7810_dasm.cpp b/src/devices/cpu/upd7810/upd7810_dasm.cpp index a203a218462..2a078fe3dc8 100644 --- a/src/devices/cpu/upd7810/upd7810_dasm.cpp +++ b/src/devices/cpu/upd7810/upd7810_dasm.cpp @@ -12,191 +12,246 @@ #include "debugger.h" #include "upd7810.h" -struct dasm_s { - UINT8 token; - const void *args; -}; +namespace { -enum +class dasm_s { - illegal=1, - ACI, - ADC, - ADCW, - ADCX, - ADD, - ADDNC, - ADDNCW, - ADDNCX, - ADDW, - ADDX, - ADI, - ADINC, - ANA, - ANAW, - ANAX, - AND, - ANI, - ANIW, - BIT, - BLOCK, - CALB, - CALF, - CALL, - CALT, - CLC, - CLR, /* 7807 */ - CMC, /* 7807 */ - DAA, - DADC, - DADD, - DADDNC, - DAN, - DCR, - DCRW, - DCX, - DEQ, - DGT, - DI, - DIV, - DLT, - DMOV, - DNE, - DOFF, - DON, - DOR, - DRLL, - DRLR, - DSBB, - DSLL, - DSLR, - DSUB, - DSUBNB, - DXR, - EADD, - EI, - EQA, - EQAW, - EQAX, - EQI, - EQIW, - ESUB, - EX, /* 7801 */ - EXA, - EXH, - EXX, - EXR, /* 7807 */ - GTA, - GTAW, - GTAX, - GTI, - GTIW, - HALT, - IN, /* 7801 */ - INR, - INRW, - INX, - JB, - JEA, - JMP, - JR, - JRE, - LBCD, - LDAW, - LDAX, - LDEAX, - LDED, - LHLD, - LSPD, - LTA, - LTAW, - LTAX, - LTI, - LTIW, - LXI, - MOV, - MUL, - MVI, - MVIW, - MVIX, - NEA, - NEAW, - NEAX, - NEGA, - NEI, - NEIW, - NOP, - NOT, /* 7807 */ - OFFA, - OFFAW, - OFFAX, - OFFI, - OFFIW, - ONA, - ONAW, - ONAX, - ONI, - ONIW, - OR, /* 7807 */ - ORA, - ORAW, - ORAX, - ORI, - ORIW, - OUT, /* 7801 */ - PER, /* 7801 */ - PEX, /* 7801 */ - POP, - PUSH, - RET, - RETI, - RETS, - RLD, - RLL, - RLR, - RRD, - SBB, - SBBW, - SBBX, - SBCD, - SBI, - SDED, - SETB, /* 7807 */ - SHLD, - SIO, /* 7801 */ - SK, - SKIT, - SKN, - SKNIT, - SLL, - SLLC, - SLR, - SLRC, - SOFTI, - SSPD, - STAW, - STAX, - STC, - STEAX, - STM, /* 7801 */ - STOP, - SUB, - SUBNB, - SUBNBW, - SUBNBX, - SUBW, - SUBX, - SUI, - SUINB, - TABLE, - XOR, /* 7807 */ - XRA, - XRAW, - XRAX, - XRI +public: + const char *name() const { return token_names[m_token]; } + const char *args() const { return (m_token != prefix) ? reinterpret_cast(m_args) : nullptr; } + + bool is_prefix() const { return m_token == prefix; } + bool is_call() const { return (m_token == CALB) || (m_token == CALF) || (m_token == CALL) || (m_token == CALT); } + bool is_return() const { return (m_token == RET) || (m_token == RETI); } + + const dasm_s &prefix_get(UINT8 op) const { assert(m_token == prefix); return reinterpret_cast(m_args)[op]; } + + static const dasm_s XX_7810[256]; + static const dasm_s XX_7807[256]; + + static const dasm_s XX_7801[256]; + static const dasm_s XX_78c05[256]; + +protected: + enum + { + prefix = 0, + illegal, + ACI, + ADC, + ADCW, + ADCX, + ADD, + ADDNC, + ADDNCW, + ADDNCX, + ADDW, + ADDX, + ADI, + ADINC, + ANA, + ANAW, + ANAX, + AND, + ANI, + ANIW, + BIT, + BLOCK, + CALB, + CALF, + CALL, + CALT, + CLC, + CLR, /* 7807 */ + CMC, /* 7807 */ + DAA, + DADC, + DADD, + DADDNC, + DAN, + DCR, + DCRW, + DCX, + DEQ, + DGT, + DI, + DIV, + DLT, + DMOV, + DNE, + DOFF, + DON, + DOR, + DRLL, + DRLR, + DSBB, + DSLL, + DSLR, + DSUB, + DSUBNB, + DXR, + EADD, + EI, + EQA, + EQAW, + EQAX, + EQI, + EQIW, + ESUB, + EX, /* 7801 */ + EXA, + EXH, + EXX, + EXR, /* 7807 */ + GTA, + GTAW, + GTAX, + GTI, + GTIW, + HALT, + IN, /* 7801 */ + INR, + INRW, + INX, + JB, + JEA, + JMP, + JR, + JRE, + LBCD, + LDAW, + LDAX, + LDEAX, + LDED, + LHLD, + LSPD, + LTA, + LTAW, + LTAX, + LTI, + LTIW, + LXI, + MOV, + MUL, + MVI, + MVIW, + MVIX, + NEA, + NEAW, + NEAX, + NEGA, + NEI, + NEIW, + NOP, + NOT, /* 7807 */ + OFFA, + OFFAW, + OFFAX, + OFFI, + OFFIW, + ONA, + ONAW, + ONAX, + ONI, + ONIW, + OR, /* 7807 */ + ORA, + ORAW, + ORAX, + ORI, + ORIW, + OUT, /* 7801 */ + PER, /* 7801 */ + PEX, /* 7801 */ + POP, + PUSH, + RET, + RETI, + RETS, + RLD, + RLL, + RLR, + RRD, + SBB, + SBBW, + SBBX, + SBCD, + SBI, + SDED, + SETB, /* 7807 */ + SHLD, + SIO, /* 7801 */ + SK, + SKIT, + SKN, + SKNIT, + SLL, + SLLC, + SLR, + SLRC, + SOFTI, + SSPD, + STAW, + STAX, + STC, + STEAX, + STM, /* 7801 */ + STOP, + SUB, + SUBNB, + SUBNBW, + SUBNBX, + SUBW, + SUBX, + SUI, + SUINB, + TABLE, + XOR, /* 7807 */ + XRA, + XRAW, + XRAX, + XRI + }; + + dasm_s() : m_token(illegal), m_args(nullptr) { } + dasm_s(UINT8 t, const char *a) : m_token(t), m_args(a) { } + dasm_s(const dasm_s (&a)[256]) : m_token(prefix), m_args(a) { } + + UINT8 m_token; + const void *m_args; + + static const char *const token_names[]; + + static const dasm_s d48_7810[256]; + static const dasm_s d48_7807[256]; + static const dasm_s d4C_7810[256]; + static const dasm_s d4C_7807[256]; + static const dasm_s d4D_7810[256]; + static const dasm_s d4D_7807[256]; + static const dasm_s d60[256]; + static const dasm_s d64_7810[256]; + static const dasm_s d64_7807[256]; + static const dasm_s d70[256]; + static const dasm_s d74[256]; + + static const dasm_s d48_7801[256]; + static const dasm_s d4C_7801[256]; + static const dasm_s d4D_7801[256]; + static const dasm_s d60_7801[256]; + static const dasm_s d64_7801[256]; + static const dasm_s d70_7801[256]; + static const dasm_s d74_7801[256]; + + static const dasm_s d48_78c05[256]; + static const dasm_s d4C_78c05[256]; + static const dasm_s d4D_78c05[256]; + static const dasm_s d60_78c05[256]; + static const dasm_s d64_78c05[256]; + static const dasm_s d70_78c05[256]; + static const dasm_s d74_78c05[256]; }; -static const char *const token[] = +const char *const dasm_s::token_names[] = { "", "illegal", @@ -377,3586 +432,3586 @@ static const char *const token[] = }; -/* prefix 48 */ -static const struct dasm_s dasm48_7810[256] = +// prefix 48 +const dasm_s dasm_s::d48_7810[256] = { - {illegal,nullptr }, /* 00: 0100 1000 0000 0000 */ - {SLRC,"A" }, /* 01: 0100 1000 0000 0001 */ - {SLRC,"B" }, /* 02: 0100 1000 0000 0010 */ - {SLRC,"C" }, /* 03: 0100 1000 0000 0011 */ - {illegal,nullptr }, /* 04: 0100 1000 0000 0100 */ - {SLLC,"A" }, /* 05: 0100 1000 0000 0101 */ - {SLLC,"B" }, /* 06: 0100 1000 0000 0110 */ - {SLLC,"C" }, /* 07: 0100 1000 0000 0111 */ - {SK,"NV" }, /* 08: 0100 1000 0000 1000 */ - {illegal,nullptr }, /* 09: 0100 1000 0000 1001 */ - {SK,"CY" }, /* 0a: 0100 1000 0000 1010 */ - {SK,"HC" }, /* 0b: 0100 1000 0000 1011 */ - {SK,"Z" }, /* 0c: 0100 1000 0000 1100 */ - {illegal,nullptr }, /* 0d: 0100 1000 0000 1101 */ - {illegal,nullptr }, /* 0e: 0100 1000 0000 1110 */ - {illegal,nullptr }, /* 0f: 0100 1000 0000 1111 */ + { }, // 00: 0100 1000 0000 0000 + {SLRC, "A" }, // 01: 0100 1000 0000 0001 + {SLRC, "B" }, // 02: 0100 1000 0000 0010 + {SLRC, "C" }, // 03: 0100 1000 0000 0011 + { }, // 04: 0100 1000 0000 0100 + {SLLC, "A" }, // 05: 0100 1000 0000 0101 + {SLLC, "B" }, // 06: 0100 1000 0000 0110 + {SLLC, "C" }, // 07: 0100 1000 0000 0111 + {SK, "NV" }, // 08: 0100 1000 0000 1000 + { }, // 09: 0100 1000 0000 1001 + {SK, "CY" }, // 0a: 0100 1000 0000 1010 + {SK, "HC" }, // 0b: 0100 1000 0000 1011 + {SK, "Z" }, // 0c: 0100 1000 0000 1100 + { }, // 0d: 0100 1000 0000 1101 + { }, // 0e: 0100 1000 0000 1110 + { }, // 0f: 0100 1000 0000 1111 - {illegal,nullptr }, /* 10: 0100 1000 0001 0000 */ - {illegal,nullptr }, /* 11: 0100 1000 0001 0001 */ - {illegal,nullptr }, /* 12: 0100 1000 0001 0010 */ - {illegal,nullptr }, /* 13: 0100 1000 0001 0011 */ - {illegal,nullptr }, /* 14: 0100 1000 0001 0100 */ - {illegal,nullptr }, /* 15: 0100 1000 0001 0101 */ - {illegal,nullptr }, /* 16: 0100 1000 0001 0110 */ - {illegal,nullptr }, /* 17: 0100 1000 0001 0111 */ - {SKN,"NV" }, /* 18: 0100 1000 0001 1000 */ - {illegal,nullptr }, /* 19: 0100 1000 0001 1001 */ - {SKN,"CY" }, /* 1a: 0100 1000 0001 1010 */ - {SKN,"HC" }, /* 1b: 0100 1000 0001 1011 */ - {SKN,"Z" }, /* 1c: 0100 1000 0001 1100 */ - {illegal,nullptr }, /* 1d: 0100 1000 0001 1101 */ - {illegal,nullptr }, /* 1e: 0100 1000 0001 1110 */ - {illegal,nullptr }, /* 1f: 0100 1000 0001 1111 */ + { }, // 10: 0100 1000 0001 0000 + { }, // 11: 0100 1000 0001 0001 + { }, // 12: 0100 1000 0001 0010 + { }, // 13: 0100 1000 0001 0011 + { }, // 14: 0100 1000 0001 0100 + { }, // 15: 0100 1000 0001 0101 + { }, // 16: 0100 1000 0001 0110 + { }, // 17: 0100 1000 0001 0111 + {SKN, "NV" }, // 18: 0100 1000 0001 1000 + { }, // 19: 0100 1000 0001 1001 + {SKN, "CY" }, // 1a: 0100 1000 0001 1010 + {SKN, "HC" }, // 1b: 0100 1000 0001 1011 + {SKN, "Z" }, // 1c: 0100 1000 0001 1100 + { }, // 1d: 0100 1000 0001 1101 + { }, // 1e: 0100 1000 0001 1110 + { }, // 1f: 0100 1000 0001 1111 - {illegal,nullptr }, /* 20: 0100 1000 0010 0000 */ - {SLR,"A" }, /* 21: 0100 1000 0010 0001 */ - {SLR,"B" }, /* 22: 0100 1000 0010 0010 */ - {SLR,"C" }, /* 23: 0100 1000 0010 0011 */ - {illegal,nullptr }, /* 24: 0100 1000 0010 0100 */ - {SLL,"A" }, /* 25: 0100 1000 0010 0101 */ - {SLL,"B" }, /* 26: 0100 1000 0010 0110 */ - {SLL,"C" }, /* 27: 0100 1000 0010 0111 */ - {JEA,nullptr }, /* 28: 0100 1000 0010 1000 */ - {CALB,nullptr }, /* 29: 0100 1000 0010 1001 */ - {CLC,nullptr }, /* 2a: 0100 1000 0010 1010 */ - {STC,nullptr }, /* 2b: 0100 1000 0010 1011 */ - {illegal,nullptr }, /* 2c: 0100 1000 0010 1100 */ - {MUL,"A" }, /* 2d: 0100 1000 0010 1101 */ - {MUL,"B" }, /* 2e: 0100 1000 0010 1110 */ - {MUL,"C" }, /* 2f: 0100 1000 0010 1111 */ + { }, // 20: 0100 1000 0010 0000 + {SLR, "A" }, // 21: 0100 1000 0010 0001 + {SLR, "B" }, // 22: 0100 1000 0010 0010 + {SLR, "C" }, // 23: 0100 1000 0010 0011 + { }, // 24: 0100 1000 0010 0100 + {SLL, "A" }, // 25: 0100 1000 0010 0101 + {SLL, "B" }, // 26: 0100 1000 0010 0110 + {SLL, "C" }, // 27: 0100 1000 0010 0111 + {JEA, nullptr }, // 28: 0100 1000 0010 1000 + {CALB,nullptr }, // 29: 0100 1000 0010 1001 + {CLC, nullptr }, // 2a: 0100 1000 0010 1010 + {STC, nullptr }, // 2b: 0100 1000 0010 1011 + { }, // 2c: 0100 1000 0010 1100 + {MUL, "A" }, // 2d: 0100 1000 0010 1101 + {MUL, "B" }, // 2e: 0100 1000 0010 1110 + {MUL, "C" }, // 2f: 0100 1000 0010 1111 - {illegal,nullptr }, /* 30: 0100 1000 0011 0000 */ - {RLR,"A" }, /* 31: 0100 1000 0011 0001 */ - {RLR,"B" }, /* 32: 0100 1000 0011 0010 */ - {RLR,"C" }, /* 33: 0100 1000 0011 0011 */ - {illegal,nullptr }, /* 34: 0100 1000 0011 0100 */ - {RLL,"A" }, /* 35: 0100 1000 0011 0101 */ - {RLL,"B" }, /* 36: 0100 1000 0011 0110 */ - {RLL,"C" }, /* 37: 0100 1000 0011 0111 */ - {RLD,nullptr }, /* 38: 0100 1000 0011 1000 */ - {RRD,nullptr }, /* 39: 0100 1000 0011 1001 */ - {NEGA,nullptr }, /* 3a: 0100 1000 0011 1010 */ - {HALT,nullptr }, /* 3b: 0100 1000 0011 1011 */ - {illegal,nullptr }, /* 3c: 0100 1000 0011 1100 */ - {DIV,"A" }, /* 3d: 0100 1000 0011 1101 */ - {DIV,"B" }, /* 3e: 0100 1000 0011 1110 */ - {DIV,"C" }, /* 3f: 0100 1000 0011 1111 */ + { }, // 30: 0100 1000 0011 0000 + {RLR, "A" }, // 31: 0100 1000 0011 0001 + {RLR, "B" }, // 32: 0100 1000 0011 0010 + {RLR, "C" }, // 33: 0100 1000 0011 0011 + { }, // 34: 0100 1000 0011 0100 + {RLL, "A" }, // 35: 0100 1000 0011 0101 + {RLL, "B" }, // 36: 0100 1000 0011 0110 + {RLL, "C" }, // 37: 0100 1000 0011 0111 + {RLD, nullptr }, // 38: 0100 1000 0011 1000 + {RRD, nullptr }, // 39: 0100 1000 0011 1001 + {NEGA, nullptr }, // 3a: 0100 1000 0011 1010 + {HALT, nullptr }, // 3b: 0100 1000 0011 1011 + { }, // 3c: 0100 1000 0011 1100 + {DIV, "A" }, // 3d: 0100 1000 0011 1101 + {DIV, "B" }, // 3e: 0100 1000 0011 1110 + {DIV, "C" }, // 3f: 0100 1000 0011 1111 - {SKIT,"NMI" }, /* 40: 0100 1000 0100 0000 */ - {SKIT,"FT0" }, /* 41: 0100 1000 0100 0001 */ - {SKIT,"FT1" }, /* 42: 0100 1000 0100 0010 */ - {SKIT,"F1" }, /* 43: 0100 1000 0100 0011 */ - {SKIT,"F2" }, /* 44: 0100 1000 0100 0100 */ - {SKIT,"FE0" }, /* 45: 0100 1000 0100 0101 */ - {SKIT,"FE1" }, /* 46: 0100 1000 0100 0110 */ - {SKIT,"FEIN" }, /* 47: 0100 1000 0100 0111 */ - {SKIT,"FAD" }, /* 48: 0100 1000 0100 1000 */ - {SKIT,"FSR" }, /* 49: 0100 1000 0100 1001 */ - {SKIT,"FST" }, /* 4a: 0100 1000 0100 1010 */ - {SKIT,"ER" }, /* 4b: 0100 1000 0100 1011 */ - {SKIT,"OV" }, /* 4c: 0100 1000 0100 1100 */ - {illegal,nullptr }, /* 4d: 0100 1000 0100 1101 */ - {illegal,nullptr }, /* 4e: 0100 1000 0100 1110 */ - {illegal,nullptr }, /* 4f: 0100 1000 0100 1111 */ + {SKIT, "NMI" }, // 40: 0100 1000 0100 0000 + {SKIT, "FT0" }, // 41: 0100 1000 0100 0001 + {SKIT, "FT1" }, // 42: 0100 1000 0100 0010 + {SKIT, "F1" }, // 43: 0100 1000 0100 0011 + {SKIT, "F2" }, // 44: 0100 1000 0100 0100 + {SKIT, "FE0" }, // 45: 0100 1000 0100 0101 + {SKIT, "FE1" }, // 46: 0100 1000 0100 0110 + {SKIT, "FEIN" }, // 47: 0100 1000 0100 0111 + {SKIT, "FAD" }, // 48: 0100 1000 0100 1000 + {SKIT, "FSR" }, // 49: 0100 1000 0100 1001 + {SKIT, "FST" }, // 4a: 0100 1000 0100 1010 + {SKIT, "ER" }, // 4b: 0100 1000 0100 1011 + {SKIT, "OV" }, // 4c: 0100 1000 0100 1100 + { }, // 4d: 0100 1000 0100 1101 + { }, // 4e: 0100 1000 0100 1110 + { }, // 4f: 0100 1000 0100 1111 - {SKIT,"AN4" }, /* 50: 0100 1000 0101 0000 */ - {SKIT,"AN5" }, /* 51: 0100 1000 0101 0001 */ - {SKIT,"AN6" }, /* 52: 0100 1000 0101 0010 */ - {SKIT,"AN7" }, /* 53: 0100 1000 0101 0011 */ - {SKIT,"SB" }, /* 54: 0100 1000 0101 0100 */ - {illegal,nullptr }, /* 55: 0100 1000 0101 0101 */ - {illegal,nullptr }, /* 56: 0100 1000 0101 0110 */ - {illegal,nullptr }, /* 57: 0100 1000 0101 0111 */ - {illegal,nullptr }, /* 58: 0100 1000 0101 1000 */ - {illegal,nullptr }, /* 59: 0100 1000 0101 1001 */ - {illegal,nullptr }, /* 5a: 0100 1000 0101 1010 */ - {illegal,nullptr }, /* 5b: 0100 1000 0101 1011 */ - {illegal,nullptr }, /* 5c: 0100 1000 0101 1100 */ - {illegal,nullptr }, /* 5d: 0100 1000 0101 1101 */ - {illegal,nullptr }, /* 5e: 0100 1000 0101 1110 */ - {illegal,nullptr }, /* 5f: 0100 1000 0101 1111 */ + {SKIT, "AN4" }, // 50: 0100 1000 0101 0000 + {SKIT, "AN5" }, // 51: 0100 1000 0101 0001 + {SKIT, "AN6" }, // 52: 0100 1000 0101 0010 + {SKIT, "AN7" }, // 53: 0100 1000 0101 0011 + {SKIT, "SB" }, // 54: 0100 1000 0101 0100 + { }, // 55: 0100 1000 0101 0101 + { }, // 56: 0100 1000 0101 0110 + { }, // 57: 0100 1000 0101 0111 + { }, // 58: 0100 1000 0101 1000 + { }, // 59: 0100 1000 0101 1001 + { }, // 5a: 0100 1000 0101 1010 + { }, // 5b: 0100 1000 0101 1011 + { }, // 5c: 0100 1000 0101 1100 + { }, // 5d: 0100 1000 0101 1101 + { }, // 5e: 0100 1000 0101 1110 + { }, // 5f: 0100 1000 0101 1111 - {SKNIT,"NMI" }, /* 60: 0100 1000 0110 0000 */ - {SKNIT,"FT0" }, /* 61: 0100 1000 0110 0001 */ - {SKNIT,"FT1" }, /* 62: 0100 1000 0110 0010 */ - {SKNIT,"F1" }, /* 63: 0100 1000 0110 0011 */ - {SKNIT,"F2" }, /* 64: 0100 1000 0110 0100 */ - {SKNIT,"FE0" }, /* 65: 0100 1000 0110 0101 */ - {SKNIT,"FE1" }, /* 66: 0100 1000 0110 0110 */ - {SKNIT,"FEIN" }, /* 67: 0100 1000 0110 0111 */ - {SKNIT,"FAD" }, /* 68: 0100 1000 0110 1000 */ - {SKNIT,"FSR" }, /* 69: 0100 1000 0110 1001 */ - {SKNIT,"FST" }, /* 6a: 0100 1000 0110 1010 */ - {SKNIT,"ER" }, /* 6b: 0100 1000 0110 1011 */ - {SKNIT,"OV" }, /* 6c: 0100 1000 0110 1100 */ - {illegal,nullptr }, /* 6d: 0100 1000 0110 1101 */ - {illegal,nullptr }, /* 6e: 0100 1000 0110 1110 */ - {illegal,nullptr }, /* 6f: 0100 1000 0110 1111 */ + {SKNIT, "NMI" }, // 60: 0100 1000 0110 0000 + {SKNIT, "FT0" }, // 61: 0100 1000 0110 0001 + {SKNIT, "FT1" }, // 62: 0100 1000 0110 0010 + {SKNIT, "F1" }, // 63: 0100 1000 0110 0011 + {SKNIT, "F2" }, // 64: 0100 1000 0110 0100 + {SKNIT, "FE0" }, // 65: 0100 1000 0110 0101 + {SKNIT, "FE1" }, // 66: 0100 1000 0110 0110 + {SKNIT, "FEIN" }, // 67: 0100 1000 0110 0111 + {SKNIT, "FAD" }, // 68: 0100 1000 0110 1000 + {SKNIT, "FSR" }, // 69: 0100 1000 0110 1001 + {SKNIT, "FST" }, // 6a: 0100 1000 0110 1010 + {SKNIT, "ER" }, // 6b: 0100 1000 0110 1011 + {SKNIT, "OV" }, // 6c: 0100 1000 0110 1100 + { }, // 6d: 0100 1000 0110 1101 + { }, // 6e: 0100 1000 0110 1110 + { }, // 6f: 0100 1000 0110 1111 - {SKNIT,"AN4" }, /* 70: 0100 1000 0111 0000 */ - {SKNIT,"AN5" }, /* 71: 0100 1000 0111 0001 */ - {SKNIT,"AN6" }, /* 72: 0100 1000 0111 0010 */ - {SKNIT,"AN7" }, /* 73: 0100 1000 0111 0011 */ - {SKNIT,"SB" }, /* 74: 0100 1000 0111 0100 */ - {illegal,nullptr }, /* 75: 0100 1000 0111 0101 */ - {illegal,nullptr }, /* 76: 0100 1000 0111 0110 */ - {illegal,nullptr }, /* 77: 0100 1000 0111 0111 */ - {illegal,nullptr }, /* 78: 0100 1000 0111 1000 */ - {illegal,nullptr }, /* 79: 0100 1000 0111 1001 */ - {illegal,nullptr }, /* 7a: 0100 1000 0111 1010 */ - {illegal,nullptr }, /* 7b: 0100 1000 0111 1011 */ - {illegal,nullptr }, /* 7c: 0100 1000 0111 1100 */ - {illegal,nullptr }, /* 7d: 0100 1000 0111 1101 */ - {illegal,nullptr }, /* 7e: 0100 1000 0111 1110 */ - {illegal,nullptr }, /* 7f: 0100 1000 0111 1111 */ + {SKNIT, "AN4" }, // 70: 0100 1000 0111 0000 + {SKNIT, "AN5" }, // 71: 0100 1000 0111 0001 + {SKNIT, "AN6" }, // 72: 0100 1000 0111 0010 + {SKNIT, "AN7" }, // 73: 0100 1000 0111 0011 + {SKNIT, "SB" }, // 74: 0100 1000 0111 0100 + { }, // 75: 0100 1000 0111 0101 + { }, // 76: 0100 1000 0111 0110 + { }, // 77: 0100 1000 0111 0111 + { }, // 78: 0100 1000 0111 1000 + { }, // 79: 0100 1000 0111 1001 + { }, // 7a: 0100 1000 0111 1010 + { }, // 7b: 0100 1000 0111 1011 + { }, // 7c: 0100 1000 0111 1100 + { }, // 7d: 0100 1000 0111 1101 + { }, // 7e: 0100 1000 0111 1110 + { }, // 7f: 0100 1000 0111 1111 - {illegal,nullptr }, /* 80: 0100 1000 1000 0000 */ - {illegal,nullptr }, /* 81: 0100 1000 1000 0001 */ - {LDEAX,"(DE)" }, /* 82: 0100 1000 1000 0010 */ - {LDEAX,"(HL)" }, /* 83: 0100 1000 1000 0011 */ - {LDEAX,"(DE++)" }, /* 84: 0100 1000 1000 0100 */ - {LDEAX,"(HL++)" }, /* 85: 0100 1000 1000 0101 */ - {illegal,nullptr }, /* 86: 0100 1000 1000 0110 */ - {illegal,nullptr }, /* 87: 0100 1000 1000 0111 */ - {illegal,nullptr }, /* 88: 0100 1000 1000 1000 */ - {illegal,nullptr }, /* 89: 0100 1000 1000 1001 */ - {illegal,nullptr }, /* 8a: 0100 1000 1000 1010 */ - {LDEAX,"(DE+%b)"}, /* 8b: 0100 1000 1000 1011 xxxx xxxx */ - {LDEAX,"(HL+A)" }, /* 8c: 0100 1000 1000 1100 */ - {LDEAX,"(HL+B)" }, /* 8d: 0100 1000 1000 1101 */ - {LDEAX,"(HL+EA)"}, /* 8e: 0100 1000 1000 1110 */ - {LDEAX,"(HL+%b)"}, /* 8f: 0100 1000 1000 1111 xxxx xxxx */ + { }, // 80: 0100 1000 1000 0000 + { }, // 81: 0100 1000 1000 0001 + {LDEAX, "(DE)" }, // 82: 0100 1000 1000 0010 + {LDEAX, "(HL)" }, // 83: 0100 1000 1000 0011 + {LDEAX, "(DE++)" }, // 84: 0100 1000 1000 0100 + {LDEAX, "(HL++)" }, // 85: 0100 1000 1000 0101 + { }, // 86: 0100 1000 1000 0110 + { }, // 87: 0100 1000 1000 0111 + { }, // 88: 0100 1000 1000 1000 + { }, // 89: 0100 1000 1000 1001 + { }, // 8a: 0100 1000 1000 1010 + {LDEAX, "(DE+%b)" }, // 8b: 0100 1000 1000 1011 xxxx xxxx + {LDEAX, "(HL+A)" }, // 8c: 0100 1000 1000 1100 + {LDEAX, "(HL+B)" }, // 8d: 0100 1000 1000 1101 + {LDEAX, "(HL+EA)" }, // 8e: 0100 1000 1000 1110 + {LDEAX, "(HL+%b)" }, // 8f: 0100 1000 1000 1111 xxxx xxxx - {illegal,nullptr }, /* 90: 0100 1000 1000 0000 */ - {illegal,nullptr }, /* 91: 0100 1000 1000 0001 */ - {STEAX,"(DE)" }, /* 92: 0100 1000 1000 0010 */ - {STEAX,"(HL)" }, /* 93: 0100 1000 1000 0011 */ - {STEAX,"(DE++)" }, /* 94: 0100 1000 1000 0100 */ - {STEAX,"(HL++)" }, /* 95: 0100 1000 1000 0101 */ - {illegal,nullptr }, /* 96: 0100 1000 1000 0110 */ - {illegal,nullptr }, /* 97: 0100 1000 1000 0111 */ - {illegal,nullptr }, /* 98: 0100 1000 1000 1000 */ - {illegal,nullptr }, /* 99: 0100 1000 1000 1001 */ - {illegal,nullptr }, /* 9a: 0100 1000 1000 1010 */ - {STEAX,"(DE+%b)"}, /* 9b: 0100 1000 1000 1011 xxxx xxxx */ - {STEAX,"(HL+A)" }, /* 9c: 0100 1000 1000 1100 */ - {STEAX,"(HL+B)" }, /* 9d: 0100 1000 1000 1101 */ - {STEAX,"(HL+EA)"}, /* 9e: 0100 1000 1000 1110 */ - {STEAX,"(HL+%b)"}, /* 9f: 0100 1000 1000 1111 xxxx xxxx */ + { }, // 90: 0100 1000 1000 0000 + { }, // 91: 0100 1000 1000 0001 + {STEAX, "(DE)" }, // 92: 0100 1000 1000 0010 + {STEAX, "(HL)" }, // 93: 0100 1000 1000 0011 + {STEAX, "(DE++)" }, // 94: 0100 1000 1000 0100 + {STEAX, "(HL++)" }, // 95: 0100 1000 1000 0101 + { }, // 96: 0100 1000 1000 0110 + { }, // 97: 0100 1000 1000 0111 + { }, // 98: 0100 1000 1000 1000 + { }, // 99: 0100 1000 1000 1001 + { }, // 9a: 0100 1000 1000 1010 + {STEAX, "(DE+%b)" }, // 9b: 0100 1000 1000 1011 xxxx xxxx + {STEAX, "(HL+A)" }, // 9c: 0100 1000 1000 1100 + {STEAX, "(HL+B)" }, // 9d: 0100 1000 1000 1101 + {STEAX, "(HL+EA)" }, // 9e: 0100 1000 1000 1110 + {STEAX, "(HL+%b)" }, // 9f: 0100 1000 1000 1111 xxxx xxxx - {DSLR,"EA" }, /* a0: 0100 1000 1010 0000 */ - {illegal,nullptr }, /* a1: 0100 1000 1010 0001 */ - {illegal,nullptr }, /* a2: 0100 1000 1010 0010 */ - {illegal,nullptr }, /* a3: 0100 1000 1010 0011 */ - {DSLL,"EA" }, /* a4: 0100 1000 1010 0100 */ - {illegal,nullptr }, /* a5: 0100 1000 1010 0101 */ - {illegal,nullptr }, /* a6: 0100 1000 1010 0110 */ - {illegal,nullptr }, /* a7: 0100 1000 1010 0111 */ - {TABLE,nullptr }, /* a8: 0100 1000 1010 1000 */ - {illegal,nullptr }, /* a9: 0100 1000 1010 1001 */ - {illegal,nullptr }, /* aa: 0100 1000 1010 1010 */ - {illegal,nullptr }, /* ab: 0100 1000 1010 1011 */ - {illegal,nullptr }, /* ac: 0100 1000 1010 1100 */ - {illegal,nullptr }, /* ad: 0100 1000 1010 1101 */ - {illegal,nullptr }, /* ae: 0100 1000 1010 1110 */ - {illegal,nullptr }, /* af: 0100 1000 1010 1111 */ + {DSLR, "EA" }, // a0: 0100 1000 1010 0000 + { }, // a1: 0100 1000 1010 0001 + { }, // a2: 0100 1000 1010 0010 + { }, // a3: 0100 1000 1010 0011 + {DSLL, "EA" }, // a4: 0100 1000 1010 0100 + { }, // a5: 0100 1000 1010 0101 + { }, // a6: 0100 1000 1010 0110 + { }, // a7: 0100 1000 1010 0111 + {TABLE, nullptr }, // a8: 0100 1000 1010 1000 + { }, // a9: 0100 1000 1010 1001 + { }, // aa: 0100 1000 1010 1010 + { }, // ab: 0100 1000 1010 1011 + { }, // ac: 0100 1000 1010 1100 + { }, // ad: 0100 1000 1010 1101 + { }, // ae: 0100 1000 1010 1110 + { }, // af: 0100 1000 1010 1111 - {DRLR,"EA" }, /* b0: 0100 1000 1011 0000 */ - {illegal,nullptr }, /* b1: 0100 1000 1011 0001 */ - {illegal,nullptr }, /* b2: 0100 1000 1011 0010 */ - {illegal,nullptr }, /* b3: 0100 1000 1011 0011 */ - {DRLL,"EA" }, /* b4: 0100 1000 1011 0100 */ - {illegal,nullptr }, /* b5: 0100 1000 1011 0101 */ - {illegal,nullptr }, /* b6: 0100 1000 1011 0110 */ - {illegal,nullptr }, /* b7: 0100 1000 1011 0111 */ - {illegal,nullptr }, /* b8: 0100 1000 1011 1000 */ - {illegal,nullptr }, /* b9: 0100 1000 1011 1001 */ - {illegal,nullptr }, /* ba: 0100 1000 1011 1010 */ - {STOP,nullptr }, /* bb: 0100 1000 1011 1011 */ /* 7810 */ - {illegal,nullptr }, /* bc: 0100 1000 1011 1100 */ - {illegal,nullptr }, /* bd: 0100 1000 1011 1101 */ - {illegal,nullptr }, /* be: 0100 1000 1011 1110 */ - {illegal,nullptr }, /* bf: 0100 1000 1011 1111 */ + {DRLR, "EA" }, // b0: 0100 1000 1011 0000 + { }, // b1: 0100 1000 1011 0001 + { }, // b2: 0100 1000 1011 0010 + { }, // b3: 0100 1000 1011 0011 + {DRLL, "EA" }, // b4: 0100 1000 1011 0100 + { }, // b5: 0100 1000 1011 0101 + { }, // b6: 0100 1000 1011 0110 + { }, // b7: 0100 1000 1011 0111 + { }, // b8: 0100 1000 1011 1000 + { }, // b9: 0100 1000 1011 1001 + { }, // ba: 0100 1000 1011 1010 + {STOP, nullptr }, // bb: 0100 1000 1011 1011 7810 + { }, // bc: 0100 1000 1011 1100 + { }, // bd: 0100 1000 1011 1101 + { }, // be: 0100 1000 1011 1110 + { }, // bf: 0100 1000 1011 1111 - {DMOV,"EA,ECNT" }, /* c0: 0100 1000 1100 0000 */ - {DMOV,"EA,ECPT" }, /* c1: 0100 1000 1100 0001 */ /* 7810 */ - {illegal,nullptr }, /* c2: 0100 1000 1100 0010 */ - {illegal,nullptr }, /* c3: 0100 1000 1100 0011 */ - {illegal,nullptr }, /* c4: 0100 1000 1100 0100 */ - {illegal,nullptr }, /* c5: 0100 1000 1100 0101 */ - {illegal,nullptr }, /* c6: 0100 1000 1100 0110 */ - {illegal,nullptr }, /* c7: 0100 1000 1100 0111 */ - {illegal,nullptr }, /* c8: 0100 1000 1100 1000 */ - {illegal,nullptr }, /* c9: 0100 1000 1100 1001 */ - {illegal,nullptr }, /* ca: 0100 1000 1100 1010 */ - {illegal,nullptr }, /* cb: 0100 1000 1100 1011 */ - {illegal,nullptr }, /* cc: 0100 1000 1100 1100 */ - {illegal,nullptr }, /* cd: 0100 1000 1100 1101 */ - {illegal,nullptr }, /* ce: 0100 1000 1100 1110 */ - {illegal,nullptr }, /* cf: 0100 1000 1100 1111 */ + {DMOV, "EA,ECNT" }, // c0: 0100 1000 1100 0000 + {DMOV, "EA,ECPT" }, // c1: 0100 1000 1100 0001 7810 + { }, // c2: 0100 1000 1100 0010 + { }, // c3: 0100 1000 1100 0011 + { }, // c4: 0100 1000 1100 0100 + { }, // c5: 0100 1000 1100 0101 + { }, // c6: 0100 1000 1100 0110 + { }, // c7: 0100 1000 1100 0111 + { }, // c8: 0100 1000 1100 1000 + { }, // c9: 0100 1000 1100 1001 + { }, // ca: 0100 1000 1100 1010 + { }, // cb: 0100 1000 1100 1011 + { }, // cc: 0100 1000 1100 1100 + { }, // cd: 0100 1000 1100 1101 + { }, // ce: 0100 1000 1100 1110 + { }, // cf: 0100 1000 1100 1111 - {illegal,nullptr }, /* d0: 0100 1000 1101 0000 */ - {illegal,nullptr }, /* d1: 0100 1000 1101 0001 */ - {DMOV,"ETM0,EA" }, /* d2: 0100 1000 1101 0010 */ - {DMOV,"ETM1,EA" }, /* d3: 0100 1000 1101 0011 */ - {illegal,nullptr }, /* d4: 0100 1000 1101 0100 */ - {illegal,nullptr }, /* d5: 0100 1000 1101 0101 */ - {illegal,nullptr }, /* d6: 0100 1000 1101 0110 */ - {illegal,nullptr }, /* d7: 0100 1000 1101 0111 */ - {illegal,nullptr }, /* d8: 0100 1000 1101 1000 */ - {illegal,nullptr }, /* d9: 0100 1000 1101 1001 */ - {illegal,nullptr }, /* da: 0100 1000 1101 1010 */ - {illegal,nullptr }, /* db: 0100 1000 1101 1011 */ - {illegal,nullptr }, /* dc: 0100 1000 1101 1100 */ - {illegal,nullptr }, /* dd: 0100 1000 1101 1101 */ - {illegal,nullptr }, /* de: 0100 1000 1101 1110 */ - {illegal,nullptr }, /* df: 0100 1000 1101 1111 */ + { }, // d0: 0100 1000 1101 0000 + { }, // d1: 0100 1000 1101 0001 + {DMOV, "ETM0,EA" }, // d2: 0100 1000 1101 0010 + {DMOV, "ETM1,EA" }, // d3: 0100 1000 1101 0011 + { }, // d4: 0100 1000 1101 0100 + { }, // d5: 0100 1000 1101 0101 + { }, // d6: 0100 1000 1101 0110 + { }, // d7: 0100 1000 1101 0111 + { }, // d8: 0100 1000 1101 1000 + { }, // d9: 0100 1000 1101 1001 + { }, // da: 0100 1000 1101 1010 + { }, // db: 0100 1000 1101 1011 + { }, // dc: 0100 1000 1101 1100 + { }, // dd: 0100 1000 1101 1101 + { }, // de: 0100 1000 1101 1110 + { }, // df: 0100 1000 1101 1111 - {illegal,nullptr }, /* e0: 0100 1000 1110 0000 */ - {illegal,nullptr }, /* e1: 0100 1000 1110 0001 */ - {illegal,nullptr }, /* e2: 0100 1000 1110 0010 */ - {illegal,nullptr }, /* e3: 0100 1000 1110 0011 */ - {illegal,nullptr }, /* e4: 0100 1000 1110 0100 */ - {illegal,nullptr }, /* e5: 0100 1000 1110 0101 */ - {illegal,nullptr }, /* e6: 0100 1000 1110 0110 */ - {illegal,nullptr }, /* e7: 0100 1000 1110 0111 */ - {illegal,nullptr }, /* e8: 0100 1000 1110 1000 */ - {illegal,nullptr }, /* e9: 0100 1000 1110 1001 */ - {illegal,nullptr }, /* ea: 0100 1000 1110 1010 */ - {illegal,nullptr }, /* eb: 0100 1000 1110 1011 */ - {illegal,nullptr }, /* ec: 0100 1000 1110 1100 */ - {illegal,nullptr }, /* ed: 0100 1000 1110 1101 */ - {illegal,nullptr }, /* ee: 0100 1000 1110 1110 */ - {illegal,nullptr }, /* ef: 0100 1000 1110 1111 */ + { }, // e0: 0100 1000 1110 0000 + { }, // e1: 0100 1000 1110 0001 + { }, // e2: 0100 1000 1110 0010 + { }, // e3: 0100 1000 1110 0011 + { }, // e4: 0100 1000 1110 0100 + { }, // e5: 0100 1000 1110 0101 + { }, // e6: 0100 1000 1110 0110 + { }, // e7: 0100 1000 1110 0111 + { }, // e8: 0100 1000 1110 1000 + { }, // e9: 0100 1000 1110 1001 + { }, // ea: 0100 1000 1110 1010 + { }, // eb: 0100 1000 1110 1011 + { }, // ec: 0100 1000 1110 1100 + { }, // ed: 0100 1000 1110 1101 + { }, // ee: 0100 1000 1110 1110 + { }, // ef: 0100 1000 1110 1111 - {illegal,nullptr }, /* f0: 0100 1000 1111 0000 */ - {illegal,nullptr }, /* f1: 0100 1000 1111 0001 */ - {illegal,nullptr }, /* f2: 0100 1000 1111 0010 */ - {illegal,nullptr }, /* f3: 0100 1000 1111 0011 */ - {illegal,nullptr }, /* f4: 0100 1000 1111 0100 */ - {illegal,nullptr }, /* f5: 0100 1000 1111 0101 */ - {illegal,nullptr }, /* f6: 0100 1000 1111 0110 */ - {illegal,nullptr }, /* f7: 0100 1000 1111 0111 */ - {illegal,nullptr }, /* f8: 0100 1000 1111 1000 */ - {illegal,nullptr }, /* f9: 0100 1000 1111 1001 */ - {illegal,nullptr }, /* fa: 0100 1000 1111 1010 */ - {illegal,nullptr }, /* fb: 0100 1000 1111 1011 */ - {illegal,nullptr }, /* fc: 0100 1000 1111 1100 */ - {illegal,nullptr }, /* fd: 0100 1000 1111 1101 */ - {illegal,nullptr }, /* fe: 0100 1000 1111 1110 */ - {illegal,nullptr } /* ff: 0100 1000 1111 1111 */ + { }, // f0: 0100 1000 1111 0000 + { }, // f1: 0100 1000 1111 0001 + { }, // f2: 0100 1000 1111 0010 + { }, // f3: 0100 1000 1111 0011 + { }, // f4: 0100 1000 1111 0100 + { }, // f5: 0100 1000 1111 0101 + { }, // f6: 0100 1000 1111 0110 + { }, // f7: 0100 1000 1111 0111 + { }, // f8: 0100 1000 1111 1000 + { }, // f9: 0100 1000 1111 1001 + { }, // fa: 0100 1000 1111 1010 + { }, // fb: 0100 1000 1111 1011 + { }, // fc: 0100 1000 1111 1100 + { }, // fd: 0100 1000 1111 1101 + { }, // fe: 0100 1000 1111 1110 + { } // ff: 0100 1000 1111 1111 }; -static const struct dasm_s dasm48_7807[256] = +const dasm_s dasm_s::d48_7807[256] = { - {illegal,nullptr }, /* 00: 0100 1000 0000 0000 */ - {SLRC,"A" }, /* 01: 0100 1000 0000 0001 */ - {SLRC,"B" }, /* 02: 0100 1000 0000 0010 */ - {SLRC,"C" }, /* 03: 0100 1000 0000 0011 */ - {illegal,nullptr }, /* 04: 0100 1000 0000 0100 */ - {SLLC,"A" }, /* 05: 0100 1000 0000 0101 */ - {SLLC,"B" }, /* 06: 0100 1000 0000 0110 */ - {SLLC,"C" }, /* 07: 0100 1000 0000 0111 */ - {SK,"NV" }, /* 08: 0100 1000 0000 1000 */ - {illegal,nullptr }, /* 09: 0100 1000 0000 1001 */ - {SK,"CY" }, /* 0a: 0100 1000 0000 1010 */ - {SK,"HC" }, /* 0b: 0100 1000 0000 1011 */ - {SK,"Z" }, /* 0c: 0100 1000 0000 1100 */ - {illegal,nullptr }, /* 0d: 0100 1000 0000 1101 */ - {illegal,nullptr }, /* 0e: 0100 1000 0000 1110 */ - {illegal,nullptr }, /* 0f: 0100 1000 0000 1111 */ + { }, // 00: 0100 1000 0000 0000 + {SLRC, "A" }, // 01: 0100 1000 0000 0001 + {SLRC, "B" }, // 02: 0100 1000 0000 0010 + {SLRC, "C" }, // 03: 0100 1000 0000 0011 + { }, // 04: 0100 1000 0000 0100 + {SLLC, "A" }, // 05: 0100 1000 0000 0101 + {SLLC, "B" }, // 06: 0100 1000 0000 0110 + {SLLC, "C" }, // 07: 0100 1000 0000 0111 + {SK, "NV" }, // 08: 0100 1000 0000 1000 + { }, // 09: 0100 1000 0000 1001 + {SK, "CY" }, // 0a: 0100 1000 0000 1010 + {SK, "HC" }, // 0b: 0100 1000 0000 1011 + {SK, "Z" }, // 0c: 0100 1000 0000 1100 + { }, // 0d: 0100 1000 0000 1101 + { }, // 0e: 0100 1000 0000 1110 + { }, // 0f: 0100 1000 0000 1111 - {illegal,nullptr }, /* 10: 0100 1000 0001 0000 */ - {illegal,nullptr }, /* 11: 0100 1000 0001 0001 */ - {illegal,nullptr }, /* 12: 0100 1000 0001 0010 */ - {illegal,nullptr }, /* 13: 0100 1000 0001 0011 */ - {illegal,nullptr }, /* 14: 0100 1000 0001 0100 */ - {illegal,nullptr }, /* 15: 0100 1000 0001 0101 */ - {illegal,nullptr }, /* 16: 0100 1000 0001 0110 */ - {illegal,nullptr }, /* 17: 0100 1000 0001 0111 */ - {SKN,"NV" }, /* 18: 0100 1000 0001 1000 */ - {illegal,nullptr }, /* 19: 0100 1000 0001 1001 */ - {SKN,"CY" }, /* 1a: 0100 1000 0001 1010 */ - {SKN,"HC" }, /* 1b: 0100 1000 0001 1011 */ - {SKN,"Z" }, /* 1c: 0100 1000 0001 1100 */ - {illegal,nullptr }, /* 1d: 0100 1000 0001 1101 */ - {illegal,nullptr }, /* 1e: 0100 1000 0001 1110 */ - {illegal,nullptr }, /* 1f: 0100 1000 0001 1111 */ + { }, // 10: 0100 1000 0001 0000 + { }, // 11: 0100 1000 0001 0001 + { }, // 12: 0100 1000 0001 0010 + { }, // 13: 0100 1000 0001 0011 + { }, // 14: 0100 1000 0001 0100 + { }, // 15: 0100 1000 0001 0101 + { }, // 16: 0100 1000 0001 0110 + { }, // 17: 0100 1000 0001 0111 + {SKN, "NV" }, // 18: 0100 1000 0001 1000 + { }, // 19: 0100 1000 0001 1001 + {SKN, "CY" }, // 1a: 0100 1000 0001 1010 + {SKN, "HC" }, // 1b: 0100 1000 0001 1011 + {SKN, "Z" }, // 1c: 0100 1000 0001 1100 + { }, // 1d: 0100 1000 0001 1101 + { }, // 1e: 0100 1000 0001 1110 + { }, // 1f: 0100 1000 0001 1111 - {illegal,nullptr }, /* 20: 0100 1000 0010 0000 */ - {SLR,"A" }, /* 21: 0100 1000 0010 0001 */ - {SLR,"B" }, /* 22: 0100 1000 0010 0010 */ - {SLR,"C" }, /* 23: 0100 1000 0010 0011 */ - {illegal,nullptr }, /* 24: 0100 1000 0010 0100 */ - {SLL,"A" }, /* 25: 0100 1000 0010 0101 */ - {SLL,"B" }, /* 26: 0100 1000 0010 0110 */ - {SLL,"C" }, /* 27: 0100 1000 0010 0111 */ - {JEA,nullptr }, /* 28: 0100 1000 0010 1000 */ - {CALB,nullptr }, /* 29: 0100 1000 0010 1001 */ - {CLC,nullptr }, /* 2a: 0100 1000 0010 1010 */ - {STC,nullptr }, /* 2b: 0100 1000 0010 1011 */ - {illegal,nullptr }, /* 2c: 0100 1000 0010 1100 */ - {MUL,"A" }, /* 2d: 0100 1000 0010 1101 */ - {MUL,"B" }, /* 2e: 0100 1000 0010 1110 */ - {MUL,"C" }, /* 2f: 0100 1000 0010 1111 */ + { }, // 20: 0100 1000 0010 0000 + {SLR, "A" }, // 21: 0100 1000 0010 0001 + {SLR, "B" }, // 22: 0100 1000 0010 0010 + {SLR, "C" }, // 23: 0100 1000 0010 0011 + { }, // 24: 0100 1000 0010 0100 + {SLL, "A" }, // 25: 0100 1000 0010 0101 + {SLL, "B" }, // 26: 0100 1000 0010 0110 + {SLL, "C" }, // 27: 0100 1000 0010 0111 + {JEA, nullptr }, // 28: 0100 1000 0010 1000 + {CALB, nullptr }, // 29: 0100 1000 0010 1001 + {CLC, nullptr }, // 2a: 0100 1000 0010 1010 + {STC, nullptr }, // 2b: 0100 1000 0010 1011 + { }, // 2c: 0100 1000 0010 1100 + {MUL, "A" }, // 2d: 0100 1000 0010 1101 + {MUL, "B" }, // 2e: 0100 1000 0010 1110 + {MUL, "C" }, // 2f: 0100 1000 0010 1111 - {illegal,nullptr }, /* 30: 0100 1000 0011 0000 */ - {RLR,"A" }, /* 31: 0100 1000 0011 0001 */ - {RLR,"B" }, /* 32: 0100 1000 0011 0010 */ - {RLR,"C" }, /* 33: 0100 1000 0011 0011 */ - {illegal,nullptr }, /* 34: 0100 1000 0011 0100 */ - {RLL,"A" }, /* 35: 0100 1000 0011 0101 */ - {RLL,"B" }, /* 36: 0100 1000 0011 0110 */ - {RLL,"C" }, /* 37: 0100 1000 0011 0111 */ - {RLD,nullptr }, /* 38: 0100 1000 0011 1000 */ - {RRD,nullptr }, /* 39: 0100 1000 0011 1001 */ - {NEGA,nullptr }, /* 3a: 0100 1000 0011 1010 */ - {HALT,nullptr }, /* 3b: 0100 1000 0011 1011 */ - {illegal,nullptr }, /* 3c: 0100 1000 0011 1100 */ - {DIV,"A" }, /* 3d: 0100 1000 0011 1101 */ - {DIV,"B" }, /* 3e: 0100 1000 0011 1110 */ - {DIV,"C" }, /* 3f: 0100 1000 0011 1111 */ + { }, // 30: 0100 1000 0011 0000 + {RLR, "A" }, // 31: 0100 1000 0011 0001 + {RLR, "B" }, // 32: 0100 1000 0011 0010 + {RLR, "C" }, // 33: 0100 1000 0011 0011 + { }, // 34: 0100 1000 0011 0100 + {RLL, "A" }, // 35: 0100 1000 0011 0101 + {RLL, "B" }, // 36: 0100 1000 0011 0110 + {RLL, "C" }, // 37: 0100 1000 0011 0111 + {RLD, nullptr }, // 38: 0100 1000 0011 1000 + {RRD, nullptr }, // 39: 0100 1000 0011 1001 + {NEGA, nullptr }, // 3a: 0100 1000 0011 1010 + {HALT, nullptr }, // 3b: 0100 1000 0011 1011 + { }, // 3c: 0100 1000 0011 1100 + {DIV, "A" }, // 3d: 0100 1000 0011 1101 + {DIV, "B" }, // 3e: 0100 1000 0011 1110 + {DIV, "C" }, // 3f: 0100 1000 0011 1111 - {SKIT,"NMI" }, /* 40: 0100 1000 0100 0000 */ - {SKIT,"FT0" }, /* 41: 0100 1000 0100 0001 */ - {SKIT,"FT1" }, /* 42: 0100 1000 0100 0010 */ - {SKIT,"F1" }, /* 43: 0100 1000 0100 0011 */ - {SKIT,"F2" }, /* 44: 0100 1000 0100 0100 */ - {SKIT,"FE0" }, /* 45: 0100 1000 0100 0101 */ - {SKIT,"FE1" }, /* 46: 0100 1000 0100 0110 */ - {SKIT,"FEIN" }, /* 47: 0100 1000 0100 0111 */ - {SKIT,"FAD" }, /* 48: 0100 1000 0100 1000 */ - {SKIT,"FSR" }, /* 49: 0100 1000 0100 1001 */ - {SKIT,"FST" }, /* 4a: 0100 1000 0100 1010 */ - {SKIT,"ER" }, /* 4b: 0100 1000 0100 1011 */ - {SKIT,"OV" }, /* 4c: 0100 1000 0100 1100 */ - {illegal,nullptr }, /* 4d: 0100 1000 0100 1101 */ - {illegal,nullptr }, /* 4e: 0100 1000 0100 1110 */ - {illegal,nullptr }, /* 4f: 0100 1000 0100 1111 */ + {SKIT, "NMI" }, // 40: 0100 1000 0100 0000 + {SKIT, "FT0" }, // 41: 0100 1000 0100 0001 + {SKIT, "FT1" }, // 42: 0100 1000 0100 0010 + {SKIT, "F1" }, // 43: 0100 1000 0100 0011 + {SKIT, "F2" }, // 44: 0100 1000 0100 0100 + {SKIT, "FE0" }, // 45: 0100 1000 0100 0101 + {SKIT, "FE1" }, // 46: 0100 1000 0100 0110 + {SKIT, "FEIN" }, // 47: 0100 1000 0100 0111 + {SKIT, "FAD" }, // 48: 0100 1000 0100 1000 + {SKIT, "FSR" }, // 49: 0100 1000 0100 1001 + {SKIT, "FST" }, // 4a: 0100 1000 0100 1010 + {SKIT, "ER" }, // 4b: 0100 1000 0100 1011 + {SKIT, "OV" }, // 4c: 0100 1000 0100 1100 + { }, // 4d: 0100 1000 0100 1101 + { }, // 4e: 0100 1000 0100 1110 + { }, // 4f: 0100 1000 0100 1111 - {SKIT,"AN4" }, /* 50: 0100 1000 0101 0000 */ - {SKIT,"AN5" }, /* 51: 0100 1000 0101 0001 */ - {SKIT,"AN6" }, /* 52: 0100 1000 0101 0010 */ - {SKIT,"AN7" }, /* 53: 0100 1000 0101 0011 */ - {SKIT,"SB" }, /* 54: 0100 1000 0101 0100 */ - {illegal,nullptr }, /* 55: 0100 1000 0101 0101 */ - {illegal,nullptr }, /* 56: 0100 1000 0101 0110 */ - {illegal,nullptr }, /* 57: 0100 1000 0101 0111 */ - {illegal,nullptr }, /* 58: 0100 1000 0101 1000 */ - {illegal,nullptr }, /* 59: 0100 1000 0101 1001 */ - {illegal,nullptr }, /* 5a: 0100 1000 0101 1010 */ - {illegal,nullptr }, /* 5b: 0100 1000 0101 1011 */ - {illegal,nullptr }, /* 5c: 0100 1000 0101 1100 */ - {illegal,nullptr }, /* 5d: 0100 1000 0101 1101 */ - {illegal,nullptr }, /* 5e: 0100 1000 0101 1110 */ - {illegal,nullptr }, /* 5f: 0100 1000 0101 1111 */ + {SKIT, "AN4" }, // 50: 0100 1000 0101 0000 + {SKIT, "AN5" }, // 51: 0100 1000 0101 0001 + {SKIT, "AN6" }, // 52: 0100 1000 0101 0010 + {SKIT, "AN7" }, // 53: 0100 1000 0101 0011 + {SKIT, "SB" }, // 54: 0100 1000 0101 0100 + { }, // 55: 0100 1000 0101 0101 + { }, // 56: 0100 1000 0101 0110 + { }, // 57: 0100 1000 0101 0111 + { }, // 58: 0100 1000 0101 1000 + { }, // 59: 0100 1000 0101 1001 + { }, // 5a: 0100 1000 0101 1010 + { }, // 5b: 0100 1000 0101 1011 + { }, // 5c: 0100 1000 0101 1100 + { }, // 5d: 0100 1000 0101 1101 + { }, // 5e: 0100 1000 0101 1110 + { }, // 5f: 0100 1000 0101 1111 - {SKNIT,"NMI" }, /* 60: 0100 1000 0110 0000 */ - {SKNIT,"FT0" }, /* 61: 0100 1000 0110 0001 */ - {SKNIT,"FT1" }, /* 62: 0100 1000 0110 0010 */ - {SKNIT,"F1" }, /* 63: 0100 1000 0110 0011 */ - {SKNIT,"F2" }, /* 64: 0100 1000 0110 0100 */ - {SKNIT,"FE0" }, /* 65: 0100 1000 0110 0101 */ - {SKNIT,"FE1" }, /* 66: 0100 1000 0110 0110 */ - {SKNIT,"FEIN" }, /* 67: 0100 1000 0110 0111 */ - {SKNIT,"FAD" }, /* 68: 0100 1000 0110 1000 */ - {SKNIT,"FSR" }, /* 69: 0100 1000 0110 1001 */ - {SKNIT,"FST" }, /* 6a: 0100 1000 0110 1010 */ - {SKNIT,"ER" }, /* 6b: 0100 1000 0110 1011 */ - {SKNIT,"OV" }, /* 6c: 0100 1000 0110 1100 */ - {illegal,nullptr }, /* 6d: 0100 1000 0110 1101 */ - {illegal,nullptr }, /* 6e: 0100 1000 0110 1110 */ - {illegal,nullptr }, /* 6f: 0100 1000 0110 1111 */ + {SKNIT, "NMI" }, // 60: 0100 1000 0110 0000 + {SKNIT, "FT0" }, // 61: 0100 1000 0110 0001 + {SKNIT, "FT1" }, // 62: 0100 1000 0110 0010 + {SKNIT, "F1" }, // 63: 0100 1000 0110 0011 + {SKNIT, "F2" }, // 64: 0100 1000 0110 0100 + {SKNIT, "FE0" }, // 65: 0100 1000 0110 0101 + {SKNIT, "FE1" }, // 66: 0100 1000 0110 0110 + {SKNIT, "FEIN" }, // 67: 0100 1000 0110 0111 + {SKNIT, "FAD" }, // 68: 0100 1000 0110 1000 + {SKNIT, "FSR" }, // 69: 0100 1000 0110 1001 + {SKNIT, "FST" }, // 6a: 0100 1000 0110 1010 + {SKNIT, "ER" }, // 6b: 0100 1000 0110 1011 + {SKNIT, "OV" }, // 6c: 0100 1000 0110 1100 + { }, // 6d: 0100 1000 0110 1101 + { }, // 6e: 0100 1000 0110 1110 + { }, // 6f: 0100 1000 0110 1111 - {SKNIT,"AN4" }, /* 70: 0100 1000 0111 0000 */ - {SKNIT,"AN5" }, /* 71: 0100 1000 0111 0001 */ - {SKNIT,"AN6" }, /* 72: 0100 1000 0111 0010 */ - {SKNIT,"AN7" }, /* 73: 0100 1000 0111 0011 */ - {SKNIT,"SB" }, /* 74: 0100 1000 0111 0100 */ - {illegal,nullptr }, /* 75: 0100 1000 0111 0101 */ - {illegal,nullptr }, /* 76: 0100 1000 0111 0110 */ - {illegal,nullptr }, /* 77: 0100 1000 0111 0111 */ - {illegal,nullptr }, /* 78: 0100 1000 0111 1000 */ - {illegal,nullptr }, /* 79: 0100 1000 0111 1001 */ - {illegal,nullptr }, /* 7a: 0100 1000 0111 1010 */ - {illegal,nullptr }, /* 7b: 0100 1000 0111 1011 */ - {illegal,nullptr }, /* 7c: 0100 1000 0111 1100 */ - {illegal,nullptr }, /* 7d: 0100 1000 0111 1101 */ - {illegal,nullptr }, /* 7e: 0100 1000 0111 1110 */ - {illegal,nullptr }, /* 7f: 0100 1000 0111 1111 */ + {SKNIT, "AN4" }, // 70: 0100 1000 0111 0000 + {SKNIT, "AN5" }, // 71: 0100 1000 0111 0001 + {SKNIT, "AN6" }, // 72: 0100 1000 0111 0010 + {SKNIT, "AN7" }, // 73: 0100 1000 0111 0011 + {SKNIT, "SB" }, // 74: 0100 1000 0111 0100 + { }, // 75: 0100 1000 0111 0101 + { }, // 76: 0100 1000 0111 0110 + { }, // 77: 0100 1000 0111 0111 + { }, // 78: 0100 1000 0111 1000 + { }, // 79: 0100 1000 0111 1001 + { }, // 7a: 0100 1000 0111 1010 + { }, // 7b: 0100 1000 0111 1011 + { }, // 7c: 0100 1000 0111 1100 + { }, // 7d: 0100 1000 0111 1101 + { }, // 7e: 0100 1000 0111 1110 + { }, // 7f: 0100 1000 0111 1111 - {illegal,nullptr }, /* 80: 0100 1000 1000 0000 */ - {illegal,nullptr }, /* 81: 0100 1000 1000 0001 */ - {LDEAX,"(DE)" }, /* 82: 0100 1000 1000 0010 */ - {LDEAX,"(HL)" }, /* 83: 0100 1000 1000 0011 */ - {LDEAX,"(DE++)" }, /* 84: 0100 1000 1000 0100 */ - {LDEAX,"(HL++)" }, /* 85: 0100 1000 1000 0101 */ - {illegal,nullptr }, /* 86: 0100 1000 1000 0110 */ - {illegal,nullptr }, /* 87: 0100 1000 1000 0111 */ - {illegal,nullptr }, /* 88: 0100 1000 1000 1000 */ - {illegal,nullptr }, /* 89: 0100 1000 1000 1001 */ - {illegal,nullptr }, /* 8a: 0100 1000 1000 1010 */ - {LDEAX,"(DE+%b)"}, /* 8b: 0100 1000 1000 1011 xxxx xxxx */ - {LDEAX,"(HL+A)" }, /* 8c: 0100 1000 1000 1100 */ - {LDEAX,"(HL+B)" }, /* 8d: 0100 1000 1000 1101 */ - {LDEAX,"(HL+EA)"}, /* 8e: 0100 1000 1000 1110 */ - {LDEAX,"(HL+%b)"}, /* 8f: 0100 1000 1000 1111 xxxx xxxx */ + { }, // 80: 0100 1000 1000 0000 + { }, // 81: 0100 1000 1000 0001 + {LDEAX, "(DE)" }, // 82: 0100 1000 1000 0010 + {LDEAX, "(HL)" }, // 83: 0100 1000 1000 0011 + {LDEAX, "(DE++)" }, // 84: 0100 1000 1000 0100 + {LDEAX, "(HL++)" }, // 85: 0100 1000 1000 0101 + { }, // 86: 0100 1000 1000 0110 + { }, // 87: 0100 1000 1000 0111 + { }, // 88: 0100 1000 1000 1000 + { }, // 89: 0100 1000 1000 1001 + { }, // 8a: 0100 1000 1000 1010 + {LDEAX, "(DE+%b)" }, // 8b: 0100 1000 1000 1011 xxxx xxxx + {LDEAX, "(HL+A)" }, // 8c: 0100 1000 1000 1100 + {LDEAX, "(HL+B)" }, // 8d: 0100 1000 1000 1101 + {LDEAX, "(HL+EA)" }, // 8e: 0100 1000 1000 1110 + {LDEAX, "(HL+%b)" }, // 8f: 0100 1000 1000 1111 xxxx xxxx - {illegal,nullptr }, /* 90: 0100 1000 1000 0000 */ - {illegal,nullptr }, /* 91: 0100 1000 1000 0001 */ - {STEAX,"(DE)" }, /* 92: 0100 1000 1000 0010 */ - {STEAX,"(HL)" }, /* 93: 0100 1000 1000 0011 */ - {STEAX,"(DE++)" }, /* 94: 0100 1000 1000 0100 */ - {STEAX,"(HL++)" }, /* 95: 0100 1000 1000 0101 */ - {illegal,nullptr }, /* 96: 0100 1000 1000 0110 */ - {illegal,nullptr }, /* 97: 0100 1000 1000 0111 */ - {illegal,nullptr }, /* 98: 0100 1000 1000 1000 */ - {illegal,nullptr }, /* 99: 0100 1000 1000 1001 */ - {illegal,nullptr }, /* 9a: 0100 1000 1000 1010 */ - {STEAX,"(DE+%b)"}, /* 9b: 0100 1000 1000 1011 xxxx xxxx */ - {STEAX,"(HL+A)" }, /* 9c: 0100 1000 1000 1100 */ - {STEAX,"(HL+B)" }, /* 9d: 0100 1000 1000 1101 */ - {STEAX,"(HL+EA)"}, /* 9e: 0100 1000 1000 1110 */ - {STEAX,"(HL+%b)"}, /* 9f: 0100 1000 1000 1111 xxxx xxxx */ + { }, // 90: 0100 1000 1000 0000 + { }, // 91: 0100 1000 1000 0001 + {STEAX, "(DE)" }, // 92: 0100 1000 1000 0010 + {STEAX, "(HL)" }, // 93: 0100 1000 1000 0011 + {STEAX, "(DE++)" }, // 94: 0100 1000 1000 0100 + {STEAX, "(HL++)" }, // 95: 0100 1000 1000 0101 + { }, // 96: 0100 1000 1000 0110 + { }, // 97: 0100 1000 1000 0111 + { }, // 98: 0100 1000 1000 1000 + { }, // 99: 0100 1000 1000 1001 + { }, // 9a: 0100 1000 1000 1010 + {STEAX, "(DE+%b)" }, // 9b: 0100 1000 1000 1011 xxxx xxxx + {STEAX, "(HL+A)" }, // 9c: 0100 1000 1000 1100 + {STEAX, "(HL+B)" }, // 9d: 0100 1000 1000 1101 + {STEAX, "(HL+EA)" }, // 9e: 0100 1000 1000 1110 + {STEAX, "(HL+%b)" }, // 9f: 0100 1000 1000 1111 xxxx xxxx - {DSLR,"EA" }, /* a0: 0100 1000 1010 0000 */ - {illegal,nullptr }, /* a1: 0100 1000 1010 0001 */ - {illegal,nullptr }, /* a2: 0100 1000 1010 0010 */ - {illegal,nullptr }, /* a3: 0100 1000 1010 0011 */ - {DSLL,"EA" }, /* a4: 0100 1000 1010 0100 */ - {illegal,nullptr }, /* a5: 0100 1000 1010 0101 */ - {illegal,nullptr }, /* a6: 0100 1000 1010 0110 */ - {illegal,nullptr }, /* a7: 0100 1000 1010 0111 */ - {TABLE,nullptr }, /* a8: 0100 1000 1010 1000 */ - {illegal,nullptr }, /* a9: 0100 1000 1010 1001 */ - {CMC,nullptr }, /* aa: 0100 1000 1010 1010 */ /* 7807 */ - {illegal,nullptr }, /* ab: 0100 1000 1010 1011 */ - {EXA,nullptr }, /* ac: 0100 1000 1010 1100 */ /* 7807 */ - {EXR,nullptr }, /* ad: 0100 1000 1010 1101 */ /* 7807 */ - {EXH,nullptr }, /* ae: 0100 1000 1010 1110 */ /* 7807 */ - {EXX,nullptr }, /* af: 0100 1000 1010 1111 */ /* 7807 */ + {DSLR, "EA" }, // a0: 0100 1000 1010 0000 + { }, // a1: 0100 1000 1010 0001 + { }, // a2: 0100 1000 1010 0010 + { }, // a3: 0100 1000 1010 0011 + {DSLL, "EA" }, // a4: 0100 1000 1010 0100 + { }, // a5: 0100 1000 1010 0101 + { }, // a6: 0100 1000 1010 0110 + { }, // a7: 0100 1000 1010 0111 + {TABLE, nullptr }, // a8: 0100 1000 1010 1000 + { }, // a9: 0100 1000 1010 1001 + {CMC, nullptr }, // aa: 0100 1000 1010 1010 7807 + { }, // ab: 0100 1000 1010 1011 + {EXA, nullptr }, // ac: 0100 1000 1010 1100 7807 + {EXR, nullptr }, // ad: 0100 1000 1010 1101 7807 + {EXH, nullptr }, // ae: 0100 1000 1010 1110 7807 + {EXX, nullptr }, // af: 0100 1000 1010 1111 7807 - {DRLR,"EA" }, /* b0: 0100 1000 1011 0000 */ - {illegal,nullptr }, /* b1: 0100 1000 1011 0001 */ - {illegal,nullptr }, /* b2: 0100 1000 1011 0010 */ - {illegal,nullptr }, /* b3: 0100 1000 1011 0011 */ - {DRLL,"EA" }, /* b4: 0100 1000 1011 0100 */ - {illegal,nullptr }, /* b5: 0100 1000 1011 0101 */ - {illegal,nullptr }, /* b6: 0100 1000 1011 0110 */ - {illegal,nullptr }, /* b7: 0100 1000 1011 0111 */ - {illegal,nullptr }, /* b8: 0100 1000 1011 1000 */ - {illegal,nullptr }, /* b9: 0100 1000 1011 1001 */ - {illegal,nullptr }, /* ba: 0100 1000 1011 1010 */ - {illegal,nullptr }, /* bb: 0100 1000 1011 1011 */ - {illegal,nullptr }, /* bc: 0100 1000 1011 1100 */ - {illegal,nullptr }, /* bd: 0100 1000 1011 1101 */ - {illegal,nullptr }, /* be: 0100 1000 1011 1110 */ - {illegal,nullptr }, /* bf: 0100 1000 1011 1111 */ + {DRLR, "EA" }, // b0: 0100 1000 1011 0000 + { }, // b1: 0100 1000 1011 0001 + { }, // b2: 0100 1000 1011 0010 + { }, // b3: 0100 1000 1011 0011 + {DRLL, "EA" }, // b4: 0100 1000 1011 0100 + { }, // b5: 0100 1000 1011 0101 + { }, // b6: 0100 1000 1011 0110 + { }, // b7: 0100 1000 1011 0111 + { }, // b8: 0100 1000 1011 1000 + { }, // b9: 0100 1000 1011 1001 + { }, // ba: 0100 1000 1011 1010 + { }, // bb: 0100 1000 1011 1011 + { }, // bc: 0100 1000 1011 1100 + { }, // bd: 0100 1000 1011 1101 + { }, // be: 0100 1000 1011 1110 + { }, // bf: 0100 1000 1011 1111 - {DMOV,"EA,ECNT" }, /* c0: 0100 1000 1100 0000 */ - {DMOV,"EA,ECPT0"}, /* c1: 0100 1000 1100 0001 */ /* 7807 */ - {DMOV,"EA,ECPT1"}, /* c2: 0100 1000 1100 0010 */ /* 7807 */ - {illegal,nullptr }, /* c3: 0100 1000 1100 0011 */ - {illegal,nullptr }, /* c4: 0100 1000 1100 0100 */ - {illegal,nullptr }, /* c5: 0100 1000 1100 0101 */ - {illegal,nullptr }, /* c6: 0100 1000 1100 0110 */ - {illegal,nullptr }, /* c7: 0100 1000 1100 0111 */ - {illegal,nullptr }, /* c8: 0100 1000 1100 1000 */ - {illegal,nullptr }, /* c9: 0100 1000 1100 1001 */ - {illegal,nullptr }, /* ca: 0100 1000 1100 1010 */ - {illegal,nullptr }, /* cb: 0100 1000 1100 1011 */ - {illegal,nullptr }, /* cc: 0100 1000 1100 1100 */ - {illegal,nullptr }, /* cd: 0100 1000 1100 1101 */ - {illegal,nullptr }, /* ce: 0100 1000 1100 1110 */ - {illegal,nullptr }, /* cf: 0100 1000 1100 1111 */ + {DMOV, "EA,ECNT" }, // c0: 0100 1000 1100 0000 + {DMOV, "EA,ECPT0"}, // c1: 0100 1000 1100 0001 7807 + {DMOV, "EA,ECPT1"}, // c2: 0100 1000 1100 0010 7807 + { }, // c3: 0100 1000 1100 0011 + { }, // c4: 0100 1000 1100 0100 + { }, // c5: 0100 1000 1100 0101 + { }, // c6: 0100 1000 1100 0110 + { }, // c7: 0100 1000 1100 0111 + { }, // c8: 0100 1000 1100 1000 + { }, // c9: 0100 1000 1100 1001 + { }, // ca: 0100 1000 1100 1010 + { }, // cb: 0100 1000 1100 1011 + { }, // cc: 0100 1000 1100 1100 + { }, // cd: 0100 1000 1100 1101 + { }, // ce: 0100 1000 1100 1110 + { }, // cf: 0100 1000 1100 1111 - {illegal,nullptr }, /* d0: 0100 1000 1101 0000 */ - {illegal,nullptr }, /* d1: 0100 1000 1101 0001 */ - {DMOV,"ETM0,EA" }, /* d2: 0100 1000 1101 0010 */ - {DMOV,"ETM1,EA" }, /* d3: 0100 1000 1101 0011 */ - {illegal,nullptr }, /* d4: 0100 1000 1101 0100 */ - {illegal,nullptr }, /* d5: 0100 1000 1101 0101 */ - {illegal,nullptr }, /* d6: 0100 1000 1101 0110 */ - {illegal,nullptr }, /* d7: 0100 1000 1101 0111 */ - {illegal,nullptr }, /* d8: 0100 1000 1101 1000 */ - {illegal,nullptr }, /* d9: 0100 1000 1101 1001 */ - {illegal,nullptr }, /* da: 0100 1000 1101 1010 */ - {illegal,nullptr }, /* db: 0100 1000 1101 1011 */ - {illegal,nullptr }, /* dc: 0100 1000 1101 1100 */ - {illegal,nullptr }, /* dd: 0100 1000 1101 1101 */ - {illegal,nullptr }, /* de: 0100 1000 1101 1110 */ - {illegal,nullptr }, /* df: 0100 1000 1101 1111 */ + { }, // d0: 0100 1000 1101 0000 + { }, // d1: 0100 1000 1101 0001 + {DMOV, "ETM0,EA" }, // d2: 0100 1000 1101 0010 + {DMOV, "ETM1,EA" }, // d3: 0100 1000 1101 0011 + { }, // d4: 0100 1000 1101 0100 + { }, // d5: 0100 1000 1101 0101 + { }, // d6: 0100 1000 1101 0110 + { }, // d7: 0100 1000 1101 0111 + { }, // d8: 0100 1000 1101 1000 + { }, // d9: 0100 1000 1101 1001 + { }, // da: 0100 1000 1101 1010 + { }, // db: 0100 1000 1101 1011 + { }, // dc: 0100 1000 1101 1100 + { }, // dd: 0100 1000 1101 1101 + { }, // de: 0100 1000 1101 1110 + { }, // df: 0100 1000 1101 1111 - {illegal,nullptr }, /* e0: 0100 1000 1110 0000 */ - {illegal,nullptr }, /* e1: 0100 1000 1110 0001 */ - {illegal,nullptr }, /* e2: 0100 1000 1110 0010 */ - {illegal,nullptr }, /* e3: 0100 1000 1110 0011 */ - {illegal,nullptr }, /* e4: 0100 1000 1110 0100 */ - {illegal,nullptr }, /* e5: 0100 1000 1110 0101 */ - {illegal,nullptr }, /* e6: 0100 1000 1110 0110 */ - {illegal,nullptr }, /* e7: 0100 1000 1110 0111 */ - {illegal,nullptr }, /* e8: 0100 1000 1110 1000 */ - {illegal,nullptr }, /* e9: 0100 1000 1110 1001 */ - {illegal,nullptr }, /* ea: 0100 1000 1110 1010 */ - {illegal,nullptr }, /* eb: 0100 1000 1110 1011 */ - {illegal,nullptr }, /* ec: 0100 1000 1110 1100 */ - {illegal,nullptr }, /* ed: 0100 1000 1110 1101 */ - {illegal,nullptr }, /* ee: 0100 1000 1110 1110 */ - {illegal,nullptr }, /* ef: 0100 1000 1110 1111 */ + { }, // e0: 0100 1000 1110 0000 + { }, // e1: 0100 1000 1110 0001 + { }, // e2: 0100 1000 1110 0010 + { }, // e3: 0100 1000 1110 0011 + { }, // e4: 0100 1000 1110 0100 + { }, // e5: 0100 1000 1110 0101 + { }, // e6: 0100 1000 1110 0110 + { }, // e7: 0100 1000 1110 0111 + { }, // e8: 0100 1000 1110 1000 + { }, // e9: 0100 1000 1110 1001 + { }, // ea: 0100 1000 1110 1010 + { }, // eb: 0100 1000 1110 1011 + { }, // ec: 0100 1000 1110 1100 + { }, // ed: 0100 1000 1110 1101 + { }, // ee: 0100 1000 1110 1110 + { }, // ef: 0100 1000 1110 1111 - {illegal,nullptr }, /* f0: 0100 1000 1111 0000 */ - {illegal,nullptr }, /* f1: 0100 1000 1111 0001 */ - {illegal,nullptr }, /* f2: 0100 1000 1111 0010 */ - {illegal,nullptr }, /* f3: 0100 1000 1111 0011 */ - {illegal,nullptr }, /* f4: 0100 1000 1111 0100 */ - {illegal,nullptr }, /* f5: 0100 1000 1111 0101 */ - {illegal,nullptr }, /* f6: 0100 1000 1111 0110 */ - {illegal,nullptr }, /* f7: 0100 1000 1111 0111 */ - {illegal,nullptr }, /* f8: 0100 1000 1111 1000 */ - {illegal,nullptr }, /* f9: 0100 1000 1111 1001 */ - {illegal,nullptr }, /* fa: 0100 1000 1111 1010 */ - {illegal,nullptr }, /* fb: 0100 1000 1111 1011 */ - {illegal,nullptr }, /* fc: 0100 1000 1111 1100 */ - {illegal,nullptr }, /* fd: 0100 1000 1111 1101 */ - {illegal,nullptr }, /* fe: 0100 1000 1111 1110 */ - {illegal,nullptr } /* ff: 0100 1000 1111 1111 */ + { }, // f0: 0100 1000 1111 0000 + { }, // f1: 0100 1000 1111 0001 + { }, // f2: 0100 1000 1111 0010 + { }, // f3: 0100 1000 1111 0011 + { }, // f4: 0100 1000 1111 0100 + { }, // f5: 0100 1000 1111 0101 + { }, // f6: 0100 1000 1111 0110 + { }, // f7: 0100 1000 1111 0111 + { }, // f8: 0100 1000 1111 1000 + { }, // f9: 0100 1000 1111 1001 + { }, // fa: 0100 1000 1111 1010 + { }, // fb: 0100 1000 1111 1011 + { }, // fc: 0100 1000 1111 1100 + { }, // fd: 0100 1000 1111 1101 + { }, // fe: 0100 1000 1111 1110 + { } // ff: 0100 1000 1111 1111 }; -/* prefix 4C */ -static const struct dasm_s dasm4C_7810[256] = +// prefix 4C +const dasm_s dasm_s::d4C_7810[256] = { - {illegal,nullptr }, /* 00: 0100 1100 0000 0000 */ - {illegal,nullptr }, /* 01: 0100 1100 0000 0001 */ - {illegal,nullptr }, /* 02: 0100 1100 0000 0010 */ - {illegal,nullptr }, /* 03: 0100 1100 0000 0011 */ - {illegal,nullptr }, /* 04: 0100 1100 0000 0100 */ - {illegal,nullptr }, /* 05: 0100 1100 0000 0101 */ - {illegal,nullptr }, /* 06: 0100 1100 0000 0110 */ - {illegal,nullptr }, /* 07: 0100 1100 0000 0111 */ - {illegal,nullptr }, /* 08: 0100 1100 0000 1000 */ - {illegal,nullptr }, /* 09: 0100 1100 0000 1001 */ - {illegal,nullptr }, /* 0a: 0100 1100 0000 1010 */ - {illegal,nullptr }, /* 0b: 0100 1100 0000 1011 */ - {illegal,nullptr }, /* 0c: 0100 1100 0000 1100 */ - {illegal,nullptr }, /* 0d: 0100 1100 0000 1101 */ - {illegal,nullptr }, /* 0e: 0100 1100 0000 1110 */ - {illegal,nullptr }, /* 0f: 0100 1100 0000 1111 */ + { }, // 00: 0100 1100 0000 0000 + { }, // 01: 0100 1100 0000 0001 + { }, // 02: 0100 1100 0000 0010 + { }, // 03: 0100 1100 0000 0011 + { }, // 04: 0100 1100 0000 0100 + { }, // 05: 0100 1100 0000 0101 + { }, // 06: 0100 1100 0000 0110 + { }, // 07: 0100 1100 0000 0111 + { }, // 08: 0100 1100 0000 1000 + { }, // 09: 0100 1100 0000 1001 + { }, // 0a: 0100 1100 0000 1010 + { }, // 0b: 0100 1100 0000 1011 + { }, // 0c: 0100 1100 0000 1100 + { }, // 0d: 0100 1100 0000 1101 + { }, // 0e: 0100 1100 0000 1110 + { }, // 0f: 0100 1100 0000 1111 - {illegal,nullptr }, /* 10: 0100 1100 0001 0000 */ - {illegal,nullptr }, /* 11: 0100 1100 0001 0001 */ - {illegal,nullptr }, /* 12: 0100 1100 0001 0010 */ - {illegal,nullptr }, /* 13: 0100 1100 0001 0011 */ - {illegal,nullptr }, /* 14: 0100 1100 0001 0100 */ - {illegal,nullptr }, /* 15: 0100 1100 0001 0101 */ - {illegal,nullptr }, /* 16: 0100 1100 0001 0110 */ - {illegal,nullptr }, /* 17: 0100 1100 0001 0111 */ - {illegal,nullptr }, /* 18: 0100 1100 0001 1000 */ - {illegal,nullptr }, /* 19: 0100 1100 0001 1001 */ - {illegal,nullptr }, /* 1a: 0100 1100 0001 1010 */ - {illegal,nullptr }, /* 1b: 0100 1100 0001 1011 */ - {illegal,nullptr }, /* 1c: 0100 1100 0001 1100 */ - {illegal,nullptr }, /* 1d: 0100 1100 0001 1101 */ - {illegal,nullptr }, /* 1e: 0100 1100 0001 1110 */ - {illegal,nullptr }, /* 1f: 0100 1100 0001 1111 */ + { }, // 10: 0100 1100 0001 0000 + { }, // 11: 0100 1100 0001 0001 + { }, // 12: 0100 1100 0001 0010 + { }, // 13: 0100 1100 0001 0011 + { }, // 14: 0100 1100 0001 0100 + { }, // 15: 0100 1100 0001 0101 + { }, // 16: 0100 1100 0001 0110 + { }, // 17: 0100 1100 0001 0111 + { }, // 18: 0100 1100 0001 1000 + { }, // 19: 0100 1100 0001 1001 + { }, // 1a: 0100 1100 0001 1010 + { }, // 1b: 0100 1100 0001 1011 + { }, // 1c: 0100 1100 0001 1100 + { }, // 1d: 0100 1100 0001 1101 + { }, // 1e: 0100 1100 0001 1110 + { }, // 1f: 0100 1100 0001 1111 - {illegal,nullptr }, /* 20: 0100 1100 0010 0000 */ - {illegal,nullptr }, /* 21: 0100 1100 0010 0001 */ - {illegal,nullptr }, /* 22: 0100 1100 0010 0010 */ - {illegal,nullptr }, /* 23: 0100 1100 0010 0011 */ - {illegal,nullptr }, /* 24: 0100 1100 0010 0100 */ - {illegal,nullptr }, /* 25: 0100 1100 0010 0101 */ - {illegal,nullptr }, /* 26: 0100 1100 0010 0110 */ - {illegal,nullptr }, /* 27: 0100 1100 0010 0111 */ - {illegal,nullptr }, /* 28: 0100 1100 0010 1000 */ - {illegal,nullptr }, /* 29: 0100 1100 0010 1001 */ - {illegal,nullptr }, /* 2a: 0100 1100 0010 1010 */ - {illegal,nullptr }, /* 2b: 0100 1100 0010 1011 */ - {illegal,nullptr }, /* 2c: 0100 1100 0010 1100 */ - {illegal,nullptr }, /* 2d: 0100 1100 0010 1101 */ - {illegal,nullptr }, /* 2e: 0100 1100 0010 1110 */ - {illegal,nullptr }, /* 2f: 0100 1100 0010 1111 */ + { }, // 20: 0100 1100 0010 0000 + { }, // 21: 0100 1100 0010 0001 + { }, // 22: 0100 1100 0010 0010 + { }, // 23: 0100 1100 0010 0011 + { }, // 24: 0100 1100 0010 0100 + { }, // 25: 0100 1100 0010 0101 + { }, // 26: 0100 1100 0010 0110 + { }, // 27: 0100 1100 0010 0111 + { }, // 28: 0100 1100 0010 1000 + { }, // 29: 0100 1100 0010 1001 + { }, // 2a: 0100 1100 0010 1010 + { }, // 2b: 0100 1100 0010 1011 + { }, // 2c: 0100 1100 0010 1100 + { }, // 2d: 0100 1100 0010 1101 + { }, // 2e: 0100 1100 0010 1110 + { }, // 2f: 0100 1100 0010 1111 - {illegal,nullptr }, /* 30: 0100 1100 0011 0000 */ - {illegal,nullptr }, /* 31: 0100 1100 0011 0001 */ - {illegal,nullptr }, /* 32: 0100 1100 0011 0010 */ - {illegal,nullptr }, /* 33: 0100 1100 0011 0011 */ - {illegal,nullptr }, /* 34: 0100 1100 0011 0100 */ - {illegal,nullptr }, /* 35: 0100 1100 0011 0101 */ - {illegal,nullptr }, /* 36: 0100 1100 0011 0110 */ - {illegal,nullptr }, /* 37: 0100 1100 0011 0111 */ - {illegal,nullptr }, /* 38: 0100 1100 0011 1000 */ - {illegal,nullptr }, /* 39: 0100 1100 0011 1001 */ - {illegal,nullptr }, /* 3a: 0100 1100 0011 1010 */ - {illegal,nullptr }, /* 3b: 0100 1100 0011 1011 */ - {illegal,nullptr }, /* 3c: 0100 1100 0011 1100 */ - {illegal,nullptr }, /* 3d: 0100 1100 0011 1101 */ - {illegal,nullptr }, /* 3e: 0100 1100 0011 1110 */ - {illegal,nullptr }, /* 3f: 0100 1100 0011 1111 */ + { }, // 30: 0100 1100 0011 0000 + { }, // 31: 0100 1100 0011 0001 + { }, // 32: 0100 1100 0011 0010 + { }, // 33: 0100 1100 0011 0011 + { }, // 34: 0100 1100 0011 0100 + { }, // 35: 0100 1100 0011 0101 + { }, // 36: 0100 1100 0011 0110 + { }, // 37: 0100 1100 0011 0111 + { }, // 38: 0100 1100 0011 1000 + { }, // 39: 0100 1100 0011 1001 + { }, // 3a: 0100 1100 0011 1010 + { }, // 3b: 0100 1100 0011 1011 + { }, // 3c: 0100 1100 0011 1100 + { }, // 3d: 0100 1100 0011 1101 + { }, // 3e: 0100 1100 0011 1110 + { }, // 3f: 0100 1100 0011 1111 - {illegal,nullptr }, /* 40: 0100 1100 0100 0000 */ - {illegal,nullptr }, /* 41: 0100 1100 0100 0001 */ - {illegal,nullptr }, /* 42: 0100 1100 0100 0010 */ - {illegal,nullptr }, /* 43: 0100 1100 0100 0011 */ - {illegal,nullptr }, /* 44: 0100 1100 0100 0100 */ - {illegal,nullptr }, /* 45: 0100 1100 0100 0101 */ - {illegal,nullptr }, /* 46: 0100 1100 0100 0110 */ - {illegal,nullptr }, /* 47: 0100 1100 0100 0111 */ - {illegal,nullptr }, /* 48: 0100 1100 0100 1000 */ - {illegal,nullptr }, /* 49: 0100 1100 0100 1001 */ - {illegal,nullptr }, /* 4a: 0100 1100 0100 1010 */ - {illegal,nullptr }, /* 4b: 0100 1100 0100 1011 */ - {illegal,nullptr }, /* 4c: 0100 1100 0100 1100 */ - {illegal,nullptr }, /* 4d: 0100 1100 0100 1101 */ - {illegal,nullptr }, /* 4e: 0100 1100 0100 1110 */ - {illegal,nullptr }, /* 4f: 0100 1100 0100 1111 */ + { }, // 40: 0100 1100 0100 0000 + { }, // 41: 0100 1100 0100 0001 + { }, // 42: 0100 1100 0100 0010 + { }, // 43: 0100 1100 0100 0011 + { }, // 44: 0100 1100 0100 0100 + { }, // 45: 0100 1100 0100 0101 + { }, // 46: 0100 1100 0100 0110 + { }, // 47: 0100 1100 0100 0111 + { }, // 48: 0100 1100 0100 1000 + { }, // 49: 0100 1100 0100 1001 + { }, // 4a: 0100 1100 0100 1010 + { }, // 4b: 0100 1100 0100 1011 + { }, // 4c: 0100 1100 0100 1100 + { }, // 4d: 0100 1100 0100 1101 + { }, // 4e: 0100 1100 0100 1110 + { }, // 4f: 0100 1100 0100 1111 - {illegal,nullptr }, /* 50: 0100 1100 0101 0000 */ - {illegal,nullptr }, /* 51: 0100 1100 0101 0001 */ - {illegal,nullptr }, /* 52: 0100 1100 0101 0010 */ - {illegal,nullptr }, /* 53: 0100 1100 0101 0011 */ - {illegal,nullptr }, /* 54: 0100 1100 0101 0100 */ - {illegal,nullptr }, /* 55: 0100 1100 0101 0101 */ - {illegal,nullptr }, /* 56: 0100 1100 0101 0110 */ - {illegal,nullptr }, /* 57: 0100 1100 0101 0111 */ - {illegal,nullptr }, /* 58: 0100 1100 0101 1000 */ - {illegal,nullptr }, /* 59: 0100 1100 0101 1001 */ - {illegal,nullptr }, /* 5a: 0100 1100 0101 1010 */ - {illegal,nullptr }, /* 5b: 0100 1100 0101 1011 */ - {illegal,nullptr }, /* 5c: 0100 1100 0101 1100 */ - {illegal,nullptr }, /* 5d: 0100 1100 0101 1101 */ - {illegal,nullptr }, /* 5e: 0100 1100 0101 1110 */ - {illegal,nullptr }, /* 5f: 0100 1100 0101 1111 */ + { }, // 50: 0100 1100 0101 0000 + { }, // 51: 0100 1100 0101 0001 + { }, // 52: 0100 1100 0101 0010 + { }, // 53: 0100 1100 0101 0011 + { }, // 54: 0100 1100 0101 0100 + { }, // 55: 0100 1100 0101 0101 + { }, // 56: 0100 1100 0101 0110 + { }, // 57: 0100 1100 0101 0111 + { }, // 58: 0100 1100 0101 1000 + { }, // 59: 0100 1100 0101 1001 + { }, // 5a: 0100 1100 0101 1010 + { }, // 5b: 0100 1100 0101 1011 + { }, // 5c: 0100 1100 0101 1100 + { }, // 5d: 0100 1100 0101 1101 + { }, // 5e: 0100 1100 0101 1110 + { }, // 5f: 0100 1100 0101 1111 - {illegal,nullptr }, /* 60: 0100 1100 0110 0000 */ - {illegal,nullptr }, /* 61: 0100 1100 0110 0001 */ - {illegal,nullptr }, /* 62: 0100 1100 0110 0010 */ - {illegal,nullptr }, /* 63: 0100 1100 0110 0011 */ - {illegal,nullptr }, /* 64: 0100 1100 0110 0100 */ - {illegal,nullptr }, /* 65: 0100 1100 0110 0101 */ - {illegal,nullptr }, /* 66: 0100 1100 0110 0110 */ - {illegal,nullptr }, /* 67: 0100 1100 0110 0111 */ - {illegal,nullptr }, /* 68: 0100 1100 0110 1000 */ - {illegal,nullptr }, /* 69: 0100 1100 0110 1001 */ - {illegal,nullptr }, /* 6a: 0100 1100 0110 1010 */ - {illegal,nullptr }, /* 6b: 0100 1100 0110 1011 */ - {illegal,nullptr }, /* 6c: 0100 1100 0110 1100 */ - {illegal,nullptr }, /* 6d: 0100 1100 0110 1101 */ - {illegal,nullptr }, /* 6e: 0100 1100 0110 1110 */ - {illegal,nullptr }, /* 6f: 0100 1100 0110 1111 */ + { }, // 60: 0100 1100 0110 0000 + { }, // 61: 0100 1100 0110 0001 + { }, // 62: 0100 1100 0110 0010 + { }, // 63: 0100 1100 0110 0011 + { }, // 64: 0100 1100 0110 0100 + { }, // 65: 0100 1100 0110 0101 + { }, // 66: 0100 1100 0110 0110 + { }, // 67: 0100 1100 0110 0111 + { }, // 68: 0100 1100 0110 1000 + { }, // 69: 0100 1100 0110 1001 + { }, // 6a: 0100 1100 0110 1010 + { }, // 6b: 0100 1100 0110 1011 + { }, // 6c: 0100 1100 0110 1100 + { }, // 6d: 0100 1100 0110 1101 + { }, // 6e: 0100 1100 0110 1110 + { }, // 6f: 0100 1100 0110 1111 - {illegal,nullptr }, /* 70: 0100 1100 0111 0000 */ - {illegal,nullptr }, /* 71: 0100 1100 0111 0001 */ - {illegal,nullptr }, /* 72: 0100 1100 0111 0010 */ - {illegal,nullptr }, /* 73: 0100 1100 0111 0011 */ - {illegal,nullptr }, /* 74: 0100 1100 0111 0100 */ - {illegal,nullptr }, /* 75: 0100 1100 0111 0101 */ - {illegal,nullptr }, /* 76: 0100 1100 0111 0110 */ - {illegal,nullptr }, /* 77: 0100 1100 0111 0111 */ - {illegal,nullptr }, /* 78: 0100 1100 0111 1000 */ - {illegal,nullptr }, /* 79: 0100 1100 0111 1001 */ - {illegal,nullptr }, /* 7a: 0100 1100 0111 1010 */ - {illegal,nullptr }, /* 7b: 0100 1100 0111 1011 */ - {illegal,nullptr }, /* 7c: 0100 1100 0111 1100 */ - {illegal,nullptr }, /* 7d: 0100 1100 0111 1101 */ - {illegal,nullptr }, /* 7e: 0100 1100 0111 1110 */ - {illegal,nullptr }, /* 7f: 0100 1100 0111 1111 */ + { }, // 70: 0100 1100 0111 0000 + { }, // 71: 0100 1100 0111 0001 + { }, // 72: 0100 1100 0111 0010 + { }, // 73: 0100 1100 0111 0011 + { }, // 74: 0100 1100 0111 0100 + { }, // 75: 0100 1100 0111 0101 + { }, // 76: 0100 1100 0111 0110 + { }, // 77: 0100 1100 0111 0111 + { }, // 78: 0100 1100 0111 1000 + { }, // 79: 0100 1100 0111 1001 + { }, // 7a: 0100 1100 0111 1010 + { }, // 7b: 0100 1100 0111 1011 + { }, // 7c: 0100 1100 0111 1100 + { }, // 7d: 0100 1100 0111 1101 + { }, // 7e: 0100 1100 0111 1110 + { }, // 7f: 0100 1100 0111 1111 - {illegal,nullptr }, /* 80: 0100 1100 1000 0000 */ - {illegal,nullptr }, /* 81: 0100 1100 1000 0001 */ - {illegal,nullptr }, /* 82: 0100 1100 1000 0010 */ - {illegal,nullptr }, /* 83: 0100 1100 1000 0011 */ - {illegal,nullptr }, /* 84: 0100 1100 1000 0100 */ - {illegal,nullptr }, /* 85: 0100 1100 1000 0101 */ - {illegal,nullptr }, /* 86: 0100 1100 1000 0110 */ - {illegal,nullptr }, /* 87: 0100 1100 1000 0111 */ - {illegal,nullptr }, /* 88: 0100 1100 1000 1000 */ - {illegal,nullptr }, /* 89: 0100 1100 1000 1001 */ - {illegal,nullptr }, /* 8a: 0100 1100 1000 1010 */ - {illegal,nullptr }, /* 8b: 0100 1100 1000 1011 */ - {illegal,nullptr }, /* 8c: 0100 1100 1000 1100 */ - {illegal,nullptr }, /* 8d: 0100 1100 1000 1101 */ - {illegal,nullptr }, /* 8e: 0100 1100 1000 1110 */ - {illegal,nullptr }, /* 8f: 0100 1100 1000 1111 */ + { }, // 80: 0100 1100 1000 0000 + { }, // 81: 0100 1100 1000 0001 + { }, // 82: 0100 1100 1000 0010 + { }, // 83: 0100 1100 1000 0011 + { }, // 84: 0100 1100 1000 0100 + { }, // 85: 0100 1100 1000 0101 + { }, // 86: 0100 1100 1000 0110 + { }, // 87: 0100 1100 1000 0111 + { }, // 88: 0100 1100 1000 1000 + { }, // 89: 0100 1100 1000 1001 + { }, // 8a: 0100 1100 1000 1010 + { }, // 8b: 0100 1100 1000 1011 + { }, // 8c: 0100 1100 1000 1100 + { }, // 8d: 0100 1100 1000 1101 + { }, // 8e: 0100 1100 1000 1110 + { }, // 8f: 0100 1100 1000 1111 - {illegal,nullptr }, /* 90: 0100 1100 1001 0000 */ - {illegal,nullptr }, /* 91: 0100 1100 1001 0001 */ - {illegal,nullptr }, /* 92: 0100 1100 1001 0010 */ - {illegal,nullptr }, /* 93: 0100 1100 1001 0011 */ - {illegal,nullptr }, /* 94: 0100 1100 1001 0100 */ - {illegal,nullptr }, /* 95: 0100 1100 1001 0101 */ - {illegal,nullptr }, /* 96: 0100 1100 1001 0110 */ - {illegal,nullptr }, /* 97: 0100 1100 1001 0111 */ - {illegal,nullptr }, /* 98: 0100 1100 1001 1000 */ - {illegal,nullptr }, /* 99: 0100 1100 1001 1001 */ - {illegal,nullptr }, /* 9a: 0100 1100 1001 1010 */ - {illegal,nullptr }, /* 9b: 0100 1100 1001 1011 */ - {illegal,nullptr }, /* 9c: 0100 1100 1001 1100 */ - {illegal,nullptr }, /* 9d: 0100 1100 1001 1101 */ - {illegal,nullptr }, /* 9e: 0100 1100 1001 1110 */ - {illegal,nullptr }, /* 9f: 0100 1100 1001 1111 */ + { }, // 90: 0100 1100 1001 0000 + { }, // 91: 0100 1100 1001 0001 + { }, // 92: 0100 1100 1001 0010 + { }, // 93: 0100 1100 1001 0011 + { }, // 94: 0100 1100 1001 0100 + { }, // 95: 0100 1100 1001 0101 + { }, // 96: 0100 1100 1001 0110 + { }, // 97: 0100 1100 1001 0111 + { }, // 98: 0100 1100 1001 1000 + { }, // 99: 0100 1100 1001 1001 + { }, // 9a: 0100 1100 1001 1010 + { }, // 9b: 0100 1100 1001 1011 + { }, // 9c: 0100 1100 1001 1100 + { }, // 9d: 0100 1100 1001 1101 + { }, // 9e: 0100 1100 1001 1110 + { }, // 9f: 0100 1100 1001 1111 - {illegal,nullptr }, /* a0: 0100 1100 1010 0000 */ - {illegal,nullptr }, /* a1: 0100 1100 1010 0001 */ - {illegal,nullptr }, /* a2: 0100 1100 1010 0010 */ - {illegal,nullptr }, /* a3: 0100 1100 1010 0011 */ - {illegal,nullptr }, /* a4: 0100 1100 1010 0100 */ - {illegal,nullptr }, /* a5: 0100 1100 1010 0101 */ - {illegal,nullptr }, /* a6: 0100 1100 1010 0110 */ - {illegal,nullptr }, /* a7: 0100 1100 1010 0111 */ - {illegal,nullptr }, /* a8: 0100 1100 1010 1000 */ - {illegal,nullptr }, /* a9: 0100 1100 1010 1001 */ - {illegal,nullptr }, /* aa: 0100 1100 1010 1010 */ - {illegal,nullptr }, /* ab: 0100 1100 1010 1011 */ - {illegal,nullptr }, /* ac: 0100 1100 1010 1100 */ - {illegal,nullptr }, /* ad: 0100 1100 1010 1101 */ - {illegal,nullptr }, /* ae: 0100 1100 1010 1110 */ - {illegal,nullptr }, /* af: 0100 1100 1010 1111 */ + { }, // a0: 0100 1100 1010 0000 + { }, // a1: 0100 1100 1010 0001 + { }, // a2: 0100 1100 1010 0010 + { }, // a3: 0100 1100 1010 0011 + { }, // a4: 0100 1100 1010 0100 + { }, // a5: 0100 1100 1010 0101 + { }, // a6: 0100 1100 1010 0110 + { }, // a7: 0100 1100 1010 0111 + { }, // a8: 0100 1100 1010 1000 + { }, // a9: 0100 1100 1010 1001 + { }, // aa: 0100 1100 1010 1010 + { }, // ab: 0100 1100 1010 1011 + { }, // ac: 0100 1100 1010 1100 + { }, // ad: 0100 1100 1010 1101 + { }, // ae: 0100 1100 1010 1110 + { }, // af: 0100 1100 1010 1111 - {illegal,nullptr }, /* b0: 0100 1100 1011 0000 */ - {illegal,nullptr }, /* b1: 0100 1100 1011 0001 */ - {illegal,nullptr }, /* b2: 0100 1100 1011 0010 */ - {illegal,nullptr }, /* b3: 0100 1100 1011 0011 */ - {illegal,nullptr }, /* b4: 0100 1100 1011 0100 */ - {illegal,nullptr }, /* b5: 0100 1100 1011 0101 */ - {illegal,nullptr }, /* b6: 0100 1100 1011 0110 */ - {illegal,nullptr }, /* b7: 0100 1100 1011 0111 */ - {illegal,nullptr }, /* b8: 0100 1100 1011 1000 */ - {illegal,nullptr }, /* b9: 0100 1100 1011 1001 */ - {illegal,nullptr }, /* ba: 0100 1100 1011 1010 */ - {illegal,nullptr }, /* bb: 0100 1100 1011 1011 */ - {illegal,nullptr }, /* bc: 0100 1100 1011 1100 */ - {illegal,nullptr }, /* bd: 0100 1100 1011 1101 */ - {illegal,nullptr }, /* be: 0100 1100 1011 1110 */ - {illegal,nullptr }, /* bf: 0100 1100 1011 1111 */ + { }, // b0: 0100 1100 1011 0000 + { }, // b1: 0100 1100 1011 0001 + { }, // b2: 0100 1100 1011 0010 + { }, // b3: 0100 1100 1011 0011 + { }, // b4: 0100 1100 1011 0100 + { }, // b5: 0100 1100 1011 0101 + { }, // b6: 0100 1100 1011 0110 + { }, // b7: 0100 1100 1011 0111 + { }, // b8: 0100 1100 1011 1000 + { }, // b9: 0100 1100 1011 1001 + { }, // ba: 0100 1100 1011 1010 + { }, // bb: 0100 1100 1011 1011 + { }, // bc: 0100 1100 1011 1100 + { }, // bd: 0100 1100 1011 1101 + { }, // be: 0100 1100 1011 1110 + { }, // bf: 0100 1100 1011 1111 - {MOV,"A,PA" }, /* c0: 0100 1100 1100 0000 */ - {MOV,"A,PB" }, /* c1: 0100 1100 1100 0001 */ - {MOV,"A,PC" }, /* c2: 0100 1100 1100 0010 */ - {MOV,"A,PD" }, /* c3: 0100 1100 1100 0011 */ - {illegal,nullptr }, /* c4: 0100 1100 1100 0100 */ - {MOV,"A,PF" }, /* c5: 0100 1100 1100 0101 */ - {MOV,"A,MKH" }, /* c6: 0100 1100 1100 0110 */ - {MOV,"A,MKL" }, /* c7: 0100 1100 1100 0111 */ - {MOV,"A,ANM" }, /* c8: 0100 1100 1100 1000 */ /* 7810 */ - {MOV,"A,SMH" }, /* c9: 0100 1100 1100 1001 */ - {illegal,nullptr }, /* ca: 0100 1100 1100 1010 */ - {MOV,"A,EOM" }, /* cb: 0100 1100 1100 1011 */ - {illegal,nullptr }, /* cc: 0100 1100 1100 1100 */ - {MOV,"A,TMM" }, /* cd: 0100 1100 1100 1101 */ - {illegal,nullptr }, /* ce: 0100 1100 1100 1110 */ - {illegal,nullptr }, /* cf: 0100 1100 1100 1111 */ + {MOV, "A,PA" }, // c0: 0100 1100 1100 0000 + {MOV, "A,PB" }, // c1: 0100 1100 1100 0001 + {MOV, "A,PC" }, // c2: 0100 1100 1100 0010 + {MOV, "A,PD" }, // c3: 0100 1100 1100 0011 + { }, // c4: 0100 1100 1100 0100 + {MOV, "A,PF" }, // c5: 0100 1100 1100 0101 + {MOV, "A,MKH" }, // c6: 0100 1100 1100 0110 + {MOV, "A,MKL" }, // c7: 0100 1100 1100 0111 + {MOV, "A,ANM" }, // c8: 0100 1100 1100 1000 7810 + {MOV, "A,SMH" }, // c9: 0100 1100 1100 1001 + { }, // ca: 0100 1100 1100 1010 + {MOV, "A,EOM" }, // cb: 0100 1100 1100 1011 + { }, // cc: 0100 1100 1100 1100 + {MOV, "A,TMM" }, // cd: 0100 1100 1100 1101 + { }, // ce: 0100 1100 1100 1110 + { }, // cf: 0100 1100 1100 1111 - {illegal,nullptr }, /* d0: 0100 1100 1101 0000 */ - {illegal,nullptr }, /* d1: 0100 1100 1101 0001 */ - {illegal,nullptr }, /* d2: 0100 1100 1101 0010 */ - {illegal,nullptr }, /* d3: 0100 1100 1101 0011 */ - {illegal,nullptr }, /* d4: 0100 1100 1101 0100 */ - {illegal,nullptr }, /* d5: 0100 1100 1101 0101 */ - {illegal,nullptr }, /* d6: 0100 1100 1101 0110 */ - {illegal,nullptr }, /* d7: 0100 1100 1101 0111 */ - {illegal,nullptr }, /* d8: 0100 1100 1101 1000 */ - {MOV,"A,RXB" }, /* d9: 0100 1100 1101 1001 */ - {illegal,nullptr }, /* da: 0100 1100 1101 1010 */ - {illegal,nullptr }, /* db: 0100 1100 1101 1011 */ - {illegal,nullptr }, /* dc: 0100 1100 1101 1100 */ - {illegal,nullptr }, /* dd: 0100 1100 1101 1101 */ - {illegal,nullptr }, /* de: 0100 1100 1101 1110 */ - {illegal,nullptr }, /* df: 0100 1100 1101 1111 */ + { }, // d0: 0100 1100 1101 0000 + { }, // d1: 0100 1100 1101 0001 + { }, // d2: 0100 1100 1101 0010 + { }, // d3: 0100 1100 1101 0011 + { }, // d4: 0100 1100 1101 0100 + { }, // d5: 0100 1100 1101 0101 + { }, // d6: 0100 1100 1101 0110 + { }, // d7: 0100 1100 1101 0111 + { }, // d8: 0100 1100 1101 1000 + {MOV, "A,RXB" }, // d9: 0100 1100 1101 1001 + { }, // da: 0100 1100 1101 1010 + { }, // db: 0100 1100 1101 1011 + { }, // dc: 0100 1100 1101 1100 + { }, // dd: 0100 1100 1101 1101 + { }, // de: 0100 1100 1101 1110 + { }, // df: 0100 1100 1101 1111 - {MOV,"A,CR0" }, /* e0: 0100 1100 1110 0000 */ /* 7810 */ - {MOV,"A,CR1" }, /* e1: 0100 1100 1110 0001 */ /* 7810 */ - {MOV,"A,CR2" }, /* e2: 0100 1100 1110 0010 */ /* 7810 */ - {MOV,"A,CR3" }, /* e3: 0100 1100 1110 0011 */ /* 7810 */ - {illegal,nullptr }, /* e4: 0100 1100 1110 0100 */ - {illegal,nullptr }, /* e5: 0100 1100 1110 0101 */ - {illegal,nullptr }, /* e6: 0100 1100 1110 0110 */ - {illegal,nullptr }, /* e7: 0100 1100 1110 0111 */ - {illegal,nullptr }, /* e8: 0100 1100 1110 1000 */ - {illegal,nullptr }, /* e9: 0100 1100 1110 1001 */ - {illegal,nullptr }, /* ea: 0100 1100 1110 1010 */ - {illegal,nullptr }, /* eb: 0100 1100 1110 1011 */ - {illegal,nullptr }, /* ec: 0100 1100 1110 1100 */ - {illegal,nullptr }, /* ed: 0100 1100 1110 1101 */ - {illegal,nullptr }, /* ee: 0100 1100 1110 1110 */ - {illegal,nullptr }, /* ef: 0100 1100 1110 1111 */ + {MOV, "A,CR0" }, // e0: 0100 1100 1110 0000 7810 + {MOV, "A,CR1" }, // e1: 0100 1100 1110 0001 7810 + {MOV, "A,CR2" }, // e2: 0100 1100 1110 0010 7810 + {MOV, "A,CR3" }, // e3: 0100 1100 1110 0011 7810 + { }, // e4: 0100 1100 1110 0100 + { }, // e5: 0100 1100 1110 0101 + { }, // e6: 0100 1100 1110 0110 + { }, // e7: 0100 1100 1110 0111 + { }, // e8: 0100 1100 1110 1000 + { }, // e9: 0100 1100 1110 1001 + { }, // ea: 0100 1100 1110 1010 + { }, // eb: 0100 1100 1110 1011 + { }, // ec: 0100 1100 1110 1100 + { }, // ed: 0100 1100 1110 1101 + { }, // ee: 0100 1100 1110 1110 + { }, // ef: 0100 1100 1110 1111 - {illegal,nullptr }, /* f0: 0100 1100 1111 0000 */ - {illegal,nullptr }, /* f1: 0100 1100 1111 0001 */ - {illegal,nullptr }, /* f2: 0100 1100 1111 0010 */ - {illegal,nullptr }, /* f3: 0100 1100 1111 0011 */ - {illegal,nullptr }, /* f4: 0100 1100 1111 0100 */ - {illegal,nullptr }, /* f5: 0100 1100 1111 0101 */ - {illegal,nullptr }, /* f6: 0100 1100 1111 0110 */ - {illegal,nullptr }, /* f7: 0100 1100 1111 0111 */ - {illegal,nullptr }, /* f8: 0100 1100 1111 1000 */ - {illegal,nullptr }, /* f9: 0100 1100 1111 1001 */ - {illegal,nullptr }, /* fa: 0100 1100 1111 1010 */ - {illegal,nullptr }, /* fb: 0100 1100 1111 1011 */ - {illegal,nullptr }, /* fc: 0100 1100 1111 1100 */ - {illegal,nullptr }, /* fd: 0100 1100 1111 1101 */ - {illegal,nullptr }, /* fe: 0100 1100 1111 1110 */ - {illegal,nullptr } /* ff: 0100 1100 1111 1111 */ + { }, // f0: 0100 1100 1111 0000 + { }, // f1: 0100 1100 1111 0001 + { }, // f2: 0100 1100 1111 0010 + { }, // f3: 0100 1100 1111 0011 + { }, // f4: 0100 1100 1111 0100 + { }, // f5: 0100 1100 1111 0101 + { }, // f6: 0100 1100 1111 0110 + { }, // f7: 0100 1100 1111 0111 + { }, // f8: 0100 1100 1111 1000 + { }, // f9: 0100 1100 1111 1001 + { }, // fa: 0100 1100 1111 1010 + { }, // fb: 0100 1100 1111 1011 + { }, // fc: 0100 1100 1111 1100 + { }, // fd: 0100 1100 1111 1101 + { }, // fe: 0100 1100 1111 1110 + { } // ff: 0100 1100 1111 1111 }; -static const struct dasm_s dasm4C_7807[256] = +const dasm_s dasm_s::d4C_7807[256] = { - {illegal,nullptr }, /* 00: 0100 1100 0000 0000 */ - {illegal,nullptr }, /* 01: 0100 1100 0000 0001 */ - {illegal,nullptr }, /* 02: 0100 1100 0000 0010 */ - {illegal,nullptr }, /* 03: 0100 1100 0000 0011 */ - {illegal,nullptr }, /* 04: 0100 1100 0000 0100 */ - {illegal,nullptr }, /* 05: 0100 1100 0000 0101 */ - {illegal,nullptr }, /* 06: 0100 1100 0000 0110 */ - {illegal,nullptr }, /* 07: 0100 1100 0000 0111 */ - {illegal,nullptr }, /* 08: 0100 1100 0000 1000 */ - {illegal,nullptr }, /* 09: 0100 1100 0000 1001 */ - {illegal,nullptr }, /* 0a: 0100 1100 0000 1010 */ - {illegal,nullptr }, /* 0b: 0100 1100 0000 1011 */ - {illegal,nullptr }, /* 0c: 0100 1100 0000 1100 */ - {illegal,nullptr }, /* 0d: 0100 1100 0000 1101 */ - {illegal,nullptr }, /* 0e: 0100 1100 0000 1110 */ - {illegal,nullptr }, /* 0f: 0100 1100 0000 1111 */ + { }, // 00: 0100 1100 0000 0000 + { }, // 01: 0100 1100 0000 0001 + { }, // 02: 0100 1100 0000 0010 + { }, // 03: 0100 1100 0000 0011 + { }, // 04: 0100 1100 0000 0100 + { }, // 05: 0100 1100 0000 0101 + { }, // 06: 0100 1100 0000 0110 + { }, // 07: 0100 1100 0000 0111 + { }, // 08: 0100 1100 0000 1000 + { }, // 09: 0100 1100 0000 1001 + { }, // 0a: 0100 1100 0000 1010 + { }, // 0b: 0100 1100 0000 1011 + { }, // 0c: 0100 1100 0000 1100 + { }, // 0d: 0100 1100 0000 1101 + { }, // 0e: 0100 1100 0000 1110 + { }, // 0f: 0100 1100 0000 1111 - {illegal,nullptr }, /* 10: 0100 1100 0001 0000 */ - {illegal,nullptr }, /* 11: 0100 1100 0001 0001 */ - {illegal,nullptr }, /* 12: 0100 1100 0001 0010 */ - {illegal,nullptr }, /* 13: 0100 1100 0001 0011 */ - {illegal,nullptr }, /* 14: 0100 1100 0001 0100 */ - {illegal,nullptr }, /* 15: 0100 1100 0001 0101 */ - {illegal,nullptr }, /* 16: 0100 1100 0001 0110 */ - {illegal,nullptr }, /* 17: 0100 1100 0001 0111 */ - {illegal,nullptr }, /* 18: 0100 1100 0001 1000 */ - {illegal,nullptr }, /* 19: 0100 1100 0001 1001 */ - {illegal,nullptr }, /* 1a: 0100 1100 0001 1010 */ - {illegal,nullptr }, /* 1b: 0100 1100 0001 1011 */ - {illegal,nullptr }, /* 1c: 0100 1100 0001 1100 */ - {illegal,nullptr }, /* 1d: 0100 1100 0001 1101 */ - {illegal,nullptr }, /* 1e: 0100 1100 0001 1110 */ - {illegal,nullptr }, /* 1f: 0100 1100 0001 1111 */ + { }, // 10: 0100 1100 0001 0000 + { }, // 11: 0100 1100 0001 0001 + { }, // 12: 0100 1100 0001 0010 + { }, // 13: 0100 1100 0001 0011 + { }, // 14: 0100 1100 0001 0100 + { }, // 15: 0100 1100 0001 0101 + { }, // 16: 0100 1100 0001 0110 + { }, // 17: 0100 1100 0001 0111 + { }, // 18: 0100 1100 0001 1000 + { }, // 19: 0100 1100 0001 1001 + { }, // 1a: 0100 1100 0001 1010 + { }, // 1b: 0100 1100 0001 1011 + { }, // 1c: 0100 1100 0001 1100 + { }, // 1d: 0100 1100 0001 1101 + { }, // 1e: 0100 1100 0001 1110 + { }, // 1f: 0100 1100 0001 1111 - {illegal,nullptr }, /* 20: 0100 1100 0010 0000 */ - {illegal,nullptr }, /* 21: 0100 1100 0010 0001 */ - {illegal,nullptr }, /* 22: 0100 1100 0010 0010 */ - {illegal,nullptr }, /* 23: 0100 1100 0010 0011 */ - {illegal,nullptr }, /* 24: 0100 1100 0010 0100 */ - {illegal,nullptr }, /* 25: 0100 1100 0010 0101 */ - {illegal,nullptr }, /* 26: 0100 1100 0010 0110 */ - {illegal,nullptr }, /* 27: 0100 1100 0010 0111 */ - {illegal,nullptr }, /* 28: 0100 1100 0010 1000 */ - {illegal,nullptr }, /* 29: 0100 1100 0010 1001 */ - {illegal,nullptr }, /* 2a: 0100 1100 0010 1010 */ - {illegal,nullptr }, /* 2b: 0100 1100 0010 1011 */ - {illegal,nullptr }, /* 2c: 0100 1100 0010 1100 */ - {illegal,nullptr }, /* 2d: 0100 1100 0010 1101 */ - {illegal,nullptr }, /* 2e: 0100 1100 0010 1110 */ - {illegal,nullptr }, /* 2f: 0100 1100 0010 1111 */ + { }, // 20: 0100 1100 0010 0000 + { }, // 21: 0100 1100 0010 0001 + { }, // 22: 0100 1100 0010 0010 + { }, // 23: 0100 1100 0010 0011 + { }, // 24: 0100 1100 0010 0100 + { }, // 25: 0100 1100 0010 0101 + { }, // 26: 0100 1100 0010 0110 + { }, // 27: 0100 1100 0010 0111 + { }, // 28: 0100 1100 0010 1000 + { }, // 29: 0100 1100 0010 1001 + { }, // 2a: 0100 1100 0010 1010 + { }, // 2b: 0100 1100 0010 1011 + { }, // 2c: 0100 1100 0010 1100 + { }, // 2d: 0100 1100 0010 1101 + { }, // 2e: 0100 1100 0010 1110 + { }, // 2f: 0100 1100 0010 1111 - {illegal,nullptr }, /* 30: 0100 1100 0011 0000 */ - {illegal,nullptr }, /* 31: 0100 1100 0011 0001 */ - {illegal,nullptr }, /* 32: 0100 1100 0011 0010 */ - {illegal,nullptr }, /* 33: 0100 1100 0011 0011 */ - {illegal,nullptr }, /* 34: 0100 1100 0011 0100 */ - {illegal,nullptr }, /* 35: 0100 1100 0011 0101 */ - {illegal,nullptr }, /* 36: 0100 1100 0011 0110 */ - {illegal,nullptr }, /* 37: 0100 1100 0011 0111 */ - {illegal,nullptr }, /* 38: 0100 1100 0011 1000 */ - {illegal,nullptr }, /* 39: 0100 1100 0011 1001 */ - {illegal,nullptr }, /* 3a: 0100 1100 0011 1010 */ - {illegal,nullptr }, /* 3b: 0100 1100 0011 1011 */ - {illegal,nullptr }, /* 3c: 0100 1100 0011 1100 */ - {illegal,nullptr }, /* 3d: 0100 1100 0011 1101 */ - {illegal,nullptr }, /* 3e: 0100 1100 0011 1110 */ - {illegal,nullptr }, /* 3f: 0100 1100 0011 1111 */ + { }, // 30: 0100 1100 0011 0000 + { }, // 31: 0100 1100 0011 0001 + { }, // 32: 0100 1100 0011 0010 + { }, // 33: 0100 1100 0011 0011 + { }, // 34: 0100 1100 0011 0100 + { }, // 35: 0100 1100 0011 0101 + { }, // 36: 0100 1100 0011 0110 + { }, // 37: 0100 1100 0011 0111 + { }, // 38: 0100 1100 0011 1000 + { }, // 39: 0100 1100 0011 1001 + { }, // 3a: 0100 1100 0011 1010 + { }, // 3b: 0100 1100 0011 1011 + { }, // 3c: 0100 1100 0011 1100 + { }, // 3d: 0100 1100 0011 1101 + { }, // 3e: 0100 1100 0011 1110 + { }, // 3f: 0100 1100 0011 1111 - {illegal,nullptr }, /* 40: 0100 1100 0100 0000 */ - {illegal,nullptr }, /* 41: 0100 1100 0100 0001 */ - {illegal,nullptr }, /* 42: 0100 1100 0100 0010 */ - {illegal,nullptr }, /* 43: 0100 1100 0100 0011 */ - {illegal,nullptr }, /* 44: 0100 1100 0100 0100 */ - {illegal,nullptr }, /* 45: 0100 1100 0100 0101 */ - {illegal,nullptr }, /* 46: 0100 1100 0100 0110 */ - {illegal,nullptr }, /* 47: 0100 1100 0100 0111 */ - {illegal,nullptr }, /* 48: 0100 1100 0100 1000 */ - {illegal,nullptr }, /* 49: 0100 1100 0100 1001 */ - {illegal,nullptr }, /* 4a: 0100 1100 0100 1010 */ - {illegal,nullptr }, /* 4b: 0100 1100 0100 1011 */ - {illegal,nullptr }, /* 4c: 0100 1100 0100 1100 */ - {illegal,nullptr }, /* 4d: 0100 1100 0100 1101 */ - {illegal,nullptr }, /* 4e: 0100 1100 0100 1110 */ - {illegal,nullptr }, /* 4f: 0100 1100 0100 1111 */ + { }, // 40: 0100 1100 0100 0000 + { }, // 41: 0100 1100 0100 0001 + { }, // 42: 0100 1100 0100 0010 + { }, // 43: 0100 1100 0100 0011 + { }, // 44: 0100 1100 0100 0100 + { }, // 45: 0100 1100 0100 0101 + { }, // 46: 0100 1100 0100 0110 + { }, // 47: 0100 1100 0100 0111 + { }, // 48: 0100 1100 0100 1000 + { }, // 49: 0100 1100 0100 1001 + { }, // 4a: 0100 1100 0100 1010 + { }, // 4b: 0100 1100 0100 1011 + { }, // 4c: 0100 1100 0100 1100 + { }, // 4d: 0100 1100 0100 1101 + { }, // 4e: 0100 1100 0100 1110 + { }, // 4f: 0100 1100 0100 1111 - {illegal,nullptr }, /* 50: 0100 1100 0101 0000 */ - {illegal,nullptr }, /* 51: 0100 1100 0101 0001 */ - {illegal,nullptr }, /* 52: 0100 1100 0101 0010 */ - {illegal,nullptr }, /* 53: 0100 1100 0101 0011 */ - {illegal,nullptr }, /* 54: 0100 1100 0101 0100 */ - {illegal,nullptr }, /* 55: 0100 1100 0101 0101 */ - {illegal,nullptr }, /* 56: 0100 1100 0101 0110 */ - {illegal,nullptr }, /* 57: 0100 1100 0101 0111 */ - {illegal,nullptr }, /* 58: 0100 1100 0101 1000 */ - {illegal,nullptr }, /* 59: 0100 1100 0101 1001 */ - {illegal,nullptr }, /* 5a: 0100 1100 0101 1010 */ - {illegal,nullptr }, /* 5b: 0100 1100 0101 1011 */ - {illegal,nullptr }, /* 5c: 0100 1100 0101 1100 */ - {illegal,nullptr }, /* 5d: 0100 1100 0101 1101 */ - {illegal,nullptr }, /* 5e: 0100 1100 0101 1110 */ - {illegal,nullptr }, /* 5f: 0100 1100 0101 1111 */ + { }, // 50: 0100 1100 0101 0000 + { }, // 51: 0100 1100 0101 0001 + { }, // 52: 0100 1100 0101 0010 + { }, // 53: 0100 1100 0101 0011 + { }, // 54: 0100 1100 0101 0100 + { }, // 55: 0100 1100 0101 0101 + { }, // 56: 0100 1100 0101 0110 + { }, // 57: 0100 1100 0101 0111 + { }, // 58: 0100 1100 0101 1000 + { }, // 59: 0100 1100 0101 1001 + { }, // 5a: 0100 1100 0101 1010 + { }, // 5b: 0100 1100 0101 1011 + { }, // 5c: 0100 1100 0101 1100 + { }, // 5d: 0100 1100 0101 1101 + { }, // 5e: 0100 1100 0101 1110 + { }, // 5f: 0100 1100 0101 1111 - {illegal,nullptr }, /* 60: 0100 1100 0110 0000 */ - {illegal,nullptr }, /* 61: 0100 1100 0110 0001 */ - {illegal,nullptr }, /* 62: 0100 1100 0110 0010 */ - {illegal,nullptr }, /* 63: 0100 1100 0110 0011 */ - {illegal,nullptr }, /* 64: 0100 1100 0110 0100 */ - {illegal,nullptr }, /* 65: 0100 1100 0110 0101 */ - {illegal,nullptr }, /* 66: 0100 1100 0110 0110 */ - {illegal,nullptr }, /* 67: 0100 1100 0110 0111 */ - {illegal,nullptr }, /* 68: 0100 1100 0110 1000 */ - {illegal,nullptr }, /* 69: 0100 1100 0110 1001 */ - {illegal,nullptr }, /* 6a: 0100 1100 0110 1010 */ - {illegal,nullptr }, /* 6b: 0100 1100 0110 1011 */ - {illegal,nullptr }, /* 6c: 0100 1100 0110 1100 */ - {illegal,nullptr }, /* 6d: 0100 1100 0110 1101 */ - {illegal,nullptr }, /* 6e: 0100 1100 0110 1110 */ - {illegal,nullptr }, /* 6f: 0100 1100 0110 1111 */ + { }, // 60: 0100 1100 0110 0000 + { }, // 61: 0100 1100 0110 0001 + { }, // 62: 0100 1100 0110 0010 + { }, // 63: 0100 1100 0110 0011 + { }, // 64: 0100 1100 0110 0100 + { }, // 65: 0100 1100 0110 0101 + { }, // 66: 0100 1100 0110 0110 + { }, // 67: 0100 1100 0110 0111 + { }, // 68: 0100 1100 0110 1000 + { }, // 69: 0100 1100 0110 1001 + { }, // 6a: 0100 1100 0110 1010 + { }, // 6b: 0100 1100 0110 1011 + { }, // 6c: 0100 1100 0110 1100 + { }, // 6d: 0100 1100 0110 1101 + { }, // 6e: 0100 1100 0110 1110 + { }, // 6f: 0100 1100 0110 1111 - {illegal,nullptr }, /* 70: 0100 1100 0111 0000 */ - {illegal,nullptr }, /* 71: 0100 1100 0111 0001 */ - {illegal,nullptr }, /* 72: 0100 1100 0111 0010 */ - {illegal,nullptr }, /* 73: 0100 1100 0111 0011 */ - {illegal,nullptr }, /* 74: 0100 1100 0111 0100 */ - {illegal,nullptr }, /* 75: 0100 1100 0111 0101 */ - {illegal,nullptr }, /* 76: 0100 1100 0111 0110 */ - {illegal,nullptr }, /* 77: 0100 1100 0111 0111 */ - {illegal,nullptr }, /* 78: 0100 1100 0111 1000 */ - {illegal,nullptr }, /* 79: 0100 1100 0111 1001 */ - {illegal,nullptr }, /* 7a: 0100 1100 0111 1010 */ - {illegal,nullptr }, /* 7b: 0100 1100 0111 1011 */ - {illegal,nullptr }, /* 7c: 0100 1100 0111 1100 */ - {illegal,nullptr }, /* 7d: 0100 1100 0111 1101 */ - {illegal,nullptr }, /* 7e: 0100 1100 0111 1110 */ - {illegal,nullptr }, /* 7f: 0100 1100 0111 1111 */ + { }, // 70: 0100 1100 0111 0000 + { }, // 71: 0100 1100 0111 0001 + { }, // 72: 0100 1100 0111 0010 + { }, // 73: 0100 1100 0111 0011 + { }, // 74: 0100 1100 0111 0100 + { }, // 75: 0100 1100 0111 0101 + { }, // 76: 0100 1100 0111 0110 + { }, // 77: 0100 1100 0111 0111 + { }, // 78: 0100 1100 0111 1000 + { }, // 79: 0100 1100 0111 1001 + { }, // 7a: 0100 1100 0111 1010 + { }, // 7b: 0100 1100 0111 1011 + { }, // 7c: 0100 1100 0111 1100 + { }, // 7d: 0100 1100 0111 1101 + { }, // 7e: 0100 1100 0111 1110 + { }, // 7f: 0100 1100 0111 1111 - {illegal,nullptr }, /* 80: 0100 1100 1000 0000 */ - {illegal,nullptr }, /* 81: 0100 1100 1000 0001 */ - {illegal,nullptr }, /* 82: 0100 1100 1000 0010 */ - {illegal,nullptr }, /* 83: 0100 1100 1000 0011 */ - {illegal,nullptr }, /* 84: 0100 1100 1000 0100 */ - {illegal,nullptr }, /* 85: 0100 1100 1000 0101 */ - {illegal,nullptr }, /* 86: 0100 1100 1000 0110 */ - {illegal,nullptr }, /* 87: 0100 1100 1000 0111 */ - {illegal,nullptr }, /* 88: 0100 1100 1000 1000 */ - {illegal,nullptr }, /* 89: 0100 1100 1000 1001 */ - {illegal,nullptr }, /* 8a: 0100 1100 1000 1010 */ - {illegal,nullptr }, /* 8b: 0100 1100 1000 1011 */ - {illegal,nullptr }, /* 8c: 0100 1100 1000 1100 */ - {illegal,nullptr }, /* 8d: 0100 1100 1000 1101 */ - {illegal,nullptr }, /* 8e: 0100 1100 1000 1110 */ - {illegal,nullptr }, /* 8f: 0100 1100 1000 1111 */ + { }, // 80: 0100 1100 1000 0000 + { }, // 81: 0100 1100 1000 0001 + { }, // 82: 0100 1100 1000 0010 + { }, // 83: 0100 1100 1000 0011 + { }, // 84: 0100 1100 1000 0100 + { }, // 85: 0100 1100 1000 0101 + { }, // 86: 0100 1100 1000 0110 + { }, // 87: 0100 1100 1000 0111 + { }, // 88: 0100 1100 1000 1000 + { }, // 89: 0100 1100 1000 1001 + { }, // 8a: 0100 1100 1000 1010 + { }, // 8b: 0100 1100 1000 1011 + { }, // 8c: 0100 1100 1000 1100 + { }, // 8d: 0100 1100 1000 1101 + { }, // 8e: 0100 1100 1000 1110 + { }, // 8f: 0100 1100 1000 1111 - {illegal,nullptr }, /* 90: 0100 1100 1001 0000 */ - {illegal,nullptr }, /* 91: 0100 1100 1001 0001 */ - {illegal,nullptr }, /* 92: 0100 1100 1001 0010 */ - {illegal,nullptr }, /* 93: 0100 1100 1001 0011 */ - {illegal,nullptr }, /* 94: 0100 1100 1001 0100 */ - {illegal,nullptr }, /* 95: 0100 1100 1001 0101 */ - {illegal,nullptr }, /* 96: 0100 1100 1001 0110 */ - {illegal,nullptr }, /* 97: 0100 1100 1001 0111 */ - {illegal,nullptr }, /* 98: 0100 1100 1001 1000 */ - {illegal,nullptr }, /* 99: 0100 1100 1001 1001 */ - {illegal,nullptr }, /* 9a: 0100 1100 1001 1010 */ - {illegal,nullptr }, /* 9b: 0100 1100 1001 1011 */ - {illegal,nullptr }, /* 9c: 0100 1100 1001 1100 */ - {illegal,nullptr }, /* 9d: 0100 1100 1001 1101 */ - {illegal,nullptr }, /* 9e: 0100 1100 1001 1110 */ - {illegal,nullptr }, /* 9f: 0100 1100 1001 1111 */ + { }, // 90: 0100 1100 1001 0000 + { }, // 91: 0100 1100 1001 0001 + { }, // 92: 0100 1100 1001 0010 + { }, // 93: 0100 1100 1001 0011 + { }, // 94: 0100 1100 1001 0100 + { }, // 95: 0100 1100 1001 0101 + { }, // 96: 0100 1100 1001 0110 + { }, // 97: 0100 1100 1001 0111 + { }, // 98: 0100 1100 1001 1000 + { }, // 99: 0100 1100 1001 1001 + { }, // 9a: 0100 1100 1001 1010 + { }, // 9b: 0100 1100 1001 1011 + { }, // 9c: 0100 1100 1001 1100 + { }, // 9d: 0100 1100 1001 1101 + { }, // 9e: 0100 1100 1001 1110 + { }, // 9f: 0100 1100 1001 1111 - {illegal,nullptr }, /* a0: 0100 1100 1010 0000 */ - {illegal,nullptr }, /* a1: 0100 1100 1010 0001 */ - {illegal,nullptr }, /* a2: 0100 1100 1010 0010 */ - {illegal,nullptr }, /* a3: 0100 1100 1010 0011 */ - {illegal,nullptr }, /* a4: 0100 1100 1010 0100 */ - {illegal,nullptr }, /* a5: 0100 1100 1010 0101 */ - {illegal,nullptr }, /* a6: 0100 1100 1010 0110 */ - {illegal,nullptr }, /* a7: 0100 1100 1010 0111 */ - {illegal,nullptr }, /* a8: 0100 1100 1010 1000 */ - {illegal,nullptr }, /* a9: 0100 1100 1010 1001 */ - {illegal,nullptr }, /* aa: 0100 1100 1010 1010 */ - {illegal,nullptr }, /* ab: 0100 1100 1010 1011 */ - {illegal,nullptr }, /* ac: 0100 1100 1010 1100 */ - {illegal,nullptr }, /* ad: 0100 1100 1010 1101 */ - {illegal,nullptr }, /* ae: 0100 1100 1010 1110 */ - {illegal,nullptr }, /* af: 0100 1100 1010 1111 */ + { }, // a0: 0100 1100 1010 0000 + { }, // a1: 0100 1100 1010 0001 + { }, // a2: 0100 1100 1010 0010 + { }, // a3: 0100 1100 1010 0011 + { }, // a4: 0100 1100 1010 0100 + { }, // a5: 0100 1100 1010 0101 + { }, // a6: 0100 1100 1010 0110 + { }, // a7: 0100 1100 1010 0111 + { }, // a8: 0100 1100 1010 1000 + { }, // a9: 0100 1100 1010 1001 + { }, // aa: 0100 1100 1010 1010 + { }, // ab: 0100 1100 1010 1011 + { }, // ac: 0100 1100 1010 1100 + { }, // ad: 0100 1100 1010 1101 + { }, // ae: 0100 1100 1010 1110 + { }, // af: 0100 1100 1010 1111 - {illegal,nullptr }, /* b0: 0100 1100 1011 0000 */ - {illegal,nullptr }, /* b1: 0100 1100 1011 0001 */ - {illegal,nullptr }, /* b2: 0100 1100 1011 0010 */ - {illegal,nullptr }, /* b3: 0100 1100 1011 0011 */ - {illegal,nullptr }, /* b4: 0100 1100 1011 0100 */ - {illegal,nullptr }, /* b5: 0100 1100 1011 0101 */ - {illegal,nullptr }, /* b6: 0100 1100 1011 0110 */ - {illegal,nullptr }, /* b7: 0100 1100 1011 0111 */ - {illegal,nullptr }, /* b8: 0100 1100 1011 1000 */ - {illegal,nullptr }, /* b9: 0100 1100 1011 1001 */ - {illegal,nullptr }, /* ba: 0100 1100 1011 1010 */ - {illegal,nullptr }, /* bb: 0100 1100 1011 1011 */ - {illegal,nullptr }, /* bc: 0100 1100 1011 1100 */ - {illegal,nullptr }, /* bd: 0100 1100 1011 1101 */ - {illegal,nullptr }, /* be: 0100 1100 1011 1110 */ - {illegal,nullptr }, /* bf: 0100 1100 1011 1111 */ + { }, // b0: 0100 1100 1011 0000 + { }, // b1: 0100 1100 1011 0001 + { }, // b2: 0100 1100 1011 0010 + { }, // b3: 0100 1100 1011 0011 + { }, // b4: 0100 1100 1011 0100 + { }, // b5: 0100 1100 1011 0101 + { }, // b6: 0100 1100 1011 0110 + { }, // b7: 0100 1100 1011 0111 + { }, // b8: 0100 1100 1011 1000 + { }, // b9: 0100 1100 1011 1001 + { }, // ba: 0100 1100 1011 1010 + { }, // bb: 0100 1100 1011 1011 + { }, // bc: 0100 1100 1011 1100 + { }, // bd: 0100 1100 1011 1101 + { }, // be: 0100 1100 1011 1110 + { }, // bf: 0100 1100 1011 1111 - {MOV,"A,PA" }, /* c0: 0100 1100 1100 0000 */ - {MOV,"A,PB" }, /* c1: 0100 1100 1100 0001 */ - {MOV,"A,PC" }, /* c2: 0100 1100 1100 0010 */ - {MOV,"A,PD" }, /* c3: 0100 1100 1100 0011 */ - {illegal,nullptr }, /* c4: 0100 1100 1100 0100 */ - {MOV,"A,PF" }, /* c5: 0100 1100 1100 0101 */ - {MOV,"A,MKH" }, /* c6: 0100 1100 1100 0110 */ - {MOV,"A,MKL" }, /* c7: 0100 1100 1100 0111 */ - {illegal,nullptr }, /* c8: 0100 1100 1100 1000 */ - {MOV,"A,SMH" }, /* c9: 0100 1100 1100 1001 */ - {illegal,nullptr }, /* ca: 0100 1100 1100 1010 */ - {MOV,"A,EOM" }, /* cb: 0100 1100 1100 1011 */ - {illegal,nullptr }, /* cc: 0100 1100 1100 1100 */ - {MOV,"A,TMM" }, /* cd: 0100 1100 1100 1101 */ - {MOV,"A,PT" }, /* ce: 0100 1100 1100 1110 */ /* 7807 */ - {illegal,nullptr }, /* cf: 0100 1100 1100 1111 */ + {MOV, "A,PA" }, // c0: 0100 1100 1100 0000 + {MOV, "A,PB" }, // c1: 0100 1100 1100 0001 + {MOV, "A,PC" }, // c2: 0100 1100 1100 0010 + {MOV, "A,PD" }, // c3: 0100 1100 1100 0011 + { }, // c4: 0100 1100 1100 0100 + {MOV, "A,PF" }, // c5: 0100 1100 1100 0101 + {MOV, "A,MKH" }, // c6: 0100 1100 1100 0110 + {MOV, "A,MKL" }, // c7: 0100 1100 1100 0111 + { }, // c8: 0100 1100 1100 1000 + {MOV, "A,SMH" }, // c9: 0100 1100 1100 1001 + { }, // ca: 0100 1100 1100 1010 + {MOV, "A,EOM" }, // cb: 0100 1100 1100 1011 + { }, // cc: 0100 1100 1100 1100 + {MOV, "A,TMM" }, // cd: 0100 1100 1100 1101 + {MOV, "A,PT" }, // ce: 0100 1100 1100 1110 7807 + { }, // cf: 0100 1100 1100 1111 - {illegal,nullptr }, /* d0: 0100 1100 1101 0000 */ - {illegal,nullptr }, /* d1: 0100 1100 1101 0001 */ - {illegal,nullptr }, /* d2: 0100 1100 1101 0010 */ - {illegal,nullptr }, /* d3: 0100 1100 1101 0011 */ - {illegal,nullptr }, /* d4: 0100 1100 1101 0100 */ - {illegal,nullptr }, /* d5: 0100 1100 1101 0101 */ - {illegal,nullptr }, /* d6: 0100 1100 1101 0110 */ - {illegal,nullptr }, /* d7: 0100 1100 1101 0111 */ - {illegal,nullptr }, /* d8: 0100 1100 1101 1000 */ - {MOV,"A,RXB" }, /* d9: 0100 1100 1101 1001 */ - {illegal,nullptr }, /* da: 0100 1100 1101 1010 */ - {illegal,nullptr }, /* db: 0100 1100 1101 1011 */ - {illegal,nullptr }, /* dc: 0100 1100 1101 1100 */ - {illegal,nullptr }, /* dd: 0100 1100 1101 1101 */ - {illegal,nullptr }, /* de: 0100 1100 1101 1110 */ - {illegal,nullptr }, /* df: 0100 1100 1101 1111 */ + { }, // d0: 0100 1100 1101 0000 + { }, // d1: 0100 1100 1101 0001 + { }, // d2: 0100 1100 1101 0010 + { }, // d3: 0100 1100 1101 0011 + { }, // d4: 0100 1100 1101 0100 + { }, // d5: 0100 1100 1101 0101 + { }, // d6: 0100 1100 1101 0110 + { }, // d7: 0100 1100 1101 0111 + { }, // d8: 0100 1100 1101 1000 + {MOV, "A,RXB" }, // d9: 0100 1100 1101 1001 + { }, // da: 0100 1100 1101 1010 + { }, // db: 0100 1100 1101 1011 + { }, // dc: 0100 1100 1101 1100 + { }, // dd: 0100 1100 1101 1101 + { }, // de: 0100 1100 1101 1110 + { }, // df: 0100 1100 1101 1111 - {illegal,nullptr }, /* e0: 0100 1100 1110 0000 */ - {illegal,nullptr }, /* e1: 0100 1100 1110 0001 */ - {illegal,nullptr }, /* e2: 0100 1100 1110 0010 */ - {illegal,nullptr }, /* e3: 0100 1100 1110 0011 */ - {illegal,nullptr }, /* e4: 0100 1100 1110 0100 */ - {illegal,nullptr }, /* e5: 0100 1100 1110 0101 */ - {illegal,nullptr }, /* e6: 0100 1100 1110 0110 */ - {illegal,nullptr }, /* e7: 0100 1100 1110 0111 */ - {illegal,nullptr }, /* e8: 0100 1100 1110 1000 */ - {illegal,nullptr }, /* e9: 0100 1100 1110 1001 */ - {illegal,nullptr }, /* ea: 0100 1100 1110 1010 */ - {illegal,nullptr }, /* eb: 0100 1100 1110 1011 */ - {illegal,nullptr }, /* ec: 0100 1100 1110 1100 */ - {illegal,nullptr }, /* ed: 0100 1100 1110 1101 */ - {illegal,nullptr }, /* ee: 0100 1100 1110 1110 */ - {illegal,nullptr }, /* ef: 0100 1100 1110 1111 */ + { }, // e0: 0100 1100 1110 0000 + { }, // e1: 0100 1100 1110 0001 + { }, // e2: 0100 1100 1110 0010 + { }, // e3: 0100 1100 1110 0011 + { }, // e4: 0100 1100 1110 0100 + { }, // e5: 0100 1100 1110 0101 + { }, // e6: 0100 1100 1110 0110 + { }, // e7: 0100 1100 1110 0111 + { }, // e8: 0100 1100 1110 1000 + { }, // e9: 0100 1100 1110 1001 + { }, // ea: 0100 1100 1110 1010 + { }, // eb: 0100 1100 1110 1011 + { }, // ec: 0100 1100 1110 1100 + { }, // ed: 0100 1100 1110 1101 + { }, // ee: 0100 1100 1110 1110 + { }, // ef: 0100 1100 1110 1111 - {illegal,nullptr }, /* f0: 0100 1100 1111 0000 */ - {illegal,nullptr }, /* f1: 0100 1100 1111 0001 */ - {illegal,nullptr }, /* f2: 0100 1100 1111 0010 */ - {illegal,nullptr }, /* f3: 0100 1100 1111 0011 */ - {illegal,nullptr }, /* f4: 0100 1100 1111 0100 */ - {illegal,nullptr }, /* f5: 0100 1100 1111 0101 */ - {illegal,nullptr }, /* f6: 0100 1100 1111 0110 */ - {illegal,nullptr }, /* f7: 0100 1100 1111 0111 */ - {illegal,nullptr }, /* f8: 0100 1100 1111 1000 */ - {illegal,nullptr }, /* f9: 0100 1100 1111 1001 */ - {illegal,nullptr }, /* fa: 0100 1100 1111 1010 */ - {illegal,nullptr }, /* fb: 0100 1100 1111 1011 */ - {illegal,nullptr }, /* fc: 0100 1100 1111 1100 */ - {illegal,nullptr }, /* fd: 0100 1100 1111 1101 */ - {illegal,nullptr }, /* fe: 0100 1100 1111 1110 */ - {illegal,nullptr } /* ff: 0100 1100 1111 1111 */ + { }, // f0: 0100 1100 1111 0000 + { }, // f1: 0100 1100 1111 0001 + { }, // f2: 0100 1100 1111 0010 + { }, // f3: 0100 1100 1111 0011 + { }, // f4: 0100 1100 1111 0100 + { }, // f5: 0100 1100 1111 0101 + { }, // f6: 0100 1100 1111 0110 + { }, // f7: 0100 1100 1111 0111 + { }, // f8: 0100 1100 1111 1000 + { }, // f9: 0100 1100 1111 1001 + { }, // fa: 0100 1100 1111 1010 + { }, // fb: 0100 1100 1111 1011 + { }, // fc: 0100 1100 1111 1100 + { }, // fd: 0100 1100 1111 1101 + { }, // fe: 0100 1100 1111 1110 + { } // ff: 0100 1100 1111 1111 }; -/* prefix 4D */ -static const struct dasm_s dasm4D_7810[256] = +// prefix 4D +const dasm_s dasm_s::d4D_7810[256] = { - {illegal,nullptr }, /* 00: 0100 1101 0000 0000 */ - {illegal,nullptr }, /* 01: 0100 1101 0000 0001 */ - {illegal,nullptr }, /* 02: 0100 1101 0000 0010 */ - {illegal,nullptr }, /* 03: 0100 1101 0000 0011 */ - {illegal,nullptr }, /* 04: 0100 1101 0000 0100 */ - {illegal,nullptr }, /* 05: 0100 1101 0000 0101 */ - {illegal,nullptr }, /* 06: 0100 1101 0000 0110 */ - {illegal,nullptr }, /* 07: 0100 1101 0000 0111 */ - {illegal,nullptr }, /* 08: 0100 1101 0000 1000 */ - {illegal,nullptr }, /* 09: 0100 1101 0000 1001 */ - {illegal,nullptr }, /* 0a: 0100 1101 0000 1010 */ - {illegal,nullptr }, /* 0b: 0100 1101 0000 1011 */ - {illegal,nullptr }, /* 0c: 0100 1101 0000 1100 */ - {illegal,nullptr }, /* 0d: 0100 1101 0000 1101 */ - {illegal,nullptr }, /* 0e: 0100 1101 0000 1110 */ - {illegal,nullptr }, /* 0f: 0100 1101 0000 1111 */ + { }, // 00: 0100 1101 0000 0000 + { }, // 01: 0100 1101 0000 0001 + { }, // 02: 0100 1101 0000 0010 + { }, // 03: 0100 1101 0000 0011 + { }, // 04: 0100 1101 0000 0100 + { }, // 05: 0100 1101 0000 0101 + { }, // 06: 0100 1101 0000 0110 + { }, // 07: 0100 1101 0000 0111 + { }, // 08: 0100 1101 0000 1000 + { }, // 09: 0100 1101 0000 1001 + { }, // 0a: 0100 1101 0000 1010 + { }, // 0b: 0100 1101 0000 1011 + { }, // 0c: 0100 1101 0000 1100 + { }, // 0d: 0100 1101 0000 1101 + { }, // 0e: 0100 1101 0000 1110 + { }, // 0f: 0100 1101 0000 1111 - {illegal,nullptr }, /* 10: 0100 1101 0001 0000 */ - {illegal,nullptr }, /* 11: 0100 1101 0001 0001 */ - {illegal,nullptr }, /* 12: 0100 1101 0001 0010 */ - {illegal,nullptr }, /* 13: 0100 1101 0001 0011 */ - {illegal,nullptr }, /* 14: 0100 1101 0001 0100 */ - {illegal,nullptr }, /* 15: 0100 1101 0001 0101 */ - {illegal,nullptr }, /* 16: 0100 1101 0001 0110 */ - {illegal,nullptr }, /* 17: 0100 1101 0001 0111 */ - {illegal,nullptr }, /* 18: 0100 1101 0001 1000 */ - {illegal,nullptr }, /* 19: 0100 1101 0001 1001 */ - {illegal,nullptr }, /* 1a: 0100 1101 0001 1010 */ - {illegal,nullptr }, /* 1b: 0100 1101 0001 1011 */ - {illegal,nullptr }, /* 1c: 0100 1101 0001 1100 */ - {illegal,nullptr }, /* 1d: 0100 1101 0001 1101 */ - {illegal,nullptr }, /* 1e: 0100 1101 0001 1110 */ - {illegal,nullptr }, /* 1f: 0100 1101 0001 1111 */ + { }, // 10: 0100 1101 0001 0000 + { }, // 11: 0100 1101 0001 0001 + { }, // 12: 0100 1101 0001 0010 + { }, // 13: 0100 1101 0001 0011 + { }, // 14: 0100 1101 0001 0100 + { }, // 15: 0100 1101 0001 0101 + { }, // 16: 0100 1101 0001 0110 + { }, // 17: 0100 1101 0001 0111 + { }, // 18: 0100 1101 0001 1000 + { }, // 19: 0100 1101 0001 1001 + { }, // 1a: 0100 1101 0001 1010 + { }, // 1b: 0100 1101 0001 1011 + { }, // 1c: 0100 1101 0001 1100 + { }, // 1d: 0100 1101 0001 1101 + { }, // 1e: 0100 1101 0001 1110 + { }, // 1f: 0100 1101 0001 1111 - {illegal,nullptr }, /* 20: 0100 1101 0010 0000 */ - {illegal,nullptr }, /* 21: 0100 1101 0010 0001 */ - {illegal,nullptr }, /* 22: 0100 1101 0010 0010 */ - {illegal,nullptr }, /* 23: 0100 1101 0010 0011 */ - {illegal,nullptr }, /* 24: 0100 1101 0010 0100 */ - {illegal,nullptr }, /* 25: 0100 1101 0010 0101 */ - {illegal,nullptr }, /* 26: 0100 1101 0010 0110 */ - {illegal,nullptr }, /* 27: 0100 1101 0010 0111 */ - {illegal,nullptr }, /* 28: 0100 1101 0010 1000 */ - {illegal,nullptr }, /* 29: 0100 1101 0010 1001 */ - {illegal,nullptr }, /* 2a: 0100 1101 0010 1010 */ - {illegal,nullptr }, /* 2b: 0100 1101 0010 1011 */ - {illegal,nullptr }, /* 2c: 0100 1101 0010 1100 */ - {illegal,nullptr }, /* 2d: 0100 1101 0010 1101 */ - {illegal,nullptr }, /* 2e: 0100 1101 0010 1110 */ - {illegal,nullptr }, /* 2f: 0100 1101 0010 1111 */ + { }, // 20: 0100 1101 0010 0000 + { }, // 21: 0100 1101 0010 0001 + { }, // 22: 0100 1101 0010 0010 + { }, // 23: 0100 1101 0010 0011 + { }, // 24: 0100 1101 0010 0100 + { }, // 25: 0100 1101 0010 0101 + { }, // 26: 0100 1101 0010 0110 + { }, // 27: 0100 1101 0010 0111 + { }, // 28: 0100 1101 0010 1000 + { }, // 29: 0100 1101 0010 1001 + { }, // 2a: 0100 1101 0010 1010 + { }, // 2b: 0100 1101 0010 1011 + { }, // 2c: 0100 1101 0010 1100 + { }, // 2d: 0100 1101 0010 1101 + { }, // 2e: 0100 1101 0010 1110 + { }, // 2f: 0100 1101 0010 1111 - {illegal,nullptr }, /* 30: 0100 1101 0011 0000 */ - {illegal,nullptr }, /* 31: 0100 1101 0011 0001 */ - {illegal,nullptr }, /* 32: 0100 1101 0011 0010 */ - {illegal,nullptr }, /* 33: 0100 1101 0011 0011 */ - {illegal,nullptr }, /* 34: 0100 1101 0011 0100 */ - {illegal,nullptr }, /* 35: 0100 1101 0011 0101 */ - {illegal,nullptr }, /* 36: 0100 1101 0011 0110 */ - {illegal,nullptr }, /* 37: 0100 1101 0011 0111 */ - {illegal,nullptr }, /* 38: 0100 1101 0011 1000 */ - {illegal,nullptr }, /* 39: 0100 1101 0011 1001 */ - {illegal,nullptr }, /* 3a: 0100 1101 0011 1010 */ - {illegal,nullptr }, /* 3b: 0100 1101 0011 1011 */ - {illegal,nullptr }, /* 3c: 0100 1101 0011 1100 */ - {illegal,nullptr }, /* 3d: 0100 1101 0011 1101 */ - {illegal,nullptr }, /* 3e: 0100 1101 0011 1110 */ - {illegal,nullptr }, /* 3f: 0100 1101 0011 1111 */ + { }, // 30: 0100 1101 0011 0000 + { }, // 31: 0100 1101 0011 0001 + { }, // 32: 0100 1101 0011 0010 + { }, // 33: 0100 1101 0011 0011 + { }, // 34: 0100 1101 0011 0100 + { }, // 35: 0100 1101 0011 0101 + { }, // 36: 0100 1101 0011 0110 + { }, // 37: 0100 1101 0011 0111 + { }, // 38: 0100 1101 0011 1000 + { }, // 39: 0100 1101 0011 1001 + { }, // 3a: 0100 1101 0011 1010 + { }, // 3b: 0100 1101 0011 1011 + { }, // 3c: 0100 1101 0011 1100 + { }, // 3d: 0100 1101 0011 1101 + { }, // 3e: 0100 1101 0011 1110 + { }, // 3f: 0100 1101 0011 1111 - {illegal,nullptr }, /* 40: 0100 1101 0100 0000 */ - {illegal,nullptr }, /* 41: 0100 1101 0100 0001 */ - {illegal,nullptr }, /* 42: 0100 1101 0100 0010 */ - {illegal,nullptr }, /* 43: 0100 1101 0100 0011 */ - {illegal,nullptr }, /* 44: 0100 1101 0100 0100 */ - {illegal,nullptr }, /* 45: 0100 1101 0100 0101 */ - {illegal,nullptr }, /* 46: 0100 1101 0100 0110 */ - {illegal,nullptr }, /* 47: 0100 1101 0100 0111 */ - {illegal,nullptr }, /* 48: 0100 1101 0100 1000 */ - {illegal,nullptr }, /* 49: 0100 1101 0100 1001 */ - {illegal,nullptr }, /* 4a: 0100 1101 0100 1010 */ - {illegal,nullptr }, /* 4b: 0100 1101 0100 1011 */ - {illegal,nullptr }, /* 4c: 0100 1101 0100 1100 */ - {illegal,nullptr }, /* 4d: 0100 1101 0100 1101 */ - {illegal,nullptr }, /* 4e: 0100 1101 0100 1110 */ - {illegal,nullptr }, /* 4f: 0100 1101 0100 1111 */ + { }, // 40: 0100 1101 0100 0000 + { }, // 41: 0100 1101 0100 0001 + { }, // 42: 0100 1101 0100 0010 + { }, // 43: 0100 1101 0100 0011 + { }, // 44: 0100 1101 0100 0100 + { }, // 45: 0100 1101 0100 0101 + { }, // 46: 0100 1101 0100 0110 + { }, // 47: 0100 1101 0100 0111 + { }, // 48: 0100 1101 0100 1000 + { }, // 49: 0100 1101 0100 1001 + { }, // 4a: 0100 1101 0100 1010 + { }, // 4b: 0100 1101 0100 1011 + { }, // 4c: 0100 1101 0100 1100 + { }, // 4d: 0100 1101 0100 1101 + { }, // 4e: 0100 1101 0100 1110 + { }, // 4f: 0100 1101 0100 1111 - {illegal,nullptr }, /* 50: 0100 1101 0101 0000 */ - {illegal,nullptr }, /* 51: 0100 1101 0101 0001 */ - {illegal,nullptr }, /* 52: 0100 1101 0101 0010 */ - {illegal,nullptr }, /* 53: 0100 1101 0101 0011 */ - {illegal,nullptr }, /* 54: 0100 1101 0101 0100 */ - {illegal,nullptr }, /* 55: 0100 1101 0101 0101 */ - {illegal,nullptr }, /* 56: 0100 1101 0101 0110 */ - {illegal,nullptr }, /* 57: 0100 1101 0101 0111 */ - {illegal,nullptr }, /* 58: 0100 1101 0101 1000 */ - {illegal,nullptr }, /* 59: 0100 1101 0101 1001 */ - {illegal,nullptr }, /* 5a: 0100 1101 0101 1010 */ - {illegal,nullptr }, /* 5b: 0100 1101 0101 1011 */ - {illegal,nullptr }, /* 5c: 0100 1101 0101 1100 */ - {illegal,nullptr }, /* 5d: 0100 1101 0101 1101 */ - {illegal,nullptr }, /* 5e: 0100 1101 0101 1110 */ - {illegal,nullptr }, /* 5f: 0100 1101 0101 1111 */ + { }, // 50: 0100 1101 0101 0000 + { }, // 51: 0100 1101 0101 0001 + { }, // 52: 0100 1101 0101 0010 + { }, // 53: 0100 1101 0101 0011 + { }, // 54: 0100 1101 0101 0100 + { }, // 55: 0100 1101 0101 0101 + { }, // 56: 0100 1101 0101 0110 + { }, // 57: 0100 1101 0101 0111 + { }, // 58: 0100 1101 0101 1000 + { }, // 59: 0100 1101 0101 1001 + { }, // 5a: 0100 1101 0101 1010 + { }, // 5b: 0100 1101 0101 1011 + { }, // 5c: 0100 1101 0101 1100 + { }, // 5d: 0100 1101 0101 1101 + { }, // 5e: 0100 1101 0101 1110 + { }, // 5f: 0100 1101 0101 1111 - {illegal,nullptr }, /* 60: 0100 1101 0110 0000 */ - {illegal,nullptr }, /* 61: 0100 1101 0110 0001 */ - {illegal,nullptr }, /* 62: 0100 1101 0110 0010 */ - {illegal,nullptr }, /* 63: 0100 1101 0110 0011 */ - {illegal,nullptr }, /* 64: 0100 1101 0110 0100 */ - {illegal,nullptr }, /* 65: 0100 1101 0110 0101 */ - {illegal,nullptr }, /* 66: 0100 1101 0110 0110 */ - {illegal,nullptr }, /* 67: 0100 1101 0110 0111 */ - {illegal,nullptr }, /* 68: 0100 1101 0110 1000 */ - {illegal,nullptr }, /* 69: 0100 1101 0110 1001 */ - {illegal,nullptr }, /* 6a: 0100 1101 0110 1010 */ - {illegal,nullptr }, /* 6b: 0100 1101 0110 1011 */ - {illegal,nullptr }, /* 6c: 0100 1101 0110 1100 */ - {illegal,nullptr }, /* 6d: 0100 1101 0110 1101 */ - {illegal,nullptr }, /* 6e: 0100 1101 0110 1110 */ - {illegal,nullptr }, /* 6f: 0100 1101 0110 1111 */ + { }, // 60: 0100 1101 0110 0000 + { }, // 61: 0100 1101 0110 0001 + { }, // 62: 0100 1101 0110 0010 + { }, // 63: 0100 1101 0110 0011 + { }, // 64: 0100 1101 0110 0100 + { }, // 65: 0100 1101 0110 0101 + { }, // 66: 0100 1101 0110 0110 + { }, // 67: 0100 1101 0110 0111 + { }, // 68: 0100 1101 0110 1000 + { }, // 69: 0100 1101 0110 1001 + { }, // 6a: 0100 1101 0110 1010 + { }, // 6b: 0100 1101 0110 1011 + { }, // 6c: 0100 1101 0110 1100 + { }, // 6d: 0100 1101 0110 1101 + { }, // 6e: 0100 1101 0110 1110 + { }, // 6f: 0100 1101 0110 1111 - {illegal,nullptr }, /* 70: 0100 1101 0111 0000 */ - {illegal,nullptr }, /* 71: 0100 1101 0111 0001 */ - {illegal,nullptr }, /* 72: 0100 1101 0111 0010 */ - {illegal,nullptr }, /* 73: 0100 1101 0111 0011 */ - {illegal,nullptr }, /* 74: 0100 1101 0111 0100 */ - {illegal,nullptr }, /* 75: 0100 1101 0111 0101 */ - {illegal,nullptr }, /* 76: 0100 1101 0111 0110 */ - {illegal,nullptr }, /* 77: 0100 1101 0111 0111 */ - {illegal,nullptr }, /* 78: 0100 1101 0111 1000 */ - {illegal,nullptr }, /* 79: 0100 1101 0111 1001 */ - {illegal,nullptr }, /* 7a: 0100 1101 0111 1010 */ - {illegal,nullptr }, /* 7b: 0100 1101 0111 1011 */ - {illegal,nullptr }, /* 7c: 0100 1101 0111 1100 */ - {illegal,nullptr }, /* 7d: 0100 1101 0111 1101 */ - {illegal,nullptr }, /* 7e: 0100 1101 0111 1110 */ - {illegal,nullptr }, /* 7f: 0100 1101 0111 1111 */ + { }, // 70: 0100 1101 0111 0000 + { }, // 71: 0100 1101 0111 0001 + { }, // 72: 0100 1101 0111 0010 + { }, // 73: 0100 1101 0111 0011 + { }, // 74: 0100 1101 0111 0100 + { }, // 75: 0100 1101 0111 0101 + { }, // 76: 0100 1101 0111 0110 + { }, // 77: 0100 1101 0111 0111 + { }, // 78: 0100 1101 0111 1000 + { }, // 79: 0100 1101 0111 1001 + { }, // 7a: 0100 1101 0111 1010 + { }, // 7b: 0100 1101 0111 1011 + { }, // 7c: 0100 1101 0111 1100 + { }, // 7d: 0100 1101 0111 1101 + { }, // 7e: 0100 1101 0111 1110 + { }, // 7f: 0100 1101 0111 1111 - {illegal,nullptr }, /* 80: 0100 1101 1000 0000 */ - {illegal,nullptr }, /* 81: 0100 1101 1000 0001 */ - {illegal,nullptr }, /* 82: 0100 1101 1000 0010 */ - {illegal,nullptr }, /* 83: 0100 1101 1000 0011 */ - {illegal,nullptr }, /* 84: 0100 1101 1000 0100 */ - {illegal,nullptr }, /* 85: 0100 1101 1000 0101 */ - {illegal,nullptr }, /* 86: 0100 1101 1000 0110 */ - {illegal,nullptr }, /* 87: 0100 1101 1000 0111 */ - {illegal,nullptr }, /* 88: 0100 1101 1000 1000 */ - {illegal,nullptr }, /* 89: 0100 1101 1000 1001 */ - {illegal,nullptr }, /* 8a: 0100 1101 1000 1010 */ - {illegal,nullptr }, /* 8b: 0100 1101 1000 1011 */ - {illegal,nullptr }, /* 8c: 0100 1101 1000 1100 */ - {illegal,nullptr }, /* 8d: 0100 1101 1000 1101 */ - {illegal,nullptr }, /* 8e: 0100 1101 1000 1110 */ - {illegal,nullptr }, /* 8f: 0100 1101 1000 1111 */ + { }, // 80: 0100 1101 1000 0000 + { }, // 81: 0100 1101 1000 0001 + { }, // 82: 0100 1101 1000 0010 + { }, // 83: 0100 1101 1000 0011 + { }, // 84: 0100 1101 1000 0100 + { }, // 85: 0100 1101 1000 0101 + { }, // 86: 0100 1101 1000 0110 + { }, // 87: 0100 1101 1000 0111 + { }, // 88: 0100 1101 1000 1000 + { }, // 89: 0100 1101 1000 1001 + { }, // 8a: 0100 1101 1000 1010 + { }, // 8b: 0100 1101 1000 1011 + { }, // 8c: 0100 1101 1000 1100 + { }, // 8d: 0100 1101 1000 1101 + { }, // 8e: 0100 1101 1000 1110 + { }, // 8f: 0100 1101 1000 1111 - {illegal,nullptr }, /* 90: 0100 1101 1001 0000 */ - {illegal,nullptr }, /* 91: 0100 1101 1001 0001 */ - {illegal,nullptr }, /* 92: 0100 1101 1001 0010 */ - {illegal,nullptr }, /* 93: 0100 1101 1001 0011 */ - {illegal,nullptr }, /* 94: 0100 1101 1001 0100 */ - {illegal,nullptr }, /* 95: 0100 1101 1001 0101 */ - {illegal,nullptr }, /* 96: 0100 1101 1001 0110 */ - {illegal,nullptr }, /* 97: 0100 1101 1001 0111 */ - {illegal,nullptr }, /* 98: 0100 1101 1001 1000 */ - {illegal,nullptr }, /* 99: 0100 1101 1001 1001 */ - {illegal,nullptr }, /* 9a: 0100 1101 1001 1010 */ - {illegal,nullptr }, /* 9b: 0100 1101 1001 1011 */ - {illegal,nullptr }, /* 9c: 0100 1101 1001 1100 */ - {illegal,nullptr }, /* 9d: 0100 1101 1001 1101 */ - {illegal,nullptr }, /* 9e: 0100 1101 1001 1110 */ - {illegal,nullptr }, /* 9f: 0100 1101 1001 1111 */ + { }, // 90: 0100 1101 1001 0000 + { }, // 91: 0100 1101 1001 0001 + { }, // 92: 0100 1101 1001 0010 + { }, // 93: 0100 1101 1001 0011 + { }, // 94: 0100 1101 1001 0100 + { }, // 95: 0100 1101 1001 0101 + { }, // 96: 0100 1101 1001 0110 + { }, // 97: 0100 1101 1001 0111 + { }, // 98: 0100 1101 1001 1000 + { }, // 99: 0100 1101 1001 1001 + { }, // 9a: 0100 1101 1001 1010 + { }, // 9b: 0100 1101 1001 1011 + { }, // 9c: 0100 1101 1001 1100 + { }, // 9d: 0100 1101 1001 1101 + { }, // 9e: 0100 1101 1001 1110 + { }, // 9f: 0100 1101 1001 1111 - {illegal,nullptr }, /* a0: 0100 1101 1010 0000 */ - {illegal,nullptr }, /* a1: 0100 1101 1010 0001 */ - {illegal,nullptr }, /* a2: 0100 1101 1010 0010 */ - {illegal,nullptr }, /* a3: 0100 1101 1010 0011 */ - {illegal,nullptr }, /* a4: 0100 1101 1010 0100 */ - {illegal,nullptr }, /* a5: 0100 1101 1010 0101 */ - {illegal,nullptr }, /* a6: 0100 1101 1010 0110 */ - {illegal,nullptr }, /* a7: 0100 1101 1010 0111 */ - {illegal,nullptr }, /* a8: 0100 1101 1010 1000 */ - {illegal,nullptr }, /* a9: 0100 1101 1010 1001 */ - {illegal,nullptr }, /* aa: 0100 1101 1010 1010 */ - {illegal,nullptr }, /* ab: 0100 1101 1010 1011 */ - {illegal,nullptr }, /* ac: 0100 1101 1010 1100 */ - {illegal,nullptr }, /* ad: 0100 1101 1010 1101 */ - {illegal,nullptr }, /* ae: 0100 1101 1010 1110 */ - {illegal,nullptr }, /* af: 0100 1101 1010 1111 */ + { }, // a0: 0100 1101 1010 0000 + { }, // a1: 0100 1101 1010 0001 + { }, // a2: 0100 1101 1010 0010 + { }, // a3: 0100 1101 1010 0011 + { }, // a4: 0100 1101 1010 0100 + { }, // a5: 0100 1101 1010 0101 + { }, // a6: 0100 1101 1010 0110 + { }, // a7: 0100 1101 1010 0111 + { }, // a8: 0100 1101 1010 1000 + { }, // a9: 0100 1101 1010 1001 + { }, // aa: 0100 1101 1010 1010 + { }, // ab: 0100 1101 1010 1011 + { }, // ac: 0100 1101 1010 1100 + { }, // ad: 0100 1101 1010 1101 + { }, // ae: 0100 1101 1010 1110 + { }, // af: 0100 1101 1010 1111 - {illegal,nullptr }, /* b0: 0100 1101 1011 0000 */ - {illegal,nullptr }, /* b1: 0100 1101 1011 0001 */ - {illegal,nullptr }, /* b2: 0100 1101 1011 0010 */ - {illegal,nullptr }, /* b3: 0100 1101 1011 0011 */ - {illegal,nullptr }, /* b4: 0100 1101 1011 0100 */ - {illegal,nullptr }, /* b5: 0100 1101 1011 0101 */ - {illegal,nullptr }, /* b6: 0100 1101 1011 0110 */ - {illegal,nullptr }, /* b7: 0100 1101 1011 0111 */ - {illegal,nullptr }, /* b8: 0100 1101 1011 1000 */ - {illegal,nullptr }, /* b9: 0100 1101 1011 1001 */ - {illegal,nullptr }, /* ba: 0100 1101 1011 1010 */ - {illegal,nullptr }, /* bb: 0100 1101 1011 1011 */ - {illegal,nullptr }, /* bc: 0100 1101 1011 1100 */ - {illegal,nullptr }, /* bd: 0100 1101 1011 1101 */ - {illegal,nullptr }, /* be: 0100 1101 1011 1110 */ - {illegal,nullptr }, /* bf: 0100 1101 1011 1111 */ + { }, // b0: 0100 1101 1011 0000 + { }, // b1: 0100 1101 1011 0001 + { }, // b2: 0100 1101 1011 0010 + { }, // b3: 0100 1101 1011 0011 + { }, // b4: 0100 1101 1011 0100 + { }, // b5: 0100 1101 1011 0101 + { }, // b6: 0100 1101 1011 0110 + { }, // b7: 0100 1101 1011 0111 + { }, // b8: 0100 1101 1011 1000 + { }, // b9: 0100 1101 1011 1001 + { }, // ba: 0100 1101 1011 1010 + { }, // bb: 0100 1101 1011 1011 + { }, // bc: 0100 1101 1011 1100 + { }, // bd: 0100 1101 1011 1101 + { }, // be: 0100 1101 1011 1110 + { }, // bf: 0100 1101 1011 1111 - {MOV,"PA,A" }, /* c0: 0100 1101 1100 0000 */ - {MOV,"PB,A" }, /* c1: 0100 1101 1100 0001 */ - {MOV,"PC,A" }, /* c2: 0100 1101 1100 0010 */ - {MOV,"PD,A" }, /* c3: 0100 1101 1100 0011 */ - {illegal,nullptr }, /* c4: 0100 1101 1100 0100 */ - {MOV,"PF,A" }, /* c5: 0100 1101 1100 0101 */ - {MOV,"MKH,A" }, /* c6: 0100 1101 1100 0110 */ - {MOV,"MKL,A" }, /* c7: 0100 1101 1100 0111 */ - {MOV,"ANM,A" }, /* c8: 0100 1101 1100 1000 */ /* 7810 */ - {MOV,"SMH,A" }, /* c9: 0100 1101 1100 1001 */ - {MOV,"SML,A" }, /* ca: 0100 1101 1100 1010 */ - {MOV,"EOM,A" }, /* cb: 0100 1101 1100 1011 */ - {MOV,"ETMM,A" }, /* cc: 0100 1101 1100 1100 */ - {MOV,"TMM,A" }, /* cd: 0100 1101 1100 1101 */ - {illegal,nullptr }, /* ce: 0100 1101 1100 1110 */ - {illegal,nullptr }, /* cf: 0100 1101 1100 1111 */ + {MOV, "PA,A" }, // c0: 0100 1101 1100 0000 + {MOV, "PB,A" }, // c1: 0100 1101 1100 0001 + {MOV, "PC,A" }, // c2: 0100 1101 1100 0010 + {MOV, "PD,A" }, // c3: 0100 1101 1100 0011 + { }, // c4: 0100 1101 1100 0100 + {MOV, "PF,A" }, // c5: 0100 1101 1100 0101 + {MOV, "MKH,A" }, // c6: 0100 1101 1100 0110 + {MOV, "MKL,A" }, // c7: 0100 1101 1100 0111 + {MOV, "ANM,A" }, // c8: 0100 1101 1100 1000 7810 + {MOV, "SMH,A" }, // c9: 0100 1101 1100 1001 + {MOV, "SML,A" }, // ca: 0100 1101 1100 1010 + {MOV, "EOM,A" }, // cb: 0100 1101 1100 1011 + {MOV, "ETMM,A" }, // cc: 0100 1101 1100 1100 + {MOV, "TMM,A" }, // cd: 0100 1101 1100 1101 + { }, // ce: 0100 1101 1100 1110 + { }, // cf: 0100 1101 1100 1111 - {MOV,"MM,A" }, /* d0: 0100 1101 1101 0000 */ - {MOV,"MCC,A" }, /* d1: 0100 1101 1101 0001 */ - {MOV,"MA,A" }, /* d2: 0100 1101 1101 0010 */ - {MOV,"MB,A" }, /* d3: 0100 1101 1101 0011 */ - {MOV,"MC,A" }, /* d4: 0100 1101 1101 0100 */ - {illegal,nullptr }, /* d5: 0100 1101 1101 0101 */ - {illegal,nullptr }, /* d6: 0100 1101 1101 0110 */ - {MOV,"MF,A" }, /* d7: 0100 1101 1101 0111 */ - {MOV,"TXB,A" }, /* d8: 0100 1101 1101 1000 */ - {illegal,nullptr }, /* d9: 0100 1101 1101 1001 */ - {MOV,"TM0,A" }, /* da: 0100 1101 1101 1010 */ - {MOV,"TM1,A" }, /* db: 0100 1101 1101 1011 */ - {illegal,nullptr }, /* dc: 0100 1101 1101 1100 */ - {illegal,nullptr }, /* dd: 0100 1101 1101 1101 */ - {illegal,nullptr }, /* de: 0100 1101 1101 1110 */ - {illegal,nullptr }, /* df: 0100 1101 1101 1111 */ + {MOV, "MM,A" }, // d0: 0100 1101 1101 0000 + {MOV, "MCC,A" }, // d1: 0100 1101 1101 0001 + {MOV, "MA,A" }, // d2: 0100 1101 1101 0010 + {MOV, "MB,A" }, // d3: 0100 1101 1101 0011 + {MOV, "MC,A" }, // d4: 0100 1101 1101 0100 + { }, // d5: 0100 1101 1101 0101 + { }, // d6: 0100 1101 1101 0110 + {MOV, "MF,A" }, // d7: 0100 1101 1101 0111 + {MOV, "TXB,A" }, // d8: 0100 1101 1101 1000 + { }, // d9: 0100 1101 1101 1001 + {MOV, "TM0,A" }, // da: 0100 1101 1101 1010 + {MOV, "TM1,A" }, // db: 0100 1101 1101 1011 + { }, // dc: 0100 1101 1101 1100 + { }, // dd: 0100 1101 1101 1101 + { }, // de: 0100 1101 1101 1110 + { }, // df: 0100 1101 1101 1111 - {illegal,nullptr }, /* e0: 0100 1101 1110 0000 */ - {illegal,nullptr }, /* e1: 0100 1101 1110 0001 */ - {illegal,nullptr }, /* e2: 0100 1101 1110 0010 */ - {illegal,nullptr }, /* e3: 0100 1101 1110 0011 */ - {illegal,nullptr }, /* e4: 0100 1101 1110 0100 */ - {illegal,nullptr }, /* e5: 0100 1101 1110 0101 */ - {illegal,nullptr }, /* e6: 0100 1101 1110 0110 */ - {illegal,nullptr }, /* e7: 0100 1101 1110 0111 */ - {MOV,"ZCM,A" }, /* e8: 0100 1101 1110 1000 */ /* 7810 */ - {illegal,nullptr }, /* e9: 0100 1101 1110 1001 */ - {illegal,nullptr }, /* ea: 0100 1101 1110 1010 */ - {illegal,nullptr }, /* eb: 0100 1101 1110 1011 */ - {illegal,nullptr }, /* ec: 0100 1101 1110 1100 */ - {illegal,nullptr }, /* ed: 0100 1101 1110 1101 */ - {illegal,nullptr }, /* ee: 0100 1101 1110 1110 */ - {illegal,nullptr }, /* ef: 0100 1101 1110 1111 */ + { }, // e0: 0100 1101 1110 0000 + { }, // e1: 0100 1101 1110 0001 + { }, // e2: 0100 1101 1110 0010 + { }, // e3: 0100 1101 1110 0011 + { }, // e4: 0100 1101 1110 0100 + { }, // e5: 0100 1101 1110 0101 + { }, // e6: 0100 1101 1110 0110 + { }, // e7: 0100 1101 1110 0111 + {MOV, "ZCM,A" }, // e8: 0100 1101 1110 1000 7810 + { }, // e9: 0100 1101 1110 1001 + { }, // ea: 0100 1101 1110 1010 + { }, // eb: 0100 1101 1110 1011 + { }, // ec: 0100 1101 1110 1100 + { }, // ed: 0100 1101 1110 1101 + { }, // ee: 0100 1101 1110 1110 + { }, // ef: 0100 1101 1110 1111 - {illegal,nullptr }, /* f0: 0100 1101 1111 0000 */ - {illegal,nullptr }, /* f1: 0100 1101 1111 0001 */ - {illegal,nullptr }, /* f2: 0100 1101 1111 0010 */ - {illegal,nullptr }, /* f3: 0100 1101 1111 0011 */ - {illegal,nullptr }, /* f4: 0100 1101 1111 0100 */ - {illegal,nullptr }, /* f5: 0100 1101 1111 0101 */ - {illegal,nullptr }, /* f6: 0100 1101 1111 0110 */ - {illegal,nullptr }, /* f7: 0100 1101 1111 0111 */ - {illegal,nullptr }, /* f8: 0100 1101 1111 1000 */ - {illegal,nullptr }, /* f9: 0100 1101 1111 1001 */ - {illegal,nullptr }, /* fa: 0100 1101 1111 1010 */ - {illegal,nullptr }, /* fb: 0100 1101 1111 1011 */ - {illegal,nullptr }, /* fc: 0100 1101 1111 1100 */ - {illegal,nullptr }, /* fd: 0100 1101 1111 1101 */ - {illegal,nullptr }, /* fe: 0100 1101 1111 1110 */ - {illegal,nullptr } /* ff: 0100 1101 1111 1111 */ + { }, // f0: 0100 1101 1111 0000 + { }, // f1: 0100 1101 1111 0001 + { }, // f2: 0100 1101 1111 0010 + { }, // f3: 0100 1101 1111 0011 + { }, // f4: 0100 1101 1111 0100 + { }, // f5: 0100 1101 1111 0101 + { }, // f6: 0100 1101 1111 0110 + { }, // f7: 0100 1101 1111 0111 + { }, // f8: 0100 1101 1111 1000 + { }, // f9: 0100 1101 1111 1001 + { }, // fa: 0100 1101 1111 1010 + { }, // fb: 0100 1101 1111 1011 + { }, // fc: 0100 1101 1111 1100 + { }, // fd: 0100 1101 1111 1101 + { }, // fe: 0100 1101 1111 1110 + { } // ff: 0100 1101 1111 1111 }; -static const struct dasm_s dasm4D_7807[256] = +const dasm_s dasm_s::d4D_7807[256] = { - {illegal,nullptr }, /* 00: 0100 1101 0000 0000 */ - {illegal,nullptr }, /* 01: 0100 1101 0000 0001 */ - {illegal,nullptr }, /* 02: 0100 1101 0000 0010 */ - {illegal,nullptr }, /* 03: 0100 1101 0000 0011 */ - {illegal,nullptr }, /* 04: 0100 1101 0000 0100 */ - {illegal,nullptr }, /* 05: 0100 1101 0000 0101 */ - {illegal,nullptr }, /* 06: 0100 1101 0000 0110 */ - {illegal,nullptr }, /* 07: 0100 1101 0000 0111 */ - {illegal,nullptr }, /* 08: 0100 1101 0000 1000 */ - {illegal,nullptr }, /* 09: 0100 1101 0000 1001 */ - {illegal,nullptr }, /* 0a: 0100 1101 0000 1010 */ - {illegal,nullptr }, /* 0b: 0100 1101 0000 1011 */ - {illegal,nullptr }, /* 0c: 0100 1101 0000 1100 */ - {illegal,nullptr }, /* 0d: 0100 1101 0000 1101 */ - {illegal,nullptr }, /* 0e: 0100 1101 0000 1110 */ - {illegal,nullptr }, /* 0f: 0100 1101 0000 1111 */ + { }, // 00: 0100 1101 0000 0000 + { }, // 01: 0100 1101 0000 0001 + { }, // 02: 0100 1101 0000 0010 + { }, // 03: 0100 1101 0000 0011 + { }, // 04: 0100 1101 0000 0100 + { }, // 05: 0100 1101 0000 0101 + { }, // 06: 0100 1101 0000 0110 + { }, // 07: 0100 1101 0000 0111 + { }, // 08: 0100 1101 0000 1000 + { }, // 09: 0100 1101 0000 1001 + { }, // 0a: 0100 1101 0000 1010 + { }, // 0b: 0100 1101 0000 1011 + { }, // 0c: 0100 1101 0000 1100 + { }, // 0d: 0100 1101 0000 1101 + { }, // 0e: 0100 1101 0000 1110 + { }, // 0f: 0100 1101 0000 1111 - {illegal,nullptr }, /* 10: 0100 1101 0001 0000 */ - {illegal,nullptr }, /* 11: 0100 1101 0001 0001 */ - {illegal,nullptr }, /* 12: 0100 1101 0001 0010 */ - {illegal,nullptr }, /* 13: 0100 1101 0001 0011 */ - {illegal,nullptr }, /* 14: 0100 1101 0001 0100 */ - {illegal,nullptr }, /* 15: 0100 1101 0001 0101 */ - {illegal,nullptr }, /* 16: 0100 1101 0001 0110 */ - {illegal,nullptr }, /* 17: 0100 1101 0001 0111 */ - {illegal,nullptr }, /* 18: 0100 1101 0001 1000 */ - {illegal,nullptr }, /* 19: 0100 1101 0001 1001 */ - {illegal,nullptr }, /* 1a: 0100 1101 0001 1010 */ - {illegal,nullptr }, /* 1b: 0100 1101 0001 1011 */ - {illegal,nullptr }, /* 1c: 0100 1101 0001 1100 */ - {illegal,nullptr }, /* 1d: 0100 1101 0001 1101 */ - {illegal,nullptr }, /* 1e: 0100 1101 0001 1110 */ - {illegal,nullptr }, /* 1f: 0100 1101 0001 1111 */ + { }, // 10: 0100 1101 0001 0000 + { }, // 11: 0100 1101 0001 0001 + { }, // 12: 0100 1101 0001 0010 + { }, // 13: 0100 1101 0001 0011 + { }, // 14: 0100 1101 0001 0100 + { }, // 15: 0100 1101 0001 0101 + { }, // 16: 0100 1101 0001 0110 + { }, // 17: 0100 1101 0001 0111 + { }, // 18: 0100 1101 0001 1000 + { }, // 19: 0100 1101 0001 1001 + { }, // 1a: 0100 1101 0001 1010 + { }, // 1b: 0100 1101 0001 1011 + { }, // 1c: 0100 1101 0001 1100 + { }, // 1d: 0100 1101 0001 1101 + { }, // 1e: 0100 1101 0001 1110 + { }, // 1f: 0100 1101 0001 1111 - {illegal,nullptr }, /* 20: 0100 1101 0010 0000 */ - {illegal,nullptr }, /* 21: 0100 1101 0010 0001 */ - {illegal,nullptr }, /* 22: 0100 1101 0010 0010 */ - {illegal,nullptr }, /* 23: 0100 1101 0010 0011 */ - {illegal,nullptr }, /* 24: 0100 1101 0010 0100 */ - {illegal,nullptr }, /* 25: 0100 1101 0010 0101 */ - {illegal,nullptr }, /* 26: 0100 1101 0010 0110 */ - {illegal,nullptr }, /* 27: 0100 1101 0010 0111 */ - {illegal,nullptr }, /* 28: 0100 1101 0010 1000 */ - {illegal,nullptr }, /* 29: 0100 1101 0010 1001 */ - {illegal,nullptr }, /* 2a: 0100 1101 0010 1010 */ - {illegal,nullptr }, /* 2b: 0100 1101 0010 1011 */ - {illegal,nullptr }, /* 2c: 0100 1101 0010 1100 */ - {illegal,nullptr }, /* 2d: 0100 1101 0010 1101 */ - {illegal,nullptr }, /* 2e: 0100 1101 0010 1110 */ - {illegal,nullptr }, /* 2f: 0100 1101 0010 1111 */ + { }, // 20: 0100 1101 0010 0000 + { }, // 21: 0100 1101 0010 0001 + { }, // 22: 0100 1101 0010 0010 + { }, // 23: 0100 1101 0010 0011 + { }, // 24: 0100 1101 0010 0100 + { }, // 25: 0100 1101 0010 0101 + { }, // 26: 0100 1101 0010 0110 + { }, // 27: 0100 1101 0010 0111 + { }, // 28: 0100 1101 0010 1000 + { }, // 29: 0100 1101 0010 1001 + { }, // 2a: 0100 1101 0010 1010 + { }, // 2b: 0100 1101 0010 1011 + { }, // 2c: 0100 1101 0010 1100 + { }, // 2d: 0100 1101 0010 1101 + { }, // 2e: 0100 1101 0010 1110 + { }, // 2f: 0100 1101 0010 1111 - {illegal,nullptr }, /* 30: 0100 1101 0011 0000 */ - {illegal,nullptr }, /* 31: 0100 1101 0011 0001 */ - {illegal,nullptr }, /* 32: 0100 1101 0011 0010 */ - {illegal,nullptr }, /* 33: 0100 1101 0011 0011 */ - {illegal,nullptr }, /* 34: 0100 1101 0011 0100 */ - {illegal,nullptr }, /* 35: 0100 1101 0011 0101 */ - {illegal,nullptr }, /* 36: 0100 1101 0011 0110 */ - {illegal,nullptr }, /* 37: 0100 1101 0011 0111 */ - {illegal,nullptr }, /* 38: 0100 1101 0011 1000 */ - {illegal,nullptr }, /* 39: 0100 1101 0011 1001 */ - {illegal,nullptr }, /* 3a: 0100 1101 0011 1010 */ - {illegal,nullptr }, /* 3b: 0100 1101 0011 1011 */ - {illegal,nullptr }, /* 3c: 0100 1101 0011 1100 */ - {illegal,nullptr }, /* 3d: 0100 1101 0011 1101 */ - {illegal,nullptr }, /* 3e: 0100 1101 0011 1110 */ - {illegal,nullptr }, /* 3f: 0100 1101 0011 1111 */ + { }, // 30: 0100 1101 0011 0000 + { }, // 31: 0100 1101 0011 0001 + { }, // 32: 0100 1101 0011 0010 + { }, // 33: 0100 1101 0011 0011 + { }, // 34: 0100 1101 0011 0100 + { }, // 35: 0100 1101 0011 0101 + { }, // 36: 0100 1101 0011 0110 + { }, // 37: 0100 1101 0011 0111 + { }, // 38: 0100 1101 0011 1000 + { }, // 39: 0100 1101 0011 1001 + { }, // 3a: 0100 1101 0011 1010 + { }, // 3b: 0100 1101 0011 1011 + { }, // 3c: 0100 1101 0011 1100 + { }, // 3d: 0100 1101 0011 1101 + { }, // 3e: 0100 1101 0011 1110 + { }, // 3f: 0100 1101 0011 1111 - {illegal,nullptr }, /* 40: 0100 1101 0100 0000 */ - {illegal,nullptr }, /* 41: 0100 1101 0100 0001 */ - {illegal,nullptr }, /* 42: 0100 1101 0100 0010 */ - {illegal,nullptr }, /* 43: 0100 1101 0100 0011 */ - {illegal,nullptr }, /* 44: 0100 1101 0100 0100 */ - {illegal,nullptr }, /* 45: 0100 1101 0100 0101 */ - {illegal,nullptr }, /* 46: 0100 1101 0100 0110 */ - {illegal,nullptr }, /* 47: 0100 1101 0100 0111 */ - {illegal,nullptr }, /* 48: 0100 1101 0100 1000 */ - {illegal,nullptr }, /* 49: 0100 1101 0100 1001 */ - {illegal,nullptr }, /* 4a: 0100 1101 0100 1010 */ - {illegal,nullptr }, /* 4b: 0100 1101 0100 1011 */ - {illegal,nullptr }, /* 4c: 0100 1101 0100 1100 */ - {illegal,nullptr }, /* 4d: 0100 1101 0100 1101 */ - {illegal,nullptr }, /* 4e: 0100 1101 0100 1110 */ - {illegal,nullptr }, /* 4f: 0100 1101 0100 1111 */ + { }, // 40: 0100 1101 0100 0000 + { }, // 41: 0100 1101 0100 0001 + { }, // 42: 0100 1101 0100 0010 + { }, // 43: 0100 1101 0100 0011 + { }, // 44: 0100 1101 0100 0100 + { }, // 45: 0100 1101 0100 0101 + { }, // 46: 0100 1101 0100 0110 + { }, // 47: 0100 1101 0100 0111 + { }, // 48: 0100 1101 0100 1000 + { }, // 49: 0100 1101 0100 1001 + { }, // 4a: 0100 1101 0100 1010 + { }, // 4b: 0100 1101 0100 1011 + { }, // 4c: 0100 1101 0100 1100 + { }, // 4d: 0100 1101 0100 1101 + { }, // 4e: 0100 1101 0100 1110 + { }, // 4f: 0100 1101 0100 1111 - {illegal,nullptr }, /* 50: 0100 1101 0101 0000 */ - {illegal,nullptr }, /* 51: 0100 1101 0101 0001 */ - {illegal,nullptr }, /* 52: 0100 1101 0101 0010 */ - {illegal,nullptr }, /* 53: 0100 1101 0101 0011 */ - {illegal,nullptr }, /* 54: 0100 1101 0101 0100 */ - {illegal,nullptr }, /* 55: 0100 1101 0101 0101 */ - {illegal,nullptr }, /* 56: 0100 1101 0101 0110 */ - {illegal,nullptr }, /* 57: 0100 1101 0101 0111 */ - {illegal,nullptr }, /* 58: 0100 1101 0101 1000 */ - {illegal,nullptr }, /* 59: 0100 1101 0101 1001 */ - {illegal,nullptr }, /* 5a: 0100 1101 0101 1010 */ - {illegal,nullptr }, /* 5b: 0100 1101 0101 1011 */ - {illegal,nullptr }, /* 5c: 0100 1101 0101 1100 */ - {illegal,nullptr }, /* 5d: 0100 1101 0101 1101 */ - {illegal,nullptr }, /* 5e: 0100 1101 0101 1110 */ - {illegal,nullptr }, /* 5f: 0100 1101 0101 1111 */ + { }, // 50: 0100 1101 0101 0000 + { }, // 51: 0100 1101 0101 0001 + { }, // 52: 0100 1101 0101 0010 + { }, // 53: 0100 1101 0101 0011 + { }, // 54: 0100 1101 0101 0100 + { }, // 55: 0100 1101 0101 0101 + { }, // 56: 0100 1101 0101 0110 + { }, // 57: 0100 1101 0101 0111 + { }, // 58: 0100 1101 0101 1000 + { }, // 59: 0100 1101 0101 1001 + { }, // 5a: 0100 1101 0101 1010 + { }, // 5b: 0100 1101 0101 1011 + { }, // 5c: 0100 1101 0101 1100 + { }, // 5d: 0100 1101 0101 1101 + { }, // 5e: 0100 1101 0101 1110 + { }, // 5f: 0100 1101 0101 1111 - {illegal,nullptr }, /* 60: 0100 1101 0110 0000 */ - {illegal,nullptr }, /* 61: 0100 1101 0110 0001 */ - {illegal,nullptr }, /* 62: 0100 1101 0110 0010 */ - {illegal,nullptr }, /* 63: 0100 1101 0110 0011 */ - {illegal,nullptr }, /* 64: 0100 1101 0110 0100 */ - {illegal,nullptr }, /* 65: 0100 1101 0110 0101 */ - {illegal,nullptr }, /* 66: 0100 1101 0110 0110 */ - {illegal,nullptr }, /* 67: 0100 1101 0110 0111 */ - {illegal,nullptr }, /* 68: 0100 1101 0110 1000 */ - {illegal,nullptr }, /* 69: 0100 1101 0110 1001 */ - {illegal,nullptr }, /* 6a: 0100 1101 0110 1010 */ - {illegal,nullptr }, /* 6b: 0100 1101 0110 1011 */ - {illegal,nullptr }, /* 6c: 0100 1101 0110 1100 */ - {illegal,nullptr }, /* 6d: 0100 1101 0110 1101 */ - {illegal,nullptr }, /* 6e: 0100 1101 0110 1110 */ - {illegal,nullptr }, /* 6f: 0100 1101 0110 1111 */ + { }, // 60: 0100 1101 0110 0000 + { }, // 61: 0100 1101 0110 0001 + { }, // 62: 0100 1101 0110 0010 + { }, // 63: 0100 1101 0110 0011 + { }, // 64: 0100 1101 0110 0100 + { }, // 65: 0100 1101 0110 0101 + { }, // 66: 0100 1101 0110 0110 + { }, // 67: 0100 1101 0110 0111 + { }, // 68: 0100 1101 0110 1000 + { }, // 69: 0100 1101 0110 1001 + { }, // 6a: 0100 1101 0110 1010 + { }, // 6b: 0100 1101 0110 1011 + { }, // 6c: 0100 1101 0110 1100 + { }, // 6d: 0100 1101 0110 1101 + { }, // 6e: 0100 1101 0110 1110 + { }, // 6f: 0100 1101 0110 1111 - {illegal,nullptr }, /* 70: 0100 1101 0111 0000 */ - {illegal,nullptr }, /* 71: 0100 1101 0111 0001 */ - {illegal,nullptr }, /* 72: 0100 1101 0111 0010 */ - {illegal,nullptr }, /* 73: 0100 1101 0111 0011 */ - {illegal,nullptr }, /* 74: 0100 1101 0111 0100 */ - {illegal,nullptr }, /* 75: 0100 1101 0111 0101 */ - {illegal,nullptr }, /* 76: 0100 1101 0111 0110 */ - {illegal,nullptr }, /* 77: 0100 1101 0111 0111 */ - {illegal,nullptr }, /* 78: 0100 1101 0111 1000 */ - {illegal,nullptr }, /* 79: 0100 1101 0111 1001 */ - {illegal,nullptr }, /* 7a: 0100 1101 0111 1010 */ - {illegal,nullptr }, /* 7b: 0100 1101 0111 1011 */ - {illegal,nullptr }, /* 7c: 0100 1101 0111 1100 */ - {illegal,nullptr }, /* 7d: 0100 1101 0111 1101 */ - {illegal,nullptr }, /* 7e: 0100 1101 0111 1110 */ - {illegal,nullptr }, /* 7f: 0100 1101 0111 1111 */ + { }, // 70: 0100 1101 0111 0000 + { }, // 71: 0100 1101 0111 0001 + { }, // 72: 0100 1101 0111 0010 + { }, // 73: 0100 1101 0111 0011 + { }, // 74: 0100 1101 0111 0100 + { }, // 75: 0100 1101 0111 0101 + { }, // 76: 0100 1101 0111 0110 + { }, // 77: 0100 1101 0111 0111 + { }, // 78: 0100 1101 0111 1000 + { }, // 79: 0100 1101 0111 1001 + { }, // 7a: 0100 1101 0111 1010 + { }, // 7b: 0100 1101 0111 1011 + { }, // 7c: 0100 1101 0111 1100 + { }, // 7d: 0100 1101 0111 1101 + { }, // 7e: 0100 1101 0111 1110 + { }, // 7f: 0100 1101 0111 1111 - {illegal,nullptr }, /* 80: 0100 1101 1000 0000 */ - {illegal,nullptr }, /* 81: 0100 1101 1000 0001 */ - {illegal,nullptr }, /* 82: 0100 1101 1000 0010 */ - {illegal,nullptr }, /* 83: 0100 1101 1000 0011 */ - {illegal,nullptr }, /* 84: 0100 1101 1000 0100 */ - {illegal,nullptr }, /* 85: 0100 1101 1000 0101 */ - {illegal,nullptr }, /* 86: 0100 1101 1000 0110 */ - {illegal,nullptr }, /* 87: 0100 1101 1000 0111 */ - {illegal,nullptr }, /* 88: 0100 1101 1000 1000 */ - {illegal,nullptr }, /* 89: 0100 1101 1000 1001 */ - {illegal,nullptr }, /* 8a: 0100 1101 1000 1010 */ - {illegal,nullptr }, /* 8b: 0100 1101 1000 1011 */ - {illegal,nullptr }, /* 8c: 0100 1101 1000 1100 */ - {illegal,nullptr }, /* 8d: 0100 1101 1000 1101 */ - {illegal,nullptr }, /* 8e: 0100 1101 1000 1110 */ - {illegal,nullptr }, /* 8f: 0100 1101 1000 1111 */ + { }, // 80: 0100 1101 1000 0000 + { }, // 81: 0100 1101 1000 0001 + { }, // 82: 0100 1101 1000 0010 + { }, // 83: 0100 1101 1000 0011 + { }, // 84: 0100 1101 1000 0100 + { }, // 85: 0100 1101 1000 0101 + { }, // 86: 0100 1101 1000 0110 + { }, // 87: 0100 1101 1000 0111 + { }, // 88: 0100 1101 1000 1000 + { }, // 89: 0100 1101 1000 1001 + { }, // 8a: 0100 1101 1000 1010 + { }, // 8b: 0100 1101 1000 1011 + { }, // 8c: 0100 1101 1000 1100 + { }, // 8d: 0100 1101 1000 1101 + { }, // 8e: 0100 1101 1000 1110 + { }, // 8f: 0100 1101 1000 1111 - {illegal,nullptr }, /* 90: 0100 1101 1001 0000 */ - {illegal,nullptr }, /* 91: 0100 1101 1001 0001 */ - {illegal,nullptr }, /* 92: 0100 1101 1001 0010 */ - {illegal,nullptr }, /* 93: 0100 1101 1001 0011 */ - {illegal,nullptr }, /* 94: 0100 1101 1001 0100 */ - {illegal,nullptr }, /* 95: 0100 1101 1001 0101 */ - {illegal,nullptr }, /* 96: 0100 1101 1001 0110 */ - {illegal,nullptr }, /* 97: 0100 1101 1001 0111 */ - {illegal,nullptr }, /* 98: 0100 1101 1001 1000 */ - {illegal,nullptr }, /* 99: 0100 1101 1001 1001 */ - {illegal,nullptr }, /* 9a: 0100 1101 1001 1010 */ - {illegal,nullptr }, /* 9b: 0100 1101 1001 1011 */ - {illegal,nullptr }, /* 9c: 0100 1101 1001 1100 */ - {illegal,nullptr }, /* 9d: 0100 1101 1001 1101 */ - {illegal,nullptr }, /* 9e: 0100 1101 1001 1110 */ - {illegal,nullptr }, /* 9f: 0100 1101 1001 1111 */ + { }, // 90: 0100 1101 1001 0000 + { }, // 91: 0100 1101 1001 0001 + { }, // 92: 0100 1101 1001 0010 + { }, // 93: 0100 1101 1001 0011 + { }, // 94: 0100 1101 1001 0100 + { }, // 95: 0100 1101 1001 0101 + { }, // 96: 0100 1101 1001 0110 + { }, // 97: 0100 1101 1001 0111 + { }, // 98: 0100 1101 1001 1000 + { }, // 99: 0100 1101 1001 1001 + { }, // 9a: 0100 1101 1001 1010 + { }, // 9b: 0100 1101 1001 1011 + { }, // 9c: 0100 1101 1001 1100 + { }, // 9d: 0100 1101 1001 1101 + { }, // 9e: 0100 1101 1001 1110 + { }, // 9f: 0100 1101 1001 1111 - {illegal,nullptr }, /* a0: 0100 1101 1010 0000 */ - {illegal,nullptr }, /* a1: 0100 1101 1010 0001 */ - {illegal,nullptr }, /* a2: 0100 1101 1010 0010 */ - {illegal,nullptr }, /* a3: 0100 1101 1010 0011 */ - {illegal,nullptr }, /* a4: 0100 1101 1010 0100 */ - {illegal,nullptr }, /* a5: 0100 1101 1010 0101 */ - {illegal,nullptr }, /* a6: 0100 1101 1010 0110 */ - {illegal,nullptr }, /* a7: 0100 1101 1010 0111 */ - {illegal,nullptr }, /* a8: 0100 1101 1010 1000 */ - {illegal,nullptr }, /* a9: 0100 1101 1010 1001 */ - {illegal,nullptr }, /* aa: 0100 1101 1010 1010 */ - {illegal,nullptr }, /* ab: 0100 1101 1010 1011 */ - {illegal,nullptr }, /* ac: 0100 1101 1010 1100 */ - {illegal,nullptr }, /* ad: 0100 1101 1010 1101 */ - {illegal,nullptr }, /* ae: 0100 1101 1010 1110 */ - {illegal,nullptr }, /* af: 0100 1101 1010 1111 */ + { }, // a0: 0100 1101 1010 0000 + { }, // a1: 0100 1101 1010 0001 + { }, // a2: 0100 1101 1010 0010 + { }, // a3: 0100 1101 1010 0011 + { }, // a4: 0100 1101 1010 0100 + { }, // a5: 0100 1101 1010 0101 + { }, // a6: 0100 1101 1010 0110 + { }, // a7: 0100 1101 1010 0111 + { }, // a8: 0100 1101 1010 1000 + { }, // a9: 0100 1101 1010 1001 + { }, // aa: 0100 1101 1010 1010 + { }, // ab: 0100 1101 1010 1011 + { }, // ac: 0100 1101 1010 1100 + { }, // ad: 0100 1101 1010 1101 + { }, // ae: 0100 1101 1010 1110 + { }, // af: 0100 1101 1010 1111 - {illegal,nullptr }, /* b0: 0100 1101 1011 0000 */ - {illegal,nullptr }, /* b1: 0100 1101 1011 0001 */ - {illegal,nullptr }, /* b2: 0100 1101 1011 0010 */ - {illegal,nullptr }, /* b3: 0100 1101 1011 0011 */ - {illegal,nullptr }, /* b4: 0100 1101 1011 0100 */ - {illegal,nullptr }, /* b5: 0100 1101 1011 0101 */ - {illegal,nullptr }, /* b6: 0100 1101 1011 0110 */ - {illegal,nullptr }, /* b7: 0100 1101 1011 0111 */ - {illegal,nullptr }, /* b8: 0100 1101 1011 1000 */ - {illegal,nullptr }, /* b9: 0100 1101 1011 1001 */ - {illegal,nullptr }, /* ba: 0100 1101 1011 1010 */ - {illegal,nullptr }, /* bb: 0100 1101 1011 1011 */ - {illegal,nullptr }, /* bc: 0100 1101 1011 1100 */ - {illegal,nullptr }, /* bd: 0100 1101 1011 1101 */ - {illegal,nullptr }, /* be: 0100 1101 1011 1110 */ - {illegal,nullptr }, /* bf: 0100 1101 1011 1111 */ + { }, // b0: 0100 1101 1011 0000 + { }, // b1: 0100 1101 1011 0001 + { }, // b2: 0100 1101 1011 0010 + { }, // b3: 0100 1101 1011 0011 + { }, // b4: 0100 1101 1011 0100 + { }, // b5: 0100 1101 1011 0101 + { }, // b6: 0100 1101 1011 0110 + { }, // b7: 0100 1101 1011 0111 + { }, // b8: 0100 1101 1011 1000 + { }, // b9: 0100 1101 1011 1001 + { }, // ba: 0100 1101 1011 1010 + { }, // bb: 0100 1101 1011 1011 + { }, // bc: 0100 1101 1011 1100 + { }, // bd: 0100 1101 1011 1101 + { }, // be: 0100 1101 1011 1110 + { }, // bf: 0100 1101 1011 1111 - {MOV,"PA,A" }, /* c0: 0100 1101 1100 0000 */ - {MOV,"PB,A" }, /* c1: 0100 1101 1100 0001 */ - {MOV,"PC,A" }, /* c2: 0100 1101 1100 0010 */ - {MOV,"PD,A" }, /* c3: 0100 1101 1100 0011 */ - {illegal,nullptr }, /* c4: 0100 1101 1100 0100 */ - {MOV,"PF,A" }, /* c5: 0100 1101 1100 0101 */ - {MOV,"MKH,A" }, /* c6: 0100 1101 1100 0110 */ - {MOV,"MKL,A" }, /* c7: 0100 1101 1100 0111 */ - {illegal,nullptr }, /* c8: 0100 1101 1100 1000 */ - {MOV,"SMH,A" }, /* c9: 0100 1101 1100 1001 */ - {MOV,"SML,A" }, /* ca: 0100 1101 1100 1010 */ - {MOV,"EOM,A" }, /* cb: 0100 1101 1100 1011 */ - {MOV,"ETMM,A" }, /* cc: 0100 1101 1100 1100 */ - {MOV,"TMM,A" }, /* cd: 0100 1101 1100 1101 */ - {illegal,nullptr }, /* ce: 0100 1101 1100 1110 */ - {illegal,nullptr }, /* cf: 0100 1101 1100 1111 */ + {MOV, "PA,A" }, // c0: 0100 1101 1100 0000 + {MOV, "PB,A" }, // c1: 0100 1101 1100 0001 + {MOV, "PC,A" }, // c2: 0100 1101 1100 0010 + {MOV, "PD,A" }, // c3: 0100 1101 1100 0011 + { }, // c4: 0100 1101 1100 0100 + {MOV, "PF,A" }, // c5: 0100 1101 1100 0101 + {MOV, "MKH,A" }, // c6: 0100 1101 1100 0110 + {MOV, "MKL,A" }, // c7: 0100 1101 1100 0111 + { }, // c8: 0100 1101 1100 1000 + {MOV, "SMH,A" }, // c9: 0100 1101 1100 1001 + {MOV, "SML,A" }, // ca: 0100 1101 1100 1010 + {MOV, "EOM,A" }, // cb: 0100 1101 1100 1011 + {MOV, "ETMM,A" }, // cc: 0100 1101 1100 1100 + {MOV, "TMM,A" }, // cd: 0100 1101 1100 1101 + { }, // ce: 0100 1101 1100 1110 + { }, // cf: 0100 1101 1100 1111 - {MOV,"MM,A" }, /* d0: 0100 1101 1101 0000 */ - {MOV,"MCC,A" }, /* d1: 0100 1101 1101 0001 */ - {MOV,"MA,A" }, /* d2: 0100 1101 1101 0010 */ - {MOV,"MB,A" }, /* d3: 0100 1101 1101 0011 */ - {MOV,"MC,A" }, /* d4: 0100 1101 1101 0100 */ - {illegal,nullptr }, /* d5: 0100 1101 1101 0101 */ - {illegal,nullptr }, /* d6: 0100 1101 1101 0110 */ - {MOV,"MF,A" }, /* d7: 0100 1101 1101 0111 */ - {MOV,"TXB,A" }, /* d8: 0100 1101 1101 1000 */ - {illegal,nullptr }, /* d9: 0100 1101 1101 1001 */ - {MOV,"TM0,A" }, /* da: 0100 1101 1101 1010 */ - {MOV,"TM1,A" }, /* db: 0100 1101 1101 1011 */ - {illegal,nullptr }, /* dc: 0100 1101 1101 1100 */ - {illegal,nullptr }, /* dd: 0100 1101 1101 1101 */ - {illegal,nullptr }, /* de: 0100 1101 1101 1110 */ - {illegal,nullptr }, /* df: 0100 1101 1101 1111 */ + {MOV, "MM,A" }, // d0: 0100 1101 1101 0000 + {MOV, "MCC,A" }, // d1: 0100 1101 1101 0001 + {MOV, "MA,A" }, // d2: 0100 1101 1101 0010 + {MOV, "MB,A" }, // d3: 0100 1101 1101 0011 + {MOV, "MC,A" }, // d4: 0100 1101 1101 0100 + { }, // d5: 0100 1101 1101 0101 + { }, // d6: 0100 1101 1101 0110 + {MOV, "MF,A" }, // d7: 0100 1101 1101 0111 + {MOV, "TXB,A" }, // d8: 0100 1101 1101 1000 + { }, // d9: 0100 1101 1101 1001 + {MOV, "TM0,A" }, // da: 0100 1101 1101 1010 + {MOV, "TM1,A" }, // db: 0100 1101 1101 1011 + { }, // dc: 0100 1101 1101 1100 + { }, // dd: 0100 1101 1101 1101 + { }, // de: 0100 1101 1101 1110 + { }, // df: 0100 1101 1101 1111 - {illegal,nullptr }, /* e0: 0100 1101 1110 0000 */ - {illegal,nullptr }, /* e1: 0100 1101 1110 0001 */ - {illegal,nullptr }, /* e2: 0100 1101 1110 0010 */ - {illegal,nullptr }, /* e3: 0100 1101 1110 0011 */ - {illegal,nullptr }, /* e4: 0100 1101 1110 0100 */ - {MOV,"MT,A" }, /* e5: 0100 1101 1110 0101 */ /* 7807 */ - {illegal,nullptr }, /* e6: 0100 1101 1110 0110 */ - {illegal,nullptr }, /* e7: 0100 1101 1110 0111 */ - {illegal,nullptr }, /* e8: 0100 1101 1110 1000 */ - {illegal,nullptr }, /* e9: 0100 1101 1110 1001 */ - {illegal,nullptr }, /* ea: 0100 1101 1110 1010 */ - {illegal,nullptr }, /* eb: 0100 1101 1110 1011 */ - {illegal,nullptr }, /* ec: 0100 1101 1110 1100 */ - {illegal,nullptr }, /* ed: 0100 1101 1110 1101 */ - {illegal,nullptr }, /* ee: 0100 1101 1110 1110 */ - {illegal,nullptr }, /* ef: 0100 1101 1110 1111 */ + { }, // e0: 0100 1101 1110 0000 + { }, // e1: 0100 1101 1110 0001 + { }, // e2: 0100 1101 1110 0010 + { }, // e3: 0100 1101 1110 0011 + { }, // e4: 0100 1101 1110 0100 + {MOV, "MT,A" }, // e5: 0100 1101 1110 0101 7807 + { }, // e6: 0100 1101 1110 0110 + { }, // e7: 0100 1101 1110 0111 + { }, // e8: 0100 1101 1110 1000 + { }, // e9: 0100 1101 1110 1001 + { }, // ea: 0100 1101 1110 1010 + { }, // eb: 0100 1101 1110 1011 + { }, // ec: 0100 1101 1110 1100 + { }, // ed: 0100 1101 1110 1101 + { }, // ee: 0100 1101 1110 1110 + { }, // ef: 0100 1101 1110 1111 - {illegal,nullptr }, /* f0: 0100 1101 1111 0000 */ - {illegal,nullptr }, /* f1: 0100 1101 1111 0001 */ - {illegal,nullptr }, /* f2: 0100 1101 1111 0010 */ - {illegal,nullptr }, /* f3: 0100 1101 1111 0011 */ - {illegal,nullptr }, /* f4: 0100 1101 1111 0100 */ - {illegal,nullptr }, /* f5: 0100 1101 1111 0101 */ - {illegal,nullptr }, /* f6: 0100 1101 1111 0110 */ - {illegal,nullptr }, /* f7: 0100 1101 1111 0111 */ - {illegal,nullptr }, /* f8: 0100 1101 1111 1000 */ - {illegal,nullptr }, /* f9: 0100 1101 1111 1001 */ - {illegal,nullptr }, /* fa: 0100 1101 1111 1010 */ - {illegal,nullptr }, /* fb: 0100 1101 1111 1011 */ - {illegal,nullptr }, /* fc: 0100 1101 1111 1100 */ - {illegal,nullptr }, /* fd: 0100 1101 1111 1101 */ - {illegal,nullptr }, /* fe: 0100 1101 1111 1110 */ - {illegal,nullptr } /* ff: 0100 1101 1111 1111 */ + { }, // f0: 0100 1101 1111 0000 + { }, // f1: 0100 1101 1111 0001 + { }, // f2: 0100 1101 1111 0010 + { }, // f3: 0100 1101 1111 0011 + { }, // f4: 0100 1101 1111 0100 + { }, // f5: 0100 1101 1111 0101 + { }, // f6: 0100 1101 1111 0110 + { }, // f7: 0100 1101 1111 0111 + { }, // f8: 0100 1101 1111 1000 + { }, // f9: 0100 1101 1111 1001 + { }, // fa: 0100 1101 1111 1010 + { }, // fb: 0100 1101 1111 1011 + { }, // fc: 0100 1101 1111 1100 + { }, // fd: 0100 1101 1111 1101 + { }, // fe: 0100 1101 1111 1110 + { } // ff: 0100 1101 1111 1111 }; -/* prefix 60 */ -static const struct dasm_s dasm60[256] = +// prefix 60 +const dasm_s dasm_s::d60[256] = { - {illegal,nullptr }, /* 00: 0110 0000 0000 0000 */ - {illegal,nullptr }, /* 01: 0110 0000 0000 0001 */ - {illegal,nullptr }, /* 02: 0110 0000 0000 0010 */ - {illegal,nullptr }, /* 03: 0110 0000 0000 0011 */ - {illegal,nullptr }, /* 04: 0110 0000 0000 0100 */ - {illegal,nullptr }, /* 05: 0110 0000 0000 0101 */ - {illegal,nullptr }, /* 06: 0110 0000 0000 0110 */ - {illegal,nullptr }, /* 07: 0110 0000 0000 0111 */ - {ANA,"V,A" }, /* 08: 0110 0000 0000 1000 */ - {ANA,"A,A" }, /* 09: 0110 0000 0000 1001 */ - {ANA,"B,A" }, /* 0a: 0110 0000 0000 1010 */ - {ANA,"C,A" }, /* 0b: 0110 0000 0000 1011 */ - {ANA,"D,A" }, /* 0c: 0110 0000 0000 1100 */ - {ANA,"E,A" }, /* 0d: 0110 0000 0000 1101 */ - {ANA,"H,A" }, /* 0e: 0110 0000 0000 1110 */ - {ANA,"L,A" }, /* 0f: 0110 0000 0000 1111 */ + { }, // 00: 0110 0000 0000 0000 + { }, // 01: 0110 0000 0000 0001 + { }, // 02: 0110 0000 0000 0010 + { }, // 03: 0110 0000 0000 0011 + { }, // 04: 0110 0000 0000 0100 + { }, // 05: 0110 0000 0000 0101 + { }, // 06: 0110 0000 0000 0110 + { }, // 07: 0110 0000 0000 0111 + {ANA, "V,A" }, // 08: 0110 0000 0000 1000 + {ANA, "A,A" }, // 09: 0110 0000 0000 1001 + {ANA, "B,A" }, // 0a: 0110 0000 0000 1010 + {ANA, "C,A" }, // 0b: 0110 0000 0000 1011 + {ANA, "D,A" }, // 0c: 0110 0000 0000 1100 + {ANA, "E,A" }, // 0d: 0110 0000 0000 1101 + {ANA, "H,A" }, // 0e: 0110 0000 0000 1110 + {ANA, "L,A" }, // 0f: 0110 0000 0000 1111 - {XRA,"V,A" }, /* 10: 0110 0000 0001 0000 */ - {XRA,"A,A" }, /* 11: 0110 0000 0001 0001 */ - {XRA,"B,A" }, /* 12: 0110 0000 0001 0010 */ - {XRA,"C,A" }, /* 13: 0110 0000 0001 0011 */ - {XRA,"D,A" }, /* 14: 0110 0000 0001 0100 */ - {XRA,"E,A" }, /* 15: 0110 0000 0001 0101 */ - {XRA,"H,A" }, /* 16: 0110 0000 0001 0110 */ - {XRA,"L,A" }, /* 17: 0110 0000 0001 0111 */ - {ORA,"V,A" }, /* 18: 0110 0000 0001 1000 */ - {ORA,"A,A" }, /* 19: 0110 0000 0001 1001 */ - {ORA,"B,A" }, /* 1a: 0110 0000 0001 1010 */ - {ORA,"C,A" }, /* 1b: 0110 0000 0001 1011 */ - {ORA,"D,A" }, /* 1c: 0110 0000 0001 1100 */ - {ORA,"E,A" }, /* 1d: 0110 0000 0001 1101 */ - {ORA,"H,A" }, /* 1e: 0110 0000 0001 1110 */ - {ORA,"L,A" }, /* 1f: 0110 0000 0001 1111 */ + {XRA, "V,A" }, // 10: 0110 0000 0001 0000 + {XRA, "A,A" }, // 11: 0110 0000 0001 0001 + {XRA, "B,A" }, // 12: 0110 0000 0001 0010 + {XRA, "C,A" }, // 13: 0110 0000 0001 0011 + {XRA, "D,A" }, // 14: 0110 0000 0001 0100 + {XRA, "E,A" }, // 15: 0110 0000 0001 0101 + {XRA, "H,A" }, // 16: 0110 0000 0001 0110 + {XRA, "L,A" }, // 17: 0110 0000 0001 0111 + {ORA, "V,A" }, // 18: 0110 0000 0001 1000 + {ORA, "A,A" }, // 19: 0110 0000 0001 1001 + {ORA, "B,A" }, // 1a: 0110 0000 0001 1010 + {ORA, "C,A" }, // 1b: 0110 0000 0001 1011 + {ORA, "D,A" }, // 1c: 0110 0000 0001 1100 + {ORA, "E,A" }, // 1d: 0110 0000 0001 1101 + {ORA, "H,A" }, // 1e: 0110 0000 0001 1110 + {ORA, "L,A" }, // 1f: 0110 0000 0001 1111 - {ADDNC,"V,A" }, /* 20: 0110 0000 0010 0000 */ - {ADDNC,"A,A" }, /* 21: 0110 0000 0010 0001 */ - {ADDNC,"B,A" }, /* 22: 0110 0000 0010 0010 */ - {ADDNC,"C,A" }, /* 23: 0110 0000 0010 0011 */ - {ADDNC,"D,A" }, /* 24: 0110 0000 0010 0100 */ - {ADDNC,"E,A" }, /* 25: 0110 0000 0010 0101 */ - {ADDNC,"H,A" }, /* 26: 0110 0000 0010 0110 */ - {ADDNC,"L,A" }, /* 27: 0110 0000 0010 0111 */ - {GTA,"V,A" }, /* 28: 0110 0000 0010 1000 */ - {GTA,"A,A" }, /* 29: 0110 0000 0010 1001 */ - {GTA,"B,A" }, /* 2a: 0110 0000 0010 1010 */ - {GTA,"C,A" }, /* 2b: 0110 0000 0010 1011 */ - {GTA,"D,A" }, /* 2c: 0110 0000 0010 1100 */ - {GTA,"E,A" }, /* 2d: 0110 0000 0010 1101 */ - {GTA,"H,A" }, /* 2e: 0110 0000 0010 1110 */ - {GTA,"L,A" }, /* 2f: 0110 0000 0010 1111 */ + {ADDNC, "V,A" }, // 20: 0110 0000 0010 0000 + {ADDNC, "A,A" }, // 21: 0110 0000 0010 0001 + {ADDNC, "B,A" }, // 22: 0110 0000 0010 0010 + {ADDNC, "C,A" }, // 23: 0110 0000 0010 0011 + {ADDNC, "D,A" }, // 24: 0110 0000 0010 0100 + {ADDNC, "E,A" }, // 25: 0110 0000 0010 0101 + {ADDNC, "H,A" }, // 26: 0110 0000 0010 0110 + {ADDNC, "L,A" }, // 27: 0110 0000 0010 0111 + {GTA, "V,A" }, // 28: 0110 0000 0010 1000 + {GTA, "A,A" }, // 29: 0110 0000 0010 1001 + {GTA, "B,A" }, // 2a: 0110 0000 0010 1010 + {GTA, "C,A" }, // 2b: 0110 0000 0010 1011 + {GTA, "D,A" }, // 2c: 0110 0000 0010 1100 + {GTA, "E,A" }, // 2d: 0110 0000 0010 1101 + {GTA, "H,A" }, // 2e: 0110 0000 0010 1110 + {GTA, "L,A" }, // 2f: 0110 0000 0010 1111 - {SUBNB,"V,A" }, /* 30: 0110 0000 0011 0000 */ - {SUBNB,"A,A" }, /* 31: 0110 0000 0011 0001 */ - {SUBNB,"B,A" }, /* 32: 0110 0000 0011 0010 */ - {SUBNB,"C,A" }, /* 33: 0110 0000 0011 0011 */ - {SUBNB,"D,A" }, /* 34: 0110 0000 0011 0100 */ - {SUBNB,"E,A" }, /* 35: 0110 0000 0011 0101 */ - {SUBNB,"H,A" }, /* 36: 0110 0000 0011 0110 */ - {SUBNB,"L,A" }, /* 37: 0110 0000 0011 0111 */ - {LTA,"V,A" }, /* 38: 0110 0000 0011 1000 */ - {LTA,"A,A" }, /* 39: 0110 0000 0011 1001 */ - {LTA,"B,A" }, /* 3a: 0110 0000 0011 1010 */ - {LTA,"C,A" }, /* 3b: 0110 0000 0011 1011 */ - {LTA,"D,A" }, /* 3c: 0110 0000 0011 1100 */ - {LTA,"E,A" }, /* 3d: 0110 0000 0011 1101 */ - {LTA,"H,A" }, /* 3e: 0110 0000 0011 1110 */ - {LTA,"L,A" }, /* 3f: 0110 0000 0011 1111 */ + {SUBNB, "V,A" }, // 30: 0110 0000 0011 0000 + {SUBNB, "A,A" }, // 31: 0110 0000 0011 0001 + {SUBNB, "B,A" }, // 32: 0110 0000 0011 0010 + {SUBNB, "C,A" }, // 33: 0110 0000 0011 0011 + {SUBNB, "D,A" }, // 34: 0110 0000 0011 0100 + {SUBNB, "E,A" }, // 35: 0110 0000 0011 0101 + {SUBNB, "H,A" }, // 36: 0110 0000 0011 0110 + {SUBNB, "L,A" }, // 37: 0110 0000 0011 0111 + {LTA, "V,A" }, // 38: 0110 0000 0011 1000 + {LTA, "A,A" }, // 39: 0110 0000 0011 1001 + {LTA, "B,A" }, // 3a: 0110 0000 0011 1010 + {LTA, "C,A" }, // 3b: 0110 0000 0011 1011 + {LTA, "D,A" }, // 3c: 0110 0000 0011 1100 + {LTA, "E,A" }, // 3d: 0110 0000 0011 1101 + {LTA, "H,A" }, // 3e: 0110 0000 0011 1110 + {LTA, "L,A" }, // 3f: 0110 0000 0011 1111 - {ADD,"V,A" }, /* 40: 0110 0000 0100 0000 */ - {ADD,"A,A" }, /* 41: 0110 0000 0100 0001 */ - {ADD,"B,A" }, /* 42: 0110 0000 0100 0010 */ - {ADD,"C,A" }, /* 43: 0110 0000 0100 0011 */ - {ADD,"D,A" }, /* 44: 0110 0000 0100 0100 */ - {ADD,"E,A" }, /* 45: 0110 0000 0100 0101 */ - {ADD,"H,A" }, /* 46: 0110 0000 0100 0110 */ - {ADD,"L,A" }, /* 47: 0110 0000 0100 0111 */ - {illegal,nullptr }, /* 48: 0110 0000 0100 1000 */ - {illegal,nullptr }, /* 49: 0110 0000 0100 1001 */ - {illegal,nullptr }, /* 4a: 0110 0000 0100 1010 */ - {illegal,nullptr }, /* 4b: 0110 0000 0100 1011 */ - {illegal,nullptr }, /* 4c: 0110 0000 0100 1100 */ - {illegal,nullptr }, /* 4d: 0110 0000 0100 1101 */ - {illegal,nullptr }, /* 4e: 0110 0000 0100 1110 */ - {illegal,nullptr }, /* 4f: 0110 0000 0100 1111 */ + {ADD, "V,A" }, // 40: 0110 0000 0100 0000 + {ADD, "A,A" }, // 41: 0110 0000 0100 0001 + {ADD, "B,A" }, // 42: 0110 0000 0100 0010 + {ADD, "C,A" }, // 43: 0110 0000 0100 0011 + {ADD, "D,A" }, // 44: 0110 0000 0100 0100 + {ADD, "E,A" }, // 45: 0110 0000 0100 0101 + {ADD, "H,A" }, // 46: 0110 0000 0100 0110 + {ADD, "L,A" }, // 47: 0110 0000 0100 0111 + { }, // 48: 0110 0000 0100 1000 + { }, // 49: 0110 0000 0100 1001 + { }, // 4a: 0110 0000 0100 1010 + { }, // 4b: 0110 0000 0100 1011 + { }, // 4c: 0110 0000 0100 1100 + { }, // 4d: 0110 0000 0100 1101 + { }, // 4e: 0110 0000 0100 1110 + { }, // 4f: 0110 0000 0100 1111 - {ADC,"V,A" }, /* 50: 0110 0000 0101 0000 */ - {ADC,"A,A" }, /* 51: 0110 0000 0101 0001 */ - {ADC,"B,A" }, /* 52: 0110 0000 0101 0010 */ - {ADC,"C,A" }, /* 53: 0110 0000 0101 0011 */ - {ADC,"D,A" }, /* 54: 0110 0000 0101 0100 */ - {ADC,"E,A" }, /* 55: 0110 0000 0101 0101 */ - {ADC,"H,A" }, /* 56: 0110 0000 0101 0110 */ - {ADC,"L,A" }, /* 57: 0110 0000 0101 0111 */ - {illegal,nullptr }, /* 58: 0110 0000 0101 1000 */ - {illegal,nullptr }, /* 59: 0110 0000 0101 1001 */ - {illegal,nullptr }, /* 5a: 0110 0000 0101 1010 */ - {illegal,nullptr }, /* 5b: 0110 0000 0101 1011 */ - {illegal,nullptr }, /* 5c: 0110 0000 0101 1100 */ - {illegal,nullptr }, /* 5d: 0110 0000 0101 1101 */ - {illegal,nullptr }, /* 5e: 0110 0000 0101 1110 */ - {illegal,nullptr }, /* 5f: 0110 0000 0101 1111 */ + {ADC, "V,A" }, // 50: 0110 0000 0101 0000 + {ADC, "A,A" }, // 51: 0110 0000 0101 0001 + {ADC, "B,A" }, // 52: 0110 0000 0101 0010 + {ADC, "C,A" }, // 53: 0110 0000 0101 0011 + {ADC, "D,A" }, // 54: 0110 0000 0101 0100 + {ADC, "E,A" }, // 55: 0110 0000 0101 0101 + {ADC, "H,A" }, // 56: 0110 0000 0101 0110 + {ADC, "L,A" }, // 57: 0110 0000 0101 0111 + { }, // 58: 0110 0000 0101 1000 + { }, // 59: 0110 0000 0101 1001 + { }, // 5a: 0110 0000 0101 1010 + { }, // 5b: 0110 0000 0101 1011 + { }, // 5c: 0110 0000 0101 1100 + { }, // 5d: 0110 0000 0101 1101 + { }, // 5e: 0110 0000 0101 1110 + { }, // 5f: 0110 0000 0101 1111 - {SUB,"V,A" }, /* 60: 0110 0000 0110 0000 */ - {SUB,"A,A" }, /* 61: 0110 0000 0110 0001 */ - {SUB,"B,A" }, /* 62: 0110 0000 0110 0010 */ - {SUB,"C,A" }, /* 63: 0110 0000 0110 0011 */ - {SUB,"D,A" }, /* 64: 0110 0000 0110 0100 */ - {SUB,"E,A" }, /* 65: 0110 0000 0110 0101 */ - {SUB,"H,A" }, /* 66: 0110 0000 0110 0110 */ - {SUB,"L,A" }, /* 67: 0110 0000 0110 0111 */ - {NEA,"V,A" }, /* 68: 0110 0000 0110 1000 */ - {NEA,"A,A" }, /* 69: 0110 0000 0110 1001 */ - {NEA,"B,A" }, /* 6a: 0110 0000 0110 1010 */ - {NEA,"C,A" }, /* 6b: 0110 0000 0110 1011 */ - {NEA,"D,A" }, /* 6c: 0110 0000 0110 1100 */ - {NEA,"E,A" }, /* 6d: 0110 0000 0110 1101 */ - {NEA,"H,A" }, /* 6e: 0110 0000 0110 1110 */ - {NEA,"L,A" }, /* 6f: 0110 0000 0110 1111 */ + {SUB, "V,A" }, // 60: 0110 0000 0110 0000 + {SUB, "A,A" }, // 61: 0110 0000 0110 0001 + {SUB, "B,A" }, // 62: 0110 0000 0110 0010 + {SUB, "C,A" }, // 63: 0110 0000 0110 0011 + {SUB, "D,A" }, // 64: 0110 0000 0110 0100 + {SUB, "E,A" }, // 65: 0110 0000 0110 0101 + {SUB, "H,A" }, // 66: 0110 0000 0110 0110 + {SUB, "L,A" }, // 67: 0110 0000 0110 0111 + {NEA, "V,A" }, // 68: 0110 0000 0110 1000 + {NEA, "A,A" }, // 69: 0110 0000 0110 1001 + {NEA, "B,A" }, // 6a: 0110 0000 0110 1010 + {NEA, "C,A" }, // 6b: 0110 0000 0110 1011 + {NEA, "D,A" }, // 6c: 0110 0000 0110 1100 + {NEA, "E,A" }, // 6d: 0110 0000 0110 1101 + {NEA, "H,A" }, // 6e: 0110 0000 0110 1110 + {NEA, "L,A" }, // 6f: 0110 0000 0110 1111 - {SBB,"V,A" }, /* 70: 0110 0000 0111 0000 */ - {SBB,"A,A" }, /* 71: 0110 0000 0111 0001 */ - {SBB,"B,A" }, /* 72: 0110 0000 0111 0010 */ - {SBB,"C,A" }, /* 73: 0110 0000 0111 0011 */ - {SBB,"D,A" }, /* 74: 0110 0000 0111 0100 */ - {SBB,"E,A" }, /* 75: 0110 0000 0111 0101 */ - {SBB,"H,A" }, /* 76: 0110 0000 0111 0110 */ - {SBB,"L,A" }, /* 77: 0110 0000 0111 0111 */ - {EQA,"V,A" }, /* 78: 0110 0000 0111 1000 */ - {EQA,"A,A" }, /* 79: 0110 0000 0111 1001 */ - {EQA,"B,A" }, /* 7a: 0110 0000 0111 1010 */ - {EQA,"C,A" }, /* 7b: 0110 0000 0111 1011 */ - {EQA,"D,A" }, /* 7c: 0110 0000 0111 1100 */ - {EQA,"E,A" }, /* 7d: 0110 0000 0111 1101 */ - {EQA,"H,A" }, /* 7e: 0110 0000 0111 1110 */ - {EQA,"L,A" }, /* 7f: 0110 0000 0111 1111 */ + {SBB, "V,A" }, // 70: 0110 0000 0111 0000 + {SBB, "A,A" }, // 71: 0110 0000 0111 0001 + {SBB, "B,A" }, // 72: 0110 0000 0111 0010 + {SBB, "C,A" }, // 73: 0110 0000 0111 0011 + {SBB, "D,A" }, // 74: 0110 0000 0111 0100 + {SBB, "E,A" }, // 75: 0110 0000 0111 0101 + {SBB, "H,A" }, // 76: 0110 0000 0111 0110 + {SBB, "L,A" }, // 77: 0110 0000 0111 0111 + {EQA, "V,A" }, // 78: 0110 0000 0111 1000 + {EQA, "A,A" }, // 79: 0110 0000 0111 1001 + {EQA, "B,A" }, // 7a: 0110 0000 0111 1010 + {EQA, "C,A" }, // 7b: 0110 0000 0111 1011 + {EQA, "D,A" }, // 7c: 0110 0000 0111 1100 + {EQA, "E,A" }, // 7d: 0110 0000 0111 1101 + {EQA, "H,A" }, // 7e: 0110 0000 0111 1110 + {EQA, "L,A" }, // 7f: 0110 0000 0111 1111 - {illegal,nullptr }, /* 80: 0110 0000 1000 0000 */ - {illegal,nullptr }, /* 81: 0110 0000 1000 0001 */ - {illegal,nullptr }, /* 82: 0110 0000 1000 0010 */ - {illegal,nullptr }, /* 83: 0110 0000 1000 0011 */ - {illegal,nullptr }, /* 84: 0110 0000 1000 0100 */ - {illegal,nullptr }, /* 85: 0110 0000 1000 0101 */ - {illegal,nullptr }, /* 86: 0110 0000 1000 0110 */ - {illegal,nullptr }, /* 87: 0110 0000 1000 0111 */ - {ANA,"A,V" }, /* 88: 0110 0000 1000 1000 */ - {ANA,"A,A" }, /* 89: 0110 0000 1000 1001 */ - {ANA,"A,B" }, /* 8a: 0110 0000 1000 1010 */ - {ANA,"A,C" }, /* 8b: 0110 0000 1000 1011 */ - {ANA,"A,D" }, /* 8c: 0110 0000 1000 1100 */ - {ANA,"A,E" }, /* 8d: 0110 0000 1000 1101 */ - {ANA,"A,H" }, /* 8e: 0110 0000 1000 1110 */ - {ANA,"A,L" }, /* 8f: 0110 0000 1000 1111 */ + { }, // 80: 0110 0000 1000 0000 + { }, // 81: 0110 0000 1000 0001 + { }, // 82: 0110 0000 1000 0010 + { }, // 83: 0110 0000 1000 0011 + { }, // 84: 0110 0000 1000 0100 + { }, // 85: 0110 0000 1000 0101 + { }, // 86: 0110 0000 1000 0110 + { }, // 87: 0110 0000 1000 0111 + {ANA, "A,V" }, // 88: 0110 0000 1000 1000 + {ANA, "A,A" }, // 89: 0110 0000 1000 1001 + {ANA, "A,B" }, // 8a: 0110 0000 1000 1010 + {ANA, "A,C" }, // 8b: 0110 0000 1000 1011 + {ANA, "A,D" }, // 8c: 0110 0000 1000 1100 + {ANA, "A,E" }, // 8d: 0110 0000 1000 1101 + {ANA, "A,H" }, // 8e: 0110 0000 1000 1110 + {ANA, "A,L" }, // 8f: 0110 0000 1000 1111 - {XRA,"A,V" }, /* 90: 0110 0000 1001 0000 */ - {XRA,"A,A" }, /* 91: 0110 0000 1001 0001 */ - {XRA,"A,B" }, /* 92: 0110 0000 1001 0010 */ - {XRA,"A,C" }, /* 93: 0110 0000 1001 0011 */ - {XRA,"A,D" }, /* 94: 0110 0000 1001 0100 */ - {XRA,"A,E" }, /* 95: 0110 0000 1001 0101 */ - {XRA,"A,H" }, /* 96: 0110 0000 1001 0110 */ - {XRA,"A,L" }, /* 97: 0110 0000 1001 0111 */ - {ORA,"A,V" }, /* 98: 0110 0000 1001 1000 */ - {ORA,"A,A" }, /* 99: 0110 0000 1001 1001 */ - {ORA,"A,B" }, /* 9a: 0110 0000 1001 1010 */ - {ORA,"A,C" }, /* 9b: 0110 0000 1001 1011 */ - {ORA,"A,D" }, /* 9c: 0110 0000 1001 1100 */ - {ORA,"A,E" }, /* 9d: 0110 0000 1001 1101 */ - {ORA,"A,H" }, /* 9e: 0110 0000 1001 1110 */ - {ORA,"A,L" }, /* 9f: 0110 0000 1001 1111 */ + {XRA, "A,V" }, // 90: 0110 0000 1001 0000 + {XRA, "A,A" }, // 91: 0110 0000 1001 0001 + {XRA, "A,B" }, // 92: 0110 0000 1001 0010 + {XRA, "A,C" }, // 93: 0110 0000 1001 0011 + {XRA, "A,D" }, // 94: 0110 0000 1001 0100 + {XRA, "A,E" }, // 95: 0110 0000 1001 0101 + {XRA, "A,H" }, // 96: 0110 0000 1001 0110 + {XRA, "A,L" }, // 97: 0110 0000 1001 0111 + {ORA, "A,V" }, // 98: 0110 0000 1001 1000 + {ORA, "A,A" }, // 99: 0110 0000 1001 1001 + {ORA, "A,B" }, // 9a: 0110 0000 1001 1010 + {ORA, "A,C" }, // 9b: 0110 0000 1001 1011 + {ORA, "A,D" }, // 9c: 0110 0000 1001 1100 + {ORA, "A,E" }, // 9d: 0110 0000 1001 1101 + {ORA, "A,H" }, // 9e: 0110 0000 1001 1110 + {ORA, "A,L" }, // 9f: 0110 0000 1001 1111 - {ADDNC,"A,V" }, /* a0: 0110 0000 1010 0000 */ - {ADDNC,"A,A" }, /* a1: 0110 0000 1010 0001 */ - {ADDNC,"A,B" }, /* a2: 0110 0000 1010 0010 */ - {ADDNC,"A,C" }, /* a3: 0110 0000 1010 0011 */ - {ADDNC,"A,D" }, /* a4: 0110 0000 1010 0100 */ - {ADDNC,"A,E" }, /* a5: 0110 0000 1010 0101 */ - {ADDNC,"A,H" }, /* a6: 0110 0000 1010 0110 */ - {ADDNC,"A,L" }, /* a7: 0110 0000 1010 0111 */ - {GTA,"A,V" }, /* a8: 0110 0000 1010 1000 */ - {GTA,"A,A" }, /* a9: 0110 0000 1010 1001 */ - {GTA,"A,B" }, /* aa: 0110 0000 1010 1010 */ - {GTA,"A,C" }, /* ab: 0110 0000 1010 1011 */ - {GTA,"A,D" }, /* ac: 0110 0000 1010 1100 */ - {GTA,"A,E" }, /* ad: 0110 0000 1010 1101 */ - {GTA,"A,H" }, /* ae: 0110 0000 1010 1110 */ - {GTA,"A,L" }, /* af: 0110 0000 1010 1111 */ + {ADDNC, "A,V" }, // a0: 0110 0000 1010 0000 + {ADDNC, "A,A" }, // a1: 0110 0000 1010 0001 + {ADDNC, "A,B" }, // a2: 0110 0000 1010 0010 + {ADDNC, "A,C" }, // a3: 0110 0000 1010 0011 + {ADDNC, "A,D" }, // a4: 0110 0000 1010 0100 + {ADDNC, "A,E" }, // a5: 0110 0000 1010 0101 + {ADDNC, "A,H" }, // a6: 0110 0000 1010 0110 + {ADDNC, "A,L" }, // a7: 0110 0000 1010 0111 + {GTA, "A,V" }, // a8: 0110 0000 1010 1000 + {GTA, "A,A" }, // a9: 0110 0000 1010 1001 + {GTA, "A,B" }, // aa: 0110 0000 1010 1010 + {GTA, "A,C" }, // ab: 0110 0000 1010 1011 + {GTA, "A,D" }, // ac: 0110 0000 1010 1100 + {GTA, "A,E" }, // ad: 0110 0000 1010 1101 + {GTA, "A,H" }, // ae: 0110 0000 1010 1110 + {GTA, "A,L" }, // af: 0110 0000 1010 1111 - {SUBNB,"A,V" }, /* b0: 0110 0000 1011 0000 */ - {SUBNB,"A,A" }, /* b1: 0110 0000 1011 0001 */ - {SUBNB,"A,B" }, /* b2: 0110 0000 1011 0010 */ - {SUBNB,"A,C" }, /* b3: 0110 0000 1011 0011 */ - {SUBNB,"A,D" }, /* b4: 0110 0000 1011 0100 */ - {SUBNB,"A,E" }, /* b5: 0110 0000 1011 0101 */ - {SUBNB,"A,H" }, /* b6: 0110 0000 1011 0110 */ - {SUBNB,"A,L" }, /* b7: 0110 0000 1011 0111 */ - {LTA,"A,V" }, /* b8: 0110 0000 1011 1000 */ - {LTA,"A,A" }, /* b9: 0110 0000 1011 1001 */ - {LTA,"A,B" }, /* ba: 0110 0000 1011 1010 */ - {LTA,"A,C" }, /* bb: 0110 0000 1011 1011 */ - {LTA,"A,D" }, /* bc: 0110 0000 1011 1100 */ - {LTA,"A,E" }, /* bd: 0110 0000 1011 1101 */ - {LTA,"A,H" }, /* be: 0110 0000 1011 1110 */ - {LTA,"A,L" }, /* bf: 0110 0000 1011 1111 */ + {SUBNB, "A,V" }, // b0: 0110 0000 1011 0000 + {SUBNB, "A,A" }, // b1: 0110 0000 1011 0001 + {SUBNB, "A,B" }, // b2: 0110 0000 1011 0010 + {SUBNB, "A,C" }, // b3: 0110 0000 1011 0011 + {SUBNB, "A,D" }, // b4: 0110 0000 1011 0100 + {SUBNB, "A,E" }, // b5: 0110 0000 1011 0101 + {SUBNB, "A,H" }, // b6: 0110 0000 1011 0110 + {SUBNB, "A,L" }, // b7: 0110 0000 1011 0111 + {LTA, "A,V" }, // b8: 0110 0000 1011 1000 + {LTA, "A,A" }, // b9: 0110 0000 1011 1001 + {LTA, "A,B" }, // ba: 0110 0000 1011 1010 + {LTA, "A,C" }, // bb: 0110 0000 1011 1011 + {LTA, "A,D" }, // bc: 0110 0000 1011 1100 + {LTA, "A,E" }, // bd: 0110 0000 1011 1101 + {LTA, "A,H" }, // be: 0110 0000 1011 1110 + {LTA, "A,L" }, // bf: 0110 0000 1011 1111 - {ADD,"A,V" }, /* c0: 0110 0000 1100 0000 */ - {ADD,"A,A" }, /* c1: 0110 0000 1100 0001 */ - {ADD,"A,B" }, /* c2: 0110 0000 1100 0010 */ - {ADD,"A,C" }, /* c3: 0110 0000 1100 0011 */ - {ADD,"A,D" }, /* c4: 0110 0000 1100 0100 */ - {ADD,"A,E" }, /* c5: 0110 0000 1100 0101 */ - {ADD,"A,H" }, /* c6: 0110 0000 1100 0110 */ - {ADD,"A,L" }, /* c7: 0110 0000 1100 0111 */ - {ONA,"A,V" }, /* c8: 0110 0000 1100 1000 */ - {ONA,"A,A" }, /* c9: 0110 0000 1100 1001 */ - {ONA,"A,B" }, /* ca: 0110 0000 1100 1010 */ - {ONA,"A,C" }, /* cb: 0110 0000 1100 1011 */ - {ONA,"A,D" }, /* cc: 0110 0000 1100 1100 */ - {ONA,"A,E" }, /* cd: 0110 0000 1100 1101 */ - {ONA,"A,H" }, /* ce: 0110 0000 1100 1110 */ - {ONA,"A,L" }, /* cf: 0110 0000 1100 1111 */ + {ADD, "A,V" }, // c0: 0110 0000 1100 0000 + {ADD, "A,A" }, // c1: 0110 0000 1100 0001 + {ADD, "A,B" }, // c2: 0110 0000 1100 0010 + {ADD, "A,C" }, // c3: 0110 0000 1100 0011 + {ADD, "A,D" }, // c4: 0110 0000 1100 0100 + {ADD, "A,E" }, // c5: 0110 0000 1100 0101 + {ADD, "A,H" }, // c6: 0110 0000 1100 0110 + {ADD, "A,L" }, // c7: 0110 0000 1100 0111 + {ONA, "A,V" }, // c8: 0110 0000 1100 1000 + {ONA, "A,A" }, // c9: 0110 0000 1100 1001 + {ONA, "A,B" }, // ca: 0110 0000 1100 1010 + {ONA, "A,C" }, // cb: 0110 0000 1100 1011 + {ONA, "A,D" }, // cc: 0110 0000 1100 1100 + {ONA, "A,E" }, // cd: 0110 0000 1100 1101 + {ONA, "A,H" }, // ce: 0110 0000 1100 1110 + {ONA, "A,L" }, // cf: 0110 0000 1100 1111 - {ADC,"A,V" }, /* d0: 0110 0000 1101 0000 */ - {ADC,"A,A" }, /* d1: 0110 0000 1101 0001 */ - {ADC,"A,B" }, /* d2: 0110 0000 1101 0010 */ - {ADC,"A,C" }, /* d3: 0110 0000 1101 0011 */ - {ADC,"A,D" }, /* d4: 0110 0000 1101 0100 */ - {ADC,"A,E" }, /* d5: 0110 0000 1101 0101 */ - {ADC,"A,H" }, /* d6: 0110 0000 1101 0110 */ - {ADC,"A,L" }, /* d7: 0110 0000 1101 0111 */ - {OFFA,"A,V" }, /* d8: 0110 0000 1101 1000 */ - {OFFA,"A,A" }, /* d9: 0110 0000 1101 1001 */ - {OFFA,"A,B" }, /* da: 0110 0000 1101 1010 */ - {OFFA,"A,C" }, /* db: 0110 0000 1101 1011 */ - {OFFA,"A,D" }, /* dc: 0110 0000 1101 1100 */ - {OFFA,"A,E" }, /* dd: 0110 0000 1101 1101 */ - {OFFA,"A,H" }, /* de: 0110 0000 1101 1110 */ - {OFFA,"A,L" }, /* df: 0110 0000 1101 1111 */ + {ADC, "A,V" }, // d0: 0110 0000 1101 0000 + {ADC, "A,A" }, // d1: 0110 0000 1101 0001 + {ADC, "A,B" }, // d2: 0110 0000 1101 0010 + {ADC, "A,C" }, // d3: 0110 0000 1101 0011 + {ADC, "A,D" }, // d4: 0110 0000 1101 0100 + {ADC, "A,E" }, // d5: 0110 0000 1101 0101 + {ADC, "A,H" }, // d6: 0110 0000 1101 0110 + {ADC, "A,L" }, // d7: 0110 0000 1101 0111 + {OFFA, "A,V" }, // d8: 0110 0000 1101 1000 + {OFFA, "A,A" }, // d9: 0110 0000 1101 1001 + {OFFA, "A,B" }, // da: 0110 0000 1101 1010 + {OFFA, "A,C" }, // db: 0110 0000 1101 1011 + {OFFA, "A,D" }, // dc: 0110 0000 1101 1100 + {OFFA, "A,E" }, // dd: 0110 0000 1101 1101 + {OFFA, "A,H" }, // de: 0110 0000 1101 1110 + {OFFA, "A,L" }, // df: 0110 0000 1101 1111 - {SUB,"A,V" }, /* e0: 0110 0000 1110 0000 */ - {SUB,"A,A" }, /* e1: 0110 0000 1110 0001 */ - {SUB,"A,B" }, /* e2: 0110 0000 1110 0010 */ - {SUB,"A,C" }, /* e3: 0110 0000 1110 0011 */ - {SUB,"A,D" }, /* e4: 0110 0000 1110 0100 */ - {SUB,"A,E" }, /* e5: 0110 0000 1110 0101 */ - {SUB,"A,H" }, /* e6: 0110 0000 1110 0110 */ - {SUB,"A,L" }, /* e7: 0110 0000 1110 0111 */ - {NEA,"A,V" }, /* e8: 0110 0000 1110 1000 */ - {NEA,"A,A" }, /* e9: 0110 0000 1110 1001 */ - {NEA,"A,B" }, /* ea: 0110 0000 1110 1010 */ - {NEA,"A,C" }, /* eb: 0110 0000 1110 1011 */ - {NEA,"A,D" }, /* ec: 0110 0000 1110 1100 */ - {NEA,"A,E" }, /* ed: 0110 0000 1110 1101 */ - {NEA,"A,H" }, /* ee: 0110 0000 1110 1110 */ - {NEA,"A,L" }, /* ef: 0110 0000 1110 1111 */ + {SUB, "A,V" }, // e0: 0110 0000 1110 0000 + {SUB, "A,A" }, // e1: 0110 0000 1110 0001 + {SUB, "A,B" }, // e2: 0110 0000 1110 0010 + {SUB, "A,C" }, // e3: 0110 0000 1110 0011 + {SUB, "A,D" }, // e4: 0110 0000 1110 0100 + {SUB, "A,E" }, // e5: 0110 0000 1110 0101 + {SUB, "A,H" }, // e6: 0110 0000 1110 0110 + {SUB, "A,L" }, // e7: 0110 0000 1110 0111 + {NEA, "A,V" }, // e8: 0110 0000 1110 1000 + {NEA, "A,A" }, // e9: 0110 0000 1110 1001 + {NEA, "A,B" }, // ea: 0110 0000 1110 1010 + {NEA, "A,C" }, // eb: 0110 0000 1110 1011 + {NEA, "A,D" }, // ec: 0110 0000 1110 1100 + {NEA, "A,E" }, // ed: 0110 0000 1110 1101 + {NEA, "A,H" }, // ee: 0110 0000 1110 1110 + {NEA, "A,L" }, // ef: 0110 0000 1110 1111 - {SBB,"A,V" }, /* f0: 0110 0000 1111 0000 */ - {SBB,"A,A" }, /* f1: 0110 0000 1111 0001 */ - {SBB,"A,B" }, /* f2: 0110 0000 1111 0010 */ - {SBB,"A,C" }, /* f3: 0110 0000 1111 0011 */ - {SBB,"A,D" }, /* f4: 0110 0000 1111 0100 */ - {SBB,"A,E" }, /* f5: 0110 0000 1111 0101 */ - {SBB,"A,H" }, /* f6: 0110 0000 1111 0110 */ - {SBB,"A,L" }, /* f7: 0110 0000 1111 0111 */ - {EQA,"A,V" }, /* f8: 0110 0000 1111 1000 */ - {EQA,"A,A" }, /* f9: 0110 0000 1111 1001 */ - {EQA,"A,B" }, /* fa: 0110 0000 1111 1010 */ - {EQA,"A,C" }, /* fb: 0110 0000 1111 1011 */ - {EQA,"A,D" }, /* fc: 0110 0000 1111 1100 */ - {EQA,"A,E" }, /* fd: 0110 0000 1111 1101 */ - {EQA,"A,H" }, /* fe: 0110 0000 1111 1110 */ - {EQA,"A,L" } /* ff: 0110 0000 1111 1111 */ + {SBB, "A,V" }, // f0: 0110 0000 1111 0000 + {SBB, "A,A" }, // f1: 0110 0000 1111 0001 + {SBB, "A,B" }, // f2: 0110 0000 1111 0010 + {SBB, "A,C" }, // f3: 0110 0000 1111 0011 + {SBB, "A,D" }, // f4: 0110 0000 1111 0100 + {SBB, "A,E" }, // f5: 0110 0000 1111 0101 + {SBB, "A,H" }, // f6: 0110 0000 1111 0110 + {SBB, "A,L" }, // f7: 0110 0000 1111 0111 + {EQA, "A,V" }, // f8: 0110 0000 1111 1000 + {EQA, "A,A" }, // f9: 0110 0000 1111 1001 + {EQA, "A,B" }, // fa: 0110 0000 1111 1010 + {EQA, "A,C" }, // fb: 0110 0000 1111 1011 + {EQA, "A,D" }, // fc: 0110 0000 1111 1100 + {EQA, "A,E" }, // fd: 0110 0000 1111 1101 + {EQA, "A,H" }, // fe: 0110 0000 1111 1110 + {EQA, "A,L" } // ff: 0110 0000 1111 1111 }; -/* prefix 64 */ -static const struct dasm_s dasm64_7810[256] = +// prefix 64 +const dasm_s dasm_s::d64_7810[256] = { - {MVI,"PA,%b" }, /* 00: 0110 0100 0000 0000 xxxx xxxx */ - {MVI,"PB,%b" }, /* 01: 0110 0100 0000 0001 xxxx xxxx */ - {MVI,"PC,%b" }, /* 02: 0110 0100 0000 0010 xxxx xxxx */ - {MVI,"PD,%b" }, /* 03: 0110 0100 0000 0011 xxxx xxxx */ - {illegal,nullptr }, /* 04: 0110 0100 0000 0100 xxxx xxxx */ - {MVI,"PF,%b" }, /* 05: 0110 0100 0000 0101 xxxx xxxx */ - {MVI,"MKH,%b" }, /* 06: 0110 0100 0000 0110 xxxx xxxx */ - {MVI,"MKL,%b" }, /* 07: 0110 0100 0000 0111 xxxx xxxx */ - {ANI,"PA,%b" }, /* 08: 0110 0100 0000 1000 xxxx xxxx */ - {ANI,"PB,%b" }, /* 09: 0110 0100 0000 1001 xxxx xxxx */ - {ANI,"PC,%b" }, /* 0a: 0110 0100 0000 1010 xxxx xxxx */ - {ANI,"PD,%b" }, /* 0b: 0110 0100 0000 1011 xxxx xxxx */ - {illegal,nullptr }, /* 0c: 0110 0100 0000 1100 xxxx xxxx */ - {ANI,"PF,%b" }, /* 0d: 0110 0100 0000 1101 xxxx xxxx */ - {ANI,"MKH,%b" }, /* 0e: 0110 0100 0000 1110 xxxx xxxx */ - {ANI,"MKL,%b" }, /* 0f: 0110 0100 0000 1111 xxxx xxxx */ + {MVI, "PA,%b" }, // 00: 0110 0100 0000 0000 xxxx xxxx + {MVI, "PB,%b" }, // 01: 0110 0100 0000 0001 xxxx xxxx + {MVI, "PC,%b" }, // 02: 0110 0100 0000 0010 xxxx xxxx + {MVI, "PD,%b" }, // 03: 0110 0100 0000 0011 xxxx xxxx + { }, // 04: 0110 0100 0000 0100 xxxx xxxx + {MVI, "PF,%b" }, // 05: 0110 0100 0000 0101 xxxx xxxx + {MVI, "MKH,%b" }, // 06: 0110 0100 0000 0110 xxxx xxxx + {MVI, "MKL,%b" }, // 07: 0110 0100 0000 0111 xxxx xxxx + {ANI, "PA,%b" }, // 08: 0110 0100 0000 1000 xxxx xxxx + {ANI, "PB,%b" }, // 09: 0110 0100 0000 1001 xxxx xxxx + {ANI, "PC,%b" }, // 0a: 0110 0100 0000 1010 xxxx xxxx + {ANI, "PD,%b" }, // 0b: 0110 0100 0000 1011 xxxx xxxx + { }, // 0c: 0110 0100 0000 1100 xxxx xxxx + {ANI, "PF,%b" }, // 0d: 0110 0100 0000 1101 xxxx xxxx + {ANI, "MKH,%b" }, // 0e: 0110 0100 0000 1110 xxxx xxxx + {ANI, "MKL,%b" }, // 0f: 0110 0100 0000 1111 xxxx xxxx - {XRI,"PA,%b" }, /* 10: 0110 0100 0001 0000 xxxx xxxx */ - {XRI,"PB,%b" }, /* 11: 0110 0100 0001 0001 xxxx xxxx */ - {XRI,"PC,%b" }, /* 12: 0110 0100 0001 0010 xxxx xxxx */ - {XRI,"PD,%b" }, /* 13: 0110 0100 0001 0011 xxxx xxxx */ - {illegal,nullptr }, /* 14: 0110 0100 0001 0100 xxxx xxxx */ - {XRI,"PF,%b" }, /* 15: 0110 0100 0001 0101 xxxx xxxx */ - {XRI,"MKH,%b" }, /* 16: 0110 0100 0001 0110 xxxx xxxx */ - {XRI,"MKL,%b" }, /* 17: 0110 0100 0001 0111 xxxx xxxx */ - {ORI,"PA,%b" }, /* 18: 0110 0100 0001 1000 xxxx xxxx */ - {ORI,"PB,%b" }, /* 19: 0110 0100 0001 1001 xxxx xxxx */ - {ORI,"PC,%b" }, /* 1a: 0110 0100 0001 1010 xxxx xxxx */ - {ORI,"PD,%b" }, /* 1b: 0110 0100 0001 1011 xxxx xxxx */ - {illegal,nullptr }, /* 1c: 0110 0100 0001 1100 xxxx xxxx */ - {ORI,"PF,%b" }, /* 1d: 0110 0100 0001 1101 xxxx xxxx */ - {ORI,"MKH,%b" }, /* 1e: 0110 0100 0001 1110 xxxx xxxx */ - {ORI,"MKL,%b" }, /* 1f: 0110 0100 0001 1111 xxxx xxxx */ + {XRI, "PA,%b" }, // 10: 0110 0100 0001 0000 xxxx xxxx + {XRI, "PB,%b" }, // 11: 0110 0100 0001 0001 xxxx xxxx + {XRI, "PC,%b" }, // 12: 0110 0100 0001 0010 xxxx xxxx + {XRI, "PD,%b" }, // 13: 0110 0100 0001 0011 xxxx xxxx + { }, // 14: 0110 0100 0001 0100 xxxx xxxx + {XRI, "PF,%b" }, // 15: 0110 0100 0001 0101 xxxx xxxx + {XRI, "MKH,%b" }, // 16: 0110 0100 0001 0110 xxxx xxxx + {XRI, "MKL,%b" }, // 17: 0110 0100 0001 0111 xxxx xxxx + {ORI, "PA,%b" }, // 18: 0110 0100 0001 1000 xxxx xxxx + {ORI, "PB,%b" }, // 19: 0110 0100 0001 1001 xxxx xxxx + {ORI, "PC,%b" }, // 1a: 0110 0100 0001 1010 xxxx xxxx + {ORI, "PD,%b" }, // 1b: 0110 0100 0001 1011 xxxx xxxx + { }, // 1c: 0110 0100 0001 1100 xxxx xxxx + {ORI, "PF,%b" }, // 1d: 0110 0100 0001 1101 xxxx xxxx + {ORI, "MKH,%b" }, // 1e: 0110 0100 0001 1110 xxxx xxxx + {ORI, "MKL,%b" }, // 1f: 0110 0100 0001 1111 xxxx xxxx - {ADINC,"PA,%b" }, /* 20: 0110 0100 0010 0000 xxxx xxxx */ - {ADINC,"PB,%b" }, /* 21: 0110 0100 0010 0001 xxxx xxxx */ - {ADINC,"PC,%b" }, /* 22: 0110 0100 0010 0010 xxxx xxxx */ - {ADINC,"PD,%b" }, /* 23: 0110 0100 0010 0011 xxxx xxxx */ - {illegal,nullptr }, /* 24: 0110 0100 0010 0100 xxxx xxxx */ - {ADINC,"PF,%b" }, /* 25: 0110 0100 0010 0101 xxxx xxxx */ - {ADINC,"MKH,%b" }, /* 26: 0110 0100 0010 0110 xxxx xxxx */ - {ADINC,"MKL,%b" }, /* 27: 0110 0100 0010 0111 xxxx xxxx */ - {GTI,"PA,%b" }, /* 28: 0110 0100 0010 1000 xxxx xxxx */ - {GTI,"PB,%b" }, /* 29: 0110 0100 0010 1001 xxxx xxxx */ - {GTI,"PC,%b" }, /* 2a: 0110 0100 0010 1010 xxxx xxxx */ - {GTI,"PD,%b" }, /* 2b: 0110 0100 0010 1011 xxxx xxxx */ - {illegal,nullptr }, /* 2c: 0110 0100 0010 1100 xxxx xxxx */ - {GTI,"PF,%b" }, /* 2d: 0110 0100 0010 1101 xxxx xxxx */ - {GTI,"MKH,%b" }, /* 2e: 0110 0100 0010 1110 xxxx xxxx */ - {GTI,"MKL,%b" }, /* 2f: 0110 0100 0010 1111 xxxx xxxx */ + {ADINC, "PA,%b" }, // 20: 0110 0100 0010 0000 xxxx xxxx + {ADINC, "PB,%b" }, // 21: 0110 0100 0010 0001 xxxx xxxx + {ADINC, "PC,%b" }, // 22: 0110 0100 0010 0010 xxxx xxxx + {ADINC, "PD,%b" }, // 23: 0110 0100 0010 0011 xxxx xxxx + { }, // 24: 0110 0100 0010 0100 xxxx xxxx + {ADINC, "PF,%b" }, // 25: 0110 0100 0010 0101 xxxx xxxx + {ADINC, "MKH,%b" }, // 26: 0110 0100 0010 0110 xxxx xxxx + {ADINC, "MKL,%b" }, // 27: 0110 0100 0010 0111 xxxx xxxx + {GTI, "PA,%b" }, // 28: 0110 0100 0010 1000 xxxx xxxx + {GTI, "PB,%b" }, // 29: 0110 0100 0010 1001 xxxx xxxx + {GTI, "PC,%b" }, // 2a: 0110 0100 0010 1010 xxxx xxxx + {GTI, "PD,%b" }, // 2b: 0110 0100 0010 1011 xxxx xxxx + { }, // 2c: 0110 0100 0010 1100 xxxx xxxx + {GTI, "PF,%b" }, // 2d: 0110 0100 0010 1101 xxxx xxxx + {GTI, "MKH,%b" }, // 2e: 0110 0100 0010 1110 xxxx xxxx + {GTI, "MKL,%b" }, // 2f: 0110 0100 0010 1111 xxxx xxxx - {SUINB,"PA,%b" }, /* 30: 0110 0100 0011 0000 xxxx xxxx */ - {SUINB,"PB,%b" }, /* 31: 0110 0100 0011 0001 xxxx xxxx */ - {SUINB,"PC,%b" }, /* 32: 0110 0100 0011 0010 xxxx xxxx */ - {SUINB,"PD,%b" }, /* 33: 0110 0100 0011 0011 xxxx xxxx */ - {illegal,nullptr }, /* 34: 0110 0100 0011 0100 xxxx xxxx */ - {SUINB,"PF,%b" }, /* 35: 0110 0100 0011 0101 xxxx xxxx */ - {SUINB,"MKH,%b" }, /* 36: 0110 0100 0011 0110 xxxx xxxx */ - {SUINB,"MKL,%b" }, /* 37: 0110 0100 0011 0111 xxxx xxxx */ - {LTI,"PA,%b" }, /* 38: 0110 0100 0011 1000 xxxx xxxx */ - {LTI,"PB,%b" }, /* 39: 0110 0100 0011 1001 xxxx xxxx */ - {LTI,"PC,%b" }, /* 3a: 0110 0100 0011 1010 xxxx xxxx */ - {LTI,"PD,%b" }, /* 3b: 0110 0100 0011 1011 xxxx xxxx */ - {illegal,nullptr }, /* 3c: 0110 0100 0011 1100 xxxx xxxx */ - {LTI,"PF,%b" }, /* 3d: 0110 0100 0011 1101 xxxx xxxx */ - {LTI,"MKH,%b" }, /* 3e: 0110 0100 0011 1110 xxxx xxxx */ - {LTI,"MKL,%b" }, /* 3f: 0110 0100 0011 1111 xxxx xxxx */ + {SUINB, "PA,%b" }, // 30: 0110 0100 0011 0000 xxxx xxxx + {SUINB, "PB,%b" }, // 31: 0110 0100 0011 0001 xxxx xxxx + {SUINB, "PC,%b" }, // 32: 0110 0100 0011 0010 xxxx xxxx + {SUINB, "PD,%b" }, // 33: 0110 0100 0011 0011 xxxx xxxx + { }, // 34: 0110 0100 0011 0100 xxxx xxxx + {SUINB, "PF,%b" }, // 35: 0110 0100 0011 0101 xxxx xxxx + {SUINB, "MKH,%b" }, // 36: 0110 0100 0011 0110 xxxx xxxx + {SUINB, "MKL,%b" }, // 37: 0110 0100 0011 0111 xxxx xxxx + {LTI, "PA,%b" }, // 38: 0110 0100 0011 1000 xxxx xxxx + {LTI, "PB,%b" }, // 39: 0110 0100 0011 1001 xxxx xxxx + {LTI, "PC,%b" }, // 3a: 0110 0100 0011 1010 xxxx xxxx + {LTI, "PD,%b" }, // 3b: 0110 0100 0011 1011 xxxx xxxx + { }, // 3c: 0110 0100 0011 1100 xxxx xxxx + {LTI, "PF,%b" }, // 3d: 0110 0100 0011 1101 xxxx xxxx + {LTI, "MKH,%b" }, // 3e: 0110 0100 0011 1110 xxxx xxxx + {LTI, "MKL,%b" }, // 3f: 0110 0100 0011 1111 xxxx xxxx - {ADI,"PA,%b" }, /* 40: 0110 0100 0100 0000 xxxx xxxx */ - {ADI,"PB,%b" }, /* 41: 0110 0100 0100 0001 xxxx xxxx */ - {ADI,"PC,%b" }, /* 42: 0110 0100 0100 0010 xxxx xxxx */ - {ADI,"PD,%b" }, /* 43: 0110 0100 0100 0011 xxxx xxxx */ - {illegal,nullptr }, /* 44: 0110 0100 0100 0100 xxxx xxxx */ - {ADI,"PF,%b" }, /* 45: 0110 0100 0100 0101 xxxx xxxx */ - {ADI,"MKH,%b" }, /* 46: 0110 0100 0100 0110 xxxx xxxx */ - {ADI,"MKL,%b" }, /* 47: 0110 0100 0100 0111 xxxx xxxx */ - {ONI,"PA,%b" }, /* 48: 0110 0100 0100 1000 xxxx xxxx */ - {ONI,"PB,%b" }, /* 49: 0110 0100 0100 1001 xxxx xxxx */ - {ONI,"PC,%b" }, /* 4a: 0110 0100 0100 1010 xxxx xxxx */ - {ONI,"PD,%b" }, /* 4b: 0110 0100 0100 1011 xxxx xxxx */ - {illegal,nullptr }, /* 4c: 0110 0100 0100 1100 xxxx xxxx */ - {ONI,"PF,%b" }, /* 4d: 0110 0100 0100 1101 xxxx xxxx */ - {ONI,"MKH,%b" }, /* 4e: 0110 0100 0100 1110 xxxx xxxx */ - {ONI,"MKL,%b" }, /* 4f: 0110 0100 0100 1111 xxxx xxxx */ + {ADI, "PA,%b" }, // 40: 0110 0100 0100 0000 xxxx xxxx + {ADI, "PB,%b" }, // 41: 0110 0100 0100 0001 xxxx xxxx + {ADI, "PC,%b" }, // 42: 0110 0100 0100 0010 xxxx xxxx + {ADI, "PD,%b" }, // 43: 0110 0100 0100 0011 xxxx xxxx + { }, // 44: 0110 0100 0100 0100 xxxx xxxx + {ADI, "PF,%b" }, // 45: 0110 0100 0100 0101 xxxx xxxx + {ADI, "MKH,%b" }, // 46: 0110 0100 0100 0110 xxxx xxxx + {ADI, "MKL,%b" }, // 47: 0110 0100 0100 0111 xxxx xxxx + {ONI, "PA,%b" }, // 48: 0110 0100 0100 1000 xxxx xxxx + {ONI, "PB,%b" }, // 49: 0110 0100 0100 1001 xxxx xxxx + {ONI, "PC,%b" }, // 4a: 0110 0100 0100 1010 xxxx xxxx + {ONI, "PD,%b" }, // 4b: 0110 0100 0100 1011 xxxx xxxx + { }, // 4c: 0110 0100 0100 1100 xxxx xxxx + {ONI, "PF,%b" }, // 4d: 0110 0100 0100 1101 xxxx xxxx + {ONI, "MKH,%b" }, // 4e: 0110 0100 0100 1110 xxxx xxxx + {ONI, "MKL,%b" }, // 4f: 0110 0100 0100 1111 xxxx xxxx - {ACI,"PA,%b" }, /* 50: 0110 0100 0101 0000 xxxx xxxx */ - {ACI,"PB,%b" }, /* 51: 0110 0100 0101 0001 xxxx xxxx */ - {ACI,"PC,%b" }, /* 52: 0110 0100 0101 0010 xxxx xxxx */ - {ACI,"PD,%b" }, /* 53: 0110 0100 0101 0011 xxxx xxxx */ - {illegal,nullptr }, /* 54: 0110 0100 0101 0100 xxxx xxxx */ - {ACI,"PF,%b" }, /* 55: 0110 0100 0101 0101 xxxx xxxx */ - {ACI,"MKH,%b" }, /* 56: 0110 0100 0101 0110 xxxx xxxx */ - {ACI,"MKL,%b" }, /* 57: 0110 0100 0101 0111 xxxx xxxx */ - {OFFI,"PA,%b" }, /* 58: 0110 0100 0101 1000 xxxx xxxx */ - {OFFI,"PB,%b" }, /* 59: 0110 0100 0101 1001 xxxx xxxx */ - {OFFI,"PC,%b" }, /* 5a: 0110 0100 0101 1010 xxxx xxxx */ - {OFFI,"PD,%b" }, /* 5b: 0110 0100 0101 1011 xxxx xxxx */ - {illegal,nullptr }, /* 5c: 0110 0100 0101 1100 xxxx xxxx */ - {OFFI,"PF,%b" }, /* 5d: 0110 0100 0101 1101 xxxx xxxx */ - {OFFI,"MKH,%b" }, /* 5e: 0110 0100 0101 1110 xxxx xxxx */ - {OFFI,"MKL,%b" }, /* 5f: 0110 0100 0101 1111 xxxx xxxx */ + {ACI, "PA,%b" }, // 50: 0110 0100 0101 0000 xxxx xxxx + {ACI, "PB,%b" }, // 51: 0110 0100 0101 0001 xxxx xxxx + {ACI, "PC,%b" }, // 52: 0110 0100 0101 0010 xxxx xxxx + {ACI, "PD,%b" }, // 53: 0110 0100 0101 0011 xxxx xxxx + { }, // 54: 0110 0100 0101 0100 xxxx xxxx + {ACI, "PF,%b" }, // 55: 0110 0100 0101 0101 xxxx xxxx + {ACI, "MKH,%b" }, // 56: 0110 0100 0101 0110 xxxx xxxx + {ACI, "MKL,%b" }, // 57: 0110 0100 0101 0111 xxxx xxxx + {OFFI, "PA,%b" }, // 58: 0110 0100 0101 1000 xxxx xxxx + {OFFI, "PB,%b" }, // 59: 0110 0100 0101 1001 xxxx xxxx + {OFFI, "PC,%b" }, // 5a: 0110 0100 0101 1010 xxxx xxxx + {OFFI, "PD,%b" }, // 5b: 0110 0100 0101 1011 xxxx xxxx + { }, // 5c: 0110 0100 0101 1100 xxxx xxxx + {OFFI, "PF,%b" }, // 5d: 0110 0100 0101 1101 xxxx xxxx + {OFFI, "MKH,%b" }, // 5e: 0110 0100 0101 1110 xxxx xxxx + {OFFI, "MKL,%b" }, // 5f: 0110 0100 0101 1111 xxxx xxxx - {SUI,"PA,%b" }, /* 60: 0110 0100 0110 0000 xxxx xxxx */ - {SUI,"PB,%b" }, /* 61: 0110 0100 0110 0001 xxxx xxxx */ - {SUI,"PC,%b" }, /* 62: 0110 0100 0110 0010 xxxx xxxx */ - {SUI,"PD,%b" }, /* 63: 0110 0100 0110 0011 xxxx xxxx */ - {illegal,nullptr }, /* 64: 0110 0100 0110 0100 xxxx xxxx */ - {SUI,"PF,%b" }, /* 65: 0110 0100 0110 0101 xxxx xxxx */ - {SUI,"MKH,%b" }, /* 66: 0110 0100 0110 0110 xxxx xxxx */ - {SUI,"MKL,%b" }, /* 67: 0110 0100 0110 0111 xxxx xxxx */ - {NEI,"PA,%b" }, /* 68: 0110 0100 0110 1000 xxxx xxxx */ - {NEI,"PB,%b" }, /* 69: 0110 0100 0110 1001 xxxx xxxx */ - {NEI,"PC,%b" }, /* 6a: 0110 0100 0110 1010 xxxx xxxx */ - {NEI,"PD,%b" }, /* 6b: 0110 0100 0110 1011 xxxx xxxx */ - {illegal,nullptr }, /* 6c: 0110 0100 0110 1100 xxxx xxxx */ - {NEI,"PF,%b" }, /* 6d: 0110 0100 0110 1101 xxxx xxxx */ - {NEI,"MKH,%b" }, /* 6e: 0110 0100 0110 1110 xxxx xxxx */ - {NEI,"MKL,%b" }, /* 6f: 0110 0100 0110 1111 xxxx xxxx */ + {SUI, "PA,%b" }, // 60: 0110 0100 0110 0000 xxxx xxxx + {SUI, "PB,%b" }, // 61: 0110 0100 0110 0001 xxxx xxxx + {SUI, "PC,%b" }, // 62: 0110 0100 0110 0010 xxxx xxxx + {SUI, "PD,%b" }, // 63: 0110 0100 0110 0011 xxxx xxxx + { }, // 64: 0110 0100 0110 0100 xxxx xxxx + {SUI, "PF,%b" }, // 65: 0110 0100 0110 0101 xxxx xxxx + {SUI, "MKH,%b" }, // 66: 0110 0100 0110 0110 xxxx xxxx + {SUI, "MKL,%b" }, // 67: 0110 0100 0110 0111 xxxx xxxx + {NEI, "PA,%b" }, // 68: 0110 0100 0110 1000 xxxx xxxx + {NEI, "PB,%b" }, // 69: 0110 0100 0110 1001 xxxx xxxx + {NEI, "PC,%b" }, // 6a: 0110 0100 0110 1010 xxxx xxxx + {NEI, "PD,%b" }, // 6b: 0110 0100 0110 1011 xxxx xxxx + { }, // 6c: 0110 0100 0110 1100 xxxx xxxx + {NEI, "PF,%b" }, // 6d: 0110 0100 0110 1101 xxxx xxxx + {NEI, "MKH,%b" }, // 6e: 0110 0100 0110 1110 xxxx xxxx + {NEI, "MKL,%b" }, // 6f: 0110 0100 0110 1111 xxxx xxxx - {SBI,"PA,%b" }, /* 70: 0110 0100 0111 0000 xxxx xxxx */ - {SBI,"PB,%b" }, /* 71: 0110 0100 0111 0001 xxxx xxxx */ - {SBI,"PC,%b" }, /* 72: 0110 0100 0111 0010 xxxx xxxx */ - {SBI,"PD,%b" }, /* 73: 0110 0100 0111 0011 xxxx xxxx */ - {illegal,nullptr }, /* 74: 0110 0100 0111 0100 xxxx xxxx */ - {SBI,"PF,%b" }, /* 75: 0110 0100 0111 0101 xxxx xxxx */ - {SBI,"MKH,%b" }, /* 76: 0110 0100 0111 0110 xxxx xxxx */ - {SBI,"MKL,%b" }, /* 77: 0110 0100 0111 0111 xxxx xxxx */ - {EQI,"PA,%b" }, /* 78: 0110 0100 0111 1000 xxxx xxxx */ - {EQI,"PB,%b" }, /* 79: 0110 0100 0111 1001 xxxx xxxx */ - {EQI,"PC,%b" }, /* 7a: 0110 0100 0111 1010 xxxx xxxx */ - {EQI,"PD,%b" }, /* 7b: 0110 0100 0111 1011 xxxx xxxx */ - {illegal,nullptr }, /* 7c: 0110 0100 0111 1100 xxxx xxxx */ - {EQI,"PF,%b" }, /* 7d: 0110 0100 0111 1101 xxxx xxxx */ - {EQI,"MKH,%b" }, /* 7e: 0110 0100 0111 1110 xxxx xxxx */ - {EQI,"MKL,%b" }, /* 7f: 0110 0100 0111 1111 xxxx xxxx */ + {SBI, "PA,%b" }, // 70: 0110 0100 0111 0000 xxxx xxxx + {SBI, "PB,%b" }, // 71: 0110 0100 0111 0001 xxxx xxxx + {SBI, "PC,%b" }, // 72: 0110 0100 0111 0010 xxxx xxxx + {SBI, "PD,%b" }, // 73: 0110 0100 0111 0011 xxxx xxxx + { }, // 74: 0110 0100 0111 0100 xxxx xxxx + {SBI, "PF,%b" }, // 75: 0110 0100 0111 0101 xxxx xxxx + {SBI, "MKH,%b" }, // 76: 0110 0100 0111 0110 xxxx xxxx + {SBI, "MKL,%b" }, // 77: 0110 0100 0111 0111 xxxx xxxx + {EQI, "PA,%b" }, // 78: 0110 0100 0111 1000 xxxx xxxx + {EQI, "PB,%b" }, // 79: 0110 0100 0111 1001 xxxx xxxx + {EQI, "PC,%b" }, // 7a: 0110 0100 0111 1010 xxxx xxxx + {EQI, "PD,%b" }, // 7b: 0110 0100 0111 1011 xxxx xxxx + { }, // 7c: 0110 0100 0111 1100 xxxx xxxx + {EQI, "PF,%b" }, // 7d: 0110 0100 0111 1101 xxxx xxxx + {EQI, "MKH,%b" }, // 7e: 0110 0100 0111 1110 xxxx xxxx + {EQI, "MKL,%b" }, // 7f: 0110 0100 0111 1111 xxxx xxxx - {MVI,"ANM,%b" }, /* 80: 0110 0100 1000 0000 xxxx xxxx */ /* 7810 */ - {MVI,"SMH,%b" }, /* 81: 0110 0100 1000 0001 xxxx xxxx */ - {illegal,nullptr }, /* 82: 0110 0100 1000 0010 xxxx xxxx */ - {MVI,"EOM,%b" }, /* 83: 0110 0100 1000 0011 xxxx xxxx */ - {illegal,nullptr }, /* 84: 0110 0100 1000 0100 xxxx xxxx */ - {MVI,"TMM,%b" }, /* 85: 0110 0100 1000 0101 xxxx xxxx */ - {illegal,nullptr }, /* 86: 0110 0100 1000 0110 xxxx xxxx */ - {illegal,nullptr }, /* 87: 0110 0100 1000 0111 xxxx xxxx */ - {ANI,"ANM,%b" }, /* 88: 0110 0100 1000 1000 xxxx xxxx */ /* 7810 */ - {ANI,"SMH,%b" }, /* 89: 0110 0100 1000 1001 xxxx xxxx */ - {illegal,nullptr }, /* 8a: 0110 0100 1000 1010 xxxx xxxx */ - {ANI,"EOM,%b" }, /* 8b: 0110 0100 1000 1011 xxxx xxxx */ - {illegal,nullptr }, /* 8c: 0110 0100 1000 1100 xxxx xxxx */ - {ANI,"TMM,%b" }, /* 8d: 0110 0100 1000 1101 xxxx xxxx */ - {illegal,nullptr }, /* 8e: 0110 0100 1000 1110 xxxx xxxx */ - {illegal,nullptr }, /* 8f: 0110 0100 1000 1111 xxxx xxxx */ + {MVI, "ANM,%b" }, // 80: 0110 0100 1000 0000 xxxx xxxx 7810 + {MVI, "SMH,%b" }, // 81: 0110 0100 1000 0001 xxxx xxxx + { }, // 82: 0110 0100 1000 0010 xxxx xxxx + {MVI, "EOM,%b" }, // 83: 0110 0100 1000 0011 xxxx xxxx + { }, // 84: 0110 0100 1000 0100 xxxx xxxx + {MVI, "TMM,%b" }, // 85: 0110 0100 1000 0101 xxxx xxxx + { }, // 86: 0110 0100 1000 0110 xxxx xxxx + { }, // 87: 0110 0100 1000 0111 xxxx xxxx + {ANI, "ANM,%b" }, // 88: 0110 0100 1000 1000 xxxx xxxx 7810 + {ANI, "SMH,%b" }, // 89: 0110 0100 1000 1001 xxxx xxxx + { }, // 8a: 0110 0100 1000 1010 xxxx xxxx + {ANI, "EOM,%b" }, // 8b: 0110 0100 1000 1011 xxxx xxxx + { }, // 8c: 0110 0100 1000 1100 xxxx xxxx + {ANI, "TMM,%b" }, // 8d: 0110 0100 1000 1101 xxxx xxxx + { }, // 8e: 0110 0100 1000 1110 xxxx xxxx + { }, // 8f: 0110 0100 1000 1111 xxxx xxxx - {XRI,"ANM,%b" }, /* 90: 0110 0100 1001 0000 xxxx xxxx */ /* 7810 */ - {XRI,"SMH,%b" }, /* 91: 0110 0100 1001 0001 xxxx xxxx */ - {illegal,nullptr }, /* 92: 0110 0100 1001 0010 xxxx xxxx */ - {XRI,"EOM,%b" }, /* 93: 0110 0100 1001 0011 xxxx xxxx */ - {illegal,nullptr }, /* 94: 0110 0100 1001 0100 xxxx xxxx */ - {XRI,"TMM,%b" }, /* 95: 0110 0100 1001 0101 xxxx xxxx */ - {illegal,nullptr }, /* 96: 0110 0100 1001 0110 xxxx xxxx */ - {illegal,nullptr }, /* 97: 0110 0100 1001 0111 xxxx xxxx */ - {ORI,"ANM,%b" }, /* 98: 0110 0100 1001 1000 xxxx xxxx */ /* 7810 */ - {ORI,"SMH,%b" }, /* 99: 0110 0100 1001 1001 xxxx xxxx */ - {illegal,nullptr }, /* 9a: 0110 0100 1001 1010 xxxx xxxx */ - {ORI,"EOM,%b" }, /* 9b: 0110 0100 1001 1011 xxxx xxxx */ - {illegal,nullptr }, /* 9c: 0110 0100 1001 1100 xxxx xxxx */ - {ORI,"TMM,%b" }, /* 9d: 0110 0100 1001 1101 xxxx xxxx */ - {illegal,nullptr }, /* 9e: 0110 0100 1001 1110 xxxx xxxx */ - {illegal,nullptr }, /* 9f: 0110 0100 1001 1111 xxxx xxxx */ + {XRI, "ANM,%b" }, // 90: 0110 0100 1001 0000 xxxx xxxx 7810 + {XRI, "SMH,%b" }, // 91: 0110 0100 1001 0001 xxxx xxxx + { }, // 92: 0110 0100 1001 0010 xxxx xxxx + {XRI, "EOM,%b" }, // 93: 0110 0100 1001 0011 xxxx xxxx + { }, // 94: 0110 0100 1001 0100 xxxx xxxx + {XRI, "TMM,%b" }, // 95: 0110 0100 1001 0101 xxxx xxxx + { }, // 96: 0110 0100 1001 0110 xxxx xxxx + { }, // 97: 0110 0100 1001 0111 xxxx xxxx + {ORI, "ANM,%b" }, // 98: 0110 0100 1001 1000 xxxx xxxx 7810 + {ORI, "SMH,%b" }, // 99: 0110 0100 1001 1001 xxxx xxxx + { }, // 9a: 0110 0100 1001 1010 xxxx xxxx + {ORI, "EOM,%b" }, // 9b: 0110 0100 1001 1011 xxxx xxxx + { }, // 9c: 0110 0100 1001 1100 xxxx xxxx + {ORI, "TMM,%b" }, // 9d: 0110 0100 1001 1101 xxxx xxxx + { }, // 9e: 0110 0100 1001 1110 xxxx xxxx + { }, // 9f: 0110 0100 1001 1111 xxxx xxxx - {ADINC,"ANM,%b" }, /* a0: 0110 0100 1010 0000 xxxx xxxx */ /* 7810 */ - {ADINC,"SMH,%b" }, /* a1: 0110 0100 1010 0001 xxxx xxxx */ - {illegal,nullptr }, /* a2: 0110 0100 1010 0010 xxxx xxxx */ - {ADINC,"EOM,%b" }, /* a3: 0110 0100 1010 0011 xxxx xxxx */ - {illegal,nullptr }, /* a4: 0110 0100 1010 0100 xxxx xxxx */ - {ADINC,"TMM,%b" }, /* a5: 0110 0100 1010 0101 xxxx xxxx */ - {illegal,nullptr }, /* a6: 0110 0100 1010 0110 xxxx xxxx */ - {illegal,nullptr }, /* a7: 0110 0100 1010 0111 xxxx xxxx */ - {GTI,"ANM,%b" }, /* a8: 0110 0100 1010 1000 xxxx xxxx */ /* 7810 */ - {GTI,"SMH,%b" }, /* a9: 0110 0100 1010 1001 xxxx xxxx */ - {illegal,nullptr }, /* aa: 0110 0100 1010 1010 xxxx xxxx */ - {GTI,"EOM,%b" }, /* ab: 0110 0100 1010 1011 xxxx xxxx */ - {illegal,nullptr }, /* ac: 0110 0100 1010 1100 xxxx xxxx */ - {GTI,"TMM,%b" }, /* ad: 0110 0100 1010 1101 xxxx xxxx */ - {illegal,nullptr }, /* ae: 0110 0100 1010 1110 xxxx xxxx */ - {illegal,nullptr }, /* af: 0110 0100 1010 1111 xxxx xxxx */ + {ADINC, "ANM,%b" }, // a0: 0110 0100 1010 0000 xxxx xxxx 7810 + {ADINC, "SMH,%b" }, // a1: 0110 0100 1010 0001 xxxx xxxx + { }, // a2: 0110 0100 1010 0010 xxxx xxxx + {ADINC, "EOM,%b" }, // a3: 0110 0100 1010 0011 xxxx xxxx + { }, // a4: 0110 0100 1010 0100 xxxx xxxx + {ADINC, "TMM,%b" }, // a5: 0110 0100 1010 0101 xxxx xxxx + { }, // a6: 0110 0100 1010 0110 xxxx xxxx + { }, // a7: 0110 0100 1010 0111 xxxx xxxx + {GTI, "ANM,%b" }, // a8: 0110 0100 1010 1000 xxxx xxxx 7810 + {GTI, "SMH,%b" }, // a9: 0110 0100 1010 1001 xxxx xxxx + { }, // aa: 0110 0100 1010 1010 xxxx xxxx + {GTI, "EOM,%b" }, // ab: 0110 0100 1010 1011 xxxx xxxx + { }, // ac: 0110 0100 1010 1100 xxxx xxxx + {GTI, "TMM,%b" }, // ad: 0110 0100 1010 1101 xxxx xxxx + { }, // ae: 0110 0100 1010 1110 xxxx xxxx + { }, // af: 0110 0100 1010 1111 xxxx xxxx - {SUINB,"ANM,%b" }, /* b0: 0110 0100 1011 0000 xxxx xxxx */ /* 7810 */ - {SUINB,"SMH,%b" }, /* b1: 0110 0100 1011 0001 xxxx xxxx */ - {illegal,nullptr }, /* b2: 0110 0100 1011 0010 xxxx xxxx */ - {SUINB,"EOM,%b" }, /* b3: 0110 0100 1011 0011 xxxx xxxx */ - {illegal,nullptr }, /* b4: 0110 0100 1011 0100 xxxx xxxx */ - {SUINB,"TMM,%b" }, /* b5: 0110 0100 1011 0101 xxxx xxxx */ - {illegal,nullptr }, /* b6: 0110 0100 1011 0110 xxxx xxxx */ - {illegal,nullptr }, /* b7: 0110 0100 1011 0111 xxxx xxxx */ - {LTI,"ANM,%b" }, /* b8: 0110 0100 1011 1000 xxxx xxxx */ /* 7810 */ - {LTI,"SMH,%b" }, /* b9: 0110 0100 1011 1001 xxxx xxxx */ - {illegal,nullptr }, /* ba: 0110 0100 1011 1010 xxxx xxxx */ - {LTI,"EOM,%b" }, /* bb: 0110 0100 1011 1011 xxxx xxxx */ - {illegal,nullptr }, /* bc: 0110 0100 1011 1100 xxxx xxxx */ - {LTI,"TMM,%b" }, /* bd: 0110 0100 1011 1101 xxxx xxxx */ - {illegal,nullptr }, /* be: 0110 0100 1011 1110 xxxx xxxx */ - {illegal,nullptr }, /* bf: 0110 0100 1011 1111 xxxx xxxx */ + {SUINB, "ANM,%b" }, // b0: 0110 0100 1011 0000 xxxx xxxx 7810 + {SUINB, "SMH,%b" }, // b1: 0110 0100 1011 0001 xxxx xxxx + { }, // b2: 0110 0100 1011 0010 xxxx xxxx + {SUINB, "EOM,%b" }, // b3: 0110 0100 1011 0011 xxxx xxxx + { }, // b4: 0110 0100 1011 0100 xxxx xxxx + {SUINB, "TMM,%b" }, // b5: 0110 0100 1011 0101 xxxx xxxx + { }, // b6: 0110 0100 1011 0110 xxxx xxxx + { }, // b7: 0110 0100 1011 0111 xxxx xxxx + {LTI, "ANM,%b" }, // b8: 0110 0100 1011 1000 xxxx xxxx 7810 + {LTI, "SMH,%b" }, // b9: 0110 0100 1011 1001 xxxx xxxx + { }, // ba: 0110 0100 1011 1010 xxxx xxxx + {LTI, "EOM,%b" }, // bb: 0110 0100 1011 1011 xxxx xxxx + { }, // bc: 0110 0100 1011 1100 xxxx xxxx + {LTI, "TMM,%b" }, // bd: 0110 0100 1011 1101 xxxx xxxx + { }, // be: 0110 0100 1011 1110 xxxx xxxx + { }, // bf: 0110 0100 1011 1111 xxxx xxxx - {ADI,"ANM,%b" }, /* c0: 0110 0100 1100 0000 xxxx xxxx */ /* 7810 */ - {ADI,"SMH,%b" }, /* c1: 0110 0100 1100 0001 xxxx xxxx */ - {illegal,nullptr }, /* c2: 0110 0100 1100 0010 xxxx xxxx */ - {ADI,"EOM,%b" }, /* c3: 0110 0100 1100 0011 xxxx xxxx */ - {illegal,nullptr }, /* c4: 0110 0100 1100 0100 xxxx xxxx */ - {ADI,"TMM,%b" }, /* c5: 0110 0100 1100 0101 xxxx xxxx */ - {illegal,nullptr }, /* c6: 0110 0100 1100 0110 xxxx xxxx */ - {illegal,nullptr }, /* c7: 0110 0100 1100 0111 xxxx xxxx */ - {ONI,"ANM,%b" }, /* c8: 0110 0100 1100 1000 xxxx xxxx */ /* 7810 */ - {ONI,"SMH,%b" }, /* c9: 0110 0100 1100 1001 xxxx xxxx */ - {illegal,nullptr }, /* ca: 0110 0100 1100 1010 xxxx xxxx */ - {ONI,"EOM,%b" }, /* cb: 0110 0100 1100 1011 xxxx xxxx */ - {illegal,nullptr }, /* cc: 0110 0100 1100 1100 xxxx xxxx */ - {ONI,"TMM,%b" }, /* cd: 0110 0100 1100 1101 xxxx xxxx */ - {illegal,nullptr }, /* ce: 0110 0100 1100 1110 xxxx xxxx */ - {illegal,nullptr }, /* cf: 0110 0100 1100 1111 xxxx xxxx */ + {ADI, "ANM,%b" }, // c0: 0110 0100 1100 0000 xxxx xxxx 7810 + {ADI, "SMH,%b" }, // c1: 0110 0100 1100 0001 xxxx xxxx + { }, // c2: 0110 0100 1100 0010 xxxx xxxx + {ADI, "EOM,%b" }, // c3: 0110 0100 1100 0011 xxxx xxxx + { }, // c4: 0110 0100 1100 0100 xxxx xxxx + {ADI, "TMM,%b" }, // c5: 0110 0100 1100 0101 xxxx xxxx + { }, // c6: 0110 0100 1100 0110 xxxx xxxx + { }, // c7: 0110 0100 1100 0111 xxxx xxxx + {ONI, "ANM,%b" }, // c8: 0110 0100 1100 1000 xxxx xxxx 7810 + {ONI, "SMH,%b" }, // c9: 0110 0100 1100 1001 xxxx xxxx + { }, // ca: 0110 0100 1100 1010 xxxx xxxx + {ONI, "EOM,%b" }, // cb: 0110 0100 1100 1011 xxxx xxxx + { }, // cc: 0110 0100 1100 1100 xxxx xxxx + {ONI, "TMM,%b" }, // cd: 0110 0100 1100 1101 xxxx xxxx + { }, // ce: 0110 0100 1100 1110 xxxx xxxx + { }, // cf: 0110 0100 1100 1111 xxxx xxxx - {ACI,"ANM,%b" }, /* d0: 0110 0100 1101 0000 xxxx xxxx */ /* 7810 */ - {ACI,"SMH,%b" }, /* d1: 0110 0100 1101 0001 xxxx xxxx */ - {illegal,nullptr }, /* d2: 0110 0100 1101 0010 xxxx xxxx */ - {ACI,"EOM,%b" }, /* d3: 0110 0100 1101 0011 xxxx xxxx */ - {illegal,nullptr }, /* d4: 0110 0100 1101 0100 xxxx xxxx */ - {ACI,"TMM,%b" }, /* d5: 0110 0100 1101 0101 xxxx xxxx */ - {illegal,nullptr }, /* d6: 0110 0100 1101 0110 xxxx xxxx */ - {illegal,nullptr }, /* d7: 0110 0100 1101 0111 xxxx xxxx */ - {OFFI,"ANM,%b" }, /* d8: 0110 0100 1101 1000 xxxx xxxx */ /* 7810 */ - {OFFI,"SMH,%b" }, /* d9: 0110 0100 1101 1001 xxxx xxxx */ - {illegal,nullptr }, /* da: 0110 0100 1101 1010 xxxx xxxx */ - {OFFI,"EOM,%b" }, /* db: 0110 0100 1101 1011 xxxx xxxx */ - {illegal,nullptr }, /* dc: 0110 0100 1101 1100 xxxx xxxx */ - {OFFI,"TMM,%b" }, /* dd: 0110 0100 1101 1101 xxxx xxxx */ - {illegal,nullptr }, /* de: 0110 0100 1101 1110 xxxx xxxx */ - {illegal,nullptr }, /* df: 0110 0100 1101 1111 xxxx xxxx */ + {ACI, "ANM,%b" }, // d0: 0110 0100 1101 0000 xxxx xxxx 7810 + {ACI, "SMH,%b" }, // d1: 0110 0100 1101 0001 xxxx xxxx + { }, // d2: 0110 0100 1101 0010 xxxx xxxx + {ACI, "EOM,%b" }, // d3: 0110 0100 1101 0011 xxxx xxxx + { }, // d4: 0110 0100 1101 0100 xxxx xxxx + {ACI, "TMM,%b" }, // d5: 0110 0100 1101 0101 xxxx xxxx + { }, // d6: 0110 0100 1101 0110 xxxx xxxx + { }, // d7: 0110 0100 1101 0111 xxxx xxxx + {OFFI, "ANM,%b" }, // d8: 0110 0100 1101 1000 xxxx xxxx 7810 + {OFFI, "SMH,%b" }, // d9: 0110 0100 1101 1001 xxxx xxxx + { }, // da: 0110 0100 1101 1010 xxxx xxxx + {OFFI, "EOM,%b" }, // db: 0110 0100 1101 1011 xxxx xxxx + { }, // dc: 0110 0100 1101 1100 xxxx xxxx + {OFFI, "TMM,%b" }, // dd: 0110 0100 1101 1101 xxxx xxxx + { }, // de: 0110 0100 1101 1110 xxxx xxxx + { }, // df: 0110 0100 1101 1111 xxxx xxxx - {SUI,"ANM,%b" }, /* e0: 0110 0100 1110 0000 xxxx xxxx */ /* 7810 */ - {SUI,"SMH,%b" }, /* e1: 0110 0100 1110 0001 xxxx xxxx */ - {illegal,nullptr }, /* e2: 0110 0100 1110 0010 xxxx xxxx */ - {SUI,"EOM,%b" }, /* e3: 0110 0100 1110 0011 xxxx xxxx */ - {illegal,nullptr }, /* e4: 0110 0100 1110 0100 xxxx xxxx */ - {SUI,"TMM,%b" }, /* e5: 0110 0100 1110 0101 xxxx xxxx */ - {illegal,nullptr }, /* e6: 0110 0100 1110 0110 xxxx xxxx */ - {illegal,nullptr }, /* e7: 0110 0100 1110 0111 xxxx xxxx */ - {NEI,"ANM,%b" }, /* e8: 0110 0100 1110 1000 xxxx xxxx */ /* 7810 */ - {NEI,"SMH,%b" }, /* e9: 0110 0100 1110 1001 xxxx xxxx */ - {illegal,nullptr }, /* ea: 0110 0100 1110 1010 xxxx xxxx */ - {NEI,"EOM,%b" }, /* eb: 0110 0100 1110 1011 xxxx xxxx */ - {illegal,nullptr }, /* ec: 0110 0100 1110 1100 xxxx xxxx */ - {NEI,"TMM,%b" }, /* ed: 0110 0100 1110 1101 xxxx xxxx */ - {illegal,nullptr }, /* ee: 0110 0100 1110 1110 xxxx xxxx */ - {illegal,nullptr }, /* ef: 0110 0100 1110 1111 xxxx xxxx */ + {SUI, "ANM,%b" }, // e0: 0110 0100 1110 0000 xxxx xxxx 7810 + {SUI, "SMH,%b" }, // e1: 0110 0100 1110 0001 xxxx xxxx + { }, // e2: 0110 0100 1110 0010 xxxx xxxx + {SUI, "EOM,%b" }, // e3: 0110 0100 1110 0011 xxxx xxxx + { }, // e4: 0110 0100 1110 0100 xxxx xxxx + {SUI, "TMM,%b" }, // e5: 0110 0100 1110 0101 xxxx xxxx + { }, // e6: 0110 0100 1110 0110 xxxx xxxx + { }, // e7: 0110 0100 1110 0111 xxxx xxxx + {NEI, "ANM,%b" }, // e8: 0110 0100 1110 1000 xxxx xxxx 7810 + {NEI, "SMH,%b" }, // e9: 0110 0100 1110 1001 xxxx xxxx + { }, // ea: 0110 0100 1110 1010 xxxx xxxx + {NEI, "EOM,%b" }, // eb: 0110 0100 1110 1011 xxxx xxxx + { }, // ec: 0110 0100 1110 1100 xxxx xxxx + {NEI, "TMM,%b" }, // ed: 0110 0100 1110 1101 xxxx xxxx + { }, // ee: 0110 0100 1110 1110 xxxx xxxx + { }, // ef: 0110 0100 1110 1111 xxxx xxxx - {SBI,"ANM,%b" }, /* f0: 0110 0100 1111 0000 xxxx xxxx */ /* 7810 */ - {SBI,"SMH,%b" }, /* f1: 0110 0100 1111 0001 xxxx xxxx */ - {illegal,nullptr }, /* f2: 0110 0100 1111 0010 xxxx xxxx */ - {SBI,"EOM,%b" }, /* f3: 0110 0100 1111 0011 xxxx xxxx */ - {illegal,nullptr }, /* f4: 0110 0100 1111 0100 xxxx xxxx */ - {SBI,"TMM,%b" }, /* f5: 0110 0100 1111 0101 xxxx xxxx */ - {illegal,nullptr }, /* f6: 0110 0100 1111 0110 xxxx xxxx */ - {illegal,nullptr }, /* f7: 0110 0100 1111 0111 xxxx xxxx */ - {EQI,"ANM,%b" }, /* f8: 0110 0100 1111 1000 xxxx xxxx */ /* 7810 */ - {EQI,"SMH,%b" }, /* f9: 0110 0100 1111 1001 xxxx xxxx */ - {illegal,nullptr }, /* fa: 0110 0100 1111 1010 xxxx xxxx */ - {EQI,"EOM,%b" }, /* fb: 0110 0100 1111 1011 xxxx xxxx */ - {illegal,nullptr }, /* fc: 0110 0100 1111 1100 xxxx xxxx */ - {EQI,"TMM,%b" }, /* fd: 0110 0100 1111 1101 xxxx xxxx */ - {illegal,nullptr }, /* fe: 0110 0100 1111 1110 xxxx xxxx */ - {illegal,nullptr } /* ff: 0110 0100 1111 1111 xxxx xxxx */ + {SBI, "ANM,%b" }, // f0: 0110 0100 1111 0000 xxxx xxxx 7810 + {SBI, "SMH,%b" }, // f1: 0110 0100 1111 0001 xxxx xxxx + { }, // f2: 0110 0100 1111 0010 xxxx xxxx + {SBI, "EOM,%b" }, // f3: 0110 0100 1111 0011 xxxx xxxx + { }, // f4: 0110 0100 1111 0100 xxxx xxxx + {SBI, "TMM,%b" }, // f5: 0110 0100 1111 0101 xxxx xxxx + { }, // f6: 0110 0100 1111 0110 xxxx xxxx + { }, // f7: 0110 0100 1111 0111 xxxx xxxx + {EQI, "ANM,%b" }, // f8: 0110 0100 1111 1000 xxxx xxxx 7810 + {EQI, "SMH,%b" }, // f9: 0110 0100 1111 1001 xxxx xxxx + { }, // fa: 0110 0100 1111 1010 xxxx xxxx + {EQI, "EOM,%b" }, // fb: 0110 0100 1111 1011 xxxx xxxx + { }, // fc: 0110 0100 1111 1100 xxxx xxxx + {EQI, "TMM,%b" }, // fd: 0110 0100 1111 1101 xxxx xxxx + { }, // fe: 0110 0100 1111 1110 xxxx xxxx + { } // ff: 0110 0100 1111 1111 xxxx xxxx }; -static const struct dasm_s dasm64_7807[256] = +const dasm_s dasm_s::d64_7807[256] = { - {MVI,"PA,%b" }, /* 00: 0110 0100 0000 0000 xxxx xxxx */ - {MVI,"PB,%b" }, /* 01: 0110 0100 0000 0001 xxxx xxxx */ - {MVI,"PC,%b" }, /* 02: 0110 0100 0000 0010 xxxx xxxx */ - {MVI,"PD,%b" }, /* 03: 0110 0100 0000 0011 xxxx xxxx */ - {illegal,nullptr }, /* 04: 0110 0100 0000 0100 xxxx xxxx */ - {MVI,"PF,%b" }, /* 05: 0110 0100 0000 0101 xxxx xxxx */ - {MVI,"MKH,%b" }, /* 06: 0110 0100 0000 0110 xxxx xxxx */ - {MVI,"MKL,%b" }, /* 07: 0110 0100 0000 0111 xxxx xxxx */ - {ANI,"PA,%b" }, /* 08: 0110 0100 0000 1000 xxxx xxxx */ - {ANI,"PB,%b" }, /* 09: 0110 0100 0000 1001 xxxx xxxx */ - {ANI,"PC,%b" }, /* 0a: 0110 0100 0000 1010 xxxx xxxx */ - {ANI,"PD,%b" }, /* 0b: 0110 0100 0000 1011 xxxx xxxx */ - {illegal,nullptr }, /* 0c: 0110 0100 0000 1100 xxxx xxxx */ - {ANI,"PF,%b" }, /* 0d: 0110 0100 0000 1101 xxxx xxxx */ - {ANI,"MKH,%b" }, /* 0e: 0110 0100 0000 1110 xxxx xxxx */ - {ANI,"MKL,%b" }, /* 0f: 0110 0100 0000 1111 xxxx xxxx */ + {MVI, "PA,%b" }, // 00: 0110 0100 0000 0000 xxxx xxxx + {MVI, "PB,%b" }, // 01: 0110 0100 0000 0001 xxxx xxxx + {MVI, "PC,%b" }, // 02: 0110 0100 0000 0010 xxxx xxxx + {MVI, "PD,%b" }, // 03: 0110 0100 0000 0011 xxxx xxxx + { }, // 04: 0110 0100 0000 0100 xxxx xxxx + {MVI, "PF,%b" }, // 05: 0110 0100 0000 0101 xxxx xxxx + {MVI, "MKH,%b" }, // 06: 0110 0100 0000 0110 xxxx xxxx + {MVI, "MKL,%b" }, // 07: 0110 0100 0000 0111 xxxx xxxx + {ANI, "PA,%b" }, // 08: 0110 0100 0000 1000 xxxx xxxx + {ANI, "PB,%b" }, // 09: 0110 0100 0000 1001 xxxx xxxx + {ANI, "PC,%b" }, // 0a: 0110 0100 0000 1010 xxxx xxxx + {ANI, "PD,%b" }, // 0b: 0110 0100 0000 1011 xxxx xxxx + { }, // 0c: 0110 0100 0000 1100 xxxx xxxx + {ANI, "PF,%b" }, // 0d: 0110 0100 0000 1101 xxxx xxxx + {ANI, "MKH,%b" }, // 0e: 0110 0100 0000 1110 xxxx xxxx + {ANI, "MKL,%b" }, // 0f: 0110 0100 0000 1111 xxxx xxxx - {XRI,"PA,%b" }, /* 10: 0110 0100 0001 0000 xxxx xxxx */ - {XRI,"PB,%b" }, /* 11: 0110 0100 0001 0001 xxxx xxxx */ - {XRI,"PC,%b" }, /* 12: 0110 0100 0001 0010 xxxx xxxx */ - {XRI,"PD,%b" }, /* 13: 0110 0100 0001 0011 xxxx xxxx */ - {illegal,nullptr }, /* 14: 0110 0100 0001 0100 xxxx xxxx */ - {XRI,"PF,%b" }, /* 15: 0110 0100 0001 0101 xxxx xxxx */ - {XRI,"MKH,%b" }, /* 16: 0110 0100 0001 0110 xxxx xxxx */ - {XRI,"MKL,%b" }, /* 17: 0110 0100 0001 0111 xxxx xxxx */ - {ORI,"PA,%b" }, /* 18: 0110 0100 0001 1000 xxxx xxxx */ - {ORI,"PB,%b" }, /* 19: 0110 0100 0001 1001 xxxx xxxx */ - {ORI,"PC,%b" }, /* 1a: 0110 0100 0001 1010 xxxx xxxx */ - {ORI,"PD,%b" }, /* 1b: 0110 0100 0001 1011 xxxx xxxx */ - {illegal,nullptr }, /* 1c: 0110 0100 0001 1100 xxxx xxxx */ - {ORI,"PF,%b" }, /* 1d: 0110 0100 0001 1101 xxxx xxxx */ - {ORI,"MKH,%b" }, /* 1e: 0110 0100 0001 1110 xxxx xxxx */ - {ORI,"MKL,%b" }, /* 1f: 0110 0100 0001 1111 xxxx xxxx */ + {XRI, "PA,%b" }, // 10: 0110 0100 0001 0000 xxxx xxxx + {XRI, "PB,%b" }, // 11: 0110 0100 0001 0001 xxxx xxxx + {XRI, "PC,%b" }, // 12: 0110 0100 0001 0010 xxxx xxxx + {XRI, "PD,%b" }, // 13: 0110 0100 0001 0011 xxxx xxxx + { }, // 14: 0110 0100 0001 0100 xxxx xxxx + {XRI, "PF,%b" }, // 15: 0110 0100 0001 0101 xxxx xxxx + {XRI, "MKH,%b" }, // 16: 0110 0100 0001 0110 xxxx xxxx + {XRI, "MKL,%b" }, // 17: 0110 0100 0001 0111 xxxx xxxx + {ORI, "PA,%b" }, // 18: 0110 0100 0001 1000 xxxx xxxx + {ORI, "PB,%b" }, // 19: 0110 0100 0001 1001 xxxx xxxx + {ORI, "PC,%b" }, // 1a: 0110 0100 0001 1010 xxxx xxxx + {ORI, "PD,%b" }, // 1b: 0110 0100 0001 1011 xxxx xxxx + { }, // 1c: 0110 0100 0001 1100 xxxx xxxx + {ORI, "PF,%b" }, // 1d: 0110 0100 0001 1101 xxxx xxxx + {ORI, "MKH,%b" }, // 1e: 0110 0100 0001 1110 xxxx xxxx + {ORI, "MKL,%b" }, // 1f: 0110 0100 0001 1111 xxxx xxxx - {ADINC,"PA,%b" }, /* 20: 0110 0100 0010 0000 xxxx xxxx */ - {ADINC,"PB,%b" }, /* 21: 0110 0100 0010 0001 xxxx xxxx */ - {ADINC,"PC,%b" }, /* 22: 0110 0100 0010 0010 xxxx xxxx */ - {ADINC,"PD,%b" }, /* 23: 0110 0100 0010 0011 xxxx xxxx */ - {illegal,nullptr }, /* 24: 0110 0100 0010 0100 xxxx xxxx */ - {ADINC,"PF,%b" }, /* 25: 0110 0100 0010 0101 xxxx xxxx */ - {ADINC,"MKH,%b" }, /* 26: 0110 0100 0010 0110 xxxx xxxx */ - {ADINC,"MKL,%b" }, /* 27: 0110 0100 0010 0111 xxxx xxxx */ - {GTI,"PA,%b" }, /* 28: 0110 0100 0010 1000 xxxx xxxx */ - {GTI,"PB,%b" }, /* 29: 0110 0100 0010 1001 xxxx xxxx */ - {GTI,"PC,%b" }, /* 2a: 0110 0100 0010 1010 xxxx xxxx */ - {GTI,"PD,%b" }, /* 2b: 0110 0100 0010 1011 xxxx xxxx */ - {illegal,nullptr }, /* 2c: 0110 0100 0010 1100 xxxx xxxx */ - {GTI,"PF,%b" }, /* 2d: 0110 0100 0010 1101 xxxx xxxx */ - {GTI,"MKH,%b" }, /* 2e: 0110 0100 0010 1110 xxxx xxxx */ - {GTI,"MKL,%b" }, /* 2f: 0110 0100 0010 1111 xxxx xxxx */ + {ADINC, "PA,%b" }, // 20: 0110 0100 0010 0000 xxxx xxxx + {ADINC, "PB,%b" }, // 21: 0110 0100 0010 0001 xxxx xxxx + {ADINC, "PC,%b" }, // 22: 0110 0100 0010 0010 xxxx xxxx + {ADINC, "PD,%b" }, // 23: 0110 0100 0010 0011 xxxx xxxx + { }, // 24: 0110 0100 0010 0100 xxxx xxxx + {ADINC, "PF,%b" }, // 25: 0110 0100 0010 0101 xxxx xxxx + {ADINC, "MKH,%b" }, // 26: 0110 0100 0010 0110 xxxx xxxx + {ADINC, "MKL,%b" }, // 27: 0110 0100 0010 0111 xxxx xxxx + {GTI, "PA,%b" }, // 28: 0110 0100 0010 1000 xxxx xxxx + {GTI, "PB,%b" }, // 29: 0110 0100 0010 1001 xxxx xxxx + {GTI, "PC,%b" }, // 2a: 0110 0100 0010 1010 xxxx xxxx + {GTI, "PD,%b" }, // 2b: 0110 0100 0010 1011 xxxx xxxx + { }, // 2c: 0110 0100 0010 1100 xxxx xxxx + {GTI, "PF,%b" }, // 2d: 0110 0100 0010 1101 xxxx xxxx + {GTI, "MKH,%b" }, // 2e: 0110 0100 0010 1110 xxxx xxxx + {GTI, "MKL,%b" }, // 2f: 0110 0100 0010 1111 xxxx xxxx - {SUINB,"PA,%b" }, /* 30: 0110 0100 0011 0000 xxxx xxxx */ - {SUINB,"PB,%b" }, /* 31: 0110 0100 0011 0001 xxxx xxxx */ - {SUINB,"PC,%b" }, /* 32: 0110 0100 0011 0010 xxxx xxxx */ - {SUINB,"PD,%b" }, /* 33: 0110 0100 0011 0011 xxxx xxxx */ - {illegal,nullptr }, /* 34: 0110 0100 0011 0100 xxxx xxxx */ - {SUINB,"PF,%b" }, /* 35: 0110 0100 0011 0101 xxxx xxxx */ - {SUINB,"MKH,%b" }, /* 36: 0110 0100 0011 0110 xxxx xxxx */ - {SUINB,"MKL,%b" }, /* 37: 0110 0100 0011 0111 xxxx xxxx */ - {LTI,"PA,%b" }, /* 38: 0110 0100 0011 1000 xxxx xxxx */ - {LTI,"PB,%b" }, /* 39: 0110 0100 0011 1001 xxxx xxxx */ - {LTI,"PC,%b" }, /* 3a: 0110 0100 0011 1010 xxxx xxxx */ - {LTI,"PD,%b" }, /* 3b: 0110 0100 0011 1011 xxxx xxxx */ - {illegal,nullptr }, /* 3c: 0110 0100 0011 1100 xxxx xxxx */ - {LTI,"PF,%b" }, /* 3d: 0110 0100 0011 1101 xxxx xxxx */ - {LTI,"MKH,%b" }, /* 3e: 0110 0100 0011 1110 xxxx xxxx */ - {LTI,"MKL,%b" }, /* 3f: 0110 0100 0011 1111 xxxx xxxx */ + {SUINB, "PA,%b" }, // 30: 0110 0100 0011 0000 xxxx xxxx + {SUINB, "PB,%b" }, // 31: 0110 0100 0011 0001 xxxx xxxx + {SUINB, "PC,%b" }, // 32: 0110 0100 0011 0010 xxxx xxxx + {SUINB, "PD,%b" }, // 33: 0110 0100 0011 0011 xxxx xxxx + { }, // 34: 0110 0100 0011 0100 xxxx xxxx + {SUINB, "PF,%b" }, // 35: 0110 0100 0011 0101 xxxx xxxx + {SUINB, "MKH,%b" }, // 36: 0110 0100 0011 0110 xxxx xxxx + {SUINB, "MKL,%b" }, // 37: 0110 0100 0011 0111 xxxx xxxx + {LTI, "PA,%b" }, // 38: 0110 0100 0011 1000 xxxx xxxx + {LTI, "PB,%b" }, // 39: 0110 0100 0011 1001 xxxx xxxx + {LTI, "PC,%b" }, // 3a: 0110 0100 0011 1010 xxxx xxxx + {LTI, "PD,%b" }, // 3b: 0110 0100 0011 1011 xxxx xxxx + { }, // 3c: 0110 0100 0011 1100 xxxx xxxx + {LTI, "PF,%b" }, // 3d: 0110 0100 0011 1101 xxxx xxxx + {LTI, "MKH,%b" }, // 3e: 0110 0100 0011 1110 xxxx xxxx + {LTI, "MKL,%b" }, // 3f: 0110 0100 0011 1111 xxxx xxxx - {ADI,"PA,%b" }, /* 40: 0110 0100 0100 0000 xxxx xxxx */ - {ADI,"PB,%b" }, /* 41: 0110 0100 0100 0001 xxxx xxxx */ - {ADI,"PC,%b" }, /* 42: 0110 0100 0100 0010 xxxx xxxx */ - {ADI,"PD,%b" }, /* 43: 0110 0100 0100 0011 xxxx xxxx */ - {illegal,nullptr }, /* 44: 0110 0100 0100 0100 xxxx xxxx */ - {ADI,"PF,%b" }, /* 45: 0110 0100 0100 0101 xxxx xxxx */ - {ADI,"MKH,%b" }, /* 46: 0110 0100 0100 0110 xxxx xxxx */ - {ADI,"MKL,%b" }, /* 47: 0110 0100 0100 0111 xxxx xxxx */ - {ONI,"PA,%b" }, /* 48: 0110 0100 0100 1000 xxxx xxxx */ - {ONI,"PB,%b" }, /* 49: 0110 0100 0100 1001 xxxx xxxx */ - {ONI,"PC,%b" }, /* 4a: 0110 0100 0100 1010 xxxx xxxx */ - {ONI,"PD,%b" }, /* 4b: 0110 0100 0100 1011 xxxx xxxx */ - {illegal,nullptr }, /* 4c: 0110 0100 0100 1100 xxxx xxxx */ - {ONI,"PF,%b" }, /* 4d: 0110 0100 0100 1101 xxxx xxxx */ - {ONI,"MKH,%b" }, /* 4e: 0110 0100 0100 1110 xxxx xxxx */ - {ONI,"MKL,%b" }, /* 4f: 0110 0100 0100 1111 xxxx xxxx */ + {ADI, "PA,%b" }, // 40: 0110 0100 0100 0000 xxxx xxxx + {ADI, "PB,%b" }, // 41: 0110 0100 0100 0001 xxxx xxxx + {ADI, "PC,%b" }, // 42: 0110 0100 0100 0010 xxxx xxxx + {ADI, "PD,%b" }, // 43: 0110 0100 0100 0011 xxxx xxxx + { }, // 44: 0110 0100 0100 0100 xxxx xxxx + {ADI, "PF,%b" }, // 45: 0110 0100 0100 0101 xxxx xxxx + {ADI, "MKH,%b" }, // 46: 0110 0100 0100 0110 xxxx xxxx + {ADI, "MKL,%b" }, // 47: 0110 0100 0100 0111 xxxx xxxx + {ONI, "PA,%b" }, // 48: 0110 0100 0100 1000 xxxx xxxx + {ONI, "PB,%b" }, // 49: 0110 0100 0100 1001 xxxx xxxx + {ONI, "PC,%b" }, // 4a: 0110 0100 0100 1010 xxxx xxxx + {ONI, "PD,%b" }, // 4b: 0110 0100 0100 1011 xxxx xxxx + { }, // 4c: 0110 0100 0100 1100 xxxx xxxx + {ONI, "PF,%b" }, // 4d: 0110 0100 0100 1101 xxxx xxxx + {ONI, "MKH,%b" }, // 4e: 0110 0100 0100 1110 xxxx xxxx + {ONI, "MKL,%b" }, // 4f: 0110 0100 0100 1111 xxxx xxxx - {ACI,"PA,%b" }, /* 50: 0110 0100 0101 0000 xxxx xxxx */ - {ACI,"PB,%b" }, /* 51: 0110 0100 0101 0001 xxxx xxxx */ - {ACI,"PC,%b" }, /* 52: 0110 0100 0101 0010 xxxx xxxx */ - {ACI,"PD,%b" }, /* 53: 0110 0100 0101 0011 xxxx xxxx */ - {illegal,nullptr }, /* 54: 0110 0100 0101 0100 xxxx xxxx */ - {ACI,"PF,%b" }, /* 55: 0110 0100 0101 0101 xxxx xxxx */ - {ACI,"MKH,%b" }, /* 56: 0110 0100 0101 0110 xxxx xxxx */ - {ACI,"MKL,%b" }, /* 57: 0110 0100 0101 0111 xxxx xxxx */ - {OFFI,"PA,%b" }, /* 58: 0110 0100 0101 1000 xxxx xxxx */ - {OFFI,"PB,%b" }, /* 59: 0110 0100 0101 1001 xxxx xxxx */ - {OFFI,"PC,%b" }, /* 5a: 0110 0100 0101 1010 xxxx xxxx */ - {OFFI,"PD,%b" }, /* 5b: 0110 0100 0101 1011 xxxx xxxx */ - {illegal,nullptr }, /* 5c: 0110 0100 0101 1100 xxxx xxxx */ - {OFFI,"PF,%b" }, /* 5d: 0110 0100 0101 1101 xxxx xxxx */ - {OFFI,"MKH,%b" }, /* 5e: 0110 0100 0101 1110 xxxx xxxx */ - {OFFI,"MKL,%b" }, /* 5f: 0110 0100 0101 1111 xxxx xxxx */ + {ACI, "PA,%b" }, // 50: 0110 0100 0101 0000 xxxx xxxx + {ACI, "PB,%b" }, // 51: 0110 0100 0101 0001 xxxx xxxx + {ACI, "PC,%b" }, // 52: 0110 0100 0101 0010 xxxx xxxx + {ACI, "PD,%b" }, // 53: 0110 0100 0101 0011 xxxx xxxx + { }, // 54: 0110 0100 0101 0100 xxxx xxxx + {ACI, "PF,%b" }, // 55: 0110 0100 0101 0101 xxxx xxxx + {ACI, "MKH,%b" }, // 56: 0110 0100 0101 0110 xxxx xxxx + {ACI, "MKL,%b" }, // 57: 0110 0100 0101 0111 xxxx xxxx + {OFFI, "PA,%b" }, // 58: 0110 0100 0101 1000 xxxx xxxx + {OFFI, "PB,%b" }, // 59: 0110 0100 0101 1001 xxxx xxxx + {OFFI, "PC,%b" }, // 5a: 0110 0100 0101 1010 xxxx xxxx + {OFFI, "PD,%b" }, // 5b: 0110 0100 0101 1011 xxxx xxxx + { }, // 5c: 0110 0100 0101 1100 xxxx xxxx + {OFFI, "PF,%b" }, // 5d: 0110 0100 0101 1101 xxxx xxxx + {OFFI, "MKH,%b" }, // 5e: 0110 0100 0101 1110 xxxx xxxx + {OFFI, "MKL,%b" }, // 5f: 0110 0100 0101 1111 xxxx xxxx - {SUI,"PA,%b" }, /* 60: 0110 0100 0110 0000 xxxx xxxx */ - {SUI,"PB,%b" }, /* 61: 0110 0100 0110 0001 xxxx xxxx */ - {SUI,"PC,%b" }, /* 62: 0110 0100 0110 0010 xxxx xxxx */ - {SUI,"PD,%b" }, /* 63: 0110 0100 0110 0011 xxxx xxxx */ - {illegal,nullptr }, /* 64: 0110 0100 0110 0100 xxxx xxxx */ - {SUI,"PF,%b" }, /* 65: 0110 0100 0110 0101 xxxx xxxx */ - {SUI,"MKH,%b" }, /* 66: 0110 0100 0110 0110 xxxx xxxx */ - {SUI,"MKL,%b" }, /* 67: 0110 0100 0110 0111 xxxx xxxx */ - {NEI,"PA,%b" }, /* 68: 0110 0100 0110 1000 xxxx xxxx */ - {NEI,"PB,%b" }, /* 69: 0110 0100 0110 1001 xxxx xxxx */ - {NEI,"PC,%b" }, /* 6a: 0110 0100 0110 1010 xxxx xxxx */ - {NEI,"PD,%b" }, /* 6b: 0110 0100 0110 1011 xxxx xxxx */ - {illegal,nullptr }, /* 6c: 0110 0100 0110 1100 xxxx xxxx */ - {NEI,"PF,%b" }, /* 6d: 0110 0100 0110 1101 xxxx xxxx */ - {NEI,"MKH,%b" }, /* 6e: 0110 0100 0110 1110 xxxx xxxx */ - {NEI,"MKL,%b" }, /* 6f: 0110 0100 0110 1111 xxxx xxxx */ + {SUI, "PA,%b" }, // 60: 0110 0100 0110 0000 xxxx xxxx + {SUI, "PB,%b" }, // 61: 0110 0100 0110 0001 xxxx xxxx + {SUI, "PC,%b" }, // 62: 0110 0100 0110 0010 xxxx xxxx + {SUI, "PD,%b" }, // 63: 0110 0100 0110 0011 xxxx xxxx + { }, // 64: 0110 0100 0110 0100 xxxx xxxx + {SUI, "PF,%b" }, // 65: 0110 0100 0110 0101 xxxx xxxx + {SUI, "MKH,%b" }, // 66: 0110 0100 0110 0110 xxxx xxxx + {SUI, "MKL,%b" }, // 67: 0110 0100 0110 0111 xxxx xxxx + {NEI, "PA,%b" }, // 68: 0110 0100 0110 1000 xxxx xxxx + {NEI, "PB,%b" }, // 69: 0110 0100 0110 1001 xxxx xxxx + {NEI, "PC,%b" }, // 6a: 0110 0100 0110 1010 xxxx xxxx + {NEI, "PD,%b" }, // 6b: 0110 0100 0110 1011 xxxx xxxx + { }, // 6c: 0110 0100 0110 1100 xxxx xxxx + {NEI, "PF,%b" }, // 6d: 0110 0100 0110 1101 xxxx xxxx + {NEI, "MKH,%b" }, // 6e: 0110 0100 0110 1110 xxxx xxxx + {NEI, "MKL,%b" }, // 6f: 0110 0100 0110 1111 xxxx xxxx - {SBI,"PA,%b" }, /* 70: 0110 0100 0111 0000 xxxx xxxx */ - {SBI,"PB,%b" }, /* 71: 0110 0100 0111 0001 xxxx xxxx */ - {SBI,"PC,%b" }, /* 72: 0110 0100 0111 0010 xxxx xxxx */ - {SBI,"PD,%b" }, /* 73: 0110 0100 0111 0011 xxxx xxxx */ - {illegal,nullptr }, /* 74: 0110 0100 0111 0100 xxxx xxxx */ - {SBI,"PF,%b" }, /* 75: 0110 0100 0111 0101 xxxx xxxx */ - {SBI,"MKH,%b" }, /* 76: 0110 0100 0111 0110 xxxx xxxx */ - {SBI,"MKL,%b" }, /* 77: 0110 0100 0111 0111 xxxx xxxx */ - {EQI,"PA,%b" }, /* 78: 0110 0100 0111 1000 xxxx xxxx */ - {EQI,"PB,%b" }, /* 79: 0110 0100 0111 1001 xxxx xxxx */ - {EQI,"PC,%b" }, /* 7a: 0110 0100 0111 1010 xxxx xxxx */ - {EQI,"PD,%b" }, /* 7b: 0110 0100 0111 1011 xxxx xxxx */ - {illegal,nullptr }, /* 7c: 0110 0100 0111 1100 xxxx xxxx */ - {EQI,"PF,%b" }, /* 7d: 0110 0100 0111 1101 xxxx xxxx */ - {EQI,"MKH,%b" }, /* 7e: 0110 0100 0111 1110 xxxx xxxx */ - {EQI,"MKL,%b" }, /* 7f: 0110 0100 0111 1111 xxxx xxxx */ + {SBI, "PA,%b" }, // 70: 0110 0100 0111 0000 xxxx xxxx + {SBI, "PB,%b" }, // 71: 0110 0100 0111 0001 xxxx xxxx + {SBI, "PC,%b" }, // 72: 0110 0100 0111 0010 xxxx xxxx + {SBI, "PD,%b" }, // 73: 0110 0100 0111 0011 xxxx xxxx + { }, // 74: 0110 0100 0111 0100 xxxx xxxx + {SBI, "PF,%b" }, // 75: 0110 0100 0111 0101 xxxx xxxx + {SBI, "MKH,%b" }, // 76: 0110 0100 0111 0110 xxxx xxxx + {SBI, "MKL,%b" }, // 77: 0110 0100 0111 0111 xxxx xxxx + {EQI, "PA,%b" }, // 78: 0110 0100 0111 1000 xxxx xxxx + {EQI, "PB,%b" }, // 79: 0110 0100 0111 1001 xxxx xxxx + {EQI, "PC,%b" }, // 7a: 0110 0100 0111 1010 xxxx xxxx + {EQI, "PD,%b" }, // 7b: 0110 0100 0111 1011 xxxx xxxx + { }, // 7c: 0110 0100 0111 1100 xxxx xxxx + {EQI, "PF,%b" }, // 7d: 0110 0100 0111 1101 xxxx xxxx + {EQI, "MKH,%b" }, // 7e: 0110 0100 0111 1110 xxxx xxxx + {EQI, "MKL,%b" }, // 7f: 0110 0100 0111 1111 xxxx xxxx - {illegal,nullptr }, /* 80: 0110 0100 1000 0000 xxxx xxxx */ - {MVI,"SMH,%b" }, /* 81: 0110 0100 1000 0001 xxxx xxxx */ - {illegal,nullptr }, /* 82: 0110 0100 1000 0010 xxxx xxxx */ - {MVI,"EOM,%b" }, /* 83: 0110 0100 1000 0011 xxxx xxxx */ - {illegal,nullptr }, /* 84: 0110 0100 1000 0100 xxxx xxxx */ - {MVI,"TMM,%b" }, /* 85: 0110 0100 1000 0101 xxxx xxxx */ - {illegal,nullptr }, /* 86: 0110 0100 1000 0110 xxxx xxxx */ - {illegal,nullptr }, /* 87: 0110 0100 1000 0111 xxxx xxxx */ - {illegal,nullptr }, /* 88: 0110 0100 1000 1000 xxxx xxxx */ - {ANI,"SMH,%b" }, /* 89: 0110 0100 1000 1001 xxxx xxxx */ - {illegal,nullptr }, /* 8a: 0110 0100 1000 1010 xxxx xxxx */ - {ANI,"EOM,%b" }, /* 8b: 0110 0100 1000 1011 xxxx xxxx */ - {illegal,nullptr }, /* 8c: 0110 0100 1000 1100 xxxx xxxx */ - {ANI,"TMM,%b" }, /* 8d: 0110 0100 1000 1101 xxxx xxxx */ - {illegal,nullptr }, /* 8e: 0110 0100 1000 1110 xxxx xxxx */ - {illegal,nullptr }, /* 8f: 0110 0100 1000 1111 xxxx xxxx */ + { }, // 80: 0110 0100 1000 0000 xxxx xxxx + {MVI, "SMH,%b" }, // 81: 0110 0100 1000 0001 xxxx xxxx + { }, // 82: 0110 0100 1000 0010 xxxx xxxx + {MVI, "EOM,%b" }, // 83: 0110 0100 1000 0011 xxxx xxxx + { }, // 84: 0110 0100 1000 0100 xxxx xxxx + {MVI, "TMM,%b" }, // 85: 0110 0100 1000 0101 xxxx xxxx + { }, // 86: 0110 0100 1000 0110 xxxx xxxx + { }, // 87: 0110 0100 1000 0111 xxxx xxxx + { }, // 88: 0110 0100 1000 1000 xxxx xxxx + {ANI, "SMH,%b" }, // 89: 0110 0100 1000 1001 xxxx xxxx + { }, // 8a: 0110 0100 1000 1010 xxxx xxxx + {ANI, "EOM,%b" }, // 8b: 0110 0100 1000 1011 xxxx xxxx + { }, // 8c: 0110 0100 1000 1100 xxxx xxxx + {ANI, "TMM,%b" }, // 8d: 0110 0100 1000 1101 xxxx xxxx + { }, // 8e: 0110 0100 1000 1110 xxxx xxxx + { }, // 8f: 0110 0100 1000 1111 xxxx xxxx - {illegal,nullptr }, /* 90: 0110 0100 1001 0000 xxxx xxxx */ - {XRI,"SMH,%b" }, /* 91: 0110 0100 1001 0001 xxxx xxxx */ - {illegal,nullptr }, /* 92: 0110 0100 1001 0010 xxxx xxxx */ - {XRI,"EOM,%b" }, /* 93: 0110 0100 1001 0011 xxxx xxxx */ - {illegal,nullptr }, /* 94: 0110 0100 1001 0100 xxxx xxxx */ - {XRI,"TMM,%b" }, /* 95: 0110 0100 1001 0101 xxxx xxxx */ - {illegal,nullptr }, /* 96: 0110 0100 1001 0110 xxxx xxxx */ - {illegal,nullptr }, /* 97: 0110 0100 1001 0111 xxxx xxxx */ - {illegal,nullptr }, /* 98: 0110 0100 1001 1000 xxxx xxxx */ - {ORI,"SMH,%b" }, /* 99: 0110 0100 1001 1001 xxxx xxxx */ - {illegal,nullptr }, /* 9a: 0110 0100 1001 1010 xxxx xxxx */ - {ORI,"EOM,%b" }, /* 9b: 0110 0100 1001 1011 xxxx xxxx */ - {illegal,nullptr }, /* 9c: 0110 0100 1001 1100 xxxx xxxx */ - {ORI,"TMM,%b" }, /* 9d: 0110 0100 1001 1101 xxxx xxxx */ - {illegal,nullptr }, /* 9e: 0110 0100 1001 1110 xxxx xxxx */ - {illegal,nullptr }, /* 9f: 0110 0100 1001 1111 xxxx xxxx */ + { }, // 90: 0110 0100 1001 0000 xxxx xxxx + {XRI, "SMH,%b" }, // 91: 0110 0100 1001 0001 xxxx xxxx + { }, // 92: 0110 0100 1001 0010 xxxx xxxx + {XRI, "EOM,%b" }, // 93: 0110 0100 1001 0011 xxxx xxxx + { }, // 94: 0110 0100 1001 0100 xxxx xxxx + {XRI, "TMM,%b" }, // 95: 0110 0100 1001 0101 xxxx xxxx + { }, // 96: 0110 0100 1001 0110 xxxx xxxx + { }, // 97: 0110 0100 1001 0111 xxxx xxxx + { }, // 98: 0110 0100 1001 1000 xxxx xxxx + {ORI, "SMH,%b" }, // 99: 0110 0100 1001 1001 xxxx xxxx + { }, // 9a: 0110 0100 1001 1010 xxxx xxxx + {ORI, "EOM,%b" }, // 9b: 0110 0100 1001 1011 xxxx xxxx + { }, // 9c: 0110 0100 1001 1100 xxxx xxxx + {ORI, "TMM,%b" }, // 9d: 0110 0100 1001 1101 xxxx xxxx + { }, // 9e: 0110 0100 1001 1110 xxxx xxxx + { }, // 9f: 0110 0100 1001 1111 xxxx xxxx - {illegal,nullptr }, /* a0: 0110 0100 1010 0000 xxxx xxxx */ - {ADINC,"SMH,%b" }, /* a1: 0110 0100 1010 0001 xxxx xxxx */ - {illegal,nullptr }, /* a2: 0110 0100 1010 0010 xxxx xxxx */ - {ADINC,"EOM,%b" }, /* a3: 0110 0100 1010 0011 xxxx xxxx */ - {illegal,nullptr }, /* a4: 0110 0100 1010 0100 xxxx xxxx */ - {ADINC,"TMM,%b" }, /* a5: 0110 0100 1010 0101 xxxx xxxx */ - {illegal,nullptr }, /* a6: 0110 0100 1010 0110 xxxx xxxx */ - {illegal,nullptr }, /* a7: 0110 0100 1010 0111 xxxx xxxx */ - {illegal,nullptr }, /* a8: 0110 0100 1010 1000 xxxx xxxx */ - {GTI,"SMH,%b" }, /* a9: 0110 0100 1010 1001 xxxx xxxx */ - {illegal,nullptr }, /* aa: 0110 0100 1010 1010 xxxx xxxx */ - {GTI,"EOM,%b" }, /* ab: 0110 0100 1010 1011 xxxx xxxx */ - {illegal,nullptr }, /* ac: 0110 0100 1010 1100 xxxx xxxx */ - {GTI,"TMM,%b" }, /* ad: 0110 0100 1010 1101 xxxx xxxx */ - {GTI,"PT,%b" }, /* ae: 0110 0100 1010 1110 xxxx xxxx */ - {illegal,nullptr }, /* af: 0110 0100 1010 1111 xxxx xxxx */ + { }, // a0: 0110 0100 1010 0000 xxxx xxxx + {ADINC, "SMH,%b" }, // a1: 0110 0100 1010 0001 xxxx xxxx + { }, // a2: 0110 0100 1010 0010 xxxx xxxx + {ADINC, "EOM,%b" }, // a3: 0110 0100 1010 0011 xxxx xxxx + { }, // a4: 0110 0100 1010 0100 xxxx xxxx + {ADINC, "TMM,%b" }, // a5: 0110 0100 1010 0101 xxxx xxxx + { }, // a6: 0110 0100 1010 0110 xxxx xxxx + { }, // a7: 0110 0100 1010 0111 xxxx xxxx + { }, // a8: 0110 0100 1010 1000 xxxx xxxx + {GTI, "SMH,%b" }, // a9: 0110 0100 1010 1001 xxxx xxxx + { }, // aa: 0110 0100 1010 1010 xxxx xxxx + {GTI, "EOM,%b" }, // ab: 0110 0100 1010 1011 xxxx xxxx + { }, // ac: 0110 0100 1010 1100 xxxx xxxx + {GTI, "TMM,%b" }, // ad: 0110 0100 1010 1101 xxxx xxxx + {GTI, "PT,%b" }, // ae: 0110 0100 1010 1110 xxxx xxxx + { }, // af: 0110 0100 1010 1111 xxxx xxxx - {illegal,nullptr }, /* b0: 0110 0100 1011 0000 xxxx xxxx */ - {SUINB,"SMH,%b" }, /* b1: 0110 0100 1011 0001 xxxx xxxx */ - {illegal,nullptr }, /* b2: 0110 0100 1011 0010 xxxx xxxx */ - {SUINB,"EOM,%b" }, /* b3: 0110 0100 1011 0011 xxxx xxxx */ - {illegal,nullptr }, /* b4: 0110 0100 1011 0100 xxxx xxxx */ - {SUINB,"TMM,%b" }, /* b5: 0110 0100 1011 0101 xxxx xxxx */ - {illegal,nullptr }, /* b6: 0110 0100 1011 0110 xxxx xxxx */ - {illegal,nullptr }, /* b7: 0110 0100 1011 0111 xxxx xxxx */ - {illegal,nullptr }, /* b8: 0110 0100 1011 1000 xxxx xxxx */ - {LTI,"SMH,%b" }, /* b9: 0110 0100 1011 1001 xxxx xxxx */ - {illegal,nullptr }, /* ba: 0110 0100 1011 1010 xxxx xxxx */ - {LTI,"EOM,%b" }, /* bb: 0110 0100 1011 1011 xxxx xxxx */ - {illegal,nullptr }, /* bc: 0110 0100 1011 1100 xxxx xxxx */ - {LTI,"TMM,%b" }, /* bd: 0110 0100 1011 1101 xxxx xxxx */ - {LTI,"PT,%b" }, /* be: 0110 0100 1011 1110 xxxx xxxx */ - {illegal,nullptr }, /* bf: 0110 0100 1011 1111 xxxx xxxx */ + { }, // b0: 0110 0100 1011 0000 xxxx xxxx + {SUINB, "SMH,%b" }, // b1: 0110 0100 1011 0001 xxxx xxxx + { }, // b2: 0110 0100 1011 0010 xxxx xxxx + {SUINB, "EOM,%b" }, // b3: 0110 0100 1011 0011 xxxx xxxx + { }, // b4: 0110 0100 1011 0100 xxxx xxxx + {SUINB, "TMM,%b" }, // b5: 0110 0100 1011 0101 xxxx xxxx + { }, // b6: 0110 0100 1011 0110 xxxx xxxx + { }, // b7: 0110 0100 1011 0111 xxxx xxxx + { }, // b8: 0110 0100 1011 1000 xxxx xxxx + {LTI, "SMH,%b" }, // b9: 0110 0100 1011 1001 xxxx xxxx + { }, // ba: 0110 0100 1011 1010 xxxx xxxx + {LTI, "EOM,%b" }, // bb: 0110 0100 1011 1011 xxxx xxxx + { }, // bc: 0110 0100 1011 1100 xxxx xxxx + {LTI, "TMM,%b" }, // bd: 0110 0100 1011 1101 xxxx xxxx + {LTI, "PT,%b" }, // be: 0110 0100 1011 1110 xxxx xxxx + { }, // bf: 0110 0100 1011 1111 xxxx xxxx - {illegal,nullptr }, /* c0: 0110 0100 1100 0000 xxxx xxxx */ - {ADI,"SMH,%b" }, /* c1: 0110 0100 1100 0001 xxxx xxxx */ - {illegal,nullptr }, /* c2: 0110 0100 1100 0010 xxxx xxxx */ - {ADI,"EOM,%b" }, /* c3: 0110 0100 1100 0011 xxxx xxxx */ - {illegal,nullptr }, /* c4: 0110 0100 1100 0100 xxxx xxxx */ - {ADI,"TMM,%b" }, /* c5: 0110 0100 1100 0101 xxxx xxxx */ - {illegal,nullptr }, /* c6: 0110 0100 1100 0110 xxxx xxxx */ - {illegal,nullptr }, /* c7: 0110 0100 1100 0111 xxxx xxxx */ - {illegal,nullptr }, /* c8: 0110 0100 1100 1000 xxxx xxxx */ - {ONI,"SMH,%b" }, /* c9: 0110 0100 1100 1001 xxxx xxxx */ - {illegal,nullptr }, /* ca: 0110 0100 1100 1010 xxxx xxxx */ - {ONI,"EOM,%b" }, /* cb: 0110 0100 1100 1011 xxxx xxxx */ - {illegal,nullptr }, /* cc: 0110 0100 1100 1100 xxxx xxxx */ - {ONI,"TMM,%b" }, /* cd: 0110 0100 1100 1101 xxxx xxxx */ - {ONI,"PT,%b" }, /* ce: 0110 0100 1100 1110 xxxx xxxx */ - {illegal,nullptr }, /* cf: 0110 0100 1100 1111 xxxx xxxx */ + { }, // c0: 0110 0100 1100 0000 xxxx xxxx + {ADI, "SMH,%b" }, // c1: 0110 0100 1100 0001 xxxx xxxx + { }, // c2: 0110 0100 1100 0010 xxxx xxxx + {ADI, "EOM,%b" }, // c3: 0110 0100 1100 0011 xxxx xxxx + { }, // c4: 0110 0100 1100 0100 xxxx xxxx + {ADI, "TMM,%b" }, // c5: 0110 0100 1100 0101 xxxx xxxx + { }, // c6: 0110 0100 1100 0110 xxxx xxxx + { }, // c7: 0110 0100 1100 0111 xxxx xxxx + { }, // c8: 0110 0100 1100 1000 xxxx xxxx + {ONI, "SMH,%b" }, // c9: 0110 0100 1100 1001 xxxx xxxx + { }, // ca: 0110 0100 1100 1010 xxxx xxxx + {ONI, "EOM,%b" }, // cb: 0110 0100 1100 1011 xxxx xxxx + { }, // cc: 0110 0100 1100 1100 xxxx xxxx + {ONI, "TMM,%b" }, // cd: 0110 0100 1100 1101 xxxx xxxx + {ONI, "PT,%b" }, // ce: 0110 0100 1100 1110 xxxx xxxx + { }, // cf: 0110 0100 1100 1111 xxxx xxxx - {illegal,nullptr }, /* d0: 0110 0100 1101 0000 xxxx xxxx */ - {ACI,"SMH,%b" }, /* d1: 0110 0100 1101 0001 xxxx xxxx */ - {illegal,nullptr }, /* d2: 0110 0100 1101 0010 xxxx xxxx */ - {ACI,"EOM,%b" }, /* d3: 0110 0100 1101 0011 xxxx xxxx */ - {illegal,nullptr }, /* d4: 0110 0100 1101 0100 xxxx xxxx */ - {ACI,"TMM,%b" }, /* d5: 0110 0100 1101 0101 xxxx xxxx */ - {illegal,nullptr }, /* d6: 0110 0100 1101 0110 xxxx xxxx */ - {illegal,nullptr }, /* d7: 0110 0100 1101 0111 xxxx xxxx */ - {illegal,nullptr }, /* d8: 0110 0100 1101 1000 xxxx xxxx */ - {OFFI,"SMH,%b" }, /* d9: 0110 0100 1101 1001 xxxx xxxx */ - {illegal,nullptr }, /* da: 0110 0100 1101 1010 xxxx xxxx */ - {OFFI,"EOM,%b" }, /* db: 0110 0100 1101 1011 xxxx xxxx */ - {illegal,nullptr }, /* dc: 0110 0100 1101 1100 xxxx xxxx */ - {OFFI,"TMM,%b" }, /* dd: 0110 0100 1101 1101 xxxx xxxx */ - {OFFI,"PT,%b" }, /* de: 0110 0100 1101 1110 xxxx xxxx */ - {illegal,nullptr }, /* df: 0110 0100 1101 1111 xxxx xxxx */ + { }, // d0: 0110 0100 1101 0000 xxxx xxxx + {ACI, "SMH,%b" }, // d1: 0110 0100 1101 0001 xxxx xxxx + { }, // d2: 0110 0100 1101 0010 xxxx xxxx + {ACI, "EOM,%b" }, // d3: 0110 0100 1101 0011 xxxx xxxx + { }, // d4: 0110 0100 1101 0100 xxxx xxxx + {ACI, "TMM,%b" }, // d5: 0110 0100 1101 0101 xxxx xxxx + { }, // d6: 0110 0100 1101 0110 xxxx xxxx + { }, // d7: 0110 0100 1101 0111 xxxx xxxx + { }, // d8: 0110 0100 1101 1000 xxxx xxxx + {OFFI, "SMH,%b" }, // d9: 0110 0100 1101 1001 xxxx xxxx + { }, // da: 0110 0100 1101 1010 xxxx xxxx + {OFFI, "EOM,%b" }, // db: 0110 0100 1101 1011 xxxx xxxx + { }, // dc: 0110 0100 1101 1100 xxxx xxxx + {OFFI, "TMM,%b" }, // dd: 0110 0100 1101 1101 xxxx xxxx + {OFFI, "PT,%b" }, // de: 0110 0100 1101 1110 xxxx xxxx + { }, // df: 0110 0100 1101 1111 xxxx xxxx - {illegal,nullptr }, /* e0: 0110 0100 1110 0000 xxxx xxxx */ - {SUI,"SMH,%b" }, /* e1: 0110 0100 1110 0001 xxxx xxxx */ - {illegal,nullptr }, /* e2: 0110 0100 1110 0010 xxxx xxxx */ - {SUI,"EOM,%b" }, /* e3: 0110 0100 1110 0011 xxxx xxxx */ - {illegal,nullptr }, /* e4: 0110 0100 1110 0100 xxxx xxxx */ - {SUI,"TMM,%b" }, /* e5: 0110 0100 1110 0101 xxxx xxxx */ - {illegal,nullptr }, /* e6: 0110 0100 1110 0110 xxxx xxxx */ - {illegal,nullptr }, /* e7: 0110 0100 1110 0111 xxxx xxxx */ - {illegal,nullptr }, /* e8: 0110 0100 1110 1000 xxxx xxxx */ - {NEI,"SMH,%b" }, /* e9: 0110 0100 1110 1001 xxxx xxxx */ - {illegal,nullptr }, /* ea: 0110 0100 1110 1010 xxxx xxxx */ - {NEI,"EOM,%b" }, /* eb: 0110 0100 1110 1011 xxxx xxxx */ - {illegal,nullptr }, /* ec: 0110 0100 1110 1100 xxxx xxxx */ - {NEI,"TMM,%b" }, /* ed: 0110 0100 1110 1101 xxxx xxxx */ - {NEI,"PT,%b" }, /* ee: 0110 0100 1110 1110 xxxx xxxx */ - {illegal,nullptr }, /* ef: 0110 0100 1110 1111 xxxx xxxx */ + { }, // e0: 0110 0100 1110 0000 xxxx xxxx + {SUI, "SMH,%b" }, // e1: 0110 0100 1110 0001 xxxx xxxx + { }, // e2: 0110 0100 1110 0010 xxxx xxxx + {SUI, "EOM,%b" }, // e3: 0110 0100 1110 0011 xxxx xxxx + { }, // e4: 0110 0100 1110 0100 xxxx xxxx + {SUI, "TMM,%b" }, // e5: 0110 0100 1110 0101 xxxx xxxx + { }, // e6: 0110 0100 1110 0110 xxxx xxxx + { }, // e7: 0110 0100 1110 0111 xxxx xxxx + { }, // e8: 0110 0100 1110 1000 xxxx xxxx + {NEI, "SMH,%b" }, // e9: 0110 0100 1110 1001 xxxx xxxx + { }, // ea: 0110 0100 1110 1010 xxxx xxxx + {NEI, "EOM,%b" }, // eb: 0110 0100 1110 1011 xxxx xxxx + { }, // ec: 0110 0100 1110 1100 xxxx xxxx + {NEI, "TMM,%b" }, // ed: 0110 0100 1110 1101 xxxx xxxx + {NEI, "PT,%b" }, // ee: 0110 0100 1110 1110 xxxx xxxx + { }, // ef: 0110 0100 1110 1111 xxxx xxxx - {illegal,nullptr }, /* f0: 0110 0100 1111 0000 xxxx xxxx */ - {SBI,"SMH,%b" }, /* f1: 0110 0100 1111 0001 xxxx xxxx */ - {illegal,nullptr }, /* f2: 0110 0100 1111 0010 xxxx xxxx */ - {SBI,"EOM,%b" }, /* f3: 0110 0100 1111 0011 xxxx xxxx */ - {illegal,nullptr }, /* f4: 0110 0100 1111 0100 xxxx xxxx */ - {SBI,"TMM,%b" }, /* f5: 0110 0100 1111 0101 xxxx xxxx */ - {illegal,nullptr }, /* f6: 0110 0100 1111 0110 xxxx xxxx */ - {illegal,nullptr }, /* f7: 0110 0100 1111 0111 xxxx xxxx */ - {illegal,nullptr }, /* f8: 0110 0100 1111 1000 xxxx xxxx */ - {EQI,"SMH,%b" }, /* f9: 0110 0100 1111 1001 xxxx xxxx */ - {illegal,nullptr }, /* fa: 0110 0100 1111 1010 xxxx xxxx */ - {EQI,"EOM,%b" }, /* fb: 0110 0100 1111 1011 xxxx xxxx */ - {illegal,nullptr }, /* fc: 0110 0100 1111 1100 xxxx xxxx */ - {EQI,"TMM,%b" }, /* fd: 0110 0100 1111 1101 xxxx xxxx */ - {EQI,"PT,%b" }, /* fe: 0110 0100 1111 1110 xxxx xxxx */ - {illegal,nullptr } /* ff: 0110 0100 1111 1111 xxxx xxxx */ + { }, // f0: 0110 0100 1111 0000 xxxx xxxx + {SBI, "SMH,%b" }, // f1: 0110 0100 1111 0001 xxxx xxxx + { }, // f2: 0110 0100 1111 0010 xxxx xxxx + {SBI, "EOM,%b" }, // f3: 0110 0100 1111 0011 xxxx xxxx + { }, // f4: 0110 0100 1111 0100 xxxx xxxx + {SBI, "TMM,%b" }, // f5: 0110 0100 1111 0101 xxxx xxxx + { }, // f6: 0110 0100 1111 0110 xxxx xxxx + { }, // f7: 0110 0100 1111 0111 xxxx xxxx + { }, // f8: 0110 0100 1111 1000 xxxx xxxx + {EQI, "SMH,%b" }, // f9: 0110 0100 1111 1001 xxxx xxxx + { }, // fa: 0110 0100 1111 1010 xxxx xxxx + {EQI, "EOM,%b" }, // fb: 0110 0100 1111 1011 xxxx xxxx + { }, // fc: 0110 0100 1111 1100 xxxx xxxx + {EQI, "TMM,%b" }, // fd: 0110 0100 1111 1101 xxxx xxxx + {EQI, "PT,%b" }, // fe: 0110 0100 1111 1110 xxxx xxxx + { } // ff: 0110 0100 1111 1111 xxxx xxxx }; -/* prefix 70 */ -static const struct dasm_s dasm70[256] = +// prefix 70 +const dasm_s dasm_s::d70[256] = { - {illegal,nullptr }, /* 00: 0111 0000 0000 0000 */ - {illegal,nullptr }, /* 01: 0111 0000 0000 0001 */ - {illegal,nullptr }, /* 02: 0111 0000 0000 0010 */ - {illegal,nullptr }, /* 03: 0111 0000 0000 0011 */ - {illegal,nullptr }, /* 04: 0111 0000 0000 0100 */ - {illegal,nullptr }, /* 05: 0111 0000 0000 0101 */ - {illegal,nullptr }, /* 06: 0111 0000 0000 0110 */ - {illegal,nullptr }, /* 07: 0111 0000 0000 0111 */ - {illegal,nullptr }, /* 08: 0111 0000 0000 1000 */ - {illegal,nullptr }, /* 09: 0111 0000 0000 1001 */ - {illegal,nullptr }, /* 0a: 0111 0000 0000 1010 */ - {illegal,nullptr }, /* 0b: 0111 0000 0000 1011 */ - {illegal,nullptr }, /* 0c: 0111 0000 0000 1100 */ - {illegal,nullptr }, /* 0d: 0111 0000 0000 1101 */ - {SSPD,"%w" }, /* 0e: 0111 0000 0000 1110 llll llll hhhh hhhh */ - {LSPD,"%w" }, /* 0f: 0111 0000 0000 1111 llll llll hhhh hhhh */ + { }, // 00: 0111 0000 0000 0000 + { }, // 01: 0111 0000 0000 0001 + { }, // 02: 0111 0000 0000 0010 + { }, // 03: 0111 0000 0000 0011 + { }, // 04: 0111 0000 0000 0100 + { }, // 05: 0111 0000 0000 0101 + { }, // 06: 0111 0000 0000 0110 + { }, // 07: 0111 0000 0000 0111 + { }, // 08: 0111 0000 0000 1000 + { }, // 09: 0111 0000 0000 1001 + { }, // 0a: 0111 0000 0000 1010 + { }, // 0b: 0111 0000 0000 1011 + { }, // 0c: 0111 0000 0000 1100 + { }, // 0d: 0111 0000 0000 1101 + {SSPD, "%w" }, // 0e: 0111 0000 0000 1110 llll llll hhhh hhhh + {LSPD, "%w" }, // 0f: 0111 0000 0000 1111 llll llll hhhh hhhh - {illegal,nullptr }, /* 10: 0111 0000 0001 0000 */ - {illegal,nullptr }, /* 11: 0111 0000 0001 0001 */ - {illegal,nullptr }, /* 12: 0111 0000 0001 0010 */ - {illegal,nullptr }, /* 13: 0111 0000 0001 0011 */ - {illegal,nullptr }, /* 14: 0111 0000 0001 0100 */ - {illegal,nullptr }, /* 15: 0111 0000 0001 0101 */ - {illegal,nullptr }, /* 16: 0111 0000 0001 0110 */ - {illegal,nullptr }, /* 17: 0111 0000 0001 0111 */ - {illegal,nullptr }, /* 18: 0111 0000 0001 1000 */ - {illegal,nullptr }, /* 19: 0111 0000 0001 1001 */ - {illegal,nullptr }, /* 1a: 0111 0000 0001 1010 */ - {illegal,nullptr }, /* 1b: 0111 0000 0001 1011 */ - {illegal,nullptr }, /* 1c: 0111 0000 0001 1100 */ - {illegal,nullptr }, /* 1d: 0111 0000 0001 1101 */ - {SBCD,"%w" }, /* 1e: 0111 0000 0001 1110 llll llll hhhh hhhh */ - {LBCD,"%w" }, /* 1f: 0111 0000 0001 1111 llll llll hhhh hhhh */ + { }, // 10: 0111 0000 0001 0000 + { }, // 11: 0111 0000 0001 0001 + { }, // 12: 0111 0000 0001 0010 + { }, // 13: 0111 0000 0001 0011 + { }, // 14: 0111 0000 0001 0100 + { }, // 15: 0111 0000 0001 0101 + { }, // 16: 0111 0000 0001 0110 + { }, // 17: 0111 0000 0001 0111 + { }, // 18: 0111 0000 0001 1000 + { }, // 19: 0111 0000 0001 1001 + { }, // 1a: 0111 0000 0001 1010 + { }, // 1b: 0111 0000 0001 1011 + { }, // 1c: 0111 0000 0001 1100 + { }, // 1d: 0111 0000 0001 1101 + {SBCD, "%w" }, // 1e: 0111 0000 0001 1110 llll llll hhhh hhhh + {LBCD, "%w" }, // 1f: 0111 0000 0001 1111 llll llll hhhh hhhh - {illegal,nullptr }, /* 20: 0111 0000 0010 0000 */ - {illegal,nullptr }, /* 21: 0111 0000 0010 0001 */ - {illegal,nullptr }, /* 22: 0111 0000 0010 0010 */ - {illegal,nullptr }, /* 23: 0111 0000 0010 0011 */ - {illegal,nullptr }, /* 24: 0111 0000 0010 0100 */ - {illegal,nullptr }, /* 25: 0111 0000 0010 0101 */ - {illegal,nullptr }, /* 26: 0111 0000 0010 0110 */ - {illegal,nullptr }, /* 27: 0111 0000 0010 0111 */ - {illegal,nullptr }, /* 28: 0111 0000 0010 1000 */ - {illegal,nullptr }, /* 29: 0111 0000 0010 1001 */ - {illegal,nullptr }, /* 2a: 0111 0000 0010 1010 */ - {illegal,nullptr }, /* 2b: 0111 0000 0010 1011 */ - {illegal,nullptr }, /* 2c: 0111 0000 0010 1100 */ - {illegal,nullptr }, /* 2d: 0111 0000 0010 1101 */ - {SDED,"%w" }, /* 2e: 0111 0000 0010 1110 llll llll hhhh hhhh */ - {LDED,"%w" }, /* 2f: 0111 0000 0010 1111 llll llll hhhh hhhh */ + { }, // 20: 0111 0000 0010 0000 + { }, // 21: 0111 0000 0010 0001 + { }, // 22: 0111 0000 0010 0010 + { }, // 23: 0111 0000 0010 0011 + { }, // 24: 0111 0000 0010 0100 + { }, // 25: 0111 0000 0010 0101 + { }, // 26: 0111 0000 0010 0110 + { }, // 27: 0111 0000 0010 0111 + { }, // 28: 0111 0000 0010 1000 + { }, // 29: 0111 0000 0010 1001 + { }, // 2a: 0111 0000 0010 1010 + { }, // 2b: 0111 0000 0010 1011 + { }, // 2c: 0111 0000 0010 1100 + { }, // 2d: 0111 0000 0010 1101 + {SDED, "%w" }, // 2e: 0111 0000 0010 1110 llll llll hhhh hhhh + {LDED, "%w" }, // 2f: 0111 0000 0010 1111 llll llll hhhh hhhh - {illegal,nullptr }, /* 30: 0111 0000 0011 0000 */ - {illegal,nullptr }, /* 31: 0111 0000 0011 0001 */ - {illegal,nullptr }, /* 32: 0111 0000 0011 0010 */ - {illegal,nullptr }, /* 33: 0111 0000 0011 0011 */ - {illegal,nullptr }, /* 34: 0111 0000 0011 0100 */ - {illegal,nullptr }, /* 35: 0111 0000 0011 0101 */ - {illegal,nullptr }, /* 36: 0111 0000 0011 0110 */ - {illegal,nullptr }, /* 37: 0111 0000 0011 0111 */ - {illegal,nullptr }, /* 38: 0111 0000 0011 1000 */ - {illegal,nullptr }, /* 39: 0111 0000 0011 1001 */ - {illegal,nullptr }, /* 3a: 0111 0000 0011 1010 */ - {illegal,nullptr }, /* 3b: 0111 0000 0011 1011 */ - {illegal,nullptr }, /* 3c: 0111 0000 0011 1100 */ - {illegal,nullptr }, /* 3d: 0111 0000 0011 1101 */ - {SHLD,"%w" }, /* 3e: 0111 0000 0011 1110 llll llll hhhh hhhh */ - {LHLD,"%w" }, /* 3f: 0111 0000 0011 1111 llll llll hhhh hhhh */ + { }, // 30: 0111 0000 0011 0000 + { }, // 31: 0111 0000 0011 0001 + { }, // 32: 0111 0000 0011 0010 + { }, // 33: 0111 0000 0011 0011 + { }, // 34: 0111 0000 0011 0100 + { }, // 35: 0111 0000 0011 0101 + { }, // 36: 0111 0000 0011 0110 + { }, // 37: 0111 0000 0011 0111 + { }, // 38: 0111 0000 0011 1000 + { }, // 39: 0111 0000 0011 1001 + { }, // 3a: 0111 0000 0011 1010 + { }, // 3b: 0111 0000 0011 1011 + { }, // 3c: 0111 0000 0011 1100 + { }, // 3d: 0111 0000 0011 1101 + {SHLD, "%w" }, // 3e: 0111 0000 0011 1110 llll llll hhhh hhhh + {LHLD, "%w" }, // 3f: 0111 0000 0011 1111 llll llll hhhh hhhh - {EADD,"EA,V" }, /* 40: 0111 0000 0100 0000 */ - {EADD,"EA,A" }, /* 41: 0111 0000 0100 0001 */ - {EADD,"EA,B" }, /* 42: 0111 0000 0100 0010 */ - {EADD,"EA,C" }, /* 43: 0111 0000 0100 0011 */ - {illegal,nullptr }, /* 44: 0111 0000 0100 0100 */ - {illegal,nullptr }, /* 45: 0111 0000 0100 0101 */ - {illegal,nullptr }, /* 46: 0111 0000 0100 0110 */ - {illegal,nullptr }, /* 47: 0111 0000 0100 0111 */ - {illegal,nullptr }, /* 48: 0111 0000 0100 1000 */ - {illegal,nullptr }, /* 49: 0111 0000 0100 1001 */ - {illegal,nullptr }, /* 4a: 0111 0000 0100 1010 */ - {illegal,nullptr }, /* 4b: 0111 0000 0100 1011 */ - {illegal,nullptr }, /* 4c: 0111 0000 0100 1100 */ - {illegal,nullptr }, /* 4d: 0111 0000 0100 1101 */ - {illegal,nullptr }, /* 4e: 0111 0000 0100 1110 */ - {illegal,nullptr }, /* 4f: 0111 0000 0100 1111 */ + {EADD, "EA,V" }, // 40: 0111 0000 0100 0000 + {EADD, "EA,A" }, // 41: 0111 0000 0100 0001 + {EADD, "EA,B" }, // 42: 0111 0000 0100 0010 + {EADD, "EA,C" }, // 43: 0111 0000 0100 0011 + { }, // 44: 0111 0000 0100 0100 + { }, // 45: 0111 0000 0100 0101 + { }, // 46: 0111 0000 0100 0110 + { }, // 47: 0111 0000 0100 0111 + { }, // 48: 0111 0000 0100 1000 + { }, // 49: 0111 0000 0100 1001 + { }, // 4a: 0111 0000 0100 1010 + { }, // 4b: 0111 0000 0100 1011 + { }, // 4c: 0111 0000 0100 1100 + { }, // 4d: 0111 0000 0100 1101 + { }, // 4e: 0111 0000 0100 1110 + { }, // 4f: 0111 0000 0100 1111 - {illegal,nullptr }, /* 50: 0111 0000 0101 0000 */ - {illegal,nullptr }, /* 51: 0111 0000 0101 0001 */ - {illegal,nullptr }, /* 52: 0111 0000 0101 0010 */ - {illegal,nullptr }, /* 53: 0111 0000 0101 0011 */ - {illegal,nullptr }, /* 54: 0111 0000 0101 0100 */ - {illegal,nullptr }, /* 55: 0111 0000 0101 0101 */ - {illegal,nullptr }, /* 56: 0111 0000 0101 0110 */ - {illegal,nullptr }, /* 57: 0111 0000 0101 0111 */ - {illegal,nullptr }, /* 58: 0111 0000 0101 1000 */ - {illegal,nullptr }, /* 59: 0111 0000 0101 1001 */ - {illegal,nullptr }, /* 5a: 0111 0000 0101 1010 */ - {illegal,nullptr }, /* 5b: 0111 0000 0101 1011 */ - {illegal,nullptr }, /* 5c: 0111 0000 0101 1100 */ - {illegal,nullptr }, /* 5d: 0111 0000 0101 1101 */ - {illegal,nullptr }, /* 5e: 0111 0000 0101 1110 */ - {illegal,nullptr }, /* 5f: 0111 0000 0101 1111 */ + { }, // 50: 0111 0000 0101 0000 + { }, // 51: 0111 0000 0101 0001 + { }, // 52: 0111 0000 0101 0010 + { }, // 53: 0111 0000 0101 0011 + { }, // 54: 0111 0000 0101 0100 + { }, // 55: 0111 0000 0101 0101 + { }, // 56: 0111 0000 0101 0110 + { }, // 57: 0111 0000 0101 0111 + { }, // 58: 0111 0000 0101 1000 + { }, // 59: 0111 0000 0101 1001 + { }, // 5a: 0111 0000 0101 1010 + { }, // 5b: 0111 0000 0101 1011 + { }, // 5c: 0111 0000 0101 1100 + { }, // 5d: 0111 0000 0101 1101 + { }, // 5e: 0111 0000 0101 1110 + { }, // 5f: 0111 0000 0101 1111 - {ESUB,"EA,V" }, /* 60: 0111 0000 0110 0000 */ - {ESUB,"EA,A" }, /* 61: 0111 0000 0110 0001 */ - {ESUB,"EA,B" }, /* 62: 0111 0000 0110 0010 */ - {ESUB,"EA,C" }, /* 63: 0111 0000 0110 0011 */ - {illegal,nullptr }, /* 64: 0111 0000 0110 0100 */ - {illegal,nullptr }, /* 65: 0111 0000 0110 0101 */ - {illegal,nullptr }, /* 66: 0111 0000 0110 0110 */ - {illegal,nullptr }, /* 67: 0111 0000 0110 0111 */ - {MOV,"V,(%w)" }, /* 68: 0111 0000 0110 1000 llll llll hhhh hhhh */ - {MOV,"A,(%w)" }, /* 69: 0111 0000 0110 1001 llll llll hhhh hhhh */ - {MOV,"B,(%w)" }, /* 6a: 0111 0000 0110 1010 llll llll hhhh hhhh */ - {MOV,"C,(%w)" }, /* 6b: 0111 0000 0110 1011 llll llll hhhh hhhh */ - {MOV,"D,(%w)" }, /* 6c: 0111 0000 0110 1100 llll llll hhhh hhhh */ - {MOV,"E,(%w)" }, /* 6d: 0111 0000 0110 1101 llll llll hhhh hhhh */ - {MOV,"H,(%w)" }, /* 6e: 0111 0000 0110 1110 llll llll hhhh hhhh */ - {MOV,"L,(%w)" }, /* 6f: 0111 0000 0110 1111 llll llll hhhh hhhh */ + {ESUB, "EA,V" }, // 60: 0111 0000 0110 0000 + {ESUB, "EA,A" }, // 61: 0111 0000 0110 0001 + {ESUB, "EA,B" }, // 62: 0111 0000 0110 0010 + {ESUB, "EA,C" }, // 63: 0111 0000 0110 0011 + { }, // 64: 0111 0000 0110 0100 + { }, // 65: 0111 0000 0110 0101 + { }, // 66: 0111 0000 0110 0110 + { }, // 67: 0111 0000 0110 0111 + {MOV, "V,(%w)" }, // 68: 0111 0000 0110 1000 llll llll hhhh hhhh + {MOV, "A,(%w)" }, // 69: 0111 0000 0110 1001 llll llll hhhh hhhh + {MOV, "B,(%w)" }, // 6a: 0111 0000 0110 1010 llll llll hhhh hhhh + {MOV, "C,(%w)" }, // 6b: 0111 0000 0110 1011 llll llll hhhh hhhh + {MOV, "D,(%w)" }, // 6c: 0111 0000 0110 1100 llll llll hhhh hhhh + {MOV, "E,(%w)" }, // 6d: 0111 0000 0110 1101 llll llll hhhh hhhh + {MOV, "H,(%w)" }, // 6e: 0111 0000 0110 1110 llll llll hhhh hhhh + {MOV, "L,(%w)" }, // 6f: 0111 0000 0110 1111 llll llll hhhh hhhh - {illegal,nullptr }, /* 70: 0111 0000 0111 0000 */ - {illegal,nullptr }, /* 71: 0111 0000 0111 0001 */ - {illegal,nullptr }, /* 72: 0111 0000 0111 0010 */ - {illegal,nullptr }, /* 73: 0111 0000 0111 0011 */ - {illegal,nullptr }, /* 74: 0111 0000 0111 0100 */ - {illegal,nullptr }, /* 75: 0111 0000 0111 0101 */ - {illegal,nullptr }, /* 76: 0111 0000 0111 0110 */ - {illegal,nullptr }, /* 77: 0111 0000 0111 0111 */ - {MOV,"(%w),V" }, /* 78: 0111 0000 0111 1000 llll llll hhhh hhhh */ - {MOV,"(%w),A" }, /* 79: 0111 0000 0111 1001 llll llll hhhh hhhh */ - {MOV,"(%w),B" }, /* 7a: 0111 0000 0111 1010 llll llll hhhh hhhh */ - {MOV,"(%w),C" }, /* 7b: 0111 0000 0111 1011 llll llll hhhh hhhh */ - {MOV,"(%w),D" }, /* 7c: 0111 0000 0111 1100 llll llll hhhh hhhh */ - {MOV,"(%w),E" }, /* 7d: 0111 0000 0111 1101 llll llll hhhh hhhh */ - {MOV,"(%w),H" }, /* 7e: 0111 0000 0111 1110 llll llll hhhh hhhh */ - {MOV,"(%w),L" }, /* 7f: 0111 0000 0111 1111 llll llll hhhh hhhh */ + { }, // 70: 0111 0000 0111 0000 + { }, // 71: 0111 0000 0111 0001 + { }, // 72: 0111 0000 0111 0010 + { }, // 73: 0111 0000 0111 0011 + { }, // 74: 0111 0000 0111 0100 + { }, // 75: 0111 0000 0111 0101 + { }, // 76: 0111 0000 0111 0110 + { }, // 77: 0111 0000 0111 0111 + {MOV, "(%w),V" }, // 78: 0111 0000 0111 1000 llll llll hhhh hhhh + {MOV, "(%w),A" }, // 79: 0111 0000 0111 1001 llll llll hhhh hhhh + {MOV, "(%w),B" }, // 7a: 0111 0000 0111 1010 llll llll hhhh hhhh + {MOV, "(%w),C" }, // 7b: 0111 0000 0111 1011 llll llll hhhh hhhh + {MOV, "(%w),D" }, // 7c: 0111 0000 0111 1100 llll llll hhhh hhhh + {MOV, "(%w),E" }, // 7d: 0111 0000 0111 1101 llll llll hhhh hhhh + {MOV, "(%w),H" }, // 7e: 0111 0000 0111 1110 llll llll hhhh hhhh + {MOV, "(%w),L" }, // 7f: 0111 0000 0111 1111 llll llll hhhh hhhh - {illegal,nullptr }, /* 80: 0111 0000 1000 0000 */ - {illegal,nullptr }, /* 81: 0111 0000 1000 0001 */ - {illegal,nullptr }, /* 82: 0111 0000 1000 0010 */ - {illegal,nullptr }, /* 83: 0111 0000 1000 0011 */ - {illegal,nullptr }, /* 84: 0111 0000 1000 0100 */ - {illegal,nullptr }, /* 85: 0111 0000 1000 0101 */ - {illegal,nullptr }, /* 86: 0111 0000 1000 0110 */ - {illegal,nullptr }, /* 87: 0111 0000 1000 0111 */ - {illegal,nullptr }, /* 88: 0111 0000 1000 1000 */ - {ANAX,"(BC)" }, /* 89: 0111 0000 1000 1001 */ - {ANAX,"(DE)" }, /* 8a: 0111 0000 1000 1010 */ - {ANAX,"(HL)" }, /* 8b: 0111 0000 1000 1011 */ - {ANAX,"(DE+)" }, /* 8c: 0111 0000 1000 1100 */ - {ANAX,"(HL+)" }, /* 8d: 0111 0000 1000 1101 */ - {ANAX,"(DE-)" }, /* 8e: 0111 0000 1000 1110 */ - {ANAX,"(HL-)" }, /* 8f: 0111 0000 1000 1111 */ + { }, // 80: 0111 0000 1000 0000 + { }, // 81: 0111 0000 1000 0001 + { }, // 82: 0111 0000 1000 0010 + { }, // 83: 0111 0000 1000 0011 + { }, // 84: 0111 0000 1000 0100 + { }, // 85: 0111 0000 1000 0101 + { }, // 86: 0111 0000 1000 0110 + { }, // 87: 0111 0000 1000 0111 + { }, // 88: 0111 0000 1000 1000 + {ANAX, "(BC)" }, // 89: 0111 0000 1000 1001 + {ANAX, "(DE)" }, // 8a: 0111 0000 1000 1010 + {ANAX, "(HL)" }, // 8b: 0111 0000 1000 1011 + {ANAX, "(DE+)" }, // 8c: 0111 0000 1000 1100 + {ANAX, "(HL+)" }, // 8d: 0111 0000 1000 1101 + {ANAX, "(DE-)" }, // 8e: 0111 0000 1000 1110 + {ANAX, "(HL-)" }, // 8f: 0111 0000 1000 1111 - {illegal,nullptr }, /* 90: 0111 0000 1001 0000 */ - {XRAX,"(BC)" }, /* 91: 0111 0000 1001 0001 */ - {XRAX,"(DE)" }, /* 92: 0111 0000 1001 0010 */ - {XRAX,"(HL)" }, /* 93: 0111 0000 1001 0011 */ - {XRAX,"(DE+)" }, /* 94: 0111 0000 1001 0100 */ - {XRAX,"(HL+)" }, /* 95: 0111 0000 1001 0101 */ - {XRAX,"(DE-)" }, /* 96: 0111 0000 1001 0110 */ - {XRAX,"(HL-)" }, /* 97: 0111 0000 1001 0111 */ - {illegal,nullptr }, /* 98: 0111 0000 1001 1000 */ - {ORAX,"(BC)" }, /* 99: 0111 0000 1001 1001 */ - {ORAX,"(DE)" }, /* 9a: 0111 0000 1001 1010 */ - {ORAX,"(HL)" }, /* 9b: 0111 0000 1001 1011 */ - {ORAX,"(DE+)" }, /* 9c: 0111 0000 1001 1100 */ - {ORAX,"(HL+)" }, /* 9d: 0111 0000 1001 1101 */ - {ORAX,"(DE-)" }, /* 9e: 0111 0000 1001 1110 */ - {ORAX,"(HL-)" }, /* 9f: 0111 0000 1001 1111 */ + { }, // 90: 0111 0000 1001 0000 + {XRAX, "(BC)" }, // 91: 0111 0000 1001 0001 + {XRAX, "(DE)" }, // 92: 0111 0000 1001 0010 + {XRAX, "(HL)" }, // 93: 0111 0000 1001 0011 + {XRAX, "(DE+)" }, // 94: 0111 0000 1001 0100 + {XRAX, "(HL+)" }, // 95: 0111 0000 1001 0101 + {XRAX, "(DE-)" }, // 96: 0111 0000 1001 0110 + {XRAX, "(HL-)" }, // 97: 0111 0000 1001 0111 + { }, // 98: 0111 0000 1001 1000 + {ORAX, "(BC)" }, // 99: 0111 0000 1001 1001 + {ORAX, "(DE)" }, // 9a: 0111 0000 1001 1010 + {ORAX, "(HL)" }, // 9b: 0111 0000 1001 1011 + {ORAX, "(DE+)" }, // 9c: 0111 0000 1001 1100 + {ORAX, "(HL+)" }, // 9d: 0111 0000 1001 1101 + {ORAX, "(DE-)" }, // 9e: 0111 0000 1001 1110 + {ORAX, "(HL-)" }, // 9f: 0111 0000 1001 1111 - {illegal,nullptr }, /* a0: 0111 0000 1010 0000 */ - {ADDNCX,"(BC)" }, /* a1: 0111 0000 1010 0001 */ - {ADDNCX,"(DE)" }, /* a2: 0111 0000 1010 0010 */ - {ADDNCX,"(HL)" }, /* a3: 0111 0000 1010 0011 */ - {ADDNCX,"(DE+)" }, /* a4: 0111 0000 1010 0100 */ - {ADDNCX,"(HL+)" }, /* a5: 0111 0000 1010 0101 */ - {ADDNCX,"(DE-)" }, /* a6: 0111 0000 1010 0110 */ - {ADDNCX,"(HL-)" }, /* a7: 0111 0000 1010 0111 */ - {illegal,nullptr }, /* a8: 0111 0000 1010 1000 */ - {GTAX,"(BC)" }, /* a9: 0111 0000 1010 1001 */ - {GTAX,"(DE)" }, /* aa: 0111 0000 1010 1010 */ - {GTAX,"(HL)" }, /* ab: 0111 0000 1010 1011 */ - {GTAX,"(DE+)" }, /* ac: 0111 0000 1010 1100 */ - {GTAX,"(HL+)" }, /* ad: 0111 0000 1010 1101 */ - {GTAX,"(DE-)" }, /* ae: 0111 0000 1010 1110 */ - {GTAX,"(HL-)" }, /* af: 0111 0000 1010 1111 */ + { }, // a0: 0111 0000 1010 0000 + {ADDNCX, "(BC)" }, // a1: 0111 0000 1010 0001 + {ADDNCX, "(DE)" }, // a2: 0111 0000 1010 0010 + {ADDNCX, "(HL)" }, // a3: 0111 0000 1010 0011 + {ADDNCX, "(DE+)" }, // a4: 0111 0000 1010 0100 + {ADDNCX, "(HL+)" }, // a5: 0111 0000 1010 0101 + {ADDNCX, "(DE-)" }, // a6: 0111 0000 1010 0110 + {ADDNCX, "(HL-)" }, // a7: 0111 0000 1010 0111 + { }, // a8: 0111 0000 1010 1000 + {GTAX, "(BC)" }, // a9: 0111 0000 1010 1001 + {GTAX, "(DE)" }, // aa: 0111 0000 1010 1010 + {GTAX, "(HL)" }, // ab: 0111 0000 1010 1011 + {GTAX, "(DE+)" }, // ac: 0111 0000 1010 1100 + {GTAX, "(HL+)" }, // ad: 0111 0000 1010 1101 + {GTAX, "(DE-)" }, // ae: 0111 0000 1010 1110 + {GTAX, "(HL-)" }, // af: 0111 0000 1010 1111 - {illegal,nullptr }, /* b0: 0111 0000 1011 0000 */ - {SUBNBX,"(BC)" }, /* b1: 0111 0000 1011 0001 */ - {SUBNBX,"(DE)" }, /* b2: 0111 0000 1011 0010 */ - {SUBNBX,"(HL)" }, /* b3: 0111 0000 1011 0011 */ - {SUBNBX,"(DE+)" }, /* b4: 0111 0000 1011 0100 */ - {SUBNBX,"(HL+)" }, /* b5: 0111 0000 1011 0101 */ - {SUBNBX,"(DE-)" }, /* b6: 0111 0000 1011 0110 */ - {SUBNBX,"(HL-)" }, /* b7: 0111 0000 1011 0111 */ - {illegal,nullptr }, /* b8: 0111 0000 1011 1000 */ - {LTAX,"(BC)" }, /* b9: 0111 0000 1011 1001 */ - {LTAX,"(DE)" }, /* ba: 0111 0000 1011 1010 */ - {LTAX,"(HL)" }, /* bb: 0111 0000 1011 1011 */ - {LTAX,"(DE+)" }, /* bc: 0111 0000 1011 1100 */ - {LTAX,"(HL+)" }, /* bd: 0111 0000 1011 1101 */ - {LTAX,"(DE-)" }, /* be: 0111 0000 1011 1110 */ - {LTAX,"(HL-)" }, /* bf: 0111 0000 1011 1111 */ + { }, // b0: 0111 0000 1011 0000 + {SUBNBX, "(BC)" }, // b1: 0111 0000 1011 0001 + {SUBNBX, "(DE)" }, // b2: 0111 0000 1011 0010 + {SUBNBX, "(HL)" }, // b3: 0111 0000 1011 0011 + {SUBNBX, "(DE+)" }, // b4: 0111 0000 1011 0100 + {SUBNBX, "(HL+)" }, // b5: 0111 0000 1011 0101 + {SUBNBX, "(DE-)" }, // b6: 0111 0000 1011 0110 + {SUBNBX, "(HL-)" }, // b7: 0111 0000 1011 0111 + { }, // b8: 0111 0000 1011 1000 + {LTAX, "(BC)" }, // b9: 0111 0000 1011 1001 + {LTAX, "(DE)" }, // ba: 0111 0000 1011 1010 + {LTAX, "(HL)" }, // bb: 0111 0000 1011 1011 + {LTAX, "(DE+)" }, // bc: 0111 0000 1011 1100 + {LTAX, "(HL+)" }, // bd: 0111 0000 1011 1101 + {LTAX, "(DE-)" }, // be: 0111 0000 1011 1110 + {LTAX, "(HL-)" }, // bf: 0111 0000 1011 1111 - {illegal,nullptr }, /* c0: 0111 0000 1100 0000 */ - {ADDX,"(BC)" }, /* c1: 0111 0000 1100 0001 */ - {ADDX,"(DE)" }, /* c2: 0111 0000 1100 0010 */ - {ADDX,"(HL)" }, /* c3: 0111 0000 1100 0011 */ - {ADDX,"(DE+)" }, /* c4: 0111 0000 1100 0100 */ - {ADDX,"(HL+)" }, /* c5: 0111 0000 1100 0101 */ - {ADDX,"(DE-)" }, /* c6: 0111 0000 1100 0110 */ - {ADDX,"(HL-)" }, /* c7: 0111 0000 1100 0111 */ - {illegal,nullptr }, /* c8: 0111 0000 1100 1000 */ - {ONAX,"(BC)" }, /* c9: 0111 0000 1100 1001 */ - {ONAX,"(DE)" }, /* ca: 0111 0000 1100 1010 */ - {ONAX,"(HL)" }, /* cb: 0111 0000 1100 1011 */ - {ONAX,"(DE+)" }, /* cc: 0111 0000 1100 1100 */ - {ONAX,"(HL+)" }, /* cd: 0111 0000 1100 1101 */ - {ONAX,"(DE-)" }, /* ce: 0111 0000 1100 1110 */ - {ONAX,"(HL-)" }, /* cf: 0111 0000 1100 1111 */ + { }, // c0: 0111 0000 1100 0000 + {ADDX, "(BC)" }, // c1: 0111 0000 1100 0001 + {ADDX, "(DE)" }, // c2: 0111 0000 1100 0010 + {ADDX, "(HL)" }, // c3: 0111 0000 1100 0011 + {ADDX, "(DE+)" }, // c4: 0111 0000 1100 0100 + {ADDX, "(HL+)" }, // c5: 0111 0000 1100 0101 + {ADDX, "(DE-)" }, // c6: 0111 0000 1100 0110 + {ADDX, "(HL-)" }, // c7: 0111 0000 1100 0111 + { }, // c8: 0111 0000 1100 1000 + {ONAX, "(BC)" }, // c9: 0111 0000 1100 1001 + {ONAX, "(DE)" }, // ca: 0111 0000 1100 1010 + {ONAX, "(HL)" }, // cb: 0111 0000 1100 1011 + {ONAX, "(DE+)" }, // cc: 0111 0000 1100 1100 + {ONAX, "(HL+)" }, // cd: 0111 0000 1100 1101 + {ONAX, "(DE-)" }, // ce: 0111 0000 1100 1110 + {ONAX, "(HL-)" }, // cf: 0111 0000 1100 1111 - {illegal,nullptr }, /* d0: 0111 0000 1101 0000 */ - {ADCX,"(BC)" }, /* d1: 0111 0000 1101 0001 */ - {ADCX,"(DE)" }, /* d2: 0111 0000 1101 0010 */ - {ADCX,"(HL)" }, /* d3: 0111 0000 1101 0011 */ - {ADCX,"(DE+)" }, /* d4: 0111 0000 1101 0100 */ - {ADCX,"(HL+)" }, /* d5: 0111 0000 1101 0101 */ - {ADCX,"(DE-)" }, /* d6: 0111 0000 1101 0110 */ - {ADCX,"(HL-)" }, /* d7: 0111 0000 1101 0111 */ - {illegal,nullptr }, /* d8: 0111 0000 1101 1000 */ - {OFFAX,"(BC)" }, /* d9: 0111 0000 1101 1001 */ - {OFFAX,"(DE)" }, /* da: 0111 0000 1101 1010 */ - {OFFAX,"(HL)" }, /* db: 0111 0000 1101 1011 */ - {OFFAX,"(DE+)" }, /* dc: 0111 0000 1101 1100 */ - {OFFAX,"(HL+)" }, /* dd: 0111 0000 1101 1101 */ - {OFFAX,"(DE-)" }, /* de: 0111 0000 1101 1110 */ - {OFFAX,"(HL-)" }, /* df: 0111 0000 1101 1111 */ + { }, // d0: 0111 0000 1101 0000 + {ADCX, "(BC)" }, // d1: 0111 0000 1101 0001 + {ADCX, "(DE)" }, // d2: 0111 0000 1101 0010 + {ADCX, "(HL)" }, // d3: 0111 0000 1101 0011 + {ADCX, "(DE+)" }, // d4: 0111 0000 1101 0100 + {ADCX, "(HL+)" }, // d5: 0111 0000 1101 0101 + {ADCX, "(DE-)" }, // d6: 0111 0000 1101 0110 + {ADCX, "(HL-)" }, // d7: 0111 0000 1101 0111 + { }, // d8: 0111 0000 1101 1000 + {OFFAX, "(BC)" }, // d9: 0111 0000 1101 1001 + {OFFAX, "(DE)" }, // da: 0111 0000 1101 1010 + {OFFAX, "(HL)" }, // db: 0111 0000 1101 1011 + {OFFAX, "(DE+)" }, // dc: 0111 0000 1101 1100 + {OFFAX, "(HL+)" }, // dd: 0111 0000 1101 1101 + {OFFAX, "(DE-)" }, // de: 0111 0000 1101 1110 + {OFFAX, "(HL-)" }, // df: 0111 0000 1101 1111 - {illegal,nullptr }, /* e0: 0111 0000 1110 0000 */ - {SUBX,"(BC)" }, /* e1: 0111 0000 1110 0001 */ - {SUBX,"(DE)" }, /* e2: 0111 0000 1110 0010 */ - {SUBX,"(HL)" }, /* e3: 0111 0000 1110 0011 */ - {SUBX,"(DE+)" }, /* e4: 0111 0000 1110 0100 */ - {SUBX,"(HL+)" }, /* e5: 0111 0000 1110 0101 */ - {SUBX,"(DE-)" }, /* e6: 0111 0000 1110 0110 */ - {SUBX,"(HL-)" }, /* e7: 0111 0000 1110 0111 */ - {illegal,nullptr }, /* e8: 0111 0000 1110 1000 */ - {NEAX,"(BC)" }, /* e9: 0111 0000 1110 1001 */ - {NEAX,"(DE)" }, /* ea: 0111 0000 1110 1010 */ - {NEAX,"(HL)" }, /* eb: 0111 0000 1110 1011 */ - {NEAX,"(DE+)" }, /* ec: 0111 0000 1110 1100 */ - {NEAX,"(HL+)" }, /* ed: 0111 0000 1110 1101 */ - {NEAX,"(DE-)" }, /* ee: 0111 0000 1110 1110 */ - {NEAX,"(HL-)" }, /* ef: 0111 0000 1110 1111 */ + { }, // e0: 0111 0000 1110 0000 + {SUBX, "(BC)" }, // e1: 0111 0000 1110 0001 + {SUBX, "(DE)" }, // e2: 0111 0000 1110 0010 + {SUBX, "(HL)" }, // e3: 0111 0000 1110 0011 + {SUBX, "(DE+)" }, // e4: 0111 0000 1110 0100 + {SUBX, "(HL+)" }, // e5: 0111 0000 1110 0101 + {SUBX, "(DE-)" }, // e6: 0111 0000 1110 0110 + {SUBX, "(HL-)" }, // e7: 0111 0000 1110 0111 + { }, // e8: 0111 0000 1110 1000 + {NEAX, "(BC)" }, // e9: 0111 0000 1110 1001 + {NEAX, "(DE)" }, // ea: 0111 0000 1110 1010 + {NEAX, "(HL)" }, // eb: 0111 0000 1110 1011 + {NEAX, "(DE+)" }, // ec: 0111 0000 1110 1100 + {NEAX, "(HL+)" }, // ed: 0111 0000 1110 1101 + {NEAX, "(DE-)" }, // ee: 0111 0000 1110 1110 + {NEAX, "(HL-)" }, // ef: 0111 0000 1110 1111 - {illegal,nullptr }, /* f0: 0111 0000 1111 0000 */ - {SBBX,"(BC)" }, /* f1: 0111 0000 1111 0001 */ - {SBBX,"(DE)" }, /* f2: 0111 0000 1111 0010 */ - {SBBX,"(HL)" }, /* f3: 0111 0000 1111 0011 */ - {SBBX,"(DE+)" }, /* f4: 0111 0000 1111 0100 */ - {SBBX,"(HL+)" }, /* f5: 0111 0000 1111 0101 */ - {SBBX,"(DE-)" }, /* f6: 0111 0000 1111 0110 */ - {SBBX,"(HL-)" }, /* f7: 0111 0000 1111 0111 */ - {illegal,nullptr }, /* f8: 0111 0000 1111 1000 */ - {EQAX,"(BC)" }, /* f9: 0111 0000 1111 1001 */ - {EQAX,"(DE)" }, /* fa: 0111 0000 1111 1010 */ - {EQAX,"(HL)" }, /* fb: 0111 0000 1111 1011 */ - {EQAX,"(DE+)" }, /* fc: 0111 0000 1111 1100 */ - {EQAX,"(HL+)" }, /* fd: 0111 0000 1111 1101 */ - {EQAX,"(DE-)" }, /* fe: 0111 0000 1111 1110 */ - {EQAX,"(HL-)" } /* ff: 0111 0000 1111 1111 */ + { }, // f0: 0111 0000 1111 0000 + {SBBX, "(BC)" }, // f1: 0111 0000 1111 0001 + {SBBX, "(DE)" }, // f2: 0111 0000 1111 0010 + {SBBX, "(HL)" }, // f3: 0111 0000 1111 0011 + {SBBX, "(DE+)" }, // f4: 0111 0000 1111 0100 + {SBBX, "(HL+)" }, // f5: 0111 0000 1111 0101 + {SBBX, "(DE-)" }, // f6: 0111 0000 1111 0110 + {SBBX, "(HL-)" }, // f7: 0111 0000 1111 0111 + { }, // f8: 0111 0000 1111 1000 + {EQAX, "(BC)" }, // f9: 0111 0000 1111 1001 + {EQAX, "(DE)" }, // fa: 0111 0000 1111 1010 + {EQAX, "(HL)" }, // fb: 0111 0000 1111 1011 + {EQAX, "(DE+)" }, // fc: 0111 0000 1111 1100 + {EQAX, "(HL+)" }, // fd: 0111 0000 1111 1101 + {EQAX, "(DE-)" }, // fe: 0111 0000 1111 1110 + {EQAX, "(HL-)" } // ff: 0111 0000 1111 1111 }; -/* prefix 74 */ -static const struct dasm_s dasm74[256] = +// prefix 74 +const dasm_s dasm_s::d74[256] = { - {illegal,nullptr }, /* 00: 0111 0100 0000 0000 */ - {illegal,nullptr }, /* 01: 0111 0100 0000 0001 */ - {illegal,nullptr }, /* 02: 0111 0100 0000 0010 */ - {illegal,nullptr }, /* 03: 0111 0100 0000 0011 */ - {illegal,nullptr }, /* 04: 0111 0100 0000 0100 */ - {illegal,nullptr }, /* 05: 0111 0100 0000 0101 */ - {illegal,nullptr }, /* 06: 0111 0100 0000 0110 */ - {illegal,nullptr }, /* 07: 0111 0100 0000 0111 */ - {ANI,"V,%b" }, /* 08: 0111 0100 0000 1000 xxxx xxxx */ - {ANI,"A,%b" }, /* 09: 0111 0100 0000 1001 xxxx xxxx */ - {ANI,"B,%b" }, /* 0a: 0111 0100 0000 1010 xxxx xxxx */ - {ANI,"C,%b" }, /* 0b: 0111 0100 0000 1011 xxxx xxxx */ - {ANI,"D,%b" }, /* 0c: 0111 0100 0000 1100 xxxx xxxx */ - {ANI,"E,%b" }, /* 0d: 0111 0100 0000 1101 xxxx xxxx */ - {ANI,"H,%b" }, /* 0e: 0111 0100 0000 1110 xxxx xxxx */ - {ANI,"L,%b" }, /* 0f: 0111 0100 0000 1111 xxxx xxxx */ + { }, // 00: 0111 0100 0000 0000 + { }, // 01: 0111 0100 0000 0001 + { }, // 02: 0111 0100 0000 0010 + { }, // 03: 0111 0100 0000 0011 + { }, // 04: 0111 0100 0000 0100 + { }, // 05: 0111 0100 0000 0101 + { }, // 06: 0111 0100 0000 0110 + { }, // 07: 0111 0100 0000 0111 + {ANI, "V,%b" }, // 08: 0111 0100 0000 1000 xxxx xxxx + {ANI, "A,%b" }, // 09: 0111 0100 0000 1001 xxxx xxxx + {ANI, "B,%b" }, // 0a: 0111 0100 0000 1010 xxxx xxxx + {ANI, "C,%b" }, // 0b: 0111 0100 0000 1011 xxxx xxxx + {ANI, "D,%b" }, // 0c: 0111 0100 0000 1100 xxxx xxxx + {ANI, "E,%b" }, // 0d: 0111 0100 0000 1101 xxxx xxxx + {ANI, "H,%b" }, // 0e: 0111 0100 0000 1110 xxxx xxxx + {ANI, "L,%b" }, // 0f: 0111 0100 0000 1111 xxxx xxxx - {XRI,"V,%b" }, /* 10: 0111 0100 0001 0000 xxxx xxxx */ - {XRI,"A,%b" }, /* 11: 0111 0100 0001 0001 xxxx xxxx */ - {XRI,"B,%b" }, /* 12: 0111 0100 0001 0010 xxxx xxxx */ - {XRI,"C,%b" }, /* 13: 0111 0100 0001 0011 xxxx xxxx */ - {XRI,"D,%b" }, /* 14: 0111 0100 0001 0100 xxxx xxxx */ - {XRI,"E,%b" }, /* 15: 0111 0100 0001 0101 xxxx xxxx */ - {XRI,"H,%b" }, /* 16: 0111 0100 0001 0110 xxxx xxxx */ - {XRI,"L,%b" }, /* 17: 0111 0100 0001 0111 xxxx xxxx */ - {ORI,"V,%b" }, /* 18: 0111 0100 0001 1000 xxxx xxxx */ - {ORI,"A,%b" }, /* 19: 0111 0100 0001 1001 xxxx xxxx */ - {ORI,"B,%b" }, /* 1a: 0111 0100 0001 1010 xxxx xxxx */ - {ORI,"C,%b" }, /* 1b: 0111 0100 0001 1011 xxxx xxxx */ - {ORI,"D,%b" }, /* 1c: 0111 0100 0001 1100 xxxx xxxx */ - {ORI,"E,%b" }, /* 1d: 0111 0100 0001 1101 xxxx xxxx */ - {ORI,"H,%b" }, /* 1e: 0111 0100 0001 1110 xxxx xxxx */ - {ORI,"L,%b" }, /* 1f: 0111 0100 0001 1111 xxxx xxxx */ + {XRI, "V,%b" }, // 10: 0111 0100 0001 0000 xxxx xxxx + {XRI, "A,%b" }, // 11: 0111 0100 0001 0001 xxxx xxxx + {XRI, "B,%b" }, // 12: 0111 0100 0001 0010 xxxx xxxx + {XRI, "C,%b" }, // 13: 0111 0100 0001 0011 xxxx xxxx + {XRI, "D,%b" }, // 14: 0111 0100 0001 0100 xxxx xxxx + {XRI, "E,%b" }, // 15: 0111 0100 0001 0101 xxxx xxxx + {XRI, "H,%b" }, // 16: 0111 0100 0001 0110 xxxx xxxx + {XRI, "L,%b" }, // 17: 0111 0100 0001 0111 xxxx xxxx + {ORI, "V,%b" }, // 18: 0111 0100 0001 1000 xxxx xxxx + {ORI, "A,%b" }, // 19: 0111 0100 0001 1001 xxxx xxxx + {ORI, "B,%b" }, // 1a: 0111 0100 0001 1010 xxxx xxxx + {ORI, "C,%b" }, // 1b: 0111 0100 0001 1011 xxxx xxxx + {ORI, "D,%b" }, // 1c: 0111 0100 0001 1100 xxxx xxxx + {ORI, "E,%b" }, // 1d: 0111 0100 0001 1101 xxxx xxxx + {ORI, "H,%b" }, // 1e: 0111 0100 0001 1110 xxxx xxxx + {ORI, "L,%b" }, // 1f: 0111 0100 0001 1111 xxxx xxxx - {ADINC,"V,%b" }, /* 20: 0111 0100 0010 0000 xxxx xxxx */ - {ADINC,"A,%b" }, /* 21: 0111 0100 0010 0001 xxxx xxxx */ - {ADINC,"B,%b" }, /* 22: 0111 0100 0010 0010 xxxx xxxx */ - {ADINC,"C,%b" }, /* 23: 0111 0100 0010 0011 xxxx xxxx */ - {ADINC,"D,%b" }, /* 24: 0111 0100 0010 0100 xxxx xxxx */ - {ADINC,"E,%b" }, /* 25: 0111 0100 0010 0101 xxxx xxxx */ - {ADINC,"H,%b" }, /* 26: 0111 0100 0010 0110 xxxx xxxx */ - {ADINC,"L,%b" }, /* 27: 0111 0100 0010 0111 xxxx xxxx */ - {GTI,"V,%b" }, /* 28: 0111 0100 0010 1000 xxxx xxxx */ - {GTI,"A,%b" }, /* 29: 0111 0100 0010 1001 xxxx xxxx */ - {GTI,"B,%b" }, /* 2a: 0111 0100 0010 1010 xxxx xxxx */ - {GTI,"C,%b" }, /* 2b: 0111 0100 0010 1011 xxxx xxxx */ - {GTI,"D,%b" }, /* 2c: 0111 0100 0010 1100 xxxx xxxx */ - {GTI,"E,%b" }, /* 2d: 0111 0100 0010 1101 xxxx xxxx */ - {GTI,"H,%b" }, /* 2e: 0111 0100 0010 1110 xxxx xxxx */ - {GTI,"L,%b" }, /* 2f: 0111 0100 0010 1111 xxxx xxxx */ + {ADINC, "V,%b" }, // 20: 0111 0100 0010 0000 xxxx xxxx + {ADINC, "A,%b" }, // 21: 0111 0100 0010 0001 xxxx xxxx + {ADINC, "B,%b" }, // 22: 0111 0100 0010 0010 xxxx xxxx + {ADINC, "C,%b" }, // 23: 0111 0100 0010 0011 xxxx xxxx + {ADINC, "D,%b" }, // 24: 0111 0100 0010 0100 xxxx xxxx + {ADINC, "E,%b" }, // 25: 0111 0100 0010 0101 xxxx xxxx + {ADINC, "H,%b" }, // 26: 0111 0100 0010 0110 xxxx xxxx + {ADINC, "L,%b" }, // 27: 0111 0100 0010 0111 xxxx xxxx + {GTI, "V,%b" }, // 28: 0111 0100 0010 1000 xxxx xxxx + {GTI, "A,%b" }, // 29: 0111 0100 0010 1001 xxxx xxxx + {GTI, "B,%b" }, // 2a: 0111 0100 0010 1010 xxxx xxxx + {GTI, "C,%b" }, // 2b: 0111 0100 0010 1011 xxxx xxxx + {GTI, "D,%b" }, // 2c: 0111 0100 0010 1100 xxxx xxxx + {GTI, "E,%b" }, // 2d: 0111 0100 0010 1101 xxxx xxxx + {GTI, "H,%b" }, // 2e: 0111 0100 0010 1110 xxxx xxxx + {GTI, "L,%b" }, // 2f: 0111 0100 0010 1111 xxxx xxxx - {SUINB,"V,%b" }, /* 30: 0111 0100 0011 0000 xxxx xxxx */ - {SUINB,"A,%b" }, /* 31: 0111 0100 0011 0001 xxxx xxxx */ - {SUINB,"B,%b" }, /* 32: 0111 0100 0011 0010 xxxx xxxx */ - {SUINB,"C,%b" }, /* 33: 0111 0100 0011 0011 xxxx xxxx */ - {SUINB,"D,%b" }, /* 34: 0111 0100 0011 0100 xxxx xxxx */ - {SUINB,"E,%b" }, /* 35: 0111 0100 0011 0101 xxxx xxxx */ - {SUINB,"H,%b" }, /* 36: 0111 0100 0011 0110 xxxx xxxx */ - {SUINB,"L,%b" }, /* 37: 0111 0100 0011 0111 xxxx xxxx */ - {LTI,"V,%b" }, /* 38: 0111 0100 0011 1000 xxxx xxxx */ - {LTI,"A,%b" }, /* 39: 0111 0100 0011 1001 xxxx xxxx */ - {LTI,"B,%b" }, /* 3a: 0111 0100 0011 1010 xxxx xxxx */ - {LTI,"C,%b" }, /* 3b: 0111 0100 0011 1011 xxxx xxxx */ - {LTI,"D,%b" }, /* 3c: 0111 0100 0011 1100 xxxx xxxx */ - {LTI,"E,%b" }, /* 3d: 0111 0100 0011 1101 xxxx xxxx */ - {LTI,"H,%b" }, /* 3e: 0111 0100 0011 1110 xxxx xxxx */ - {LTI,"L,%b" }, /* 3f: 0111 0100 0011 1111 xxxx xxxx */ + {SUINB, "V,%b" }, // 30: 0111 0100 0011 0000 xxxx xxxx + {SUINB, "A,%b" }, // 31: 0111 0100 0011 0001 xxxx xxxx + {SUINB, "B,%b" }, // 32: 0111 0100 0011 0010 xxxx xxxx + {SUINB, "C,%b" }, // 33: 0111 0100 0011 0011 xxxx xxxx + {SUINB, "D,%b" }, // 34: 0111 0100 0011 0100 xxxx xxxx + {SUINB, "E,%b" }, // 35: 0111 0100 0011 0101 xxxx xxxx + {SUINB, "H,%b" }, // 36: 0111 0100 0011 0110 xxxx xxxx + {SUINB, "L,%b" }, // 37: 0111 0100 0011 0111 xxxx xxxx + {LTI, "V,%b" }, // 37: 0111 0100 0011 1000 xxxx xxxx + {LTI, "A,%b" }, // 39: 0111 0100 0011 1001 xxxx xxxx + {LTI, "B,%b" }, // 3a: 0111 0100 0011 1010 xxxx xxxx + {LTI, "C,%b" }, // 3b: 0111 0100 0011 1011 xxxx xxxx + {LTI, "D,%b" }, // 3c: 0111 0100 0011 1100 xxxx xxxx + {LTI, "E,%b" }, // 3d: 0111 0100 0011 1101 xxxx xxxx + {LTI, "H,%b" }, // 3e: 0111 0100 0011 1110 xxxx xxxx + {LTI, "L,%b" }, // 3f: 0111 0100 0011 1111 xxxx xxxx - {ADI,"V,%b" }, /* 40: 0111 0100 0100 0000 xxxx xxxx */ - {ADI,"A,%b" }, /* 41: 0111 0100 0100 0001 xxxx xxxx */ - {ADI,"B,%b" }, /* 42: 0111 0100 0100 0010 xxxx xxxx */ - {ADI,"C,%b" }, /* 43: 0111 0100 0100 0011 xxxx xxxx */ - {ADI,"D,%b" }, /* 44: 0111 0100 0100 0100 xxxx xxxx */ - {ADI,"E,%b" }, /* 45: 0111 0100 0100 0101 xxxx xxxx */ - {ADI,"H,%b" }, /* 46: 0111 0100 0100 0110 xxxx xxxx */ - {ADI,"L,%b" }, /* 47: 0111 0100 0100 0111 xxxx xxxx */ - {ONI,"V,%b" }, /* 48: 0111 0100 0100 1000 xxxx xxxx */ - {ONI,"A,%b" }, /* 49: 0111 0100 0100 1001 xxxx xxxx */ - {ONI,"B,%b" }, /* 4a: 0111 0100 0100 1010 xxxx xxxx */ - {ONI,"C,%b" }, /* 4b: 0111 0100 0100 1011 xxxx xxxx */ - {ONI,"D,%b" }, /* 4c: 0111 0100 0100 1100 xxxx xxxx */ - {ONI,"E,%b" }, /* 4d: 0111 0100 0100 1101 xxxx xxxx */ - {ONI,"H,%b" }, /* 4e: 0111 0100 0100 1110 xxxx xxxx */ - {ONI,"L,%b" }, /* 4f: 0111 0100 0100 1111 xxxx xxxx */ + {ADI, "V,%b" }, // 40: 0111 0100 0100 0000 xxxx xxxx + {ADI, "A,%b" }, // 41: 0111 0100 0100 0001 xxxx xxxx + {ADI, "B,%b" }, // 42: 0111 0100 0100 0010 xxxx xxxx + {ADI, "C,%b" }, // 43: 0111 0100 0100 0011 xxxx xxxx + {ADI, "D,%b" }, // 44: 0111 0100 0100 0100 xxxx xxxx + {ADI, "E,%b" }, // 45: 0111 0100 0100 0101 xxxx xxxx + {ADI, "H,%b" }, // 46: 0111 0100 0100 0110 xxxx xxxx + {ADI, "L,%b" }, // 47: 0111 0100 0100 0111 xxxx xxxx + {ONI, "V,%b" }, // 48: 0111 0100 0100 1000 xxxx xxxx + {ONI, "A,%b" }, // 49: 0111 0100 0100 1001 xxxx xxxx + {ONI, "B,%b" }, // 4a: 0111 0100 0100 1010 xxxx xxxx + {ONI, "C,%b" }, // 4b: 0111 0100 0100 1011 xxxx xxxx + {ONI, "D,%b" }, // 4c: 0111 0100 0100 1100 xxxx xxxx + {ONI, "E,%b" }, // 4d: 0111 0100 0100 1101 xxxx xxxx + {ONI, "H,%b" }, // 4e: 0111 0100 0100 1110 xxxx xxxx + {ONI, "L,%b" }, // 4f: 0111 0100 0100 1111 xxxx xxxx - {ACI,"V,%b" }, /* 50: 0111 0100 0101 0000 xxxx xxxx */ - {ACI,"A,%b" }, /* 51: 0111 0100 0101 0001 xxxx xxxx */ - {ACI,"B,%b" }, /* 52: 0111 0100 0101 0010 xxxx xxxx */ - {ACI,"C,%b" }, /* 53: 0111 0100 0101 0011 xxxx xxxx */ - {ACI,"D,%b" }, /* 54: 0111 0100 0101 0100 xxxx xxxx */ - {ACI,"E,%b" }, /* 55: 0111 0100 0101 0101 xxxx xxxx */ - {ACI,"H,%b" }, /* 56: 0111 0100 0101 0110 xxxx xxxx */ - {ACI,"L,%b" }, /* 57: 0111 0100 0101 0111 xxxx xxxx */ - {OFFI,"V,%b" }, /* 58: 0111 0100 0101 1000 xxxx xxxx */ - {OFFI,"A,%b" }, /* 59: 0111 0100 0101 1001 xxxx xxxx */ - {OFFI,"B,%b" }, /* 5a: 0111 0100 0101 1010 xxxx xxxx */ - {OFFI,"C,%b" }, /* 5b: 0111 0100 0101 1011 xxxx xxxx */ - {OFFI,"D,%b" }, /* 5c: 0111 0100 0101 1100 xxxx xxxx */ - {OFFI,"E,%b" }, /* 5d: 0111 0100 0101 1101 xxxx xxxx */ - {OFFI,"H,%b" }, /* 5e: 0111 0100 0101 1110 xxxx xxxx */ - {OFFI,"L,%b" }, /* 5f: 0111 0100 0101 1111 xxxx xxxx */ + {ACI, "V,%b" }, // 50: 0111 0100 0101 0000 xxxx xxxx + {ACI, "A,%b" }, // 51: 0111 0100 0101 0001 xxxx xxxx + {ACI, "B,%b" }, // 52: 0111 0100 0101 0010 xxxx xxxx + {ACI, "C,%b" }, // 53: 0111 0100 0101 0011 xxxx xxxx + {ACI, "D,%b" }, // 54: 0111 0100 0101 0100 xxxx xxxx + {ACI, "E,%b" }, // 55: 0111 0100 0101 0101 xxxx xxxx + {ACI, "H,%b" }, // 56: 0111 0100 0101 0110 xxxx xxxx + {ACI, "L,%b" }, // 57: 0111 0100 0101 0111 xxxx xxxx + {OFFI, "V,%b" }, // 58: 0111 0100 0101 1000 xxxx xxxx + {OFFI, "A,%b" }, // 59: 0111 0100 0101 1001 xxxx xxxx + {OFFI, "B,%b" }, // 5a: 0111 0100 0101 1010 xxxx xxxx + {OFFI, "C,%b" }, // 5b: 0111 0100 0101 1011 xxxx xxxx + {OFFI, "D,%b" }, // 5c: 0111 0100 0101 1100 xxxx xxxx + {OFFI, "E,%b" }, // 5d: 0111 0100 0101 1101 xxxx xxxx + {OFFI, "H,%b" }, // 5e: 0111 0100 0101 1110 xxxx xxxx + {OFFI, "L,%b" }, // 5f: 0111 0100 0101 1111 xxxx xxxx - {SUI,"V,%b" }, /* 60: 0111 0100 0110 0000 xxxx xxxx */ - {SUI,"A,%b" }, /* 61: 0111 0100 0110 0001 xxxx xxxx */ - {SUI,"B,%b" }, /* 62: 0111 0100 0110 0010 xxxx xxxx */ - {SUI,"C,%b" }, /* 63: 0111 0100 0110 0011 xxxx xxxx */ - {SUI,"D,%b" }, /* 64: 0111 0100 0110 0100 xxxx xxxx */ - {SUI,"E,%b" }, /* 65: 0111 0100 0110 0101 xxxx xxxx */ - {SUI,"H,%b" }, /* 66: 0111 0100 0110 0110 xxxx xxxx */ - {SUI,"L,%b" }, /* 67: 0111 0100 0110 0111 xxxx xxxx */ - {NEI,"V,%b" }, /* 68: 0111 0100 0110 1000 xxxx xxxx */ - {NEI,"A,%b" }, /* 69: 0111 0100 0110 1001 xxxx xxxx */ - {NEI,"B,%b" }, /* 6a: 0111 0100 0110 1010 xxxx xxxx */ - {NEI,"C,%b" }, /* 6b: 0111 0100 0110 1011 xxxx xxxx */ - {NEI,"D,%b" }, /* 6c: 0111 0100 0110 1100 xxxx xxxx */ - {NEI,"E,%b" }, /* 6d: 0111 0100 0110 1101 xxxx xxxx */ - {NEI,"H,%b" }, /* 6e: 0111 0100 0110 1110 xxxx xxxx */ - {NEI,"L,%b" }, /* 6f: 0111 0100 0110 1111 xxxx xxxx */ + {SUI, "V,%b" }, // 60: 0111 0100 0110 0000 xxxx xxxx + {SUI, "A,%b" }, // 61: 0111 0100 0110 0001 xxxx xxxx + {SUI, "B,%b" }, // 62: 0111 0100 0110 0010 xxxx xxxx + {SUI, "C,%b" }, // 63: 0111 0100 0110 0011 xxxx xxxx + {SUI, "D,%b" }, // 64: 0111 0100 0110 0100 xxxx xxxx + {SUI, "E,%b" }, // 65: 0111 0100 0110 0101 xxxx xxxx + {SUI, "H,%b" }, // 66: 0111 0100 0110 0110 xxxx xxxx + {SUI, "L,%b" }, // 67: 0111 0100 0110 0111 xxxx xxxx + {NEI, "V,%b" }, // 68: 0111 0100 0110 1000 xxxx xxxx + {NEI, "A,%b" }, // 69: 0111 0100 0110 1001 xxxx xxxx + {NEI, "B,%b" }, // 6a: 0111 0100 0110 1010 xxxx xxxx + {NEI, "C,%b" }, // 6b: 0111 0100 0110 1011 xxxx xxxx + {NEI, "D,%b" }, // 6c: 0111 0100 0110 1100 xxxx xxxx + {NEI, "E,%b" }, // 6d: 0111 0100 0110 1101 xxxx xxxx + {NEI, "H,%b" }, // 6e: 0111 0100 0110 1110 xxxx xxxx + {NEI, "L,%b" }, // 6f: 0111 0100 0110 1111 xxxx xxxx - {SBI,"V,%b" }, /* 70: 0111 0100 0111 0000 xxxx xxxx */ - {SBI,"A,%b" }, /* 71: 0111 0100 0111 0001 xxxx xxxx */ - {SBI,"B,%b" }, /* 72: 0111 0100 0111 0010 xxxx xxxx */ - {SBI,"C,%b" }, /* 73: 0111 0100 0111 0011 xxxx xxxx */ - {SBI,"D,%b" }, /* 74: 0111 0100 0111 0100 xxxx xxxx */ - {SBI,"E,%b" }, /* 75: 0111 0100 0111 0101 xxxx xxxx */ - {SBI,"H,%b" }, /* 76: 0111 0100 0111 0110 xxxx xxxx */ - {SBI,"L,%b" }, /* 77: 0111 0100 0111 0111 xxxx xxxx */ - {EQI,"V,%b" }, /* 78: 0111 0100 0111 1000 xxxx xxxx */ - {EQI,"A,%b" }, /* 79: 0111 0100 0111 1001 xxxx xxxx */ - {EQI,"B,%b" }, /* 7a: 0111 0100 0111 1010 xxxx xxxx */ - {EQI,"C,%b" }, /* 7b: 0111 0100 0111 1011 xxxx xxxx */ - {EQI,"D,%b" }, /* 7c: 0111 0100 0111 1100 xxxx xxxx */ - {EQI,"E,%b" }, /* 7d: 0111 0100 0111 1101 xxxx xxxx */ - {EQI,"H,%b" }, /* 7e: 0111 0100 0111 1110 xxxx xxxx */ - {EQI,"L,%b" }, /* 7f: 0111 0100 0111 1111 xxxx xxxx */ + {SBI, "V,%b" }, // 70: 0111 0100 0111 0000 xxxx xxxx + {SBI, "A,%b" }, // 71: 0111 0100 0111 0001 xxxx xxxx + {SBI, "B,%b" }, // 72: 0111 0100 0111 0010 xxxx xxxx + {SBI, "C,%b" }, // 73: 0111 0100 0111 0011 xxxx xxxx + {SBI, "D,%b" }, // 74: 0111 0100 0111 0100 xxxx xxxx + {SBI, "E,%b" }, // 75: 0111 0100 0111 0101 xxxx xxxx + {SBI, "H,%b" }, // 76: 0111 0100 0111 0110 xxxx xxxx + {SBI, "L,%b" }, // 77: 0111 0100 0111 0111 xxxx xxxx + {EQI, "V,%b" }, // 78: 0111 0100 0111 1000 xxxx xxxx + {EQI, "A,%b" }, // 79: 0111 0100 0111 1001 xxxx xxxx + {EQI, "B,%b" }, // 7a: 0111 0100 0111 1010 xxxx xxxx + {EQI, "C,%b" }, // 7b: 0111 0100 0111 1011 xxxx xxxx + {EQI, "D,%b" }, // 7c: 0111 0100 0111 1100 xxxx xxxx + {EQI, "E,%b" }, // 7d: 0111 0100 0111 1101 xxxx xxxx + {EQI, "H,%b" }, // 7e: 0111 0100 0111 1110 xxxx xxxx + {EQI, "L,%b" }, // 7f: 0111 0100 0111 1111 xxxx xxxx - {illegal,nullptr }, /* 80: 0111 0100 1000 0000 */ - {illegal,nullptr }, /* 81: 0111 0100 1000 0001 */ - {illegal,nullptr }, /* 82: 0111 0100 1000 0010 */ - {illegal,nullptr }, /* 83: 0111 0100 1000 0011 */ - {illegal,nullptr }, /* 84: 0111 0100 1000 0100 */ - {illegal,nullptr }, /* 85: 0111 0100 1000 0101 */ - {illegal,nullptr }, /* 86: 0111 0100 1000 0110 */ - {illegal,nullptr }, /* 87: 0111 0100 1000 0111 */ - {ANAW,"%a" }, /* 88: 0111 0100 1000 1000 oooo oooo */ - {illegal,nullptr }, /* 89: 0111 0100 1000 1001 */ - {illegal,nullptr }, /* 8a: 0111 0100 1000 1010 */ - {illegal,nullptr }, /* 8b: 0111 0100 1000 1011 */ - {illegal,nullptr }, /* 8c: 0111 0100 1000 1100 */ - {DAN,"EA,BC" }, /* 8d: 0111 0100 1000 1101 */ - {DAN,"EA,DE" }, /* 8e: 0111 0100 1000 1110 */ - {DAN,"EA,HL" }, /* 8f: 0111 0100 1000 1111 */ + { }, // 80: 0111 0100 1000 0000 + { }, // 81: 0111 0100 1000 0001 + { }, // 82: 0111 0100 1000 0010 + { }, // 83: 0111 0100 1000 0011 + { }, // 84: 0111 0100 1000 0100 + { }, // 85: 0111 0100 1000 0101 + { }, // 86: 0111 0100 1000 0110 + { }, // 87: 0111 0100 1000 0111 + {ANAW, "%a" }, // 88: 0111 0100 1000 1000 oooo oooo + { }, // 89: 0111 0100 1000 1001 + { }, // 8a: 0111 0100 1000 1010 + { }, // 8b: 0111 0100 1000 1011 + { }, // 8c: 0111 0100 1000 1100 + {DAN, "EA,BC" }, // 8d: 0111 0100 1000 1101 + {DAN, "EA,DE" }, // 8e: 0111 0100 1000 1110 + {DAN, "EA,HL" }, // 8f: 0111 0100 1000 1111 - {XRAW,"%a" }, /* 90: 0111 0100 1001 0000 oooo oooo */ - {illegal,nullptr }, /* 91: 0111 0100 1001 0001 */ - {illegal,nullptr }, /* 92: 0111 0100 1001 0010 */ - {illegal,nullptr }, /* 93: 0111 0100 1001 0011 */ - {illegal,nullptr }, /* 94: 0111 0100 1001 0100 */ - {DXR,"EA,BC" }, /* 95: 0111 0100 1001 0101 */ - {DXR,"EA,DE" }, /* 96: 0111 0100 1001 0110 */ - {DXR,"EA,HL" }, /* 97: 0111 0100 1001 0111 */ - {ORAW,"%a" }, /* 98: 0111 0100 1001 1000 oooo oooo */ - {illegal,nullptr }, /* 99: 0111 0100 1001 1001 */ - {illegal,nullptr }, /* 9a: 0111 0100 1001 1010 */ - {illegal,nullptr }, /* 9b: 0111 0100 1001 1011 */ - {illegal,nullptr }, /* 9c: 0111 0100 1001 1100 */ - {DOR,"EA,BC" }, /* 9d: 0111 0100 1001 1101 */ - {DOR,"EA,DE" }, /* 9e: 0111 0100 1001 1110 */ - {DOR,"EA,HL" }, /* 9f: 0111 0100 1001 1111 */ + {XRAW, "%a" }, // 90: 0111 0100 1001 0000 oooo oooo + { }, // 91: 0111 0100 1001 0001 + { }, // 92: 0111 0100 1001 0010 + { }, // 93: 0111 0100 1001 0011 + { }, // 94: 0111 0100 1001 0100 + {DXR, "EA,BC" }, // 95: 0111 0100 1001 0101 + {DXR, "EA,DE" }, // 96: 0111 0100 1001 0110 + {DXR, "EA,HL" }, // 97: 0111 0100 1001 0111 + {ORAW, "%a" }, // 98: 0111 0100 1001 1000 oooo oooo + { }, // 99: 0111 0100 1001 1001 + { }, // 9a: 0111 0100 1001 1010 + { }, // 9b: 0111 0100 1001 1011 + { }, // 9c: 0111 0100 1001 1100 + {DOR, "EA,BC" }, // 9d: 0111 0100 1001 1101 + {DOR, "EA,DE" }, // 9e: 0111 0100 1001 1110 + {DOR, "EA,HL" }, // 9f: 0111 0100 1001 1111 - {ADDNCW,"%a" }, /* a0: 0111 0100 1010 0000 oooo oooo */ - {illegal,nullptr }, /* a1: 0111 0100 1010 0001 */ - {illegal,nullptr }, /* a2: 0111 0100 1010 0010 */ - {illegal,nullptr }, /* a3: 0111 0100 1010 0011 */ - {illegal,nullptr }, /* a4: 0111 0100 1010 0100 */ - {DADDNC,"EA,BC" }, /* a5: 0111 0100 1010 0101 */ - {DADDNC,"EA,DE" }, /* a6: 0111 0100 1010 0110 */ - {DADDNC,"EA,HL" }, /* a7: 0111 0100 1010 0111 */ - {GTAW,"%a" }, /* a8: 0111 0100 1010 1000 oooo oooo */ - {illegal,nullptr }, /* a9: 0111 0100 1010 1001 */ - {illegal,nullptr }, /* aa: 0111 0100 1010 1010 */ - {illegal,nullptr }, /* ab: 0111 0100 1010 1011 */ - {illegal,nullptr }, /* ac: 0111 0100 1010 1100 */ - {DGT,"EA,BC" }, /* ad: 0111 0100 1010 1101 */ - {DGT,"EA,DE" }, /* ae: 0111 0100 1010 1110 */ - {DGT,"EA,HL" }, /* af: 0111 0100 1010 1111 */ + {ADDNCW, "%a" }, // a0: 0111 0100 1010 0000 oooo oooo + { }, // a1: 0111 0100 1010 0001 + { }, // a2: 0111 0100 1010 0010 + { }, // a3: 0111 0100 1010 0011 + { }, // a4: 0111 0100 1010 0100 + {DADDNC, "EA,BC" }, // a5: 0111 0100 1010 0101 + {DADDNC, "EA,DE" }, // a6: 0111 0100 1010 0110 + {DADDNC, "EA,HL" }, // a7: 0111 0100 1010 0111 + {GTAW, "%a" }, // a8: 0111 0100 1010 1000 oooo oooo + { }, // a9: 0111 0100 1010 1001 + { }, // aa: 0111 0100 1010 1010 + { }, // ab: 0111 0100 1010 1011 + { }, // ac: 0111 0100 1010 1100 + {DGT, "EA,BC" }, // ad: 0111 0100 1010 1101 + {DGT, "EA,DE" }, // ae: 0111 0100 1010 1110 + {DGT, "EA,HL" }, // af: 0111 0100 1010 1111 - {SUBNBW,"%a" }, /* b0: 0111 0100 1011 0000 oooo oooo */ - {illegal,nullptr }, /* b1: 0111 0100 1011 0001 */ - {illegal,nullptr }, /* b2: 0111 0100 1011 0010 */ - {illegal,nullptr }, /* b3: 0111 0100 1011 0011 */ - {illegal,nullptr }, /* b4: 0111 0100 1011 0100 */ - {DSUBNB,"EA,BC" }, /* b5: 0111 0100 1011 0101 */ - {DSUBNB,"EA,DE" }, /* b6: 0111 0100 1011 0110 */ - {DSUBNB,"EA,HL" }, /* b7: 0111 0100 1011 0111 */ - {LTAW,"%a" }, /* b8: 0111 0100 1011 1000 oooo oooo */ - {illegal,nullptr }, /* b9: 0111 0100 1011 1001 */ - {illegal,nullptr }, /* ba: 0111 0100 1011 1010 */ - {illegal,nullptr }, /* bb: 0111 0100 1011 1011 */ - {illegal,nullptr }, /* bc: 0111 0100 1011 1100 */ - {DLT,"EA,BC" }, /* bd: 0111 0100 1011 1101 */ - {DLT,"EA,DE" }, /* be: 0111 0100 1011 1110 */ - {DLT,"EA,HL" }, /* bf: 0111 0100 1011 1111 */ + {SUBNBW, "%a" }, // b0: 0111 0100 1011 0000 oooo oooo + { }, // b1: 0111 0100 1011 0001 + { }, // b2: 0111 0100 1011 0010 + { }, // b3: 0111 0100 1011 0011 + { }, // b4: 0111 0100 1011 0100 + {DSUBNB, "EA,BC" }, // b5: 0111 0100 1011 0101 + {DSUBNB, "EA,DE" }, // b6: 0111 0100 1011 0110 + {DSUBNB, "EA,HL" }, // b7: 0111 0100 1011 0111 + {LTAW, "%a" }, // b8: 0111 0100 1011 1000 oooo oooo + { }, // b9: 0111 0100 1011 1001 + { }, // ba: 0111 0100 1011 1010 + { }, // bb: 0111 0100 1011 1011 + { }, // bc: 0111 0100 1011 1100 + {DLT, "EA,BC" }, // bd: 0111 0100 1011 1101 + {DLT, "EA,DE" }, // be: 0111 0100 1011 1110 + {DLT, "EA,HL" }, // bf: 0111 0100 1011 1111 - {ADDW,"%a" }, /* c0: 0111 0100 1100 0000 oooo oooo */ - {illegal,nullptr }, /* c1: 0111 0100 1100 0001 */ - {illegal,nullptr }, /* c2: 0111 0100 1100 0010 */ - {illegal,nullptr }, /* c3: 0111 0100 1100 0011 */ - {illegal,nullptr }, /* c4: 0111 0100 1100 0100 */ - {DADD,"EA,BC" }, /* c5: 0111 0100 1100 0101 */ - {DADD,"EA,DE" }, /* c6: 0111 0100 1100 0110 */ - {DADD,"EA,HL" }, /* c7: 0111 0100 1100 0111 */ - {ONAW,"%a" }, /* c8: 0111 0100 1100 1000 oooo oooo */ - {illegal,nullptr }, /* c9: 0111 0100 1100 1001 */ - {illegal,nullptr }, /* ca: 0111 0100 1100 1010 */ - {illegal,nullptr }, /* cb: 0111 0100 1100 1011 */ - {illegal,nullptr }, /* cc: 0111 0100 1100 1100 */ - {DON,"EA,BC" }, /* cd: 0111 0100 1100 1101 */ - {DON,"EA,DE" }, /* ce: 0111 0100 1100 1110 */ - {DON,"EA,HL" }, /* cf: 0111 0100 1100 1111 */ + {ADDW, "%a" }, // c0: 0111 0100 1100 0000 oooo oooo + { }, // c1: 0111 0100 1100 0001 + { }, // c2: 0111 0100 1100 0010 + { }, // c3: 0111 0100 1100 0011 + { }, // c4: 0111 0100 1100 0100 + {DADD, "EA,BC" }, // c5: 0111 0100 1100 0101 + {DADD, "EA,DE" }, // c6: 0111 0100 1100 0110 + {DADD, "EA,HL" }, // c7: 0111 0100 1100 0111 + {ONAW, "%a" }, // c8: 0111 0100 1100 1000 oooo oooo + { }, // c9: 0111 0100 1100 1001 + { }, // ca: 0111 0100 1100 1010 + { }, // cb: 0111 0100 1100 1011 + { }, // cc: 0111 0100 1100 1100 + {DON, "EA,BC" }, // cd: 0111 0100 1100 1101 + {DON, "EA,DE" }, // ce: 0111 0100 1100 1110 + {DON, "EA,HL" }, // cf: 0111 0100 1100 1111 - {ADCW,"%a" }, /* d0: 0111 0100 1101 0000 oooo oooo */ - {illegal,nullptr }, /* d1: 0111 0100 1101 0001 */ - {illegal,nullptr }, /* d2: 0111 0100 1101 0010 */ - {illegal,nullptr }, /* d3: 0111 0100 1101 0011 */ - {illegal,nullptr }, /* d4: 0111 0100 1101 0100 */ - {DADC,"EA,BC" }, /* d5: 0111 0100 1101 0101 */ - {DADC,"EA,DE" }, /* d6: 0111 0100 1101 0110 */ - {DADC,"EA,HL" }, /* d7: 0111 0100 1101 0111 */ - {OFFAW,"%a" }, /* d8: 0111 0100 1101 1000 oooo oooo */ - {illegal,nullptr }, /* d9: 0111 0100 1101 1001 */ - {illegal,nullptr }, /* da: 0111 0100 1101 1010 */ - {illegal,nullptr }, /* db: 0111 0100 1101 1011 */ - {illegal,nullptr }, /* dc: 0111 0100 1101 1100 */ - {DOFF,"EA,BC" }, /* dd: 0111 0100 1101 1101 */ - {DOFF,"EA,DE" }, /* de: 0111 0100 1101 1110 */ - {DOFF,"EA,HL" }, /* df: 0111 0100 1101 1111 */ + {ADCW, "%a" }, // d0: 0111 0100 1101 0000 oooo oooo + { }, // d1: 0111 0100 1101 0001 + { }, // d2: 0111 0100 1101 0010 + { }, // d3: 0111 0100 1101 0011 + { }, // d4: 0111 0100 1101 0100 + {DADC, "EA,BC" }, // d5: 0111 0100 1101 0101 + {DADC, "EA,DE" }, // d6: 0111 0100 1101 0110 + {DADC, "EA,HL" }, // d7: 0111 0100 1101 0111 + {OFFAW, "%a" }, // d8: 0111 0100 1101 1000 oooo oooo + { }, // d9: 0111 0100 1101 1001 + { }, // da: 0111 0100 1101 1010 + { }, // db: 0111 0100 1101 1011 + { }, // dc: 0111 0100 1101 1100 + {DOFF, "EA,BC" }, // dd: 0111 0100 1101 1101 + {DOFF, "EA,DE" }, // de: 0111 0100 1101 1110 + {DOFF, "EA,HL" }, // df: 0111 0100 1101 1111 - {SUBW,"%a" }, /* e0: 0111 0100 1110 0000 oooo oooo */ - {illegal,nullptr }, /* e1: 0111 0100 1110 0001 */ - {illegal,nullptr }, /* e2: 0111 0100 1110 0010 */ - {illegal,nullptr }, /* e3: 0111 0100 1110 0011 */ - {illegal,nullptr }, /* e4: 0111 0100 1110 0100 */ - {DSUB,"EA,BC" }, /* e5: 0111 0100 1110 0101 */ - {DSUB,"EA,DE" }, /* e6: 0111 0100 1110 0110 */ - {DSUB,"EA,HL" }, /* e7: 0111 0100 1110 0111 */ - {NEAW,"%a" }, /* e8: 0111 0100 1110 1000 oooo oooo */ - {illegal,nullptr }, /* e9: 0111 0100 1110 1001 */ - {illegal,nullptr }, /* ea: 0111 0100 1110 1010 */ - {illegal,nullptr }, /* eb: 0111 0100 1110 1011 */ - {illegal,nullptr }, /* ec: 0111 0100 1110 1100 */ - {DNE,"EA,BC" }, /* ed: 0111 0100 1110 1101 */ - {DNE,"EA,DE" }, /* ee: 0111 0100 1110 1110 */ - {DNE,"EA,HL" }, /* ef: 0111 0100 1110 1111 */ + {SUBW, "%a" }, // e0: 0111 0100 1110 0000 oooo oooo + { }, // e1: 0111 0100 1110 0001 + { }, // e2: 0111 0100 1110 0010 + { }, // e3: 0111 0100 1110 0011 + { }, // e4: 0111 0100 1110 0100 + {DSUB, "EA,BC" }, // e5: 0111 0100 1110 0101 + {DSUB, "EA,DE" }, // e6: 0111 0100 1110 0110 + {DSUB, "EA,HL" }, // e7: 0111 0100 1110 0111 + {NEAW, "%a" }, // e8: 0111 0100 1110 1000 oooo oooo + { }, // e9: 0111 0100 1110 1001 + { }, // ea: 0111 0100 1110 1010 + { }, // eb: 0111 0100 1110 1011 + { }, // ec: 0111 0100 1110 1100 + {DNE, "EA,BC" }, // ed: 0111 0100 1110 1101 + {DNE, "EA,DE" }, // ee: 0111 0100 1110 1110 + {DNE, "EA,HL" }, // ef: 0111 0100 1110 1111 - {SBBW,"%a" }, /* f0: 0111 0100 1111 0000 oooo oooo */ - {illegal,nullptr }, /* f1: 0111 0100 1111 0001 */ - {illegal,nullptr }, /* f2: 0111 0100 1111 0010 */ - {illegal,nullptr }, /* f3: 0111 0100 1111 0011 */ - {illegal,nullptr }, /* f4: 0111 0100 1111 0100 */ - {DSBB,"EA,BC" }, /* f5: 0111 0100 1111 0101 */ - {DSBB,"EA,DE" }, /* f6: 0111 0100 1111 0110 */ - {DSBB,"EA,HL" }, /* f7: 0111 0100 1111 0111 */ - {EQAW,"%a" }, /* f8: 0111 0100 1111 1000 oooo oooo */ - {illegal,nullptr }, /* f9: 0111 0100 1111 1001 */ - {illegal,nullptr }, /* fa: 0111 0100 1111 1010 */ - {illegal,nullptr }, /* fb: 0111 0100 1111 1011 */ - {illegal,nullptr }, /* fc: 0111 0100 1111 1100 */ - {DEQ,"EA,BC" }, /* fd: 0111 0100 1111 1101 */ - {DEQ,"EA,DE" }, /* fe: 0111 0100 1111 1110 */ - {DEQ,"EA,HL" } /* ff: 0111 0100 1111 1111 */ + {SBBW, "%a" }, // f0: 0111 0100 1111 0000 oooo oooo + { }, // f1: 0111 0100 1111 0001 + { }, // f2: 0111 0100 1111 0010 + { }, // f3: 0111 0100 1111 0011 + { }, // f4: 0111 0100 1111 0100 + {DSBB, "EA,BC" }, // f5: 0111 0100 1111 0101 + {DSBB, "EA,DE" }, // f6: 0111 0100 1111 0110 + {DSBB, "EA,HL" }, // f7: 0111 0100 1111 0111 + {EQAW, "%a" }, // f8: 0111 0100 1111 1000 oooo oooo + { }, // f9: 0111 0100 1111 1001 + { }, // fa: 0111 0100 1111 1010 + { }, // fb: 0111 0100 1111 1011 + { }, // fc: 0111 0100 1111 1100 + {DEQ, "EA,BC" }, // fd: 0111 0100 1111 1101 + {DEQ, "EA,DE" }, // fe: 0111 0100 1111 1110 + {DEQ, "EA,HL" } // ff: 0111 0100 1111 1111 }; -/* main opcodes */ -static const struct dasm_s dasmXX_7810[256] = +// main opcodes +const dasm_s dasm_s::XX_7810[256] = { - {NOP,nullptr }, /* 00: 0000 0000 */ - {LDAW,"%a" }, /* 01: 0000 0001 oooo oooo */ - {INX,"SP" }, /* 02: 0000 0010 */ - {DCX,"SP" }, /* 03: 0000 0011 */ - {LXI,"SP,%w" }, /* 04: 0000 0100 llll llll hhhh hhhh */ - {ANIW,"%a,%b" }, /* 05: 0000 0101 oooo oooo xxxx xxxx */ - {illegal,nullptr }, /* 06: */ - {ANI,"A,%b" }, /* 07: 0000 0111 xxxx xxxx */ - {MOV,"A,EAH" }, /* 08: 0000 1000 */ - {MOV,"A,EAL" }, /* 09: 0000 1001 */ - {MOV,"A,B" }, /* 0a: 0000 1010 */ - {MOV,"A,C" }, /* 0b: 0000 1011 */ - {MOV,"A,D" }, /* 0c: 0000 1100 */ - {MOV,"A,E" }, /* 0d: 0000 1101 */ - {MOV,"A,H" }, /* 0e: 0000 1110 */ - {MOV,"A,L" }, /* 0f: 0000 1111 */ + {NOP, nullptr }, // 00: 0000 0000 + {LDAW, "%a" }, // 01: 0000 0001 oooo oooo + {INX, "SP" }, // 02: 0000 0010 + {DCX, "SP" }, // 03: 0000 0011 + {LXI, "SP,%w" }, // 04: 0000 0100 llll llll hhhh hhhh + {ANIW, "%a,%b" }, // 05: 0000 0101 oooo oooo xxxx xxxx + { }, // 06: + {ANI, "A,%b" }, // 07: 0000 0111 xxxx xxxx + {MOV, "A,EAH" }, // 08: 0000 1000 + {MOV, "A,EAL" }, // 09: 0000 1001 + {MOV, "A,B" }, // 0a: 0000 1010 + {MOV, "A,C" }, // 0b: 0000 1011 + {MOV, "A,D" }, // 0c: 0000 1100 + {MOV, "A,E" }, // 0d: 0000 1101 + {MOV, "A,H" }, // 0e: 0000 1110 + {MOV, "A,L" }, // 0f: 0000 1111 - {EXA,nullptr }, /* 10: 0001 0000 */ /* 7810 */ - {EXX,nullptr }, /* 11: 0001 0001 */ /* 7810 */ - {INX,"BC" }, /* 12: 0001 0010 */ - {DCX,"BC" }, /* 13: 0001 0011 */ - {LXI,"BC,%w" }, /* 14: 0001 0100 llll llll hhhh hhhh */ - {ORIW,"%a,%b" }, /* 15: 0001 0101 oooo oooo xxxx xxxx */ - {XRI,"A,%b" }, /* 16: 0001 0110 xxxx xxxx */ - {ORI,"A,%b" }, /* 17: 0001 0111 xxxx xxxx */ - {MOV,"EAH,A" }, /* 18: 0001 1000 */ - {MOV,"EAL,A" }, /* 19: 0001 1001 */ - {MOV,"B,A" }, /* 1a: 0001 1010 */ - {MOV,"C,A" }, /* 1b: 0001 1011 */ - {MOV,"D,A" }, /* 1c: 0001 1100 */ - {MOV,"E,A" }, /* 1d: 0001 1101 */ - {MOV,"H,A" }, /* 1e: 0001 1110 */ - {MOV,"L,A" }, /* 1f: 0001 1111 */ + {EXA, nullptr }, // 10: 0001 0000 7810 + {EXX, nullptr }, // 11: 0001 0001 7810 + {INX, "BC" }, // 12: 0001 0010 + {DCX, "BC" }, // 13: 0001 0011 + {LXI, "BC,%w" }, // 14: 0001 0100 llll llll hhhh hhhh + {ORIW, "%a,%b" }, // 15: 0001 0101 oooo oooo xxxx xxxx + {XRI, "A,%b" }, // 16: 0001 0110 xxxx xxxx + {ORI, "A,%b" }, // 17: 0001 0111 xxxx xxxx + {MOV, "EAH,A" }, // 18: 0001 1000 + {MOV, "EAL,A" }, // 19: 0001 1001 + {MOV, "B,A" }, // 1a: 0001 1010 + {MOV, "C,A" }, // 1b: 0001 1011 + {MOV, "D,A" }, // 1c: 0001 1100 + {MOV, "E,A" }, // 1d: 0001 1101 + {MOV, "H,A" }, // 1e: 0001 1110 + {MOV, "L,A" }, // 1f: 0001 1111 - {INRW,"%a" }, /* 20: 0010 0000 oooo oooo */ - {JB,nullptr }, /* 21: 0010 0001 */ - {INX,"DE" }, /* 22: 0010 0010 */ - {DCX,"DE" }, /* 23: 0010 0011 */ - {LXI,"DE,%w" }, /* 24: 0010 0100 llll llll hhhh hhhh */ - {GTIW,"%a,%b" }, /* 25: 0010 0101 oooo oooo xxxx xxxx */ - {ADINC,"A,%b" }, /* 26: 0010 0110 xxxx xxxx */ - {GTI,"A,%b" }, /* 27: 0010 0111 xxxx xxxx */ - {illegal,nullptr }, /* 28: 0010 1000 */ - {LDAX,"(BC)" }, /* 29: 0010 1001 */ - {LDAX,"(DE)" }, /* 2a: 0010 1010 */ - {LDAX,"(HL)" }, /* 2b: 0010 1011 */ - {LDAX,"(DE+)" }, /* 2c: 0010 1100 */ - {LDAX,"(HL+)" }, /* 2d: 0010 1101 */ - {LDAX,"(DE-)" }, /* 2e: 0010 1110 */ - {LDAX,"(HL-)" }, /* 2f: 0010 1111 */ + {INRW, "%a" }, // 20: 0010 0000 oooo oooo + {JB, nullptr }, // 21: 0010 0001 + {INX, "DE" }, // 22: 0010 0010 + {DCX, "DE" }, // 23: 0010 0011 + {LXI, "DE,%w" }, // 24: 0010 0100 llll llll hhhh hhhh + {GTIW, "%a,%b" }, // 25: 0010 0101 oooo oooo xxxx xxxx + {ADINC, "A,%b" }, // 26: 0010 0110 xxxx xxxx + {GTI, "A,%b" }, // 27: 0010 0111 xxxx xxxx + { }, // 28: 0010 1000 + {LDAX, "(BC)" }, // 29: 0010 1001 + {LDAX, "(DE)" }, // 2a: 0010 1010 + {LDAX, "(HL)" }, // 2b: 0010 1011 + {LDAX, "(DE+)" }, // 2c: 0010 1100 + {LDAX, "(HL+)" }, // 2d: 0010 1101 + {LDAX, "(DE-)" }, // 2e: 0010 1110 + {LDAX, "(HL-)" }, // 2f: 0010 1111 - {DCRW,"%a" }, /* 30: 0011 0000 oooo oooo */ - {BLOCK,nullptr }, /* 31: 0011 0001 */ /* 7810 */ - {INX,"HL", }, /* 32: 0011 0010 */ - {DCX,"HL", }, /* 33: 0011 0011 */ - {LXI,"HL,%w" }, /* 34: 0011 0100 llll llll hhhh hhhh */ - {LTIW,"%a,%b" }, /* 35: 0011 0101 oooo oooo xxxx xxxx */ - {SUINB,"A,%b" }, /* 36: 0011 0110 xxxx xxxx */ - {LTI,"A,%b" }, /* 37: 0011 0111 xxxx xxxx */ - {illegal,nullptr }, /* 38: */ - {STAX,"(BC)" }, /* 39: 0011 1001 */ - {STAX,"(DE)" }, /* 3a: 0011 1010 */ - {STAX,"(HL)" }, /* 3b: 0011 1011 */ - {STAX,"(DE+)" }, /* 3c: 0011 1100 */ - {STAX,"(HL+)" }, /* 3d: 0011 1101 */ - {STAX,"(DE-)" }, /* 3e: 0011 1110 */ - {STAX,"(HL-)" }, /* 3f: 0011 1111 */ + {DCRW, "%a" }, // 30: 0011 0000 oooo oooo + {BLOCK, nullptr }, // 31: 0011 0001 7810 + {INX, "HL", }, // 32: 0011 0010 + {DCX, "HL", }, // 33: 0011 0011 + {LXI, "HL,%w" }, // 34: 0011 0100 llll llll hhhh hhhh + {LTIW, "%a,%b" }, // 35: 0011 0101 oooo oooo xxxx xxxx + {SUINB, "A,%b" }, // 36: 0011 0110 xxxx xxxx + {LTI, "A,%b" }, // 37: 0011 0111 xxxx xxxx + { }, // 38: + {STAX, "(BC)" }, // 39: 0011 1001 + {STAX, "(DE)" }, // 3a: 0011 1010 + {STAX, "(HL)" }, // 3b: 0011 1011 + {STAX, "(DE+)" }, // 3c: 0011 1100 + {STAX, "(HL+)" }, // 3d: 0011 1101 + {STAX, "(DE-)" }, // 3e: 0011 1110 + {STAX, "(HL-)" }, // 3f: 0011 1111 - {CALL,"%w" }, /* 40: 0100 0000 llll llll hhhh hhhh */ - {INR,"A" }, /* 41: 0100 0001 */ - {INR,"B" }, /* 42: 0100 0010 */ - {INR,"C" }, /* 43: 0100 0011 */ - {LXI,"EA,%w" }, /* 44: 0100 0100 llll llll hhhh hhhh */ - {ONIW,"%a,%b" }, /* 45: 0100 0101 oooo oooo xxxx xxxx */ - {ADI,"A,%b" }, /* 46: 0100 0110 xxxx xxxx */ - {ONI,"A,%b" }, /* 47: 0100 0111 xxxx xxxx */ - {0,dasm48_7810 }, /* 48: prefix */ - {MVIX,"BC,%b" }, /* 49: 0100 1001 xxxx xxxx */ - {MVIX,"DE,%b" }, /* 4a: 0100 1010 xxxx xxxx */ - {MVIX,"HL,%b" }, /* 4b: 0100 1011 xxxx xxxx */ - {0,dasm4C_7810 }, /* 4c: prefix */ - {0,dasm4D_7810 }, /* 4d: prefix */ - {JRE,"%d" }, /* 4e: 0100 111d dddd dddd */ - {JRE,"%d" }, /* 4f: 0100 111d dddd dddd */ + {CALL, "%w" }, // 40: 0100 0000 llll llll hhhh hhhh + {INR, "A" }, // 41: 0100 0001 + {INR, "B" }, // 42: 0100 0010 + {INR, "C" }, // 43: 0100 0011 + {LXI, "EA,%w" }, // 44: 0100 0100 llll llll hhhh hhhh + {ONIW, "%a,%b" }, // 45: 0100 0101 oooo oooo xxxx xxxx + {ADI, "A,%b" }, // 46: 0100 0110 xxxx xxxx + {ONI, "A,%b" }, // 47: 0100 0111 xxxx xxxx + {d48_7810 }, // 48: prefix + {MVIX, "BC,%b" }, // 49: 0100 1001 xxxx xxxx + {MVIX, "DE,%b" }, // 4a: 0100 1010 xxxx xxxx + {MVIX, "HL,%b" }, // 4b: 0100 1011 xxxx xxxx + {d4C_7810 }, // 4c: prefix + {d4D_7810 }, // 4d: prefix + {JRE, "%d" }, // 4e: 0100 111d dddd dddd + {JRE, "%d" }, // 4f: 0100 111d dddd dddd - {EXH,nullptr }, /* 50: 0101 0000 */ /* 7810 */ - {DCR,"A" }, /* 51: 0101 0001 */ - {DCR,"B" }, /* 52: 0101 0010 */ - {DCR,"C" }, /* 53: 0101 0011 */ - {JMP,"%w" }, /* 54: 0101 0100 llll llll hhhh hhhh */ - {OFFIW,"%a,%b" }, /* 55: 0101 0101 oooo oooo xxxx xxxx */ - {ACI,"A,%b" }, /* 56: 0101 0110 xxxx xxxx */ - {OFFI,"A,%b" }, /* 57: 0101 0111 xxxx xxxx */ - {BIT,"0,%a", }, /* 58: 0101 1000 oooo oooo */ /* 7810 */ - {BIT,"1,%a", }, /* 59: 0101 1001 oooo oooo */ /* 7810 */ - {BIT,"2,%a", }, /* 5a: 0101 1010 oooo oooo */ /* 7810 */ - {BIT,"3,%a", }, /* 5b: 0101 1011 oooo oooo */ /* 7810 */ - {BIT,"4,%a", }, /* 5c: 0101 1100 oooo oooo */ /* 7810 */ - {BIT,"5,%a", }, /* 5d: 0101 1101 oooo oooo */ /* 7810 */ - {BIT,"6,%a", }, /* 5e: 0101 1110 oooo oooo */ /* 7810 */ - {BIT,"7,%a", }, /* 5f: 0101 1111 oooo oooo */ /* 7810 */ + {EXH, nullptr }, // 50: 0101 0000 7810 + {DCR, "A" }, // 51: 0101 0001 + {DCR, "B" }, // 52: 0101 0010 + {DCR, "C" }, // 53: 0101 0011 + {JMP, "%w" }, // 54: 0101 0100 llll llll hhhh hhhh + {OFFIW, "%a,%b" }, // 55: 0101 0101 oooo oooo xxxx xxx + {ACI, "A,%b" }, // 56: 0101 0110 xxxx xxxx + {OFFI, "A,%b" }, // 57: 0101 0111 xxxx xxxx + {BIT, "0,%a", }, // 58: 0101 1000 oooo oooo 7810 + {BIT, "1,%a", }, // 59: 0101 1001 oooo oooo 7810 + {BIT, "2,%a", }, // 5a: 0101 1010 oooo oooo 7810 + {BIT, "3,%a", }, // 5b: 0101 1011 oooo oooo 7810 + {BIT, "4,%a", }, // 5c: 0101 1100 oooo oooo 7810 + {BIT, "5,%a", }, // 5d: 0101 1101 oooo oooo 7810 + {BIT, "6,%a", }, // 5e: 0101 1110 oooo oooo 7810 + {BIT, "7,%a", }, // 5f: 0101 1111 oooo oooo 7810 - {0,dasm60 }, /* 60: prefix */ - {DAA,nullptr }, /* 61: 0110 0001 */ - {RETI,nullptr }, /* 62: 0110 0010 */ - {STAW,"%a" }, /* 63: 0110 0011 oooo oooo */ - {0,dasm64_7810 }, /* 64: prefix */ - {NEIW,"%a,%b" }, /* 65: 0110 0101 oooo oooo xxxx xxxx */ - {SUI,"A,%b" }, /* 66: 0110 0110 xxxx xxxx */ - {NEI,"A,%b" }, /* 67: 0110 0111 xxxx xxxx */ - {MVI,"V,%b" }, /* 68: 0110 1000 xxxx xxxx */ - {MVI,"A,%b" }, /* 69: 0110 1001 xxxx xxxx */ - {MVI,"B,%b" }, /* 6a: 0110 1010 xxxx xxxx */ - {MVI,"C,%b" }, /* 6b: 0110 1011 xxxx xxxx */ - {MVI,"D,%b" }, /* 6c: 0110 1100 xxxx xxxx */ - {MVI,"E,%b" }, /* 6d: 0110 1101 xxxx xxxx */ - {MVI,"H,%b" }, /* 6e: 0110 1110 xxxx xxxx */ - {MVI,"L,%b" }, /* 6f: 0110 1111 xxxx xxxx */ + {d60 }, // 60: prefix + {DAA, nullptr }, // 61: 0110 0001 + {RETI, nullptr }, // 62: 0110 0010 + {STAW, "%a" }, // 63: 0110 0011 oooo oooo + {d64_7810 }, // 64: prefix + {NEIW, "%a,%b" }, // 65: 0110 0101 oooo oooo xxxx xxxx + {SUI, "A,%b" }, // 66: 0110 0110 xxxx xxxx + {NEI, "A,%b" }, // 67: 0110 0111 xxxx xxxx + {MVI, "V,%b" }, // 68: 0110 1000 xxxx xxxx + {MVI, "A,%b" }, // 69: 0110 1001 xxxx xxxx + {MVI, "B,%b" }, // 6a: 0110 1010 xxxx xxxx + {MVI, "C,%b" }, // 6b: 0110 1011 xxxx xxxx + {MVI, "D,%b" }, // 6c: 0110 1100 xxxx xxxx + {MVI, "E,%b" }, // 6d: 0110 1101 xxxx xxxx + {MVI, "H,%b" }, // 6e: 0110 1110 xxxx xxxx + {MVI, "L,%b" }, // 6f: 0110 1111 xxxx xxxx - {0,dasm70 }, /* 70: prefix */ - {MVIW,"%a,%b" }, /* 71: 0111 0001 oooo oooo xxxx xxxx */ - {SOFTI,nullptr }, /* 72: 0111 0010 */ - {illegal,nullptr }, /* 73: */ - {0,dasm74 }, /* 74: prefix */ - {EQIW,"%a,%b" }, /* 75: 0111 0101 oooo oooo xxxx xxxx */ - {SBI,"A,%b" }, /* 76: 0111 0110 xxxx xxxx */ - {EQI,"A,%b" }, /* 77: 0111 0111 xxxx xxxx */ - {CALF,"%f" }, /* 78: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 79: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7a: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7b: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7c: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7d: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7e: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7f: 0111 1ddd dddd dddd */ + {d70 }, // 70: prefix + {MVIW, "%a,%b" }, // 71: 0111 0001 oooo oooo xxxx xxxx + {SOFTI, nullptr }, // 72: 0111 0010 + { }, // 73: + {d74 }, // 74: prefix + {EQIW, "%a,%b" }, // 75: 0111 0101 oooo oooo xxxx xxxx + {SBI, "A,%b" }, // 76: 0111 0110 xxxx xxxx + {EQI, "A,%b" }, // 77: 0111 0111 xxxx xxxx + {CALF, "%f" }, // 78: 0111 1ddd dddd dddd + {CALF, "%f" }, // 79: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7a: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7b: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7c: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7d: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7e: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7f: 0111 1ddd dddd dddd - {CALT,"%t" }, /* 80: 100t tttt */ - {CALT,"%t" }, /* 81: 100t tttt */ - {CALT,"%t" }, /* 82: 100t tttt */ - {CALT,"%t" }, /* 83: 100t tttt */ - {CALT,"%t" }, /* 84: 100t tttt */ - {CALT,"%t" }, /* 85: 100t tttt */ - {CALT,"%t" }, /* 86: 100t tttt */ - {CALT,"%t" }, /* 87: 100t tttt */ - {CALT,"%t" }, /* 88: 100t tttt */ - {CALT,"%t" }, /* 89: 100t tttt */ - {CALT,"%t" }, /* 8a: 100t tttt */ - {CALT,"%t" }, /* 8b: 100t tttt */ - {CALT,"%t" }, /* 8c: 100t tttt */ - {CALT,"%t" }, /* 8d: 100t tttt */ - {CALT,"%t" }, /* 8e: 100t tttt */ - {CALT,"%t" }, /* 8f: 100t tttt */ + {CALT, "%t" }, // 80: 100t tttt + {CALT, "%t" }, // 81: 100t tttt + {CALT, "%t" }, // 82: 100t tttt + {CALT, "%t" }, // 83: 100t tttt + {CALT, "%t" }, // 84: 100t tttt + {CALT, "%t" }, // 85: 100t tttt + {CALT, "%t" }, // 86: 100t tttt + {CALT, "%t" }, // 87: 100t tttt + {CALT, "%t" }, // 88: 100t tttt + {CALT, "%t" }, // 89: 100t tttt + {CALT, "%t" }, // 8a: 100t tttt + {CALT, "%t" }, // 8b: 100t tttt + {CALT, "%t" }, // 8c: 100t tttt + {CALT, "%t" }, // 8d: 100t tttt + {CALT, "%t" }, // 8e: 100t tttt + {CALT, "%t" }, // 8f: 100t tttt - {CALT,"%t" }, /* 90: 100t tttt */ - {CALT,"%t" }, /* 91: 100t tttt */ - {CALT,"%t" }, /* 92: 100t tttt */ - {CALT,"%t" }, /* 93: 100t tttt */ - {CALT,"%t" }, /* 94: 100t tttt */ - {CALT,"%t" }, /* 95: 100t tttt */ - {CALT,"%t" }, /* 96: 100t tttt */ - {CALT,"%t" }, /* 97: 100t tttt */ - {CALT,"%t" }, /* 98: 100t tttt */ - {CALT,"%t" }, /* 99: 100t tttt */ - {CALT,"%t" }, /* 9a: 100t tttt */ - {CALT,"%t" }, /* 9b: 100t tttt */ - {CALT,"%t" }, /* 9c: 100t tttt */ - {CALT,"%t" }, /* 9d: 100t tttt */ - {CALT,"%t" }, /* 9e: 100t tttt */ - {CALT,"%t" }, /* 9f: 100t tttt */ + {CALT, "%t" }, // 90: 100t tttt + {CALT, "%t" }, // 91: 100t tttt + {CALT, "%t" }, // 92: 100t tttt + {CALT, "%t" }, // 93: 100t tttt + {CALT, "%t" }, // 94: 100t tttt + {CALT, "%t" }, // 95: 100t tttt + {CALT, "%t" }, // 96: 100t tttt + {CALT, "%t" }, // 97: 100t tttt + {CALT, "%t" }, // 98: 100t tttt + {CALT, "%t" }, // 99: 100t tttt + {CALT, "%t" }, // 9a: 100t tttt + {CALT, "%t" }, // 9b: 100t tttt + {CALT, "%t" }, // 9c: 100t tttt + {CALT, "%t" }, // 9d: 100t tttt + {CALT, "%t" }, // 9e: 100t tttt + {CALT, "%t" }, // 9f: 100t tttt - {POP,"VA" }, /* a0: 1010 0000 */ - {POP,"BC" }, /* a1: 1010 0001 */ - {POP,"DE" }, /* a2: 1010 0010 */ - {POP,"HL", }, /* a3: 1010 0011 */ - {POP,"EA" }, /* a4: 1010 0100 */ - {DMOV,"EA,BC" }, /* a5: 1010 0101 */ - {DMOV,"EA,DE" }, /* a6: 1010 0110 */ - {DMOV,"EA,HL" }, /* a7: 1010 0111 */ - {INX,"EA" }, /* a8: 1010 1000 */ - {DCX,"EA" }, /* a9: 1010 1001 */ - {EI,nullptr }, /* aa: 1010 1010 */ - {LDAX,"(DE+%b)" }, /* ab: 1010 1011 dddd dddd */ - {LDAX,"(HL+A)" }, /* ac: 1010 1100 */ - {LDAX,"(HL+B)" }, /* ad: 1010 1101 */ - {LDAX,"(HL+EA)" }, /* ae: 1010 1110 */ - {LDAX,"(HL+%b)" }, /* af: 1010 1111 dddd dddd */ + {POP, "VA" }, // a0: 1010 0000 + {POP, "BC" }, // a1: 1010 0001 + {POP, "DE" }, // a2: 1010 0010 + {POP, "HL", }, // a3: 1010 0011 + {POP, "EA" }, // a4: 1010 0100 + {DMOV, "EA,BC" }, // a5: 1010 0101 + {DMOV, "EA,DE" }, // a6: 1010 0110 + {DMOV, "EA,HL" }, // a7: 1010 0111 + {INX, "EA" }, // a8: 1010 1000 + {DCX, "EA" }, // a9: 1010 1001 + {EI, nullptr }, // aa: 1010 1010 + {LDAX, "(DE+%b)" }, // ab: 1010 1011 dddd dddd + {LDAX, "(HL+A)" }, // ac: 1010 1100 + {LDAX, "(HL+B)" }, // ad: 1010 1101 + {LDAX, "(HL+EA)" }, // ae: 1010 1110 + {LDAX, "(HL+%b)" }, // af: 1010 1111 dddd dddd - {PUSH,"VA" }, /* b0: 1011 0000 */ - {PUSH,"BC" }, /* b1: 1011 0001 */ - {PUSH,"DE" }, /* b2: 1011 0010 */ - {PUSH,"HL", }, /* b3: 1011 0011 */ - {PUSH,"EA" }, /* b4: 1011 0100 */ - {DMOV,"BC,EA" }, /* b5: 1011 0101 */ - {DMOV,"DE,EA" }, /* b6: 1011 0110 */ - {DMOV,"HL,EA" }, /* b7: 1011 0111 */ - {RET,nullptr }, /* b8: 1011 1000 */ - {RETS,nullptr }, /* b9: 1011 1001 */ - {DI,nullptr }, /* ba: 1011 1010 */ - {STAX,"(DE+%b)" }, /* bb: 1011 1011 dddd dddd */ - {STAX,"(HL+A)" }, /* bc: 1011 1100 */ - {STAX,"(HL+B)" }, /* bd: 1011 1101 */ - {STAX,"(HL+EA)" }, /* be: 1011 1110 */ - {STAX,"(HL+%b)" }, /* bf: 1011 1111 dddd dddd */ + {PUSH, "VA" }, // b0: 1011 0000 + {PUSH, "BC" }, // b1: 1011 0001 + {PUSH, "DE" }, // b2: 1011 0010 + {PUSH, "HL", }, // b3: 1011 0011 + {PUSH, "EA" }, // b4: 1011 0100 + {DMOV, "BC,EA" }, // b5: 1011 0101 + {DMOV, "DE,EA" }, // b6: 1011 0110 + {DMOV, "HL,EA" }, // b7: 1011 0111 + {RET, nullptr }, // b8: 1011 1000 + {RETS, nullptr }, // b9: 1011 1001 + {DI, nullptr }, // ba: 1011 1010 + {STAX, "(DE+%b)" }, // bb: 1011 1011 dddd dddd + {STAX, "(HL+A)" }, // bc: 1011 1100 + {STAX, "(HL+B)" }, // bd: 1011 1101 + {STAX, "(HL+EA)" }, // be: 1011 1110 + {STAX, "(HL+%b)" }, // bf: 1011 1111 dddd dddd - {JR,"%o" }, /* c0: 11oo oooo */ - {JR,"%o" }, /* c1: 11oo oooo */ - {JR,"%o" }, /* c2: 11oo oooo */ - {JR,"%o" }, /* c3: 11oo oooo */ - {JR,"%o" }, /* c4: 11oo oooo */ - {JR,"%o" }, /* c5: 11oo oooo */ - {JR,"%o" }, /* c6: 11oo oooo */ - {JR,"%o" }, /* c7: 11oo oooo */ - {JR,"%o" }, /* c8: 11oo oooo */ - {JR,"%o" }, /* c9: 11oo oooo */ - {JR,"%o" }, /* ca: 11oo oooo */ - {JR,"%o" }, /* cb: 11oo oooo */ - {JR,"%o" }, /* cc: 11oo oooo */ - {JR,"%o" }, /* cd: 11oo oooo */ - {JR,"%o" }, /* ce: 11oo oooo */ - {JR,"%o" }, /* cf: 11oo oooo */ + {JR, "%o" }, // c0: 11oo oooo + {JR, "%o" }, // c1: 11oo oooo + {JR, "%o" }, // c2: 11oo oooo + {JR, "%o" }, // c3: 11oo oooo + {JR, "%o" }, // c4: 11oo oooo + {JR, "%o" }, // c5: 11oo oooo + {JR, "%o" }, // c6: 11oo oooo + {JR, "%o" }, // c7: 11oo oooo + {JR, "%o" }, // c8: 11oo oooo + {JR, "%o" }, // c9: 11oo oooo + {JR, "%o" }, // ca: 11oo oooo + {JR, "%o" }, // cb: 11oo oooo + {JR, "%o" }, // cc: 11oo oooo + {JR, "%o" }, // cd: 11oo oooo + {JR, "%o" }, // ce: 11oo oooo + {JR, "%o" }, // cf: 11oo oooo - {JR,"%o" }, /* d0: 11oo oooo */ - {JR,"%o" }, /* d1: 11oo oooo */ - {JR,"%o" }, /* d2: 11oo oooo */ - {JR,"%o" }, /* d3: 11oo oooo */ - {JR,"%o" }, /* d4: 11oo oooo */ - {JR,"%o" }, /* d5: 11oo oooo */ - {JR,"%o" }, /* d6: 11oo oooo */ - {JR,"%o" }, /* d7: 11oo oooo */ - {JR,"%o" }, /* d8: 11oo oooo */ - {JR,"%o" }, /* d9: 11oo oooo */ - {JR,"%o" }, /* da: 11oo oooo */ - {JR,"%o" }, /* db: 11oo oooo */ - {JR,"%o" }, /* dc: 11oo oooo */ - {JR,"%o" }, /* dd: 11oo oooo */ - {JR,"%o" }, /* de: 11oo oooo */ - {JR,"%o" }, /* df: 11oo oooo */ + {JR, "%o" }, // d0: 11oo oooo + {JR, "%o" }, // d1: 11oo oooo + {JR, "%o" }, // d2: 11oo oooo + {JR, "%o" }, // d3: 11oo oooo + {JR, "%o" }, // d4: 11oo oooo + {JR, "%o" }, // d5: 11oo oooo + {JR, "%o" }, // d6: 11oo oooo + {JR, "%o" }, // d7: 11oo oooo + {JR, "%o" }, // d8: 11oo oooo + {JR, "%o" }, // d9: 11oo oooo + {JR, "%o" }, // da: 11oo oooo + {JR, "%o" }, // db: 11oo oooo + {JR, "%o" }, // dc: 11oo oooo + {JR, "%o" }, // dd: 11oo oooo + {JR, "%o" }, // de: 11oo oooo + {JR, "%o" }, // df: 11oo oooo - {JR,"%o" }, /* e0: 11oo oooo */ - {JR,"%o" }, /* e1: 11oo oooo */ - {JR,"%o" }, /* e2: 11oo oooo */ - {JR,"%o" }, /* e3: 11oo oooo */ - {JR,"%o" }, /* e4: 11oo oooo */ - {JR,"%o" }, /* e5: 11oo oooo */ - {JR,"%o" }, /* e6: 11oo oooo */ - {JR,"%o" }, /* e7: 11oo oooo */ - {JR,"%o" }, /* e8: 11oo oooo */ - {JR,"%o" }, /* e9: 11oo oooo */ - {JR,"%o" }, /* ea: 11oo oooo */ - {JR,"%o" }, /* eb: 11oo oooo */ - {JR,"%o" }, /* ec: 11oo oooo */ - {JR,"%o" }, /* ed: 11oo oooo */ - {JR,"%o" }, /* ee: 11oo oooo */ - {JR,"%o" }, /* ef: 11oo oooo */ + {JR, "%o" }, // e0: 11oo oooo + {JR, "%o" }, // e1: 11oo oooo + {JR, "%o" }, // e2: 11oo oooo + {JR, "%o" }, // e3: 11oo oooo + {JR, "%o" }, // e4: 11oo oooo + {JR, "%o" }, // e5: 11oo oooo + {JR, "%o" }, // e6: 11oo oooo + {JR, "%o" }, // e7: 11oo oooo + {JR, "%o" }, // e8: 11oo oooo + {JR, "%o" }, // e9: 11oo oooo + {JR, "%o" }, // ea: 11oo oooo + {JR, "%o" }, // eb: 11oo oooo + {JR, "%o" }, // ec: 11oo oooo + {JR, "%o" }, // ed: 11oo oooo + {JR, "%o" }, // ee: 11oo oooo + {JR, "%o" }, // ef: 11oo oooo - {JR,"%o" }, /* f0: 11oo oooo */ - {JR,"%o" }, /* f1: 11oo oooo */ - {JR,"%o" }, /* f2: 11oo oooo */ - {JR,"%o" }, /* f3: 11oo oooo */ - {JR,"%o" }, /* f4: 11oo oooo */ - {JR,"%o" }, /* f5: 11oo oooo */ - {JR,"%o" }, /* f6: 11oo oooo */ - {JR,"%o" }, /* f7: 11oo oooo */ - {JR,"%o" }, /* f8: 11oo oooo */ - {JR,"%o" }, /* f9: 11oo oooo */ - {JR,"%o" }, /* fa: 11oo oooo */ - {JR,"%o" }, /* fb: 11oo oooo */ - {JR,"%o" }, /* fc: 11oo oooo */ - {JR,"%o" }, /* fd: 11oo oooo */ - {JR,"%o" }, /* fe: 11oo oooo */ - {JR,"%o" } /* ff: 11oo oooo */ + {JR, "%o" }, // f0: 11oo oooo + {JR, "%o" }, // f1: 11oo oooo + {JR, "%o" }, // f2: 11oo oooo + {JR, "%o" }, // f3: 11oo oooo + {JR, "%o" }, // f4: 11oo oooo + {JR, "%o" }, // f5: 11oo oooo + {JR, "%o" }, // f6: 11oo oooo + {JR, "%o" }, // f7: 11oo oooo + {JR, "%o" }, // f8: 11oo oooo + {JR, "%o" }, // f9: 11oo oooo + {JR, "%o" }, // fa: 11oo oooo + {JR, "%o" }, // fb: 11oo oooo + {JR, "%o" }, // fc: 11oo oooo + {JR, "%o" }, // fd: 11oo oooo + {JR, "%o" }, // fe: 11oo oooo + {JR, "%o" } // ff: 11oo oooo }; -static const struct dasm_s dasmXX_7807[256] = +const dasm_s dasm_s::XX_7807[256] = { - {NOP,nullptr }, /* 00: 0000 0000 */ - {LDAW,"%a" }, /* 01: 0000 0001 oooo oooo */ - {INX,"SP" }, /* 02: 0000 0010 */ - {DCX,"SP" }, /* 03: 0000 0011 */ - {LXI,"SP,%w" }, /* 04: 0000 0100 llll llll hhhh hhhh */ - {ANIW,"%a,%b" }, /* 05: 0000 0101 oooo oooo xxxx xxxx */ - {illegal,nullptr }, /* 06: */ - {ANI,"A,%b" }, /* 07: 0000 0111 xxxx xxxx */ - {MOV,"A,EAH" }, /* 08: 0000 1000 */ - {MOV,"A,EAL" }, /* 09: 0000 1001 */ - {MOV,"A,B" }, /* 0a: 0000 1010 */ - {MOV,"A,C" }, /* 0b: 0000 1011 */ - {MOV,"A,D" }, /* 0c: 0000 1100 */ - {MOV,"A,E" }, /* 0d: 0000 1101 */ - {MOV,"A,H" }, /* 0e: 0000 1110 */ - {MOV,"A,L" }, /* 0f: 0000 1111 */ + {NOP, nullptr }, // 00: 0000 0000 + {LDAW, "%a" }, // 01: 0000 0001 oooo oooo + {INX, "SP" }, // 02: 0000 0010 + {DCX, "SP" }, // 03: 0000 0011 + {LXI, "SP,%w" }, // 04: 0000 0100 llll llll hhhh hhhh + {ANIW, "%a,%b" }, // 05: 0000 0101 oooo oooo xxxx xxxx + { }, // 06: + {ANI, "A,%b" }, // 07: 0000 0111 xxxx xxxx + {MOV, "A,EAH" }, // 08: 0000 1000 + {MOV, "A,EAL" }, // 09: 0000 1001 + {MOV, "A,B" }, // 0a: 0000 1010 + {MOV, "A,C" }, // 0b: 0000 1011 + {MOV, "A,D" }, // 0c: 0000 1100 + {MOV, "A,E" }, // 0d: 0000 1101 + {MOV, "A,H" }, // 0e: 0000 1110 + {MOV, "A,L" }, // 0f: 0000 1111 - {BLOCK,"D+" }, /* 10: 0001 0000 */ /* 7807 */ - {BLOCK,"D-" }, /* 11: 0001 0001 */ /* 7807 */ - {INX,"BC" }, /* 12: 0001 0010 */ - {DCX,"BC" }, /* 13: 0001 0011 */ - {LXI,"BC,%w" }, /* 14: 0001 0100 llll llll hhhh hhhh */ - {ORIW,"%a,%b" }, /* 15: 0001 0101 oooo oooo xxxx xxxx */ - {XRI,"A,%b" }, /* 16: 0001 0110 xxxx xxxx */ - {ORI,"A,%b" }, /* 17: 0001 0111 xxxx xxxx */ - {MOV,"EAH,A" }, /* 18: 0001 1000 */ - {MOV,"EAL,A" }, /* 19: 0001 1001 */ - {MOV,"B,A" }, /* 1a: 0001 1010 */ - {MOV,"C,A" }, /* 1b: 0001 1011 */ - {MOV,"D,A" }, /* 1c: 0001 1100 */ - {MOV,"E,A" }, /* 1d: 0001 1101 */ - {MOV,"H,A" }, /* 1e: 0001 1110 */ - {MOV,"L,A" }, /* 1f: 0001 1111 */ + {BLOCK, "D+" }, // 10: 0001 0000 7807 + {BLOCK, "D-" }, // 11: 0001 0001 7807 + {INX, "BC" }, // 12: 0001 0010 + {DCX, "BC" }, // 13: 0001 0011 + {LXI, "BC,%w" }, // 14: 0001 0100 llll llll hhhh hhhh + {ORIW, "%a,%b" }, // 15: 0001 0101 oooo oooo xxxx xxxx + {XRI, "A,%b" }, // 16: 0001 0110 xxxx xxxx + {ORI, "A,%b" }, // 17: 0001 0111 xxxx xxxx + {MOV, "EAH,A" }, // 18: 0001 1000 + {MOV, "EAL,A" }, // 19: 0001 1001 + {MOV, "B,A" }, // 1a: 0001 1010 + {MOV, "C,A" }, // 1b: 0001 1011 + {MOV, "D,A" }, // 1c: 0001 1100 + {MOV, "E,A" }, // 1d: 0001 1101 + {MOV, "H,A" }, // 1e: 0001 1110 + {MOV, "L,A" }, // 1f: 0001 1111 - {INRW,"%a" }, /* 20: 0010 0000 oooo oooo */ - {JB,nullptr }, /* 21: 0010 0001 */ - {INX,"DE" }, /* 22: 0010 0010 */ - {DCX,"DE" }, /* 23: 0010 0011 */ - {LXI,"DE,%w" }, /* 24: 0010 0100 llll llll hhhh hhhh */ - {GTIW,"%a,%b" }, /* 25: 0010 0101 oooo oooo xxxx xxxx */ - {ADINC,"A,%b" }, /* 26: 0010 0110 xxxx xxxx */ - {GTI,"A,%b" }, /* 27: 0010 0111 xxxx xxxx */ - {illegal,nullptr }, /* 28: 0010 1000 */ - {LDAX,"(BC)" }, /* 29: 0010 1001 */ - {LDAX,"(DE)" }, /* 2a: 0010 1010 */ - {LDAX,"(HL)" }, /* 2b: 0010 1011 */ - {LDAX,"(DE+)" }, /* 2c: 0010 1100 */ - {LDAX,"(HL+)" }, /* 2d: 0010 1101 */ - {LDAX,"(DE-)" }, /* 2e: 0010 1110 */ - {LDAX,"(HL-)" }, /* 2f: 0010 1111 */ + {INRW, "%a" }, // 20: 0010 0000 oooo oooo + {JB, nullptr }, // 21: 0010 0001 + {INX, "DE" }, // 22: 0010 0010 + {DCX, "DE" }, // 23: 0010 0011 + {LXI, "DE,%w" }, // 24: 0010 0100 llll llll hhhh hhhh + {GTIW, "%a,%b" }, // 25: 0010 0101 oooo oooo xxxx xxxx + {ADINC, "A,%b" }, // 26: 0010 0110 xxxx xxxx + {GTI, "A,%b" }, // 27: 0010 0111 xxxx xxxx + { }, // 28: 0010 1000 + {LDAX, "(BC)" }, // 29: 0010 1001 + {LDAX, "(DE)" }, // 2a: 0010 1010 + {LDAX, "(HL)" }, // 2b: 0010 1011 + {LDAX, "(DE+)" }, // 2c: 0010 1100 + {LDAX, "(HL+)" }, // 2d: 0010 1101 + {LDAX, "(DE-)" }, // 2e: 0010 1110 + {LDAX, "(HL-)" }, // 2f: 0010 1111 - {DCRW,"%a" }, /* 30: 0011 0000 oooo oooo */ - {AND,"CY,%i" }, /* 31: 0011 0001 bbbb bbbb */ /* 7807 */ - {INX,"HL", }, /* 32: 0011 0010 */ - {DCX,"HL", }, /* 33: 0011 0011 */ - {LXI,"HL,%w" }, /* 34: 0011 0100 llll llll hhhh hhhh */ - {LTIW,"%a,%b" }, /* 35: 0011 0101 oooo oooo xxxx xxxx */ - {SUINB,"A,%b" }, /* 36: 0011 0110 xxxx xxxx */ - {LTI,"A,%b" }, /* 37: 0011 0111 xxxx xxxx */ - {illegal,nullptr }, /* 38: */ - {STAX,"(BC)" }, /* 39: 0011 1001 */ - {STAX,"(DE)" }, /* 3a: 0011 1010 */ - {STAX,"(HL)" }, /* 3b: 0011 1011 */ - {STAX,"(DE+)" }, /* 3c: 0011 1100 */ - {STAX,"(HL+)" }, /* 3d: 0011 1101 */ - {STAX,"(DE-)" }, /* 3e: 0011 1110 */ - {STAX,"(HL-)" }, /* 3f: 0011 1111 */ + {DCRW, "%a" }, // 30: 0011 0000 oooo oooo + {AND, "CY,%i" }, // 31: 0011 0001 bbbb bbbb 7807 + {INX, "HL", }, // 32: 0011 0010 + {DCX, "HL", }, // 33: 0011 0011 + {LXI, "HL,%w" }, // 34: 0011 0100 llll llll hhhh hhhh + {LTIW, "%a,%b" }, // 35: 0011 0101 oooo oooo xxxx xxxx + {SUINB, "A,%b" }, // 36: 0011 0110 xxxx xxxx + {LTI, "A,%b" }, // 37: 0011 0111 xxxx xxxx + { }, // 38: + {STAX, "(BC)" }, // 39: 0011 1001 + {STAX, "(DE)" }, // 3a: 0011 1010 + {STAX, "(HL)" }, // 3b: 0011 1011 + {STAX, "(DE+)" }, // 3c: 0011 1100 + {STAX, "(HL+)" }, // 3d: 0011 1101 + {STAX, "(DE-)" }, // 3e: 0011 1110 + {STAX, "(HL-)" }, // 3f: 0011 1111 - {CALL,"%w" }, /* 40: 0100 0000 llll llll hhhh hhhh */ - {INR,"A" }, /* 41: 0100 0001 */ - {INR,"B" }, /* 42: 0100 0010 */ - {INR,"C" }, /* 43: 0100 0011 */ - {LXI,"EA,%w" }, /* 44: 0100 0100 llll llll hhhh hhhh */ - {ONIW,"%a,%b" }, /* 45: 0100 0101 oooo oooo xxxx xxxx */ - {ADI,"A,%b" }, /* 46: 0100 0110 xxxx xxxx */ - {ONI,"A,%b" }, /* 47: 0100 0111 xxxx xxxx */ - {0,dasm48_7807 }, /* 48: prefix */ - {MVIX,"BC,%b" }, /* 49: 0100 1001 xxxx xxxx */ - {MVIX,"DE,%b" }, /* 4a: 0100 1010 xxxx xxxx */ - {MVIX,"HL,%b" }, /* 4b: 0100 1011 xxxx xxxx */ - {0,dasm4C_7807 }, /* 4c: prefix */ - {0,dasm4D_7807 }, /* 4d: prefix */ - {JRE,"%d" }, /* 4e: 0100 111d dddd dddd */ - {JRE,"%d" }, /* 4f: 0100 111d dddd dddd */ - {SKN,"%i" }, /* 50: 0101 0000 bbbb bbbb */ /* 7807 */ - {DCR,"A" }, /* 51: 0101 0001 */ - {DCR,"B" }, /* 52: 0101 0010 */ - {DCR,"C" }, /* 53: 0101 0011 */ - {JMP,"%w" }, /* 54: 0101 0100 llll llll hhhh hhhh */ - {OFFIW,"%a,%b" }, /* 55: 0101 0101 oooo oooo xxxx xxxx */ - {ACI,"A,%b" }, /* 56: 0101 0110 xxxx xxxx */ - {OFFI,"A,%b" }, /* 57: 0101 0111 xxxx xxxx */ - {SETB,"%i" }, /* 58: 0101 1000 bbbb bbbb */ /* 7807 */ - {NOT,"%i" }, /* 59: 0101 1001 bbbb bbbb */ /* 7807 */ - {MOV,"%i,CY" }, /* 5a: 0101 1010 bbbb bbbb */ /* 7807 */ - {CLR,"%i" }, /* 5b: 0101 1011 bbbb bbbb */ /* 7807 */ - {OR,"CY,%i" }, /* 5c: 0101 1100 bbbb bbbb */ /* 7807 */ - {SK,"%i" }, /* 5d: 0101 1101 bbbb bbbb */ /* 7807 */ - {XOR,"CY,%i" }, /* 5e: 0101 1110 bbbb bbbb */ /* 7807 */ - {MOV,"CY,%i" }, /* 5f: 0101 1111 bbbb bbbb */ /* 7807 */ + {CALL, "%w" }, // 40: 0100 0000 llll llll hhhh hhhh + {INR, "A" }, // 41: 0100 0001 + {INR, "B" }, // 42: 0100 0010 + {INR, "C" }, // 43: 0100 0011 + {LXI, "EA,%w" }, // 44: 0100 0100 llll llll hhhh hhhh + {ONIW, "%a,%b" }, // 45: 0100 0101 oooo oooo xxxx xxxx + {ADI, "A,%b" }, // 46: 0100 0110 xxxx xxxx + {ONI, "A,%b" }, // 47: 0100 0111 xxxx xxxx + {d48_7807 }, // 48: prefix + {MVIX, "BC,%b" }, // 49: 0100 1001 xxxx xxxx + {MVIX, "DE,%b" }, // 4a: 0100 1010 xxxx xxxx + {MVIX, "HL,%b" }, // 4b: 0100 1011 xxxx xxxx + {d4C_7807 }, // 4c: prefix + {d4D_7807 }, // 4d: prefix + {JRE, "%d" }, // 4e: 0100 111d dddd dddd + {JRE, "%d" }, // 4f: 0100 111d dddd dddd + {SKN, "%i" }, // 50: 0101 0000 bbbb bbbb 7807 + {DCR, "A" }, // 51: 0101 0001 + {DCR, "B" }, // 52: 0101 0010 + {DCR, "C" }, // 53: 0101 0011 + {JMP, "%w" }, // 54: 0101 0100 llll llll hhhh hhhh + {OFFIW, "%a,%b" }, // 55: 0101 0101 oooo oooo xxxx xxxx + {ACI, "A,%b" }, // 56: 0101 0110 xxxx xxxx + {OFFI, "A,%b" }, // 57: 0101 0111 xxxx xxxx + {SETB, "%i" }, // 58: 0101 1000 bbbb bbbb 7807 + {NOT, "%i" }, // 59: 0101 1001 bbbb bbbb 7807 + {MOV, "%i,CY" }, // 5a: 0101 1010 bbbb bbbb 7807 + {CLR, "%i" }, // 5b: 0101 1011 bbbb bbbb 7807 + {OR, "CY,%i" }, // 5c: 0101 1100 bbbb bbbb 7807 + {SK, "%i" }, // 5d: 0101 1101 bbbb bbbb 7807 + {XOR, "CY,%i" }, // 5e: 0101 1110 bbbb bbbb 7807 + {MOV, "CY,%i" }, // 5f: 0101 1111 bbbb bbbb 7807 - {0,dasm60 }, /* 60: prefix */ - {DAA,nullptr }, /* 61: 0110 0001 */ - {RETI,nullptr }, /* 62: 0110 0010 */ - {STAW,"%a" }, /* 63: 0110 0011 oooo oooo */ - {0,dasm64_7807 }, /* 64: prefix */ - {NEIW,"%a,%b" }, /* 65: 0110 0101 oooo oooo xxxx xxxx */ - {SUI,"A,%b" }, /* 66: 0110 0110 xxxx xxxx */ - {NEI,"A,%b" }, /* 67: 0110 0111 xxxx xxxx */ - {MVI,"V,%b" }, /* 68: 0110 1000 xxxx xxxx */ - {MVI,"A,%b" }, /* 69: 0110 1001 xxxx xxxx */ - {MVI,"B,%b" }, /* 6a: 0110 1010 xxxx xxxx */ - {MVI,"C,%b" }, /* 6b: 0110 1011 xxxx xxxx */ - {MVI,"D,%b" }, /* 6c: 0110 1100 xxxx xxxx */ - {MVI,"E,%b" }, /* 6d: 0110 1101 xxxx xxxx */ - {MVI,"H,%b" }, /* 6e: 0110 1110 xxxx xxxx */ - {MVI,"L,%b" }, /* 6f: 0110 1111 xxxx xxxx */ + {d60 }, // 60: prefix + {DAA, nullptr }, // 61: 0110 0001 + {RETI, nullptr }, // 62: 0110 0010 + {STAW, "%a" }, // 63: 0110 0011 oooo oooo + {d64_7807 }, // 64: prefix + {NEIW, "%a,%b" }, // 65: 0110 0101 oooo oooo xxxx xxxx + {SUI, "A,%b" }, // 66: 0110 0110 xxxx xxxx + {NEI, "A,%b" }, // 67: 0110 0111 xxxx xxxx + {MVI, "V,%b" }, // 68: 0110 1000 xxxx xxxx + {MVI, "A,%b" }, // 69: 0110 1001 xxxx xxxx + {MVI, "B,%b" }, // 6a: 0110 1010 xxxx xxxx + {MVI, "C,%b" }, // 6b: 0110 1011 xxxx xxxx + {MVI, "D,%b" }, // 6c: 0110 1100 xxxx xxxx + {MVI, "E,%b" }, // 6d: 0110 1101 xxxx xxxx + {MVI, "H,%b" }, // 6e: 0110 1110 xxxx xxxx + {MVI, "L,%b" }, // 6f: 0110 1111 xxxx xxxx - {0,dasm70 }, /* 70: prefix */ - {MVIW,"%a,%b" }, /* 71: 0111 0001 oooo oooo xxxx xxxx */ - {SOFTI,nullptr }, /* 72: 0111 0010 */ - {illegal,nullptr }, /* 73: */ - {0,dasm74 }, /* 74: prefix */ - {EQIW,"%a,%b" }, /* 75: 0111 0101 oooo oooo xxxx xxxx */ - {SBI,"A,%b" }, /* 76: 0111 0110 xxxx xxxx */ - {EQI,"A,%b" }, /* 77: 0111 0111 xxxx xxxx */ - {CALF,"%f" }, /* 78: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 79: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7a: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7b: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7c: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7d: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7e: 0111 1ddd dddd dddd */ - {CALF,"%f" }, /* 7f: 0111 1ddd dddd dddd */ + {d70 }, // 70: prefix + {MVIW, "%a,%b" }, // 71: 0111 0001 oooo oooo xxxx xxxx + {SOFTI, nullptr }, // 72: 0111 0010 + { }, // 73: + {d74 }, // 74: prefix + {EQIW, "%a,%b" }, // 75: 0111 0101 oooo oooo xxxx xxxx + {SBI, "A,%b" }, // 76: 0111 0110 xxxx xxxx + {EQI, "A,%b" }, // 77: 0111 0111 xxxx xxxx + {CALF, "%f" }, // 78: 0111 1ddd dddd dddd + {CALF, "%f" }, // 79: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7a: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7b: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7c: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7d: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7e: 0111 1ddd dddd dddd + {CALF, "%f" }, // 7f: 0111 1ddd dddd dddd - {CALT,"%t" }, /* 80: 100t tttt */ - {CALT,"%t" }, /* 81: 100t tttt */ - {CALT,"%t" }, /* 82: 100t tttt */ - {CALT,"%t" }, /* 83: 100t tttt */ - {CALT,"%t" }, /* 84: 100t tttt */ - {CALT,"%t" }, /* 85: 100t tttt */ - {CALT,"%t" }, /* 86: 100t tttt */ - {CALT,"%t" }, /* 87: 100t tttt */ - {CALT,"%t" }, /* 88: 100t tttt */ - {CALT,"%t" }, /* 89: 100t tttt */ - {CALT,"%t" }, /* 8a: 100t tttt */ - {CALT,"%t" }, /* 8b: 100t tttt */ - {CALT,"%t" }, /* 8c: 100t tttt */ - {CALT,"%t" }, /* 8d: 100t tttt */ - {CALT,"%t" }, /* 8e: 100t tttt */ - {CALT,"%t" }, /* 8f: 100t tttt */ + {CALT, "%t" }, // 80: 100t tttt + {CALT, "%t" }, // 81: 100t tttt + {CALT, "%t" }, // 82: 100t tttt + {CALT, "%t" }, // 83: 100t tttt + {CALT, "%t" }, // 84: 100t tttt + {CALT, "%t" }, // 85: 100t tttt + {CALT, "%t" }, // 86: 100t tttt + {CALT, "%t" }, // 87: 100t tttt + {CALT, "%t" }, // 88: 100t tttt + {CALT, "%t" }, // 89: 100t tttt + {CALT, "%t" }, // 8a: 100t tttt + {CALT, "%t" }, // 8b: 100t tttt + {CALT, "%t" }, // 8c: 100t tttt + {CALT, "%t" }, // 8d: 100t tttt + {CALT, "%t" }, // 8e: 100t tttt + {CALT, "%t" }, // 8f: 100t tttt - {CALT,"%t" }, /* 90: 100t tttt */ - {CALT,"%t" }, /* 91: 100t tttt */ - {CALT,"%t" }, /* 92: 100t tttt */ - {CALT,"%t" }, /* 93: 100t tttt */ - {CALT,"%t" }, /* 94: 100t tttt */ - {CALT,"%t" }, /* 95: 100t tttt */ - {CALT,"%t" }, /* 96: 100t tttt */ - {CALT,"%t" }, /* 97: 100t tttt */ - {CALT,"%t" }, /* 98: 100t tttt */ - {CALT,"%t" }, /* 99: 100t tttt */ - {CALT,"%t" }, /* 9a: 100t tttt */ - {CALT,"%t" }, /* 9b: 100t tttt */ - {CALT,"%t" }, /* 9c: 100t tttt */ - {CALT,"%t" }, /* 9d: 100t tttt */ - {CALT,"%t" }, /* 9e: 100t tttt */ - {CALT,"%t" }, /* 9f: 100t tttt */ + {CALT, "%t" }, // 90: 100t tttt + {CALT, "%t" }, // 91: 100t tttt + {CALT, "%t" }, // 92: 100t tttt + {CALT, "%t" }, // 93: 100t tttt + {CALT, "%t" }, // 94: 100t tttt + {CALT, "%t" }, // 95: 100t tttt + {CALT, "%t" }, // 96: 100t tttt + {CALT, "%t" }, // 97: 100t tttt + {CALT, "%t" }, // 98: 100t tttt + {CALT, "%t" }, // 99: 100t tttt + {CALT, "%t" }, // 9a: 100t tttt + {CALT, "%t" }, // 9b: 100t tttt + {CALT, "%t" }, // 9c: 100t tttt + {CALT, "%t" }, // 9d: 100t tttt + {CALT, "%t" }, // 9e: 100t tttt + {CALT, "%t" }, // 9f: 100t tttt - {POP,"VA" }, /* a0: 1010 0000 */ - {POP,"BC" }, /* a1: 1010 0001 */ - {POP,"DE" }, /* a2: 1010 0010 */ - {POP,"HL", }, /* a3: 1010 0011 */ - {POP,"EA" }, /* a4: 1010 0100 */ - {DMOV,"EA,BC" }, /* a5: 1010 0101 */ - {DMOV,"EA,DE" }, /* a6: 1010 0110 */ - {DMOV,"EA,HL" }, /* a7: 1010 0111 */ - {INX,"EA" }, /* a8: 1010 1000 */ - {DCX,"EA" }, /* a9: 1010 1001 */ - {EI,nullptr }, /* aa: 1010 1010 */ - {LDAX,"(DE+%b)" }, /* ab: 1010 1011 dddd dddd */ - {LDAX,"(HL+A)" }, /* ac: 1010 1100 */ - {LDAX,"(HL+B)" }, /* ad: 1010 1101 */ - {LDAX,"(HL+EA)" }, /* ae: 1010 1110 */ - {LDAX,"(HL+%b)" }, /* af: 1010 1111 dddd dddd */ + {POP, "VA" }, // a0: 1010 0000 + {POP, "BC" }, // a1: 1010 0001 + {POP, "DE" }, // a2: 1010 0010 + {POP, "HL", }, // a3: 1010 0011 + {POP, "EA" }, // a4: 1010 0100 + {DMOV, "EA,BC" }, // a5: 1010 0101 + {DMOV, "EA,DE" }, // a6: 1010 0110 + {DMOV, "EA,HL" }, // a7: 1010 0111 + {INX, "EA" }, // a8: 1010 1000 + {DCX, "EA" }, // a9: 1010 1001 + {EI, nullptr }, // aa: 1010 1010 + {LDAX, "(DE+%b)" }, // ab: 1010 1011 dddd dddd + {LDAX, "(HL+A)" }, // ac: 1010 1100 + {LDAX, "(HL+B)" }, // ad: 1010 1101 + {LDAX, "(HL+EA)" }, // ae: 1010 1110 + {LDAX, "(HL+%b)" }, // af: 1010 1111 dddd dddd - {PUSH,"VA" }, /* b0: 1011 0000 */ - {PUSH,"BC" }, /* b1: 1011 0001 */ - {PUSH,"DE" }, /* b2: 1011 0010 */ - {PUSH,"HL", }, /* b3: 1011 0011 */ - {PUSH,"EA" }, /* b4: 1011 0100 */ - {DMOV,"BC,EA" }, /* b5: 1011 0101 */ - {DMOV,"DE,EA" }, /* b6: 1011 0110 */ - {DMOV,"HL,EA" }, /* b7: 1011 0111 */ - {RET,nullptr }, /* b8: 1011 1000 */ - {RETS,nullptr }, /* b9: 1011 1001 */ - {DI,nullptr }, /* ba: 1011 1010 */ - {STAX,"(DE+%b)" }, /* bb: 1011 1011 dddd dddd */ - {STAX,"(HL+A)" }, /* bc: 1011 1100 */ - {STAX,"(HL+B)" }, /* bd: 1011 1101 */ - {STAX,"(HL+EA)" }, /* be: 1011 1110 */ - {STAX,"(HL+%b)" }, /* bf: 1011 1111 dddd dddd */ + {PUSH, "VA" }, // b0: 1011 0000 + {PUSH, "BC" }, // b1: 1011 0001 + {PUSH, "DE" }, // b2: 1011 0010 + {PUSH, "HL", }, // b3: 1011 0011 + {PUSH, "EA" }, // b4: 1011 0100 + {DMOV, "BC,EA" }, // b5: 1011 0101 + {DMOV, "DE,EA" }, // b6: 1011 0110 + {DMOV, "HL,EA" }, // b7: 1011 0111 + {RET, nullptr }, // b8: 1011 1000 + {RETS, nullptr }, // b9: 1011 1001 + {DI, nullptr }, // ba: 1011 1010 + {STAX, "(DE+%b)" }, // bb: 1011 1011 dddd dddd + {STAX, "(HL+A)" }, // bc: 1011 1100 + {STAX, "(HL+B)" }, // bd: 1011 1101 + {STAX, "(HL+EA)" }, // be: 1011 1110 + {STAX, "(HL+%b)" }, // bf: 1011 1111 dddd dddd - {JR,"%o" }, /* c0: 11oo oooo */ - {JR,"%o" }, /* c1: 11oo oooo */ - {JR,"%o" }, /* c2: 11oo oooo */ - {JR,"%o" }, /* c3: 11oo oooo */ - {JR,"%o" }, /* c4: 11oo oooo */ - {JR,"%o" }, /* c5: 11oo oooo */ - {JR,"%o" }, /* c6: 11oo oooo */ - {JR,"%o" }, /* c7: 11oo oooo */ - {JR,"%o" }, /* c8: 11oo oooo */ - {JR,"%o" }, /* c9: 11oo oooo */ - {JR,"%o" }, /* ca: 11oo oooo */ - {JR,"%o" }, /* cb: 11oo oooo */ - {JR,"%o" }, /* cc: 11oo oooo */ - {JR,"%o" }, /* cd: 11oo oooo */ - {JR,"%o" }, /* ce: 11oo oooo */ - {JR,"%o" }, /* cf: 11oo oooo */ + {JR, "%o" }, // c0: 11oo oooo + {JR, "%o" }, // c1: 11oo oooo + {JR, "%o" }, // c2: 11oo oooo + {JR, "%o" }, // c3: 11oo oooo + {JR, "%o" }, // c4: 11oo oooo + {JR, "%o" }, // c5: 11oo oooo + {JR, "%o" }, // c6: 11oo oooo + {JR, "%o" }, // c7: 11oo oooo + {JR, "%o" }, // c8: 11oo oooo + {JR, "%o" }, // c9: 11oo oooo + {JR, "%o" }, // ca: 11oo oooo + {JR, "%o" }, // cb: 11oo oooo + {JR, "%o" }, // cc: 11oo oooo + {JR, "%o" }, // cd: 11oo oooo + {JR, "%o" }, // ce: 11oo oooo + {JR, "%o" }, // cf: 11oo oooo - {JR,"%o" }, /* d0: 11oo oooo */ - {JR,"%o" }, /* d1: 11oo oooo */ - {JR,"%o" }, /* d2: 11oo oooo */ - {JR,"%o" }, /* d3: 11oo oooo */ - {JR,"%o" }, /* d4: 11oo oooo */ - {JR,"%o" }, /* d5: 11oo oooo */ - {JR,"%o" }, /* d6: 11oo oooo */ - {JR,"%o" }, /* d7: 11oo oooo */ - {JR,"%o" }, /* d8: 11oo oooo */ - {JR,"%o" }, /* d9: 11oo oooo */ - {JR,"%o" }, /* da: 11oo oooo */ - {JR,"%o" }, /* db: 11oo oooo */ - {JR,"%o" }, /* dc: 11oo oooo */ - {JR,"%o" }, /* dd: 11oo oooo */ - {JR,"%o" }, /* de: 11oo oooo */ - {JR,"%o" }, /* df: 11oo oooo */ + {JR, "%o" }, // d0: 11oo oooo + {JR, "%o" }, // d1: 11oo oooo + {JR, "%o" }, // d2: 11oo oooo + {JR, "%o" }, // d3: 11oo oooo + {JR, "%o" }, // d4: 11oo oooo + {JR, "%o" }, // d5: 11oo oooo + {JR, "%o" }, // d6: 11oo oooo + {JR, "%o" }, // d7: 11oo oooo + {JR, "%o" }, // d8: 11oo oooo + {JR, "%o" }, // d9: 11oo oooo + {JR, "%o" }, // da: 11oo oooo + {JR, "%o" }, // db: 11oo oooo + {JR, "%o" }, // dc: 11oo oooo + {JR, "%o" }, // dd: 11oo oooo + {JR, "%o" }, // de: 11oo oooo + {JR, "%o" }, // df: 11oo oooo - {JR,"%o" }, /* e0: 11oo oooo */ - {JR,"%o" }, /* e1: 11oo oooo */ - {JR,"%o" }, /* e2: 11oo oooo */ - {JR,"%o" }, /* e3: 11oo oooo */ - {JR,"%o" }, /* e4: 11oo oooo */ - {JR,"%o" }, /* e5: 11oo oooo */ - {JR,"%o" }, /* e6: 11oo oooo */ - {JR,"%o" }, /* e7: 11oo oooo */ - {JR,"%o" }, /* e8: 11oo oooo */ - {JR,"%o" }, /* e9: 11oo oooo */ - {JR,"%o" }, /* ea: 11oo oooo */ - {JR,"%o" }, /* eb: 11oo oooo */ - {JR,"%o" }, /* ec: 11oo oooo */ - {JR,"%o" }, /* ed: 11oo oooo */ - {JR,"%o" }, /* ee: 11oo oooo */ - {JR,"%o" }, /* ef: 11oo oooo */ + {JR, "%o" }, // e0: 11oo oooo + {JR, "%o" }, // e1: 11oo oooo + {JR, "%o" }, // e2: 11oo oooo + {JR, "%o" }, // e3: 11oo oooo + {JR, "%o" }, // e4: 11oo oooo + {JR, "%o" }, // e5: 11oo oooo + {JR, "%o" }, // e6: 11oo oooo + {JR, "%o" }, // e7: 11oo oooo + {JR, "%o" }, // e8: 11oo oooo + {JR, "%o" }, // e9: 11oo oooo + {JR, "%o" }, // ea: 11oo oooo + {JR, "%o" }, // eb: 11oo oooo + {JR, "%o" }, // ec: 11oo oooo + {JR, "%o" }, // ed: 11oo oooo + {JR, "%o" }, // ee: 11oo oooo + {JR, "%o" }, // ef: 11oo oooo - {JR,"%o" }, /* f0: 11oo oooo */ - {JR,"%o" }, /* f1: 11oo oooo */ - {JR,"%o" }, /* f2: 11oo oooo */ - {JR,"%o" }, /* f3: 11oo oooo */ - {JR,"%o" }, /* f4: 11oo oooo */ - {JR,"%o" }, /* f5: 11oo oooo */ - {JR,"%o" }, /* f6: 11oo oooo */ - {JR,"%o" }, /* f7: 11oo oooo */ - {JR,"%o" }, /* f8: 11oo oooo */ - {JR,"%o" }, /* f9: 11oo oooo */ - {JR,"%o" }, /* fa: 11oo oooo */ - {JR,"%o" }, /* fb: 11oo oooo */ - {JR,"%o" }, /* fc: 11oo oooo */ - {JR,"%o" }, /* fd: 11oo oooo */ - {JR,"%o" }, /* fe: 11oo oooo */ - {JR,"%o" } /* ff: 11oo oooo */ + {JR, "%o" }, // f0: 11oo oooo + {JR, "%o" }, // f1: 11oo oooo + {JR, "%o" }, // f2: 11oo oooo + {JR, "%o" }, // f3: 11oo oooo + {JR, "%o" }, // f4: 11oo oooo + {JR, "%o" }, // f5: 11oo oooo + {JR, "%o" }, // f6: 11oo oooo + {JR, "%o" }, // f7: 11oo oooo + {JR, "%o" }, // f8: 11oo oooo + {JR, "%o" }, // f9: 11oo oooo + {JR, "%o" }, // fa: 11oo oooo + {JR, "%o" }, // fb: 11oo oooo + {JR, "%o" }, // fc: 11oo oooo + {JR, "%o" }, // fd: 11oo oooo + {JR, "%o" }, // fe: 11oo oooo + {JR, "%o" } // ff: 11oo oooo }; /********************************************************* @@ -3965,1391 +4020,1391 @@ static const struct dasm_s dasmXX_7807[256] = * *********************************************************/ -static const struct dasm_s dasm48_7801[256] = { - /* 0x00 - 0x3F */ - { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { SKIT, "F2" }, - { SKIT, "FS" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SK, "CY" }, { illegal, nullptr }, - { SK, "Z" }, { illegal, nullptr }, { PUSH, "VA" }, { POP, "VA" }, +const dasm_s dasm_s::d48_7801[256] = { + // 0x00 - 0x3F + { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { SKIT, "F2" }, + { SKIT, "FS" }, { }, { }, { }, + { }, { }, { SK, "CY" }, { }, + { SK, "Z" }, { }, { PUSH, "VA" }, { POP, "VA" }, - { SKNIT, "F0" }, { SKNIT, "FT" }, { SKNIT, "F1" }, { SKNIT, "F2" }, - { SKNIT, "FS" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SKN, "CY" }, { illegal, nullptr }, - { SKN, "Z" }, { illegal, nullptr }, { PUSH, "BC" }, { POP, "BC" }, + { SKNIT, "F0" }, { SKNIT, "FT" }, { SKNIT, "F1" }, { SKNIT, "F2" }, + { SKNIT, "FS" }, { }, { }, { }, + { }, { }, { SKN, "CY" }, { }, + { SKN, "Z" }, { }, { PUSH, "BC" }, { POP, "BC" }, - { EI, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { DI, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { CLC, nullptr }, { STC, nullptr }, - { PER, nullptr }, { PEX, nullptr }, { PUSH, "DE" }, { POP, "DE" }, + { EI, nullptr }, { }, { }, { }, + { DI, nullptr }, { }, { }, { }, + { }, { }, { CLC, nullptr }, { STC, nullptr }, + { PER, nullptr }, { PEX, nullptr }, { PUSH, "DE" }, { POP, "DE" }, - { RLL, "A" }, { RLR, "A" }, { RLL, "C" }, { RLR, "C" }, - { SLL, "A" }, { SLR, "A" }, { SLL, "C" }, { SLR, "C" }, - { RLD, nullptr }, { RRD, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { PER, nullptr }, { illegal, nullptr }, { PUSH, "HL" }, { POP, "HL" }, + { RLL, "A" }, { RLR, "A" }, { RLL, "C" }, { RLR, "C" }, + { SLL, "A" }, { SLR, "A" }, { SLL, "C" }, { SLR, "C" }, + { RLD, nullptr }, { RRD, nullptr }, { }, { }, + { PER, nullptr }, { }, { PUSH, "HL" }, { POP, "HL" }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0xC0 - 0xFF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { } }; -static const struct dasm_s dasm4c_7801[256] = { - /* 0x00 - 0x3F */ - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, +const dasm_s dasm_s::d4C_7801[256] = { + // 0x00 - 0x3F + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - /* 0x40 - 0x7F */ - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + // 0x40 - 0x7F + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - /* 0x80 - 0xBF */ - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + // 0x80 - 0xBF + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, + { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, - /* 0xC0 - 0xFF */ - { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { MOV, "A,S" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" }, + { }, { }, { }, { }, + { MOV, "A,S" }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { } }; -static const struct dasm_s dasm4d_7801[256] = { - /* 0x00 - 0x3F */ - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, +const dasm_s dasm_s::d4D_7801[256] = { + // 0x00 - 0x3F + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - /* 0x40 - 0x7F */ - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + // 0x40 - 0x7F + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - /* 0x80 - 0xBF */ - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + // 0x80 - 0xBF + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, + { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, - /* 0xC0 - 0xFF */ - { MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" }, - { MOV, "MB,A" }, { MOV, "MC,A" }, { MOV, "TM0,A" }, { MOV, "TM1,A" }, - { MOV, "S,A" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" }, + { MOV, "MB,A" }, { MOV, "MC,A" }, { MOV, "TM0,A" }, { MOV, "TM1,A" }, + { MOV, "S,A" }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { } }; -static const struct dasm_s dasm60_7801[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ANA, "V,A" }, { ANA, "A,A" }, { ANA, "B,A" }, { ANA, "C,A" }, - { ANA, "D,A" }, { ANA, "E,A" }, { ANA, "H,A" }, { ANA, "L,A" }, +const dasm_s dasm_s::d60_7801[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { ANA, "V,A" }, { ANA, "A,A" }, { ANA, "B,A" }, { ANA, "C,A" }, + { ANA, "D,A" }, { ANA, "E,A" }, { ANA, "H,A" }, { ANA, "L,A" }, - { XRA, "V,A" }, { XRA, "A,A" }, { XRA, "B,A" }, { XRA, "C,A" }, - { XRA, "D,A" }, { XRA, "E,A" }, { XRA, "H,A" }, { XRA, "L,A" }, - { ORA, "V,A" }, { ORA, "A,A" }, { ORA, "B,A" }, { ORA, "C,A" }, - { ORA, "D,A" }, { ORA, "E,A" }, { ORA, "H,A" }, { ORA, "L,A" }, + { XRA, "V,A" }, { XRA, "A,A" }, { XRA, "B,A" }, { XRA, "C,A" }, + { XRA, "D,A" }, { XRA, "E,A" }, { XRA, "H,A" }, { XRA, "L,A" }, + { ORA, "V,A" }, { ORA, "A,A" }, { ORA, "B,A" }, { ORA, "C,A" }, + { ORA, "D,A" }, { ORA, "E,A" }, { ORA, "H,A" }, { ORA, "L,A" }, - { ADDNC, "V,A" }, { ADDNC, "A,A" }, { ADDNC, "B,A" }, { ADDNC, "C,A" }, - { ADDNC, "D,A" }, { ADDNC, "E,A" }, { ADDNC, "H,A" }, { ADDNC, "L,A" }, - { GTA, "V,A" }, { GTA, "A,A" }, { GTA, "B,A" }, { GTA, "C,A" }, - { GTA, "D,A" }, { GTA, "E,A" }, { GTA, "H,A" }, { GTA, "L,A" }, + { ADDNC, "V,A" }, { ADDNC, "A,A" }, { ADDNC, "B,A" }, { ADDNC, "C,A" }, + { ADDNC, "D,A" }, { ADDNC, "E,A" }, { ADDNC, "H,A" }, { ADDNC, "L,A" }, + { GTA, "V,A" }, { GTA, "A,A" }, { GTA, "B,A" }, { GTA, "C,A" }, + { GTA, "D,A" }, { GTA, "E,A" }, { GTA, "H,A" }, { GTA, "L,A" }, - { SUBNB, "V,A" }, { SUBNB, "A,A" }, { SUBNB, "B,A" }, { SUBNB, "C,A" }, - { SUBNB, "D,A" }, { SUBNB, "E,A" }, { SUBNB, "H,A" }, { SUBNB, "L,A" }, - { LTA, "V,A" }, { LTA, "A,A" }, { LTA, "B,A" }, { LTA, "C,A" }, - { LTA, "D,A" }, { LTA, "E,A" }, { LTA, "H,A" }, { LTA, "L,A" }, + { SUBNB, "V,A" }, { SUBNB, "A,A" }, { SUBNB, "B,A" }, { SUBNB, "C,A" }, + { SUBNB, "D,A" }, { SUBNB, "E,A" }, { SUBNB, "H,A" }, { SUBNB, "L,A" }, + { LTA, "V,A" }, { LTA, "A,A" }, { LTA, "B,A" }, { LTA, "C,A" }, + { LTA, "D,A" }, { LTA, "E,A" }, { LTA, "H,A" }, { LTA, "L,A" }, - /* 0x40 - 0x7F */ - { ADD, "V,A" }, { ADD, "A,A" }, { ADD, "B,A" }, { ADD, "C,A" }, - { ADD, "D,A" }, { ADD, "E,A" }, { ADD, "H,A" }, { ADD, "L,A" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { ADD, "V,A" }, { ADD, "A,A" }, { ADD, "B,A" }, { ADD, "C,A" }, + { ADD, "D,A" }, { ADD, "E,A" }, { ADD, "H,A" }, { ADD, "L,A" }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { ADC, "V,A" }, { ADC, "A,A" }, { ADC, "B,A" }, { ADC, "C,A" }, - { ADC, "D,A" }, { ADC, "E,A" }, { ADC, "H,A" }, { ADC, "L,A" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ADC, "V,A" }, { ADC, "A,A" }, { ADC, "B,A" }, { ADC, "C,A" }, + { ADC, "D,A" }, { ADC, "E,A" }, { ADC, "H,A" }, { ADC, "L,A" }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { SUB, "V,A" }, { SUB, "A,A" }, { SUB, "B,A" }, { SUB, "C,A" }, - { SUB, "D,A" }, { SUB, "E,A" }, { SUB, "H,A" }, { SUB, "L,A" }, - { NEA, "V,A" }, { NEA, "A,A" }, { NEA, "B,A" }, { NEA, "C,A" }, - { NEA, "D,A" }, { NEA, "E,A" }, { NEA, "H,A" }, { NEA, "L,A" }, + { SUB, "V,A" }, { SUB, "A,A" }, { SUB, "B,A" }, { SUB, "C,A" }, + { SUB, "D,A" }, { SUB, "E,A" }, { SUB, "H,A" }, { SUB, "L,A" }, + { NEA, "V,A" }, { NEA, "A,A" }, { NEA, "B,A" }, { NEA, "C,A" }, + { NEA, "D,A" }, { NEA, "E,A" }, { NEA, "H,A" }, { NEA, "L,A" }, - { SBB, "V,A" }, { SBB, "A,A" }, { SBB, "B,A" }, { SBB, "C,A" }, - { SBB, "D,A" }, { SBB, "E,A" }, { SBB, "H,A" }, { SBB, "L,A" }, - { EQA, "V,A" }, { EQA, "A,A" }, { EQA, "B,A" }, { EQA, "C,A" }, - { EQA, "D,A" }, { EQA, "E,A" }, { EQA, "H,A" }, { EQA, "L,A" }, + { SBB, "V,A" }, { SBB, "A,A" }, { SBB, "B,A" }, { SBB, "C,A" }, + { SBB, "D,A" }, { SBB, "E,A" }, { SBB, "H,A" }, { SBB, "L,A" }, + { EQA, "V,A" }, { EQA, "A,A" }, { EQA, "B,A" }, { EQA, "C,A" }, + { EQA, "D,A" }, { EQA, "E,A" }, { EQA, "H,A" }, { EQA, "L,A" }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ANA, "A,V" }, { ANA, "A,A" }, { ANA, "A,B" }, { ANA, "A,C" }, - { ANA, "A,D" }, { ANA, "A,E" }, { ANA, "A,H" }, { ANA, "A,L" }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { ANA, "A,V" }, { ANA, "A,A" }, { ANA, "A,B" }, { ANA, "A,C" }, + { ANA, "A,D" }, { ANA, "A,E" }, { ANA, "A,H" }, { ANA, "A,L" }, - { XRA, "A,V" }, { XRA, "A,A" }, { XRA, "A,B" }, { XRA, "A,C" }, - { XRA, "A,D" }, { XRA, "A,E" }, { XRA, "A,H" }, { XRA, "A,L" }, - { ORA, "A,V" }, { ORA, "A,A" }, { ORA, "A,B" }, { ORA, "A,C" }, - { ORA, "A,D" }, { ORA, "A,E" }, { ORA, "A,H" }, { ORA, "A,L" }, + { XRA, "A,V" }, { XRA, "A,A" }, { XRA, "A,B" }, { XRA, "A,C" }, + { XRA, "A,D" }, { XRA, "A,E" }, { XRA, "A,H" }, { XRA, "A,L" }, + { ORA, "A,V" }, { ORA, "A,A" }, { ORA, "A,B" }, { ORA, "A,C" }, + { ORA, "A,D" }, { ORA, "A,E" }, { ORA, "A,H" }, { ORA, "A,L" }, - { ADDNC, "A,V" }, { ADDNC, "A,A" }, { ADDNC, "A,B" }, { ADDNC, "A,C" }, - { ADDNC, "A,D" }, { ADDNC, "A,E" }, { ADDNC, "A,H" }, { ADDNC, "A,L" }, - { GTA, "A,V" }, { GTA, "A,A" }, { GTA, "A,B" }, { GTA, "A,C" }, - { GTA, "A,D" }, { GTA, "A,E" }, { GTA, "A,H" }, { GTA, "A,L" }, + { ADDNC, "A,V" }, { ADDNC, "A,A" }, { ADDNC, "A,B" }, { ADDNC, "A,C" }, + { ADDNC, "A,D" }, { ADDNC, "A,E" }, { ADDNC, "A,H" }, { ADDNC, "A,L" }, + { GTA, "A,V" }, { GTA, "A,A" }, { GTA, "A,B" }, { GTA, "A,C" }, + { GTA, "A,D" }, { GTA, "A,E" }, { GTA, "A,H" }, { GTA, "A,L" }, - { SUBNB, "A,V" }, { SUBNB, "A,A" }, { SUBNB, "A,B" }, { SUBNB, "A,C" }, - { SUBNB, "A,D" }, { SUBNB, "A,E" }, { SUBNB, "A,H" }, { SUBNB, "A,L" }, - { LTA, "A,V" }, { LTA, "A,A" }, { LTA, "A,B" }, { LTA, "A,C" }, - { LTA, "A,D" }, { LTA, "A,E" }, { LTA, "A,H" }, { LTA, "A,L" }, + { SUBNB, "A,V" }, { SUBNB, "A,A" }, { SUBNB, "A,B" }, { SUBNB, "A,C" }, + { SUBNB, "A,D" }, { SUBNB, "A,E" }, { SUBNB, "A,H" }, { SUBNB, "A,L" }, + { LTA, "A,V" }, { LTA, "A,A" }, { LTA, "A,B" }, { LTA, "A,C" }, + { LTA, "A,D" }, { LTA, "A,E" }, { LTA, "A,H" }, { LTA, "A,L" }, - /* 0xC0 - 0xFF */ - { ADD, "A,V" }, { ADD, "A,A" }, { ADD, "A,B" }, { ADD, "A,C" }, - { ADD, "A,D" }, { ADD, "A,E" }, { ADD, "A,H" }, { ADD, "A,L" }, - { ONA, "A,V" }, { ONA, "A,A" }, { ONA, "A,B" }, { ONA, "A,C" }, - { ONA, "A,D" }, { ONA, "A,E" }, { ONA, "A,H" }, { ONA, "A,L" }, + // 0xC0 - 0xFF + { ADD, "A,V" }, { ADD, "A,A" }, { ADD, "A,B" }, { ADD, "A,C" }, + { ADD, "A,D" }, { ADD, "A,E" }, { ADD, "A,H" }, { ADD, "A,L" }, + { ONA, "A,V" }, { ONA, "A,A" }, { ONA, "A,B" }, { ONA, "A,C" }, + { ONA, "A,D" }, { ONA, "A,E" }, { ONA, "A,H" }, { ONA, "A,L" }, - { ADC, "A,V" }, { ADC, "A,A" }, { ADC, "A,B" }, { ADC, "A,C" }, - { ADC, "A,D" }, { ADC, "A,E" }, { ADC, "A,H" }, { ADC, "A,L" }, - { OFFA, "A,V" }, { OFFA, "A,A" }, { OFFA, "A,B" }, { OFFA, "A,C" }, - { OFFA, "A,D" }, { OFFA, "A,E" }, { OFFA, "A,H" }, { OFFA, "A,L" }, + { ADC, "A,V" }, { ADC, "A,A" }, { ADC, "A,B" }, { ADC, "A,C" }, + { ADC, "A,D" }, { ADC, "A,E" }, { ADC, "A,H" }, { ADC, "A,L" }, + { OFFA, "A,V" }, { OFFA, "A,A" }, { OFFA, "A,B" }, { OFFA, "A,C" }, + { OFFA, "A,D" }, { OFFA, "A,E" }, { OFFA, "A,H" }, { OFFA, "A,L" }, - { SUB, "A,V" }, { SUB, "A,A" }, { SUB, "A,B" }, { SUB, "A,C" }, - { SUB, "A,D" }, { SUB, "A,E" }, { SUB, "A,H" }, { SUB, "A,L" }, - { NEA, "A,V" }, { NEA, "A,A" }, { NEA, "A,B" }, { NEA, "A,C" }, - { NEA, "A,D" }, { NEA, "A,E" }, { NEA, "A,H" }, { NEA, "A,L" }, + { SUB, "A,V" }, { SUB, "A,A" }, { SUB, "A,B" }, { SUB, "A,C" }, + { SUB, "A,D" }, { SUB, "A,E" }, { SUB, "A,H" }, { SUB, "A,L" }, + { NEA, "A,V" }, { NEA, "A,A" }, { NEA, "A,B" }, { NEA, "A,C" }, + { NEA, "A,D" }, { NEA, "A,E" }, { NEA, "A,H" }, { NEA, "A,L" }, - { SBB, "A,V" }, { SBB, "A,A" }, { SBB, "A,B" }, { SBB, "A,C" }, - { SBB, "A,D" }, { SBB, "A,E" }, { SBB, "A,H" }, { SBB, "A,L" }, - { EQA, "A,V" }, { EQA, "A,A" }, { EQA, "A,B" }, { EQA, "A,C" }, - { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" } + { SBB, "A,V" }, { SBB, "A,A" }, { SBB, "A,B" }, { SBB, "A,C" }, + { SBB, "A,D" }, { SBB, "A,E" }, { SBB, "A,H" }, { SBB, "A,L" }, + { EQA, "A,V" }, { EQA, "A,A" }, { EQA, "A,B" }, { EQA, "A,C" }, + { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" } }; -static const struct dasm_s dasm64_7801[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ANI, "V,%b" }, { ANI, "A,%b" }, { ANI, "B,%b" }, { ANI, "C,%b" }, - { ANI, "D,%b" }, { ANI, "E,%b" }, { ANI, "H,%b" }, { ANI, "L,%b" }, +const dasm_s dasm_s::d64_7801[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { ANI, "V,%b" }, { ANI, "A,%b" }, { ANI, "B,%b" }, { ANI, "C,%b" }, + { ANI, "D,%b" }, { ANI, "E,%b" }, { ANI, "H,%b" }, { ANI, "L,%b" }, - { XRI, "V,%b" }, { XRI, "A,%b" }, { XRI, "B,%b" }, { XRI, "C,%b" }, - { XRI, "D,%b" }, { XRI, "E,%b" }, { XRI, "H,%b" }, { XRI, "L,%b" }, - { ORI, "V,%b" }, { ORI, "A,%b" }, { ORI, "B,%b" }, { ORI, "C,%b" }, - { ORI, "D,%b" }, { ORI, "E,%b" }, { ORI, "H,%b" }, { ORI, "L,%b" }, + { XRI, "V,%b" }, { XRI, "A,%b" }, { XRI, "B,%b" }, { XRI, "C,%b" }, + { XRI, "D,%b" }, { XRI, "E,%b" }, { XRI, "H,%b" }, { XRI, "L,%b" }, + { ORI, "V,%b" }, { ORI, "A,%b" }, { ORI, "B,%b" }, { ORI, "C,%b" }, + { ORI, "D,%b" }, { ORI, "E,%b" }, { ORI, "H,%b" }, { ORI, "L,%b" }, - { ADINC, "V,%b" }, { ADINC, "A,%b" }, { ADINC, "B,%b" }, { ADINC, "C,%b" }, - { ADINC, "D,%b" }, { ADINC, "E,%b" }, { ADINC, "H,%b" }, { ADINC, "L,%b" }, - { GTI, "V,%b" }, { GTI, "A,%b" }, { GTI, "B,%b" }, { GTI, "C,%b" }, - { GTI, "D,%b" }, { GTI, "E,%b" }, { GTI, "H,%b" }, { GTI, "L,%b" }, + { ADINC, "V,%b" }, { ADINC, "A,%b" }, { ADINC, "B,%b" }, { ADINC, "C,%b" }, + { ADINC, "D,%b" }, { ADINC, "E,%b" }, { ADINC, "H,%b" }, { ADINC, "L,%b" }, + { GTI, "V,%b" }, { GTI, "A,%b" }, { GTI, "B,%b" }, { GTI, "C,%b" }, + { GTI, "D,%b" }, { GTI, "E,%b" }, { GTI, "H,%b" }, { GTI, "L,%b" }, - { SUINB, "V,%b" }, { SUINB, "A,%b" }, { SUINB, "B,%b" }, { SUINB, "C,%b" }, - { SUINB, "D,%b" }, { SUINB, "E,%b" }, { SUINB, "H,%b" }, { SUINB, "L,%b" }, - { LTI, "V,%b" }, { LTI, "A,%b" }, { LTI, "B,%b" }, { LTI, "C,%b" }, - { LTI, "D,%b" }, { LTI, "E,%b" }, { LTI, "H,%b" }, { LTI, "L,%b" }, + { SUINB, "V,%b" }, { SUINB, "A,%b" }, { SUINB, "B,%b" }, { SUINB, "C,%b" }, + { SUINB, "D,%b" }, { SUINB, "E,%b" }, { SUINB, "H,%b" }, { SUINB, "L,%b" }, + { LTI, "V,%b" }, { LTI, "A,%b" }, { LTI, "B,%b" }, { LTI, "C,%b" }, + { LTI, "D,%b" }, { LTI, "E,%b" }, { LTI, "H,%b" }, { LTI, "L,%b" }, - /* 0x40 - 0x7F */ - { ADI, "V,%b" }, { ADI, "A,%b" }, { ADI, "B,%b" }, { ADI, "C,%b" }, - { ADI, "D,%b" }, { ADI, "E,%b" }, { ADI, "H,%b" }, { ADI, "L,%b" }, - { ONI, "V,%b" }, { ONI, "A,%b" }, { ONI, "B,%b" }, { ONI, "C,%b" }, - { ONI, "D,%b" }, { ONI, "E,%b" }, { ONI, "H,%b" }, { ONI, "L,%b" }, + // 0x40 - 0x7F + { ADI, "V,%b" }, { ADI, "A,%b" }, { ADI, "B,%b" }, { ADI, "C,%b" }, + { ADI, "D,%b" }, { ADI, "E,%b" }, { ADI, "H,%b" }, { ADI, "L,%b" }, + { ONI, "V,%b" }, { ONI, "A,%b" }, { ONI, "B,%b" }, { ONI, "C,%b" }, + { ONI, "D,%b" }, { ONI, "E,%b" }, { ONI, "H,%b" }, { ONI, "L,%b" }, - { ACI, "V,%b" }, { ACI, "A,%b" }, { ACI, "B,%b" }, { ACI, "C,%b" }, - { ACI, "D,%b" }, { ACI, "E,%b" }, { ACI, "H,%b" }, { ACI, "L,%b" }, - { OFFI, "V,%b" }, { OFFI, "A,%b" }, { OFFI, "B,%b" }, { OFFI, "C,%b" }, - { OFFI, "D,%b" }, { OFFI, "E,%b" }, { OFFI, "H,%b" }, { OFFI, "L,%b" }, + { ACI, "V,%b" }, { ACI, "A,%b" }, { ACI, "B,%b" }, { ACI, "C,%b" }, + { ACI, "D,%b" }, { ACI, "E,%b" }, { ACI, "H,%b" }, { ACI, "L,%b" }, + { OFFI, "V,%b" }, { OFFI, "A,%b" }, { OFFI, "B,%b" }, { OFFI, "C,%b" }, + { OFFI, "D,%b" }, { OFFI, "E,%b" }, { OFFI, "H,%b" }, { OFFI, "L,%b" }, - { SUI, "V,%b" }, { SUI, "A,%b" }, { SUI, "B,%b" }, { SUI, "C,%b" }, - { SUI, "D,%b" }, { SUI, "E,%b" }, { SUI, "H,%b" }, { SUI, "L,%b" }, - { NEI, "V,%b" }, { NEI, "A,%b" }, { NEI, "B,%b" }, { NEI, "C,%b" }, - { NEI, "D,%b" }, { NEI, "E,%b" }, { NEI, "H,%b" }, { NEI, "L,%b" }, + { SUI, "V,%b" }, { SUI, "A,%b" }, { SUI, "B,%b" }, { SUI, "C,%b" }, + { SUI, "D,%b" }, { SUI, "E,%b" }, { SUI, "H,%b" }, { SUI, "L,%b" }, + { NEI, "V,%b" }, { NEI, "A,%b" }, { NEI, "B,%b" }, { NEI, "C,%b" }, + { NEI, "D,%b" }, { NEI, "E,%b" }, { NEI, "H,%b" }, { NEI, "L,%b" }, - { SBI, "V,%b" }, { SBI, "A,%b" }, { SBI, "B,%b" }, { SBI, "C,%b" }, - { SBI, "D,%b" }, { SBI, "E,%b" }, { SBI, "H,%b" }, { SBI, "L,%b" }, - { EQI, "V,%b" }, { EQI, "A,%b" }, { EQI, "B,%b" }, { EQI, "C,%b" }, - { EQI, "D,%b" }, { EQI, "E,%b" }, { EQI, "H,%b" }, { EQI, "L,%b" }, + { SBI, "V,%b" }, { SBI, "A,%b" }, { SBI, "B,%b" }, { SBI, "C,%b" }, + { SBI, "D,%b" }, { SBI, "E,%b" }, { SBI, "H,%b" }, { SBI, "L,%b" }, + { EQI, "V,%b" }, { EQI, "A,%b" }, { EQI, "B,%b" }, { EQI, "C,%b" }, + { EQI, "D,%b" }, { EQI, "E,%b" }, { EQI, "H,%b" }, { EQI, "L,%b" }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ANI, "PA,%b" }, { ANI, "PB,%b" }, { ANI, "PC,%b" }, { ANI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { ANI, "PA,%b" }, { ANI, "PB,%b" }, { ANI, "PC,%b" }, { ANI, "MK,%b" }, + { }, { }, { }, { }, - { XRI, "PA,%b" }, { XRI, "PB,%b" }, { XRI, "PC,%b" }, { XRI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ORI, "PA,%b" }, { ORI, "PB,%b" }, { ORI, "PC,%b" }, { ORI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { XRI, "PA,%b" }, { XRI, "PB,%b" }, { XRI, "PC,%b" }, { XRI, "MK,%b" }, + { }, { }, { }, { }, + { ORI, "PA,%b" }, { ORI, "PB,%b" }, { ORI, "PC,%b" }, { ORI, "MK,%b" }, + { }, { }, { }, { }, - { ADINC, "PA,%b" }, { ADINC, "PB,%b" }, { ADINC, "PC,%b" }, { ADINC, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { GTI, "PA,%b" }, { GTI, "PB,%b" }, { GTI, "PC,%b" }, { GTI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ADINC, "PA,%b" }, { ADINC, "PB,%b" }, { ADINC, "PC,%b" }, { ADINC, "MK,%b" }, + { }, { }, { }, { }, + { GTI, "PA,%b" }, { GTI, "PB,%b" }, { GTI, "PC,%b" }, { GTI, "MK,%b" }, + { }, { }, { }, { }, - { SUINB, "PA,%b" }, { SUINB, "PB,%b" }, { SUINB, "PC,%b" }, { SUINB, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { LTI, "PA,%b" }, { LTI, "PB,%b" }, { LTI, "PC,%b" }, { LTI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { SUINB, "PA,%b" }, { SUINB, "PB,%b" }, { SUINB, "PC,%b" }, { SUINB, "MK,%b" }, + { }, { }, { }, { }, + { LTI, "PA,%b" }, { LTI, "PB,%b" }, { LTI, "PC,%b" }, { LTI, "MK,%b" }, + { }, { }, { }, { }, - /* 0xC0 - 0xFF */ - { ADI, "PA,%b" }, { ADI, "PB,%b" }, { ADI, "PC,%b" }, { ADI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ONI, "PA,%b" }, { ONI, "PB,%b" }, { ONI, "PC,%b" }, { ONI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { ADI, "PA,%b" }, { ADI, "PB,%b" }, { ADI, "PC,%b" }, { ADI, "MK,%b" }, + { }, { }, { }, { }, + { ONI, "PA,%b" }, { ONI, "PB,%b" }, { ONI, "PC,%b" }, { ONI, "MK,%b" }, + { }, { }, { }, { }, - { ACI, "PA,%b" }, { ACI, "PB,%b" }, { ACI, "PC,%b" }, { ACI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { OFFI, "PA,%b" }, { OFFI, "PB,%b" }, { OFFI, "PC,%b" }, { OFFI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ACI, "PA,%b" }, { ACI, "PB,%b" }, { ACI, "PC,%b" }, { ACI, "MK,%b" }, + { }, { }, { }, { }, + { OFFI, "PA,%b" }, { OFFI, "PB,%b" }, { OFFI, "PC,%b" }, { OFFI, "MK,%b" }, + { }, { }, { }, { }, - { SUI, "PA,%b" }, { SUI, "PB,%b" }, { SUI, "PC,%b" }, { SUI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { NEI, "PA,%b" }, { NEI, "PB,%b" }, { NEI, "PC,%b" }, { NEI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { SUI, "PA,%b" }, { SUI, "PB,%b" }, { SUI, "PC,%b" }, { SUI, "MK,%b" }, + { }, { }, { }, { }, + { NEI, "PA,%b" }, { NEI, "PB,%b" }, { NEI, "PC,%b" }, { NEI, "MK,%b" }, + { }, { }, { }, { }, - { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { EQI, "PA,%b" }, { EQI, "PB,%b" }, { EQI, "PC,%b" }, { EQI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" }, + { }, { }, { }, { }, + { EQI, "PA,%b" }, { EQI, "PB,%b" }, { EQI, "PC,%b" }, { EQI, "MK,%b" }, + { }, { }, { }, { } }; -static const struct dasm_s dasm70_7801[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SSPD, "%w" }, { LSPD, "%w" }, +const dasm_s dasm_s::d70_7801[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { SSPD, "%w" }, { LSPD, "%w" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SBCD, "%w" }, { LBCD, "%w" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { SBCD, "%w" }, { LBCD, "%w" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SDED, "%w" }, { LDED, "%w" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { SDED, "%w" }, { LDED, "%w" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SHLD, "%w" }, { LHLD, "%w" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { SHLD, "%w" }, { LHLD, "%w" }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { MOV, "V,%w" }, { MOV, "A,%w" }, { MOV, "B,%w" }, { MOV, "C,%w" }, - { MOV, "D,%w" }, { MOV, "E,%w" }, { MOV, "H,%w" }, { MOV, "L,%w" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { MOV, "V,%w" }, { MOV, "A,%w" }, { MOV, "B,%w" }, { MOV, "C,%w" }, + { MOV, "D,%w" }, { MOV, "E,%w" }, { MOV, "H,%w" }, { MOV, "L,%w" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { MOV, "%w,V" }, { MOV, "%w,A" }, { MOV, "%w,B" }, { MOV, "%w,C" }, - { MOV, "%w,D" }, { MOV, "%w,E" }, { MOV, "%w,H" }, { MOV, "%w,L" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { MOV, "%w,V" }, { MOV, "%w,A" }, { MOV, "%w,B" }, { MOV, "%w,C" }, + { MOV, "%w,D" }, { MOV, "%w,E" }, { MOV, "%w,H" }, { MOV, "%w,L" }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { ANAX, "BC" }, { ANAX, "DE" }, { ANAX, "HL" }, - { ANAX, "DE+" }, { ANAX, "HL+" }, { ANAX, "DE-" }, { ANAX, "HL-" }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { ANAX, "BC" }, { ANAX, "DE" }, { ANAX, "HL" }, + { ANAX, "DE+" }, { ANAX, "HL+" }, { ANAX, "DE-" }, { ANAX, "HL-" }, - { illegal, nullptr }, { XRAX, "BC" }, { XRAX, "DE" }, { XRAX, "HL" }, - { XRAX, "DE+" }, { XRAX, "HL+" }, { XRAX, "DE-" }, { XRAX, "HL-" }, - { illegal, nullptr }, { ORAX, "BC" }, { ORAX, "DE" }, { ORAX, "HL" }, - { ORAX, "DE+" }, { ORAX, "HL+" }, { ORAX, "DE-" }, { ORAX, "HL-" }, + { }, { XRAX, "BC" }, { XRAX, "DE" }, { XRAX, "HL" }, + { XRAX, "DE+" }, { XRAX, "HL+" }, { XRAX, "DE-" }, { XRAX, "HL-" }, + { }, { ORAX, "BC" }, { ORAX, "DE" }, { ORAX, "HL" }, + { ORAX, "DE+" }, { ORAX, "HL+" }, { ORAX, "DE-" }, { ORAX, "HL-" }, - { illegal, nullptr }, { ADDNCX, "BC" }, { ADDNCX, "DE" }, { ADDNCX, "HL" }, - { ADDNCX, "DE+" }, { ADDNCX, "HL+" }, { ADDNCX, "DE-" }, { ADDNCX, "HL-" }, - { illegal, nullptr }, { GTAX, "BC" }, { GTAX, "DE" }, { GTAX, "HL" }, - { GTAX, "DE+" }, { GTAX, "HL+" }, { GTAX, "DE-" }, { GTAX, "HL-" }, + { }, { ADDNCX, "BC" }, { ADDNCX, "DE" }, { ADDNCX, "HL" }, + { ADDNCX, "DE+" }, { ADDNCX, "HL+" }, { ADDNCX, "DE-" }, { ADDNCX, "HL-" }, + { }, { GTAX, "BC" }, { GTAX, "DE" }, { GTAX, "HL" }, + { GTAX, "DE+" }, { GTAX, "HL+" }, { GTAX, "DE-" }, { GTAX, "HL-" }, - { illegal, nullptr }, { SUBNBX, "BC" }, { SUBNBX, "DE" }, { SUBNBX, "HL" }, - { SUBNBX, "DE+" }, { SUBNBX, "HL+" }, { SUBNBX, }, { SUBNBX, "HL-" }, - { illegal, nullptr }, { LTAX, "BC" }, { LTAX, "DE" }, { LTAX, "HL" }, - { LTAX, "DE+" }, { LTAX, "HL+" }, { LTAX, "DE-" }, { LTAX, "HL-" }, + { }, { SUBNBX, "BC" }, { SUBNBX, "DE" }, { SUBNBX, "HL" }, + { SUBNBX, "DE+" }, { SUBNBX, "HL+" }, { SUBNBX, "DE-" }, { SUBNBX, "HL-" }, + { }, { LTAX, "BC" }, { LTAX, "DE" }, { LTAX, "HL" }, + { LTAX, "DE+" }, { LTAX, "HL+" }, { LTAX, "DE-" }, { LTAX, "HL-" }, - /* 0xC0 - 0xFF */ - { illegal, nullptr }, { ADDX, "BC" }, { ADDX, "DE" }, { ADDX, "HL" }, - { ADDX, "DE+" }, { ADDX, "HL+" }, { ADDX, "DE-" }, { ADDX, "HL-" }, - { illegal, nullptr }, { ONAX, "BC" }, { ONAX, "DE" }, { ONAX, "HL" }, - { ONAX, "DE+" }, { ONAX, "HL+" }, { ONAX, "DE-" }, { ONAX, "HL-" }, + // 0xC0 - 0xFF + { }, { ADDX, "BC" }, { ADDX, "DE" }, { ADDX, "HL" }, + { ADDX, "DE+" }, { ADDX, "HL+" }, { ADDX, "DE-" }, { ADDX, "HL-" }, + { }, { ONAX, "BC" }, { ONAX, "DE" }, { ONAX, "HL" }, + { ONAX, "DE+" }, { ONAX, "HL+" }, { ONAX, "DE-" }, { ONAX, "HL-" }, - { illegal, nullptr }, { ADCX, "BC" }, { ADCX, "DE" }, { ADCX, "HL" }, - { ADCX, "DE+" }, { ADCX, "HL+" }, { ADCX, "DE-" }, { ADCX, "HL-" }, - { illegal, nullptr }, { OFFAX, "BC" }, { OFFAX, "DE" }, { OFFAX, "HL" }, - { OFFAX, "DE+" }, { OFFAX, "HL+" }, { OFFAX, "DE-" }, { OFFAX, "HL-" }, + { }, { ADCX, "BC" }, { ADCX, "DE" }, { ADCX, "HL" }, + { ADCX, "DE+" }, { ADCX, "HL+" }, { ADCX, "DE-" }, { ADCX, "HL-" }, + { }, { OFFAX, "BC" }, { OFFAX, "DE" }, { OFFAX, "HL" }, + { OFFAX, "DE+" }, { OFFAX, "HL+" }, { OFFAX, "DE-" }, { OFFAX, "HL-" }, - { illegal, nullptr }, { SUBX, "BC" }, { SUBX, "DE" }, { SUBX, "HL" }, - { SUBX, "DE+" }, { SUBX, "HL+" }, { SUBX, "DE-" }, { SUBX, "HL-" }, - { illegal, nullptr }, { NEAX, "BC" }, { NEAX, "DE" }, { NEAX, "HL" }, - { NEAX, "DE+" }, { NEAX, "HL+" }, { NEAX, "DE-" }, { NEAX, "HL-" }, + { }, { SUBX, "BC" }, { SUBX, "DE" }, { SUBX, "HL" }, + { SUBX, "DE+" }, { SUBX, "HL+" }, { SUBX, "DE-" }, { SUBX, "HL-" }, + { }, { NEAX, "BC" }, { NEAX, "DE" }, { NEAX, "HL" }, + { NEAX, "DE+" }, { NEAX, "HL+" }, { NEAX, "DE-" }, { NEAX, "HL-" }, - { illegal, nullptr }, { SBBX, "BC" }, { SBBX, "DE" }, { SBBX, "HL" }, - { SBBX, "DE+" }, { SBBX, "HL+" }, { SBBX, "DE-" }, { SBBX, "HL-" }, - { illegal, nullptr }, { EQAX, "BC" }, { EQAX, "DE" }, { EQAX, "HL" }, - { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" }, + { }, { SBBX, "BC" }, { SBBX, "DE" }, { SBBX, "HL" }, + { SBBX, "DE+" }, { SBBX, "HL+" }, { SBBX, "DE-" }, { SBBX, "HL-" }, + { }, { EQAX, "BC" }, { EQAX, "DE" }, { EQAX, "HL" }, + { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" }, }; -static const struct dasm_s dasm74_7801[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, +const dasm_s dasm_s::d74_7801[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ANAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { ANAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { XRAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ORAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { XRAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { ORAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { ADDNCW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { GTAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ADDNCW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { GTAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { SUBNBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { LTAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { SUBNBW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { LTAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - /* 0xC0 - 0xFF */ - { ADDW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ONAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { ADDW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { ONAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { ADCW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { OFFAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ADCW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { OFFAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { SUBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { NEAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { SUBW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { NEAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { SBBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { EQAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { SBBW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { EQAW, "%a" }, { }, { }, { }, + { }, { }, { }, { } }; -static const struct dasm_s dasmXX_7801[256] = { - /* 0x00 - 0x3F */ - { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" }, - { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { illegal, nullptr }, { ANI, "A,%b" }, - { RET, nullptr }, { SIO, nullptr }, { MOV, "A,B" }, { MOV, "A,C" }, - { MOV, "A,D" }, { MOV, "A,E" }, { MOV, "A,H" }, { MOV, "A,L" }, +const dasm_s dasm_s::XX_7801[256] = { + // 0x00 - 0x3F + { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" }, + { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { }, { ANI, "A,%b" }, + { RET, nullptr }, { SIO, nullptr }, { MOV, "A,B" }, { MOV, "A,C" }, + { MOV, "A,D" }, { MOV, "A,E" }, { MOV, "A,H" }, { MOV, "A,L" }, - { EX, nullptr }, { EXX, nullptr }, { INX, "BC" }, { DCX, "BC" }, - { LXI, "BC,%w" }, { ORIW, "%a,%b" }, { XRI, "A,%b" }, { ORI, "A,%b" }, - { RETS, nullptr }, { STM, nullptr }, { MOV, "B,A" }, { MOV, "C,A" }, - { MOV, "D,A" }, { MOV, "E,A" }, { MOV, "H,A" }, { MOV, "L,A" }, + { EX, nullptr }, { EXX, nullptr }, { INX, "BC" }, { DCX, "BC" }, + { LXI, "BC,%w" }, { ORIW, "%a,%b" }, { XRI, "A,%b" }, { ORI, "A,%b" }, + { RETS, nullptr }, { STM, nullptr }, { MOV, "B,A" }, { MOV, "C,A" }, + { MOV, "D,A" }, { MOV, "E,A" }, { MOV, "H,A" }, { MOV, "L,A" }, - { INRW, "%a" }, { TABLE, nullptr }, { INX, "DE" }, { DCX, "DE" }, - { LXI, "DE,%w" }, { GTIW, "%a,%b" }, { ADINC, "A,%b" }, { GTI, "A,%b" }, - { LDAW, "%a" }, { LDAX, "BC" }, { LDAX, "DE" }, { LDAX, "HL" }, - { LDAX, "DE+" }, { LDAX, "HL+" }, { LDAX, "DE-" }, { LDAX, "HL-" }, + { INRW, "%a" }, { TABLE, nullptr }, { INX, "DE" }, { DCX, "DE" }, + { LXI, "DE,%w" }, { GTIW, "%a,%b" }, { ADINC, "A,%b" }, { GTI, "A,%b" }, + { LDAW, "%a" }, { LDAX, "BC" }, { LDAX, "DE" }, { LDAX, "HL" }, + { LDAX, "DE+" }, { LDAX, "HL+" }, { LDAX, "DE-" }, { LDAX, "HL-" }, - { DCRW, "%a" }, { BLOCK, nullptr }, { INX, "HL" }, { DCX, "HL" }, - { LXI, "HL,%w" }, { LTIW, "%a,%b" }, { SUINB, "A,%b" }, { LTI, "A,%b" }, - { STAW, "%a" }, { STAX, "BC" }, { STAX, "DE" }, { STAX, "HL" }, - { STAX, "DE+" }, { STAX, "HL+" }, { STAX, "DE-" }, { STAX, "HL-" }, + { DCRW, "%a" }, { BLOCK, nullptr }, { INX, "HL" }, { DCX, "HL" }, + { LXI, "HL,%w" }, { LTIW, "%a,%b" }, { SUINB, "A,%b" }, { LTI, "A,%b" }, + { STAW, "%a" }, { STAX, "BC" }, { STAX, "DE" }, { STAX, "HL" }, + { STAX, "DE+" }, { STAX, "HL+" }, { STAX, "DE-" }, { STAX, "HL-" }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { INR, "A" }, { INR, "B" }, { INR, "C" }, - { CALL, "%w" }, { ONIW, "%a,%b" }, { ADI, "A,%b" }, { ONI, "A,%b" }, - { 0, dasm48_7801 }, { MVIX, "BC,%b" }, { MVIX, "DE,%b" }, { MVIX, "HL,%b" }, - { 0, dasm4c_7801 }, { 0, dasm4d_7801 }, { JRE, "%d" }, { JRE, "%d" }, + // 0x40 - 0x7F + { }, { INR, "A" }, { INR, "B" }, { INR, "C" }, + { CALL, "%w" }, { ONIW, "%a,%b" }, { ADI, "A,%b" }, { ONI, "A,%b" }, + { d48_7801 }, { MVIX, "BC,%b" }, { MVIX, "DE,%b" }, { MVIX, "HL,%b" }, + { d4C_7801 }, { d4D_7801 }, { JRE, "%d" }, { JRE, "%d" }, - { illegal, nullptr }, { DCR, "A" }, { DCR, "B" }, { DCR, "C" }, - { JMP, "%w" }, { OFFIW, "%a,%b" }, { ACI, "A,%b" }, { OFFI, "A,%b" }, - { BIT, "0,%a" }, { BIT, "1,%a" }, { BIT," 2,%a" }, { BIT, "3,%a" }, - { BIT, "4,%a" }, { BIT, "5,%a" }, { BIT, "6,%a" }, { BIT, "7,%a" }, + { }, { DCR, "A" }, { DCR, "B" }, { DCR, "C" }, + { JMP, "%w" }, { OFFIW, "%a,%b" }, { ACI, "A,%b" }, { OFFI, "A,%b" }, + { BIT, "0,%a" }, { BIT, "1,%a" }, { BIT, " 2,%a" }, { BIT, "3,%a" }, + { BIT, "4,%a" }, { BIT, "5,%a" }, { BIT, "6,%a" }, { BIT, "7,%a" }, - { 0, dasm60_7801 }, { DAA, nullptr }, { RETI, nullptr }, { CALB, nullptr }, - { 0, dasm64_7801 }, { NEIW, "%a,%b" }, { SUI, "A,%b" }, { NEI, "A,%b" }, - { MVI, "V,%b" }, { MVI, "A,%b" }, { MVI, "B,%b" }, { MVI, "C,%b" }, - { MVI, "D,%b" }, { MVI, "E,%b" }, { MVI, "H,%b" }, { MVI, "L,%b" }, + { d60_7801 }, { DAA, nullptr }, { RETI, nullptr }, { CALB, nullptr }, + { d64_7801 }, { NEIW, "%a,%b" }, { SUI, "A,%b" }, { NEI, "A,%b" }, + { MVI, "V,%b" }, { MVI, "A,%b" }, { MVI, "B,%b" }, { MVI, "C,%b" }, + { MVI, "D,%b" }, { MVI, "E,%b" }, { MVI, "H,%b" }, { MVI, "L,%b" }, - { 0, dasm70_7801 }, { MVIW, "%a,%b" }, { SOFTI, nullptr }, { JB, nullptr }, - { 0, dasm74_7801 }, { EQIW, "%a,%b" }, { SBI, "A,%b" }, { EQI, "A,%b" }, - { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, - { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, + { d70_7801 }, { MVIW, "%a,%b" }, { SOFTI, nullptr }, { JB, nullptr }, + { d74_7801 }, { EQIW, "%a,%b" }, { SBI, "A,%b" }, { EQI, "A,%b" }, + { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, + { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, - /* 0x80 - 0xBF */ - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + // 0x80 - 0xBF + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, /* 0xC0 - 0xFF */ - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" } + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" } }; /********************************************************* * - * uPD7801 + * uPD78C05 * *********************************************************/ -static const struct dasm_s dasm48_78c05[256] = { - /* 0x00 - 0x3F */ - { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { illegal, nullptr }, /* TODO: PDF doesn't mention SKIT and SK */ - { SKIT, "FS" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SK, "CY" }, { illegal, nullptr }, - { SK, "Z" }, { illegal, nullptr }, { PUSH, "VA" }, { POP, "VA" }, +const dasm_s dasm_s::d48_78c05[256] = { + // 0x00 - 0x3F + { SKIT, "F0" }, { SKIT, "FT" }, { SKIT, "F1" }, { }, // TODO: PDF doesn't mention SKIT and SK + { SKIT, "FS" }, { }, { }, { }, + { }, { }, { SK, "CY" }, { }, + { SK, "Z" }, { }, { PUSH, "VA" }, { POP, "VA" }, - { SKNIT, "F0" }, { SKNIT, "FT" }, { SKNIT, "F1" }, { illegal, nullptr }, - { SKNIT, "FS" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SKN, "CY" }, { illegal, nullptr }, - { SKN, "Z" }, { illegal, nullptr }, { PUSH, "BC" }, { POP, "BC" }, + { SKNIT, "F0" }, { SKNIT, "FT" }, { SKNIT, "F1" }, { }, + { SKNIT, "FS" }, { }, { }, { }, + { }, { }, { SKN, "CY" }, { }, + { SKN, "Z" }, { }, { PUSH, "BC" }, { POP, "BC" }, - { EI, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { DI, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { CLC, nullptr }, { STC, nullptr }, - { illegal, nullptr }, { PEX, nullptr }, { PUSH, "DE" }, { POP, "DE" }, + { EI, nullptr }, { }, { }, { }, + { DI, nullptr }, { }, { }, { }, + { }, { }, { CLC, nullptr }, { STC, nullptr }, + { }, { PEX, nullptr }, { PUSH, "DE" }, { POP, "DE" }, - { RLL, "A" }, { RLR, "A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { RLD, nullptr }, { RRD, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { PER, nullptr }, { illegal, nullptr }, { PUSH, "HL" }, { POP, "HL" }, + { RLL, "A" }, { RLR, "A" }, { }, { }, + { }, { }, { }, { }, + { RLD, nullptr }, { RRD, nullptr }, { }, { }, + { PER, nullptr }, { }, { PUSH, "HL" }, { POP, "HL" }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0xC0 - 0xFF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { } }; -static const struct dasm_s dasm4c_78c05[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, +const dasm_s dasm_s::d4C_78c05[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0xC0 - 0xFF */ - { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" }, - { MOV, "A,MB" }, { MOV, "A,MC" }, { MOV, "A,TM0" }, { MOV, "A,TM1" }, - { MOV, "A,S" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, /* TODO: Figure out what regsiter C9 indicates */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" }, + { MOV, "A,MB" }, { MOV, "A,MC" }, { MOV, "A,TM0" }, { MOV, "A,TM1" }, + { MOV, "A,S" }, { }, { }, { }, // TODO: Figure out what regsiter C9 indicates + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { } }; -static const struct dasm_s dasm4d_78c05[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, +const dasm_s dasm_s::d4D_78c05[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0xC0 - 0xFF */ - { MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" }, - { MOV, "MB,A" }, { MOV, "MC,A" }, { MOV, "TM0,A" }, { MOV, "TM1,A" }, - { MOV, "S,A" }, { MOV, "TMM,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" }, + { MOV, "MB,A" }, { MOV, "MC,A" }, { MOV, "TM0,A" }, { MOV, "TM1,A" }, + { MOV, "S,A" }, { MOV, "TMM,A" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { } }; -static const struct dasm_s dasm60_78c05[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { ANA, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, +const dasm_s dasm_s::d60_78c05[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { ANA, "A,A" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { XRA, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { ORA, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { XRA, "A,A" }, { }, { }, + { }, { }, { }, { }, + { }, { ORA, "A,A" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { ADDNC, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { GTA, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { ADDNC, "A,A" }, { }, { }, + { }, { }, { }, { }, + { }, { GTA, "A,A" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { SUBNB, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { LTA, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { SUBNB, "A,A" }, { }, { }, + { }, { }, { }, { }, + { }, { LTA, "A,A" }, { }, { }, + { }, { }, { }, { }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { ADD, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { ADD, "A,A" }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { ADC, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { ADC, "A,A" }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { SUB, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { NEA, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { SUB, "A,A" }, { }, { }, + { }, { }, { }, { }, + { }, { NEA, "A,A" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { SBB, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { EQA, "A,A" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { SBB, "A,A" }, { }, { }, + { }, { }, { }, { }, + { }, { EQA, "A,A" }, { }, { }, + { }, { }, { }, { }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { ANA, "A,A" }, { ANA, "A,B" }, { ANA, "A,C" }, - { ANA, "A,D" }, { ANA, "A,E" }, { ANA, "A,H" }, { ANA, "A,L" }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { ANA, "A,A" }, { ANA, "A,B" }, { ANA, "A,C" }, + { ANA, "A,D" }, { ANA, "A,E" }, { ANA, "A,H" }, { ANA, "A,L" }, - { illegal, nullptr }, { XRA, "A,A" }, { XRA, "A,B" }, { XRA, "A,C" }, - { XRA, "A,D" }, { XRA, "A,E" }, { XRA, "A,H" }, { XRA, "A,L" }, - { illegal, nullptr }, { ORA, "A,A" }, { ORA, "A,B" }, { ORA, "A,C" }, - { ORA, "A,D" }, { ORA, "A,E" }, { ORA, "A,H" }, { ORA, "A,L" }, + { }, { XRA, "A,A" }, { XRA, "A,B" }, { XRA, "A,C" }, + { XRA, "A,D" }, { XRA, "A,E" }, { XRA, "A,H" }, { XRA, "A,L" }, + { }, { ORA, "A,A" }, { ORA, "A,B" }, { ORA, "A,C" }, + { ORA, "A,D" }, { ORA, "A,E" }, { ORA, "A,H" }, { ORA, "A,L" }, - { illegal, nullptr }, { ADDNC, "A,A" }, { ADDNC, "A,B" }, { ADDNC, "A,C" }, - { ADDNC, "A,D" }, { ADDNC, "A,E" }, { ADDNC, "A,H" }, { ADDNC, "A,L" }, - { illegal, nullptr }, { GTA, "A,A" }, { GTA, "A,B" }, { GTA, "A,C" }, - { GTA, "A,D" }, { GTA, "A,E" }, { GTA, "A,H" }, { GTA, "A,L" }, + { }, { ADDNC, "A,A" }, { ADDNC, "A,B" }, { ADDNC, "A,C" }, + { ADDNC, "A,D" }, { ADDNC, "A,E" }, { ADDNC, "A,H" }, { ADDNC, "A,L" }, + { }, { GTA, "A,A" }, { GTA, "A,B" }, { GTA, "A,C" }, + { GTA, "A,D" }, { GTA, "A,E" }, { GTA, "A,H" }, { GTA, "A,L" }, - { illegal, nullptr }, { SUBNB, "A,A" }, { SUBNB, "A,B" }, { SUBNB, "A,C" }, - { SUBNB, "A,D" }, { SUBNB, "A,E" }, { SUBNB, "A,H" }, { SUBNB, "A,L" }, - { illegal, nullptr }, { LTA, "A,A" }, { LTA, "A,B" }, { LTA, "A,C" }, - { LTA, "A,D" }, { LTA, "A,E" }, { LTA, "A,H" }, { LTA, "A,L" }, + { }, { SUBNB, "A,A" }, { SUBNB, "A,B" }, { SUBNB, "A,C" }, + { SUBNB, "A,D" }, { SUBNB, "A,E" }, { SUBNB, "A,H" }, { SUBNB, "A,L" }, + { }, { LTA, "A,A" }, { LTA, "A,B" }, { LTA, "A,C" }, + { LTA, "A,D" }, { LTA, "A,E" }, { LTA, "A,H" }, { LTA, "A,L" }, - /* 0xC0 - 0xFF */ - { illegal, nullptr }, { ADD, "A,A" }, { ADD, "A,B" }, { ADD, "A,C" }, - { ADD, "A,D" }, { ADD, "A,E" }, { ADD, "A,H" }, { ADD, "A,L" }, - { illegal, nullptr }, { ONA, "A,A" }, { ONA, "A,B" }, { ONA, "A,C" }, - { ONA, "A,D" }, { ONA, "A,E" }, { ONA, "A,H" }, { ONA, "A,L" }, + // 0xC0 - 0xFF + { }, { ADD, "A,A" }, { ADD, "A,B" }, { ADD, "A,C" }, + { ADD, "A,D" }, { ADD, "A,E" }, { ADD, "A,H" }, { ADD, "A,L" }, + { }, { ONA, "A,A" }, { ONA, "A,B" }, { ONA, "A,C" }, + { ONA, "A,D" }, { ONA, "A,E" }, { ONA, "A,H" }, { ONA, "A,L" }, - { illegal, nullptr }, { ADC, "A,A" }, { ADC, "A,B" }, { ADC, "A,C" }, - { ADC, "A,D" }, { ADC, "A,E" }, { ADC, "A,H" }, { ADC, "A,L" }, - { illegal, nullptr }, { OFFA, "A,A" }, { OFFA, "A,B" }, { OFFA, "A,C" }, - { OFFA, "A,D" }, { OFFA, "A,E" }, { OFFA, "A,H" }, { OFFA, "A,L" }, + { }, { ADC, "A,A" }, { ADC, "A,B" }, { ADC, "A,C" }, + { ADC, "A,D" }, { ADC, "A,E" }, { ADC, "A,H" }, { ADC, "A,L" }, + { }, { OFFA, "A,A" }, { OFFA, "A,B" }, { OFFA, "A,C" }, + { OFFA, "A,D" }, { OFFA, "A,E" }, { OFFA, "A,H" }, { OFFA, "A,L" }, - { illegal, nullptr }, { SUB, "A,A" }, { SUB, "A,B" }, { SUB, "A,C" }, - { SUB, "A,D" }, { SUB, "A,E" }, { SUB, "A,H" }, { SUB, "A,L" }, - { illegal, nullptr }, { NEA, "A,A" }, { NEA, "A,B" }, { NEA, "A,C" }, - { NEA, "A,D" }, { NEA, "A,E" }, { NEA, "A,H" }, { NEA, "A,L" }, + { }, { SUB, "A,A" }, { SUB, "A,B" }, { SUB, "A,C" }, + { SUB, "A,D" }, { SUB, "A,E" }, { SUB, "A,H" }, { SUB, "A,L" }, + { }, { NEA, "A,A" }, { NEA, "A,B" }, { NEA, "A,C" }, + { NEA, "A,D" }, { NEA, "A,E" }, { NEA, "A,H" }, { NEA, "A,L" }, - { illegal, nullptr }, { SBB, "A,A" }, { SBB, "A,B" }, { SBB, "A,C" }, - { SBB, "A,D" }, { SBB, "A,E" }, { SBB, "A,H" }, { SBB, "A,L" }, - { illegal, nullptr }, { EQA, "A,A" }, { EQA, "A,B" }, { EQA, "A,C" }, - { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" } + { }, { SBB, "A,A" }, { SBB, "A,B" }, { SBB, "A,C" }, + { SBB, "A,D" }, { SBB, "A,E" }, { SBB, "A,H" }, { SBB, "A,L" }, + { }, { EQA, "A,A" }, { EQA, "A,B" }, { EQA, "A,C" }, + { EQA, "A,D" }, { EQA, "A,E" }, { EQA, "A,H" }, { EQA, "A,L" } }; -static const struct dasm_s dasm64_78c05[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { ANI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, +const dasm_s dasm_s::d64_78c05[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { ANI, "A,%b" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { XRI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { ORI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { XRI, "A,%b" }, { }, { }, + { }, { }, { }, { }, + { }, { ORI, "A,%b" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { ADINC, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { GTI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { ADINC, "A,%b" }, { }, { }, + { }, { }, { }, { }, + { }, { GTI, "A,%b" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { SUINB, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { LTI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { SUINB, "A,%b" }, { }, { }, + { }, { }, { }, { }, + { }, { LTI, "A,%b" }, { }, { }, + { }, { }, { }, { }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { ADI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { ONI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { ADI, "A,%b" }, { }, { }, + { }, { }, { }, { }, + { }, { ONI, "A,%b" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { ACI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { OFFI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { ACI, "A,%b" }, { }, { }, + { }, { }, { }, { }, + { }, { OFFI, "A,%b" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { SUI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { NEI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { SUI, "A,%b" }, { }, { }, + { }, { }, { }, { }, + { }, { NEI, "A,%b" }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { SBI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { EQI, "A,%b" }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { SBI, "A,%b" }, { }, { }, + { }, { }, { }, { }, + { }, { EQI, "A,%b" }, { }, { }, + { }, { }, { }, { }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ANI, "PA,%b" }, { ANI, "PB,%b" }, { ANI, "PC,%b" }, { ANI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { ANI, "PA,%b" }, { ANI, "PB,%b" }, { ANI, "PC,%b" }, { ANI, "MK,%b" }, + { }, { }, { }, { }, - { XRI, "PA,%b" }, { XRI, "PB,%b" }, { XRI, "PC,%b" }, { XRI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ORI, "PA,%b" }, { ORI, "PB,%b" }, { ORI, "PC,%b" }, { ORI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { XRI, "PA,%b" }, { XRI, "PB,%b" }, { XRI, "PC,%b" }, { XRI, "MK,%b" }, + { }, { }, { }, { }, + { ORI, "PA,%b" }, { ORI, "PB,%b" }, { ORI, "PC,%b" }, { ORI, "MK,%b" }, + { }, { }, { }, { }, - { ADINC, "PA,%b" }, { ADINC, "PB,%b" }, { ADINC, "PC,%b" }, { ADINC, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { GTI, "PA,%b" }, { GTI, "PB,%b" }, { GTI, "PC,%b" }, { GTI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ADINC, "PA,%b" }, { ADINC, "PB,%b" }, { ADINC, "PC,%b" }, { ADINC, "MK,%b" }, + { }, { }, { }, { }, + { GTI, "PA,%b" }, { GTI, "PB,%b" }, { GTI, "PC,%b" }, { GTI, "MK,%b" }, + { }, { }, { }, { }, - { SUINB, "PA,%b" }, { SUINB, "PB,%b" }, { SUINB, "PC,%b" }, { SUINB, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { LTI, "PA,%b" }, { LTI, "PB,%b" }, { LTI, "PC,%b" }, { LTI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { SUINB, "PA,%b" }, { SUINB, "PB,%b" }, { SUINB, "PC,%b" }, { SUINB, "MK,%b" }, + { }, { }, { }, { }, + { LTI, "PA,%b" }, { LTI, "PB,%b" }, { LTI, "PC,%b" }, { LTI, "MK,%b" }, + { }, { }, { }, { }, - /* 0xC0 - 0xFF */ - { ADI, "PA,%b" }, { ADI, "PB,%b" }, { ADI, "PC,%b" }, { ADI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ONI, "PA,%b" }, { ONI, "PB,%b" }, { ONI, "PC,%b" }, { ONI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { ADI, "PA,%b" }, { ADI, "PB,%b" }, { ADI, "PC,%b" }, { ADI, "MK,%b" }, + { }, { }, { }, { }, + { ONI, "PA,%b" }, { ONI, "PB,%b" }, { ONI, "PC,%b" }, { ONI, "MK,%b" }, + { }, { }, { }, { }, - { ACI, "PA,%b" }, { ACI, "PB,%b" }, { ACI, "PC,%b" }, { ACI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { SUI, "PA,%b" }, { SUI, "PB,%b" }, { SUI, "PC,%b" }, { SUI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ACI, "PA,%b" }, { ACI, "PB,%b" }, { ACI, "PC,%b" }, { ACI, "MK,%b" }, + { }, { }, { }, { }, + { SUI, "PA,%b" }, { SUI, "PB,%b" }, { SUI, "PC,%b" }, { SUI, "MK,%b" }, + { }, { }, { }, { }, - { NEI, "PA,%b" }, { NEI, "PB,%b" }, { NEI, "PC,%b" }, { NEI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { NEI, "PA,%b" }, { NEI, "PB,%b" }, { NEI, "PC,%b" }, { NEI, "MK,%b" }, + { }, { }, { }, { }, + { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" }, + { }, { }, { }, { }, - { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { EQI, "PA,%b" }, { EQI, "PB,%b" }, { EQI, "PC,%b" }, { EQI, "MK,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr } + { SBI, "PA,%b" }, { SBI, "PB,%b" }, { SBI, "PC,%b" }, { SBI, "MK,%b" }, + { }, { }, { }, { }, + { EQI, "PA,%b" }, { EQI, "PB,%b" }, { EQI, "PC,%b" }, { EQI, "MK,%b" }, + { }, { }, { }, { } }; -static const struct dasm_s dasm70_78c05[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SSPD, "%w" }, { LSPD, "%w" }, +const dasm_s dasm_s::d70_78c05[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { SSPD, "%w" }, { LSPD, "%w" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SBCD, "%w" }, { LBCD, "%w" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { SBCD, "%w" }, { LBCD, "%w" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SDED, "%w" }, { LDED, "%w" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { SDED, "%w" }, { LDED, "%w" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { SHLD, "%w" }, { LHLD, "%w" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { SHLD, "%w" }, { LHLD, "%w" }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { MOV, "A,%w" }, { MOV, "B,%w" }, { MOV, "C,%w" }, - { MOV, "D,%w" }, { MOV, "E,%w" }, { MOV, "H,%w" }, { MOV, "L,%w" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { MOV, "A,%w" }, { MOV, "B,%w" }, { MOV, "C,%w" }, + { MOV, "D,%w" }, { MOV, "E,%w" }, { MOV, "H,%w" }, { MOV, "L,%w" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { MOV, "%w,A" }, { MOV, "%w,B" }, { MOV, "%w,C" }, - { MOV, "%w,D" }, { MOV, "%w,E" }, { MOV, "%w,H" }, { MOV, "%w,L" }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { MOV, "%w,A" }, { MOV, "%w,B" }, { MOV, "%w,C" }, + { MOV, "%w,D" }, { MOV, "%w,E" }, { MOV, "%w,H" }, { MOV, "%w,L" }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { ANAX, "BC" }, { ANAX, "DE" }, { ANAX, "HL" }, - { ANAX, "DE+" }, { ANAX, "HL+" }, { ANAX, "DE-" }, { ANAX, "HL-" }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { ANAX, "BC" }, { ANAX, "DE" }, { ANAX, "HL" }, + { ANAX, "DE+" }, { ANAX, "HL+" }, { ANAX, "DE-" }, { ANAX, "HL-" }, - { illegal, nullptr }, { XRAX, "BC" }, { XRAX, "DE" }, { XRAX, "HL" }, - { XRAX, "DE+" }, { XRAX, "HL+" }, { XRAX, "DE-" }, { XRAX, "HL-" }, - { illegal, nullptr }, { ORAX, "BC" }, { ORAX, "DE" }, { ORAX, "HL" }, - { ORAX, "DE+" }, { ORAX, "HL+" }, { ORAX, "DE-" }, { ORAX, "HL-" }, + { }, { XRAX, "BC" }, { XRAX, "DE" }, { XRAX, "HL" }, + { XRAX, "DE+" }, { XRAX, "HL+" }, { XRAX, "DE-" }, { XRAX, "HL-" }, + { }, { ORAX, "BC" }, { ORAX, "DE" }, { ORAX, "HL" }, + { ORAX, "DE+" }, { ORAX, "HL+" }, { ORAX, "DE-" }, { ORAX, "HL-" }, - { illegal, nullptr }, { ADDNCX, "BC" }, { ADDNCX, "DE" }, { ADDNCX, "HL" }, - { ADDNCX, "DE+" }, { ADDNCX, "HL+" }, { ADDNCX, "DE-" }, { ADDNCX, "HL-" }, - { illegal, nullptr }, { GTAX, "BC" }, { GTAX, "DE" }, { GTAX, "HL" }, - { GTAX, "DE+" }, { GTAX, "HL+" }, { GTAX, "DE-" }, { GTAX, "HL-" }, + { }, { ADDNCX, "BC" }, { ADDNCX, "DE" }, { ADDNCX, "HL" }, + { ADDNCX, "DE+" }, { ADDNCX, "HL+" }, { ADDNCX, "DE-" }, { ADDNCX, "HL-" }, + { }, { GTAX, "BC" }, { GTAX, "DE" }, { GTAX, "HL" }, + { GTAX, "DE+" }, { GTAX, "HL+" }, { GTAX, "DE-" }, { GTAX, "HL-" }, - { illegal, nullptr }, { SUBNBX, "BC" }, { SUBNBX, "DE" }, { SUBNBX, "HL" }, - { SUBNBX, "DE+" }, { SUBNBX, "HL+" }, { SUBNBX, "DE-" }, { SUBNBX, "HL-" }, - { illegal, nullptr }, { LTAX, "BC" }, { LTAX, "DE" }, { LTAX, "HL" }, - { LTAX, "DE+" }, { LTAX, "HL+" }, { LTAX, "DE-" }, { LTAX, "HL-" }, + { }, { SUBNBX, "BC" }, { SUBNBX, "DE" }, { SUBNBX, "HL" }, + { SUBNBX, "DE+" }, { SUBNBX, "HL+" }, { SUBNBX, "DE-" }, { SUBNBX, "HL-" }, + { }, { LTAX, "BC" }, { LTAX, "DE" }, { LTAX, "HL" }, + { LTAX, "DE+" }, { LTAX, "HL+" }, { LTAX, "DE-" }, { LTAX, "HL-" }, - /* 0xC0 - 0xFF */ - { illegal, nullptr }, { ADDX, "BC" }, { ADDX, "DE" }, { ADDX, "HL" }, - { ADDX, "DE+" }, { ADDX, "HL+" }, { ADDX, "DE-" }, { ADDX, "HL-" }, - { illegal, nullptr }, { ONAX, "BC" }, { ONAX, "DE" }, { ONAX, "HL" }, - { ONAX, "DE+" }, { ONAX, "HL+" }, { ONAX, "DE-" }, { ONAX, "HL-" }, + // 0xC0 - 0xFF + { }, { ADDX, "BC" }, { ADDX, "DE" }, { ADDX, "HL" }, + { ADDX, "DE+" }, { ADDX, "HL+" }, { ADDX, "DE-" }, { ADDX, "HL-" }, + { }, { ONAX, "BC" }, { ONAX, "DE" }, { ONAX, "HL" }, + { ONAX, "DE+" }, { ONAX, "HL+" }, { ONAX, "DE-" }, { ONAX, "HL-" }, - { illegal, nullptr }, { ADCX, "BC" }, { ADCX, "DE" }, { ADCX, "HL" }, - { ADCX, "DE+" }, { ADCX, "HL+" }, { ADCX, "DE-" }, { ADCX, "HL-" }, - { illegal, nullptr }, { OFFAX, "BC" }, { OFFAX, "DE" }, { OFFAX, "HL" }, - { OFFAX, "DE+" }, { OFFAX, "HL+" }, { OFFAX, "DE-" }, { OFFAX, "HL-" }, + { }, { ADCX, "BC" }, { ADCX, "DE" }, { ADCX, "HL" }, + { ADCX, "DE+" }, { ADCX, "HL+" }, { ADCX, "DE-" }, { ADCX, "HL-" }, + { }, { OFFAX, "BC" }, { OFFAX, "DE" }, { OFFAX, "HL" }, + { OFFAX, "DE+" }, { OFFAX, "HL+" }, { OFFAX, "DE-" }, { OFFAX, "HL-" }, - { illegal, nullptr }, { SUBX, "BC" }, { SUBX, "DE" }, { SUBX, "HL" }, - { SUBX, "DE+" }, { SUBX, "HL+" }, { SUBX, "DE-" }, { SUBX, "HL-" }, - { illegal, nullptr }, { NEAX, "BC" }, { NEAX, "DE" }, { NEAX, "HL" }, - { NEAX, "DE+" }, { NEAX, "HL+" }, { NEAX, "DE-" }, { NEAX, "HL-" }, + { }, { SUBX, "BC" }, { SUBX, "DE" }, { SUBX, "HL" }, + { SUBX, "DE+" }, { SUBX, "HL+" }, { SUBX, "DE-" }, { SUBX, "HL-" }, + { }, { NEAX, "BC" }, { NEAX, "DE" }, { NEAX, "HL" }, + { NEAX, "DE+" }, { NEAX, "HL+" }, { NEAX, "DE-" }, { NEAX, "HL-" }, - { illegal, nullptr }, { SBBX, "BC" }, { SBBX, "DE" }, { SBBX, "HL" }, - { SBBX, "DE+" }, { SBBX, "HL+" }, { SBBX, "DE-" }, { SBBX, "HL-" }, - { illegal, nullptr }, { EQAX, "BC" }, { EQAX, "DE" }, { EQAX, "HL" }, - { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" }, + { }, { SBBX, "BC" }, { SBBX, "DE" }, { SBBX, "HL" }, + { SBBX, "DE+" }, { SBBX, "HL+" }, { SBBX, "DE-" }, { SBBX, "HL-" }, + { }, { EQAX, "BC" }, { EQAX, "DE" }, { EQAX, "HL" }, + { EQAX, "DE+" }, { EQAX, "HL+" }, { EQAX, "DE-" }, { EQAX, "HL-" }, }; -static const struct dasm_s dasm74_78c05[256] = { - /* 0x00 - 0x3F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, +const dasm_s dasm_s::d74_78c05[256] = { + // 0x00 - 0x3F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x40 - 0x7F + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, + { }, { }, { }, { }, - /* 0x80 - 0xBF */ - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ANAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0x80 - 0xBF + { }, { }, { }, { }, + { }, { }, { }, { }, + { ANAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { XRAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ORAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { XRAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { ORAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { ADDNCW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { GTAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ADDNCW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { GTAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { SUBNBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { LTAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { SUBNBW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { LTAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - /* 0xC0 - 0xFF */ - { ADDW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { ONAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + // 0xC0 - 0xFF + { ADDW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { ONAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { ADCW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { OFFAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { ADCW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { OFFAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { SUBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { NEAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { SUBW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { NEAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, - { SBBW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { EQAW, "%a" }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { SBBW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, + { EQAW, "%a" }, { }, { }, { }, + { }, { }, { }, { }, }; -static const struct dasm_s dasmXX_78c05[256] = { - /* 0x00 - 0x3F */ - { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" }, - { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { illegal, nullptr }, { ANI, "A,%b" }, - { RET, nullptr }, { SIO, nullptr }, { MOV, "A,B" }, { MOV, "A,C" }, - { MOV, "A,D" }, { MOV, "A,E" }, { MOV, "A,H" }, { MOV, "A,L" }, +const dasm_s dasm_s::XX_78c05[256] = { + // 0x00 - 0x3F + { NOP, nullptr }, { HALT, nullptr }, { INX, "SP" }, { DCX, "SP" }, + { LXI, "SP,%w" }, { ANIW, "%a,%b" }, { }, { ANI, "A,%b" }, + { RET, nullptr }, { SIO, nullptr }, { MOV, "A,B" }, { MOV, "A,C" }, + { MOV, "A,D" }, { MOV, "A,E" }, { MOV, "A,H" }, { MOV, "A,L" }, - { illegal, nullptr }, { illegal, nullptr }, { INX, "BC" }, { DCX, "BC" }, - { LXI, "BC,%w" }, { ORIW, "%a,%b" }, { XRI, "A,%b" }, { ORI, "A,%b" }, - { RETS, nullptr }, { STM, nullptr }, { MOV, "B,A" }, { MOV, "C,A" }, - { MOV, "D,A" }, { MOV, "E,A" }, { MOV, "H,A" }, { MOV, "L,A" }, + { }, { }, { INX, "BC" }, { DCX, "BC" }, + { LXI, "BC,%w" }, { ORIW, "%a,%b" }, { XRI, "A,%b" }, { ORI, "A,%b" }, + { RETS, nullptr }, { STM, nullptr }, { MOV, "B,A" }, { MOV, "C,A" }, + { MOV, "D,A" }, { MOV, "E,A" }, { MOV, "H,A" }, { MOV, "L,A" }, - { INRW, "%a" }, { illegal, nullptr }, { INX, "DE" }, { DCX, "DE" }, - { LXI, "DE,%w" }, { GTIW, "%a,%b" }, { ADINC, "A,%b" }, { GTI, "A,%b" }, - { LDAW, "%a" }, { LDAX, "BC" }, { LDAX, "DE" }, { LDAX, "HL" }, - { LDAX, "DE+" }, { LDAX, "HL+" }, { LDAX, "DE-" }, { LDAX, "HL-" }, + { INRW, "%a" }, { }, { INX, "DE" }, { DCX, "DE" }, + { LXI, "DE,%w" }, { GTIW, "%a,%b" }, { ADINC, "A,%b" }, { GTI, "A,%b" }, + { LDAW, "%a" }, { LDAX, "BC" }, { LDAX, "DE" }, { LDAX, "HL" }, + { LDAX, "DE+" }, { LDAX, "HL+" }, { LDAX, "DE-" }, { LDAX, "HL-" }, - { DCRW, "%a" }, { illegal, nullptr }, { INX, "HL" }, { DCX, "HL" }, - { LXI, "HL,%w" }, { LTIW, "%a,%b" }, { SUINB, "A,%b" }, { LTI, "A,%b" }, - { STAW, "%a" }, { STAX, "BC" }, { STAX, "DE" }, { STAX, "HL" }, - { STAX, "DE+" }, { STAX, "HL+" }, { STAX, "DE-" }, { STAX, "HL-" }, + { DCRW, "%a" }, { }, { INX, "HL" }, { DCX, "HL" }, + { LXI, "HL,%w" }, { LTIW, "%a,%b" }, { SUINB, "A,%b" }, { LTI, "A,%b" }, + { STAW, "%a" }, { STAX, "BC" }, { STAX, "DE" }, { STAX, "HL" }, + { STAX, "DE+" }, { STAX, "HL+" }, { STAX, "DE-" }, { STAX, "HL-" }, - /* 0x40 - 0x7F */ - { illegal, nullptr }, { INR, "A" }, { INR, "B" }, { INR, "C" }, - { CALL, "%w" }, { ONIW, "%a,%b" }, { ADI, "A,%b" }, { ONI, "A,%b" }, - { 0, dasm48_78c05 }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { 0, dasm4c_78c05 }, { 0, dasm4d_78c05 }, { JRE, "%d" }, { JRE, "%d" }, + // 0x40 - 0x7F + { }, { INR, "A" }, { INR, "B" }, { INR, "C" }, + { CALL, "%w" }, { ONIW, "%a,%b" }, { ADI, "A,%b" }, { ONI, "A,%b" }, + { d48_78c05 }, { }, { }, { }, + { d4C_78c05 }, { d4D_78c05 }, { JRE, "%d" }, { JRE, "%d" }, - { illegal, nullptr }, { DCR, "A" }, { DCR, "B" }, { DCR, "C" }, - { JMP, "%w" }, { OFFIW, "%a,%b" }, { ACI, "A,%b" }, { OFFI, "A,%b" }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, - { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, { illegal, nullptr }, + { }, { DCR, "A" }, { DCR, "B" }, { DCR, "C" }, + { JMP, "%w" }, { OFFIW, "%a,%b" }, { ACI, "A,%b" }, { OFFI, "A,%b" }, + { }, { }, { }, { }, + { }, { }, { }, { }, - { 0, dasm60_78c05 }, { DAA, nullptr }, { RETI, nullptr }, { CALB, nullptr }, - { 0, dasm64_78c05 }, { NEIW, "%a,%b" }, { SUI, "A,%b" }, { NEI, "A,%b" }, - { illegal, nullptr }, { MVI, "A,%b" }, { MVI, "B,%b" }, { MVI, "C,%b" }, - { MVI, "D,%b" }, { MVI, "E,%b" }, { MVI, "H,%b" }, { MVI, "L,%b" }, + { d60_78c05 }, { DAA, nullptr }, { RETI, nullptr }, { CALB, nullptr }, + { d64_78c05 }, { NEIW, "%a,%b" }, { SUI, "A,%b" }, { NEI, "A,%b" }, + { }, { MVI, "A,%b" }, { MVI, "B,%b" }, { MVI, "C,%b" }, + { MVI, "D,%b" }, { MVI, "E,%b" }, { MVI, "H,%b" }, { MVI, "L,%b" }, - { 0, dasm70_78c05 }, { MVIW, "%a,%b" }, { SOFTI, nullptr }, { JB, nullptr }, - { 0, dasm74_78c05 }, { EQIW, "%a,%b" }, { SBI, "A,%b" }, { EQI, "A,%b" }, - { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, - { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, + { d70_78c05 }, { MVIW, "%a,%b" }, { SOFTI, nullptr }, { JB, nullptr }, + { d74_78c05 }, { EQIW, "%a,%b" }, { SBI, "A,%b" }, { EQI, "A,%b" }, + { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, + { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, { CALF, "%f" }, - /* 0x80 - 0xBF */ - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + // 0x80 - 0xBF + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, + { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, { CALT, "%t" }, - /* 0xC0 - 0xFF */ - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + // 0xC0 - 0xFF + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, - { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" } + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, + { JR, "%o" }, { JR, "%o" }, { JR, "%o" }, { JR, "%o" } }; -/* register names for bit manipulation instructions */ -static const char *const regname[32] = +// register names for bit manipulation instructions +const char *const regname[32] = { "illegal", "illegal", "illegal", "illegal", "illegal", "illegal", "illegal", "illegal", @@ -5361,36 +5416,22 @@ static const char *const regname[32] = "illegal", "TMM", "PT", "illegal" }; -static offs_t Dasm( char *buffer, offs_t pc, const struct dasm_s *dasmXX, const UINT8 *oprom, const UINT8 *opram, int is_7810 ) +offs_t Dasm( char *buffer, offs_t pc, const dasm_s (&dasmXX)[256], const UINT8 *oprom, const UINT8 *opram, int is_7810 ) { - int idx = 0; - UINT8 op = oprom[idx++], op2, t; + unsigned idx = 0; + const UINT8 op = oprom[idx++]; + const dasm_s *desc = &dasmXX[op]; + if (desc->is_prefix()) + desc = &desc->prefix_get(oprom[idx++]); + + buffer += sprintf(buffer, "%-8.8s", desc->name()); + + UINT32 flags = desc->is_call() ? DASMFLAG_STEP_OVER : desc->is_return() ? DASMFLAG_STEP_OUT : 0; + UINT8 op2; int offset; UINT16 ea; - const char *a; - UINT32 flags = 0; - t = dasmXX[op].token; - a = (const char *)dasmXX[op].args; - - /* 0 token means prefix opcode (use table from args) */ - if (0 == t) - { - struct dasm_s *p_dasm = (struct dasm_s *)a; - - op2 = oprom[idx++]; - t = p_dasm[op2].token; - a = (const char *)p_dasm[op2].args; - } - - buffer += sprintf(buffer, "%-8.8s", token[t]); - - if (t == CALB || t == CALF || t == CALL || t == CALT) - flags = DASMFLAG_STEP_OVER; - else if (t == RET || t == RETI) - flags = DASMFLAG_STEP_OUT; - - while (a && *a) + for (const char *a = desc->args(); a && *a; a++) { if ('%' == *a) { @@ -5437,29 +5478,30 @@ static offs_t Dasm( char *buffer, offs_t pc, const struct dasm_s *dasmXX, const } else *buffer++ = *a; - a++; } *buffer = '\0'; return idx | flags | DASMFLAG_SUPPORTED; } +} // anonymous namespace + CPU_DISASSEMBLE( upd7810 ) { - return Dasm( buffer, pc, dasmXX_7810, oprom, opram, 1 ); + return Dasm( buffer, pc, dasm_s::XX_7810, oprom, opram, 1 ); } CPU_DISASSEMBLE( upd7807 ) { - return Dasm( buffer, pc, dasmXX_7807, oprom, opram, 1 ); + return Dasm( buffer, pc, dasm_s::XX_7807, oprom, opram, 1 ); } CPU_DISASSEMBLE( upd7801 ) { - return Dasm( buffer, pc, dasmXX_7801, oprom, opram, 0 ); + return Dasm( buffer, pc, dasm_s::XX_7801, oprom, opram, 0 ); } CPU_DISASSEMBLE( upd78c05 ) { - return Dasm( buffer, pc, dasmXX_78c05, oprom, opram, 0 ); + return Dasm( buffer, pc, dasm_s::XX_78c05, oprom, opram, 0 ); } diff --git a/src/devices/imagedev/chd_cd.cpp b/src/devices/imagedev/chd_cd.cpp index 4165886a694..9386d741d58 100644 --- a/src/devices/imagedev/chd_cd.cpp +++ b/src/devices/imagedev/chd_cd.cpp @@ -12,13 +12,6 @@ #include "cdrom.h" #include "chd_cd.h" - -static OPTION_GUIDE_START(cd_option_guide) - OPTION_INT('K', "hunksize", "Hunk Bytes") -OPTION_GUIDE_END - -static const char cd_option_spec[] = "K512/1024/2048/[4096]"; - // device type definition const device_type CDROM = &device_creator; @@ -61,17 +54,12 @@ void cdrom_image_device::device_config_complete() { m_extension_list = "chd,cue,toc,nrg,gdi,iso,cdr"; - add_format("chdcd", "CD-ROM drive", m_extension_list, cd_option_spec); + add_format("chdcd", "CD-ROM drive", m_extension_list, ""); // set brief and instance name update_names(); } -const option_guide *cdrom_image_device::create_option_guide() const -{ - return cd_option_guide; -} - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- diff --git a/src/devices/imagedev/chd_cd.h b/src/devices/imagedev/chd_cd.h index 9e2ec9f9a29..64bb3924fee 100644 --- a/src/devices/imagedev/chd_cd.h +++ b/src/devices/imagedev/chd_cd.h @@ -45,7 +45,6 @@ public: virtual bool is_reset_on_load() const override { return 0; } virtual const char *image_interface() const override { return m_interface; } virtual const char *file_extensions() const override { return m_extension_list; } - virtual const option_guide *create_option_guide() const override; // specific implementation cdrom_file *get_cdrom_file() { return m_cdrom_handle; } diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp index 65bfb82d4e3..b01f5db11cf 100644 --- a/src/devices/imagedev/floppy.cpp +++ b/src/devices/imagedev/floppy.cpp @@ -1674,7 +1674,7 @@ void floppy_8_dssd::handled_variants(UINT32 *variants, int &var_count) const //------------------------------------------------- floppy_8_ssdd::floppy_8_ssdd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : - floppy_image_device(mconfig, FLOPPY_8_DSDD, "8\" double density single sided floppy drive", tag, owner, clock, "floppy_8_ssdd", __FILE__) + floppy_image_device(mconfig, FLOPPY_8_SSDD, "8\" double density single sided floppy drive", tag, owner, clock, "floppy_8_ssdd", __FILE__) { } diff --git a/src/devices/machine/hdc92x4.cpp b/src/devices/machine/hdc92x4.cpp index 4701f8c7711..8de7457143a 100644 --- a/src/devices/machine/hdc92x4.cpp +++ b/src/devices/machine/hdc92x4.cpp @@ -8,8 +8,8 @@ This controller handles MFM and FM encoded floppy disks and hard disks. References: - [1] SMC HDC9234 preliminary data book (1988) - [2] SMC HDC9224 data book + [1] SMC HDC9224 data book + [2] SMC HDC9234 preliminary data book (1988) The HDC 9224 / 9234 controller is also referred to as the "Universal Disk Controller" (UDC) by the data book @@ -192,7 +192,7 @@ enum }; /* - Definition of bits in the status register [1] p.7 + Definition of bits in the status register [2] p.7 */ enum { @@ -623,6 +623,11 @@ int hdc92x4_device::current_sector() return m_register_r[CURRENT_SECTOR] & 0xff; } +bool hdc92x4_device::bad_sector() +{ + return (m_selected_drive_type != TYPE_AT) && ((m_register_r[CURRENT_HEAD] & 0x80)!=0); +} + UINT8 hdc92x4_device::current_command() { return m_register_w[COMMAND]; @@ -633,7 +638,18 @@ bool hdc92x4_device::using_floppy() return (m_selected_drive_type == TYPE_FLOPPY5 || m_selected_drive_type == TYPE_FLOPPY8); } -int hdc92x4_device::header_length() +/* + Delivers the header length (including ident, excluding CRC) +*/ +int hdc9224_device::header_length() +{ + return (m_selected_drive_type == TYPE_ST)? 4 : 5; +} + +/* + Delivers the header length (including ident, excluding CRC) +*/ +int hdc9234_device::header_length() { return (m_selected_drive_type == TYPE_AT)? 4 : 5; } @@ -645,12 +661,13 @@ int hdc92x4_device::register_number(int slot) { // The id_field is an array of indexes into the chip registers. // Thus we get the values properly assigned to the registers. - // The PC-AT mode does not use a size field. + // The PC-AT (9234) and ST-506 (9224) modes do not use a size field. const int id_field[] = { CURRENT_CYLINDER, CURRENT_HEAD, CURRENT_SECTOR, CURRENT_SIZE, CURRENT_CRC1, CURRENT_CRC2 }; int index = slot; - // Skip size for PC-AT - if (m_selected_drive_type == TYPE_AT && slot > 2) index++; + // Skip size for PC-AT and ST-506 + if ((header_length() == 4) && (slot > 2)) index++; + if (index > 5) { logerror("BUG: Invalid index for header field: %d", index); @@ -663,7 +680,7 @@ int hdc92x4_device::register_number(int slot) Delivers the step time (in microseconds) minus the pulse width (9224). The first two values in the list apply for index==0 (buffered step), but the first one is used for the RESTORE command, the second one is used - for SEEK. [2] + for SEEK. [1] */ int hdc9224_device::step_time() { @@ -770,7 +787,7 @@ void hdc92x4_device::wait_time(emu_timer *tm, int microsec, int next_substate) void hdc92x4_device::wait_time(emu_timer *tm, const attotime &delay, int param) { - if (TRACE_DELAY) logerror("%s: [%s] Delaying by %4.2f microsecs\n", tag(), ttsn().c_str(), delay.as_double()*1000000); + if (TRACE_DELAY) logerror("[%s] Delaying by %4.2f microsecs\n", ttsn().c_str(), delay.as_double()*1000000); tm->adjust(delay); m_substate = param; m_state_after_line = UNDEF; @@ -787,19 +804,19 @@ void hdc92x4_device::wait_line(int line, line_state level, int substate, bool st if (line == SEEKCOMP_LINE && (seek_complete() == (level==ASSERT_LINE))) { - if (TRACE_LINES) logerror("%s: SEEK_COMPLETE line is already %d\n", tag(), level); + if (TRACE_LINES) logerror("SEEK_COMPLETE line is already %d\n", level); } else { if (line == INDEX_LINE && (index_hole() == (level==ASSERT_LINE))) { - if (TRACE_LINES) logerror("%s: INDEX line is already %d\n", tag(), level); + if (TRACE_LINES) logerror("INDEX line is already %d\n", level); } else { if (line == READY_LINE && (drive_ready() == (level==ASSERT_LINE))) { - if (TRACE_LINES) logerror("%s: READY line is already %d\n", tag(), level); + if (TRACE_LINES) logerror("READY line is already %d\n", level); } else { @@ -827,7 +844,7 @@ void hdc92x4_device::wait_line(int line, line_state level, int substate, bool st // called by all sector access commands // ================================================================== /* - READ ID FIELD ([1] p. 9) + READ ID FIELD ([2] p. 9) The controller - scans for the next IDAM - reads the ID field values into the CURRENT_HEAD/CYLINDER/SECTOR registers @@ -846,14 +863,15 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple { case READ_ID: // Implied seek: Enter the READ_ID subprogram. - if (TRACE_READID && TRACE_SUBSTATES) logerror("%s: substate READ_ID\n", tag()); + if (TRACE_READID && TRACE_SUBSTATES) logerror("substate READ_ID\n"); // First step: Search the next IDAM, and if found, read the // ID values into the registers // Depending on the implied seek flag, continue with read_id, // else switch to verify. - m_substate = implied_seek? READ_ID1 : VERIFY; + // The 9224 always assumes implied seek + m_substate = (implied_seek || !m_is_hdc9234)? READ_ID1 : VERIFY; m_live_state.bit_count_total = 0; live_start(SEARCH_IDAM); @@ -864,22 +882,22 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple // If an error occurred (no IDAM found), terminate the command if ((m_register_r[CHIP_STATUS] & CS_SYNCERR) != 0) { - if (TRACE_FAIL) logerror("%s: READ_ID failed to find any IDAM\n", tag()); + if (TRACE_FAIL) logerror("READ_ID failed to find any IDAM\n"); cont = ERROR; break; } if (TRACE_READID) { - if (TRACE_SUBSTATES) logerror("%s: substate READ_ID1\n", tag()); - logerror("%s: DESIRED_CYL = %d; CURRENT_CYL = %d\n", tag(), desired_cylinder(), current_cylinder()); + if (TRACE_SUBSTATES) logerror("substate READ_ID1\n"); + logerror("DESIRED_CYL = %d; CURRENT_CYL = %d\n", desired_cylinder(), current_cylinder()); } // The CRC has been updated automatically with each read_one_bit during the live_run. // We just need to check whether it ended in 0000 if (m_live_state.crc != 0) { - if (TRACE_FAIL) logerror("%s: CRC error in sector header\n", tag()); + if (TRACE_FAIL) logerror("CRC error in sector header\n"); set_bits(m_register_r[CHIP_STATUS], CS_CRCERR, true); cont = ERROR; break; @@ -900,7 +918,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple if (wait_seek_complete) { // We have to wait for SEEK COMPLETE - if (TRACE_READID && TRACE_SUBSTATES) logerror("%s: Waiting for SEEK COMPLETE\n", tag()); + if (TRACE_READID && TRACE_SUBSTATES) logerror("Waiting for SEEK COMPLETE\n"); wait_line(SEEKCOMP_LINE, ASSERT_LINE, READ_ID_SEEK_COMPLETE, false); cont = WAIT; } @@ -913,7 +931,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple break; } - if (TRACE_READID && TRACE_SUBSTATES) logerror("%s: substate STEP_ON\n", tag()); + if (TRACE_READID && TRACE_SUBSTATES) logerror("substate STEP_ON\n"); // STEPDIR = 0 -> towards TRK00 set_bits(m_output2, OUT2_STEPDIR, (m_track_delta>0)); set_bits(m_output2, OUT2_STEPPULSE, true); @@ -922,7 +940,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple break; case READ_ID_STEPOFF: - if (TRACE_READID && TRACE_SUBSTATES) logerror("%s: substate STEP_OFF\n", tag()); + if (TRACE_READID && TRACE_SUBSTATES) logerror("substate STEP_OFF\n"); set_bits(m_output2, OUT2_STEPPULSE, false); m_track_delta += (m_track_delta<0)? 1 : -1; // Return to STEP_ON, check whether there are more steps @@ -936,7 +954,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple break; default: - logerror("%s: BUG: Unknown substate %02x in read_id, aborting command\n", tag(), m_substate); + logerror("BUG: Unknown substate %02x in read_id, aborting command\n", m_substate); cont = ERROR; } } @@ -950,7 +968,7 @@ void hdc92x4_device::read_id(int& cont, bool implied_seek, bool wait_seek_comple } /* - VERIFY ([1] p. 10) + VERIFY ([2] p. 10) The controller - continues to read the next ID field until the current values match the contents of the DESIRED_HEAD/CYLINDER/SECTOR registers @@ -968,8 +986,8 @@ void hdc92x4_device::verify(int& cont) // After seeking (or immediately when implied seek has been disabled), // find the desired sector. - if (TRACE_VERIFY && TRACE_SUBSTATES) logerror("%s: substate VERIFY\n", tag()); - if (TRACE_VERIFY) logerror("%s: VERIFY: Find sector CHS=(%d,%d,%d)\n", tag(), + if (TRACE_VERIFY && TRACE_SUBSTATES) logerror("substate VERIFY\n"); + if (TRACE_VERIFY) logerror("VERIFY: Find sector CHS=(%d,%d,%d)\n", desired_cylinder(), desired_head(), desired_sector()); @@ -978,7 +996,7 @@ void hdc92x4_device::verify(int& cont) // (This test is only relevant when we did not have a seek phase before) if ((m_register_r[CHIP_STATUS] & CS_SYNCERR) != 0) { - if (TRACE_FAIL) logerror("%s: VERIFY failed to find any IDAM\n", tag()); + if (TRACE_FAIL) logerror("VERIFY failed to find any IDAM\n"); cont = ERROR; break; } @@ -994,17 +1012,31 @@ void hdc92x4_device::verify(int& cont) && desired_head() == current_head() && desired_sector() == current_sector()) { - if (TRACE_VERIFY) logerror("%s: Found the desired sector CHS=(%d,%d,%d)\n", tag(), - desired_cylinder(), - desired_head(), - desired_sector()); - m_substate = DATA_TRANSFER; - cont = NEXT; - m_first_sector_found = true; + if (bad_sector()) + { + if (m_bypass) // only for 9224 + { + if (TRACE_FAIL) logerror("Desired sector CHS=(%d,%d,%d) found, marked as bad. Bypassing by request.\n", current_cylinder(), current_head(), current_sector()); + m_substate = VERIFY2; + } + else + { + if (TRACE_FAIL) logerror("Desired sector CHS=(%d,%d,%d) found, marked as bad.\n", current_cylinder(), current_head(), current_sector()); + set_bits(m_register_r[INT_STATUS], ST_BADSECT, true); + cont = ERROR; + } + } + else + { + if (TRACE_VERIFY) logerror("Found the desired sector CHS=(%d,%d,%d)\n", desired_cylinder(), desired_head(), desired_sector()); + m_substate = DATA_TRANSFER; + cont = NEXT; + m_first_sector_found = true; + } } else { - if (TRACE_VERIFY && TRACE_DETAIL) logerror("%s: Current CHS=(%d,%d,%d), desired CHS=(%d,%d,%d).\n", tag(), + if (TRACE_VERIFY && TRACE_DETAIL) logerror("Current CHS=(%d,%d,%d), desired CHS=(%d,%d,%d).\n", current_cylinder(), current_head(), current_sector(), @@ -1023,10 +1055,10 @@ void hdc92x4_device::verify(int& cont) break; case VERIFY3: - if (TRACE_VERIFY) logerror("%s: Next IDAM found; total bytes read: %d\n", tag(), m_live_state.bit_count_total / 16); + if (TRACE_VERIFY) logerror("Next IDAM found; total bytes read: %d\n", m_live_state.bit_count_total / 16); if ((m_register_r[CHIP_STATUS] & CS_COMPERR) != 0) { - if (TRACE_FAIL) logerror("%s: VERIFY failed to find sector CHS=(%d,%d,%d)\n", tag(), desired_cylinder(), desired_head(), desired_sector()); + if (TRACE_FAIL) logerror("VERIFY failed to find sector CHS=(%d,%d,%d)\n", desired_cylinder(), desired_head(), desired_sector()); cont = ERROR; break; } @@ -1041,14 +1073,23 @@ void hdc92x4_device::verify(int& cont) { // this is for the physical sector reading/writing // do not verify the next ID field - m_substate = DATA_TRANSFER; - m_wait_for_index = true; - cont = NEXT; + if (bad_sector()) + { + if (TRACE_FAIL) logerror("Next physical sector CHS=(%d,%d,%d) found, but marked as bad.\n", current_cylinder(), current_head(), current_sector()); + set_bits(m_register_r[INT_STATUS], ST_BADSECT, true); + cont = ERROR; + } + else + { + m_substate = DATA_TRANSFER; + m_wait_for_index = true; + cont = NEXT; + } } break; default: - logerror("%s: BUG: Unknown substate %02x in verify, aborting command\n", tag(), m_substate); + logerror("BUG: Unknown substate %02x in verify, aborting command\n", m_substate); cont = ERROR; } } @@ -1062,7 +1103,7 @@ void hdc92x4_device::verify(int& cont) } /* - DATA TRANSFER ([1], p. 10) + DATA TRANSFER ([2], p. 10) only during READ/WRITE PHYSICAL/LOGICAL The controller - scans for the next DAM @@ -1079,7 +1120,7 @@ void hdc92x4_device::data_transfer(int& cont) switch (m_substate) { case DATA_TRANSFER: - if (TRACE_TRANSFER && TRACE_SUBSTATES) logerror("%s: substate DATA_TRANSFER (%s)\n", tag(), m_write? "write" : "read"); + if (TRACE_TRANSFER && TRACE_SUBSTATES) logerror("substate DATA_TRANSFER (%s)\n", m_write? "write" : "read"); // Count from 0 again m_live_state.bit_count_total = 0; @@ -1089,12 +1130,12 @@ void hdc92x4_device::data_transfer(int& cont) if (TRACE_TRANSFER && TRACE_DETAIL) { if (m_logical) - logerror("%s: %s sector CHS=(%d,%d,%d)\n", tag(), m_write? "Write" : "Read", + logerror("%s sector CHS=(%d,%d,%d)\n", m_write? "Write" : "Read", desired_cylinder(), desired_head(), desired_sector()); else - logerror("%s: %s next sector on track\n", tag(), m_write? "Write" : "Read"); + logerror("%s next sector on track\n", m_write? "Write" : "Read"); } if (m_write) @@ -1122,12 +1163,12 @@ void hdc92x4_device::data_transfer(int& cont) // Decrement the retry register (one's complemented value; 0000 = 15) int retry = 15-((m_register_w[RETRY_COUNT] >> 4)&0x0f); - if (TRACE_FAIL) logerror("%s: DATA TRANSFER got CRC error in sector data, retries = %d\n", tag(), retry); + if (TRACE_FAIL) logerror("DATA TRANSFER got CRC error in sector data, retries = %d\n", retry); m_register_w[RETRY_COUNT] = (m_register_w[RETRY_COUNT] & 0x0f) | ((15-(retry-1))<<4); if (retry == 0) { - if (TRACE_FAIL) logerror("%s: CRC error; no retries left\n", tag()); + if (TRACE_FAIL) logerror("CRC error; no retries left\n"); set_bits(m_register_r[CHIP_STATUS], CS_CRCERR, true); cont = ERROR; } @@ -1145,7 +1186,7 @@ void hdc92x4_device::data_transfer(int& cont) } else { - if (TRACE_TRANSFER) logerror("%s: Sector successfully read (count=%d)\n", tag(), m_register_w[SECTOR_COUNT]-1); + if (TRACE_TRANSFER) logerror("Sector successfully read (count=%d)\n", m_register_w[SECTOR_COUNT]-1); // Update the DMA registers for multi-sector operations if (m_multi_sector) @@ -1159,7 +1200,7 @@ void hdc92x4_device::data_transfer(int& cont) m_register_w[DMA23_16] = m_register_r[DMA23_16] = (dma_address & 0xff0000) >> 16; m_register_w[DMA15_8] = m_register_r[DMA15_8] = (dma_address & 0x00ff00) >> 8; m_register_w[DMA7_0] = m_register_r[DMA7_0] = (dma_address & 0x0000ff); - if (TRACE_TRANSFER) logerror("%s: New DMA address = %06x\n", tag(), dma_address); + if (TRACE_TRANSFER) logerror("New DMA address = %06x\n", dma_address); } // Decrement the count @@ -1188,7 +1229,7 @@ void hdc92x4_device::data_transfer(int& cont) break; case DATA_TRANSFER_WRITE: - if (TRACE_TRANSFER) logerror("%s: Sector successfully written (count=%d)\n", tag(), m_register_w[SECTOR_COUNT]-1); + if (TRACE_TRANSFER) logerror("Sector successfully written (count=%d)\n", m_register_w[SECTOR_COUNT]-1); // Update the DMA registers for multi-sector operations if (m_multi_sector) @@ -1202,7 +1243,7 @@ void hdc92x4_device::data_transfer(int& cont) m_register_w[DMA23_16] = m_register_r[DMA23_16] = (dma_address & 0xff0000) >> 16; m_register_w[DMA15_8] = m_register_r[DMA15_8] = (dma_address & 0x00ff00) >> 8; m_register_w[DMA7_0] = m_register_r[DMA7_0] = (dma_address & 0x0000ff); - if (TRACE_TRANSFER) logerror("%s: New DMA address = %06x\n", tag(), dma_address); + if (TRACE_TRANSFER) logerror("New DMA address = %06x\n", dma_address); } // Decrement the count @@ -1220,7 +1261,7 @@ void hdc92x4_device::data_transfer(int& cont) break; default: - logerror("%s: BUG: Unknown substate %02x in data_transfer, aborting command\n", tag(), m_substate); + logerror("BUG: Unknown substate %02x in data_transfer, aborting command\n", m_substate); cont = ERROR; } } @@ -1253,7 +1294,7 @@ void hdc92x4_device::data_transfer(int& cont) */ void hdc92x4_device::preset_crc(live_info& live, int value) { - if ((m_register_w[INT_COMM_TERM] & 0x80)!=0) + if ((m_register_w[INT_COMM_TERM] & TC_CRCPRE)!=0) { // Preset -1 switch (value) @@ -1303,7 +1344,7 @@ void hdc92x4_device::preset_crc(live_info& live, int value) */ void hdc92x4_device::reset_controller() { - logerror("%s: RESET command\n", tag()); + logerror("RESET command\n"); device_reset(); } @@ -1320,7 +1361,7 @@ void hdc92x4_device::reset_controller() */ void hdc92x4_device::drive_deselect() { - if (TRACE_SELECT) logerror("%s: DESELECT command\n", tag()); + if (TRACE_SELECT) logerror("DESELECT command\n"); m_selected_drive_number = NODRIVE; m_output1 = 0x00; set_command_done(TC_SUCCESS); @@ -1349,7 +1390,7 @@ void hdc92x4_device::restore_drive() if (m_substate == UNDEF) { - if (TRACE_RESTORE) logerror("%s: RESTORE command %02x\n", tag(), current_command()); + if (TRACE_RESTORE) logerror("RESTORE command %02x\n", current_command()); m_seek_count = 0; m_substate = RESTORE_CHECK; } @@ -1362,7 +1403,7 @@ void hdc92x4_device::restore_drive() // Track 0 has not been reached yet if (!drive_ready()) { - if (TRACE_RESTORE) logerror("%s: restore command: Drive not ready\n", tag()); + if (TRACE_RESTORE) logerror("restore command: Drive not ready\n"); // Does not look like a success, but this takes into account // that if a drive is not connected we do not want an error message cont = SUCCESS; @@ -1377,7 +1418,7 @@ void hdc92x4_device::restore_drive() // When we have buffered steps, the seek limit will be reached // before TRK00 is asserted. In that case we have to wait for // SEEK_COMPLETE. We also wait as soon as TRK00 is asserted. - if (TRACE_RESTORE) logerror("%s: restore using buffered steps\n", tag()); + if (TRACE_RESTORE) logerror("restore using buffered steps\n"); wait_line(SEEKCOMP_LINE, ASSERT_LINE, SEEK_COMPLETE, false); cont = WAIT; } @@ -1392,7 +1433,7 @@ void hdc92x4_device::restore_drive() break; case STEP_ON: - if (TRACE_RESTORE && TRACE_SUBSTATES) logerror("%s: [%s] substate STEP_ON\n", tag(), ttsn().c_str()); + if (TRACE_RESTORE && TRACE_SUBSTATES) logerror("[%s] substate STEP_ON\n", ttsn().c_str()); // Increase step count m_seek_count++; @@ -1407,7 +1448,7 @@ void hdc92x4_device::restore_drive() break; case STEP_OFF: - if (TRACE_RESTORE && TRACE_SUBSTATES) logerror("%s: [%s] substate STEP_OFF\n", tag(), ttsn().c_str()); + if (TRACE_RESTORE && TRACE_SUBSTATES) logerror("[%s] substate STEP_OFF\n", ttsn().c_str()); set_bits(m_output2, OUT2_STEPPULSE, false); wait_time(m_timer, step_time(), RESTORE_CHECK); cont = WAIT; @@ -1417,7 +1458,7 @@ void hdc92x4_device::restore_drive() // If TRK00 is not set, the drive failed to reach it. if (!on_track00()) { - if (TRACE_FAIL) logerror("%s: restore command: failed to reach track 00\n", tag()); + if (TRACE_FAIL) logerror("restore command: failed to reach track 00\n"); set_command_done(TC_VRFYERR); cont = ERROR; } @@ -1448,7 +1489,7 @@ void hdc92x4_device::step_drive() if (m_substate == UNDEF) { - if (TRACE_STEP) logerror("%s: STEP IN/OUT command %02x\n", tag(), current_command()); + if (TRACE_STEP) logerror("STEP IN/OUT command %02x\n", current_command()); m_substate = STEP_ON; } @@ -1457,7 +1498,7 @@ void hdc92x4_device::step_drive() switch (m_substate) { case STEP_ON: - if (TRACE_STEP && TRACE_SUBSTATES) logerror("%s: substate STEP_ON\n", tag()); + if (TRACE_STEP && TRACE_SUBSTATES) logerror("substate STEP_ON\n"); // STEPDIR = 0 -> towards TRK00 set_bits(m_output2, OUT2_STEPDIR, (current_command() & 0x02)==0); @@ -1469,7 +1510,7 @@ void hdc92x4_device::step_drive() break; case STEP_OFF: - if (TRACE_STEP && TRACE_SUBSTATES) logerror("%s: substate STEP_OFF\n", tag()); + if (TRACE_STEP && TRACE_SUBSTATES) logerror("substate STEP_OFF\n"); set_bits(m_output2, OUT2_STEPPULSE, false); wait_time(m_timer, step_time(), ((current_command() & 0x01)!=0)? WAIT_SEEK_COMPLETE : DONE); cont = WAIT; @@ -1494,7 +1535,7 @@ void hdc92x4_device::step_drive() */ void hdc92x4_device::tape_backup() { - logerror("%s: TAPE BACKUP command %02x not implemented\n", tag(), current_command()); + logerror("TAPE BACKUP command %02x not implemented\n", current_command()); set_command_done(TC_SUCCESS); } @@ -1514,13 +1555,20 @@ void hdc92x4_device::tape_backup() This command only sets the select lines but does not process parameters like head load times or drive types. + + According to [1], this command must be preceded by a DESELECT. + The specification to the successor 9234 [2] says that typically a SEEK + may be issued before POLL_DRIVES. + + It is unclear what happens when this is not ensured. This implementation + automatically deselects the drives. */ void hdc92x4_device::poll_drives() { UINT8 drivebit; if (m_substate == UNDEF) { - logerror("%s: POLL DRIVES command %02x\n", tag(), current_command()); + logerror("POLL DRIVES command %02x\n", current_command()); m_substate = POLL1; m_selected_drive_number = 0; // If there is no selection, do not enter the loop @@ -1542,7 +1590,7 @@ void hdc92x4_device::poll_drives() m_register_r[CHIP_STATUS] = (m_register_r[CHIP_STATUS] & 0xfc) | m_selected_drive_number; m_output1 = (drivebit << 4) | (m_register_w[RETRY_COUNT]&0x0f); - if (TRACE_AUXBUS) logerror("%s: Setting OUTPUT1 to %02x\n", tag(), m_output1); + if (TRACE_AUXBUS) logerror("Setting OUTPUT1 to %02x\n", m_output1); wait_time(m_timer, 1, POLL2); // Wait for 1 usec cont = WAIT; } @@ -1584,7 +1632,7 @@ void hdc92x4_device::poll_drives() On the next OUTPUT1 time, the number of the drive (one of four lines) is set on the higher four bits of the auxiliary bus. Also, the lower 4 bits of the RETRY COUNT register are put on the lower 4 bits of the bus - (user-programmable output, [1] p. 5). + (user-programmable output, [2] p. 5). The HFDC controller board uses the user-programmable output to select one of four floppy disk drives with Drive set to 00. @@ -1608,7 +1656,7 @@ void hdc92x4_device::drive_select() int driveparm = current_command() & 0x1f; bool head_load_delay_enable = (driveparm & 0x10)!=0; - // The drive type is used to configure DMA burst mode ([1], p.12) + // The drive type is used to configure DMA burst mode ([2], p.12) // and to select the timing parameters m_selected_drive_type = (driveparm>>2) & 0x03; m_selected_drive_number = driveparm & 0x03; @@ -1617,10 +1665,10 @@ void hdc92x4_device::drive_select() head_load_delay = head_load_delay_enable? m_register_w[DATA] * head_load_timer_increment[m_selected_drive_type] : 0; if (fm_mode()) head_load_delay <<= 1; - if (TRACE_SELECT) logerror("%s: DRIVE SELECT command (%02x): head load delay=%d, type=%d, drive=%d, pout=%02x, step_rate=%d\n", tag(), current_command(), head_load_delay, m_selected_drive_type, driveparm&3, m_register_w[RETRY_COUNT]&0x0f, pulse_width() + step_time()); + if (TRACE_SELECT) logerror("DRIVE SELECT command (%02x): head load delay=%d, type=%d, drive=%d, pout=%02x, step_rate=%d\n", current_command(), head_load_delay, m_selected_drive_type, driveparm&3, m_register_w[RETRY_COUNT]&0x0f, pulse_width() + step_time()); // Copy the DMA registers to registers CURRENT_HEAD, CURRENT_CYLINDER, - // and CURRENT_IDENT. This is required during formatting ([1], p. 14) + // and CURRENT_IDENT. This is required during formatting [1,2] // as the format command reuses the registers for formatting parameters. m_register_r[CURRENT_HEAD] = m_register_r[DMA7_0]; m_register_r[CURRENT_CYLINDER] = m_register_r[DMA15_8]; @@ -1631,7 +1679,7 @@ void hdc92x4_device::drive_select() m_output1 = (m_selected_drive_number != NODRIVE)? (0x10 << m_selected_drive_number) : 0; m_output1 |= (m_register_w[RETRY_COUNT]&0x0f); - if (TRACE_AUXBUS) logerror("%s: Setting OUTPUT1 to %02x\n", tag(), m_output1); + if (TRACE_AUXBUS) logerror("Setting OUTPUT1 to %02x\n", m_output1); m_substate = (head_load_delay>0)? HEAD_DELAY : DONE; } @@ -1662,12 +1710,12 @@ void hdc92x4_device::drive_select() void hdc92x4_device::set_register_pointer() { m_register_pointer = current_command() & 0xf; - if (TRACE_SETPTR) logerror("%s: SET REGISTER POINTER command; start reg=%d\n", tag(), m_register_pointer); + if (TRACE_SETPTR) logerror("SET REGISTER POINTER command; start reg=%d\n", m_register_pointer); // The specification does not say anything about the effect of setting an // invalid value (only "care should be taken") if (m_register_pointer > 10) { - logerror("%s: set register pointer: Invalid register number: %d. Setting to 10.\n", tag(), m_register_pointer); + logerror("set register pointer: Invalid register number: %d. Setting to 10.\n", m_register_pointer); m_register_pointer = 10; } set_command_done(TC_SUCCESS); @@ -1686,14 +1734,14 @@ void hdc92x4_device::set_register_pointer() | 0 | 1 | 0 | 1 | 0 | Step| Seek| Verf| +-----+-----+-----+-----+-----+-----+-----+-----+ - All combinations of flags are legal ([1], p.12). + All combinations of flags are legal ([2], p.12). */ void hdc92x4_device::seek_read_id() { if (m_substate == UNDEF) { // Command init - if (TRACE_READ) logerror("%s: SEEK / READ ID command %02x, CHS=(%d,%d,%d)\n", tag(), current_command(), desired_cylinder(), desired_head(), desired_sector()); + if (TRACE_READ) logerror("SEEK / READ ID command %02x, CHS=(%d,%d,%d)\n", current_command(), desired_cylinder(), desired_head(), desired_sector()); m_substate = READ_ID; } @@ -1721,7 +1769,7 @@ void hdc92x4_device::seek_read_id() cont = SUCCESS; break; default: - logerror("%s: BUG: Unknown substate %02x in seek_read_id, aborting command\n", tag(), m_substate); + logerror("BUG: Unknown substate %02x in seek_read_id, aborting command\n", m_substate); set_command_done(TC_DATAERR); cont = ERROR; } @@ -1745,20 +1793,32 @@ void hdc92x4_device::seek_read_id() Command word - 7 6 5 4 3 2 1 0 - +-----+-----+-----+-----+-----+--------+------+------+ - | 0 | 1 | 0 | 1 | 1 | Logical|NoSeek| Trans| - +-----+-----+-----+-----+-----+--------+------+------+ + Physical: + +-----+-----+-----+-----+-----+-----+------+------+ + | 0 | 1 | 0 | 1 | 1 | 0 | 0 |XferEn| + +-----+-----+-----+-----+-----+-----+------+------+ + Logical: + +-----+-----+-----+-----+-----+-----+------+------+ + | 0 | 1 | 0 | 1 | 1 | 1 |Bypass|XferEn| 9224 + +-----+-----+-----+-----+-----+-----+------+------+ + +-----+-----+-----+-----+-----+-----+------+------+ + | 0 | 1 | 0 | 1 | 1 | 1 |NoSeek|XferEn| 9234 + +-----+-----+-----+-----+-----+-----+------+------+ */ void hdc92x4_device::read_sectors() { - m_logical = (current_command() & 0x04)!=0; + int cont = NEXT; + bool implied_seek = (current_command() & 0x02)==0; if (m_substate == UNDEF) { // Command init - if (TRACE_READ) logerror("%s: READ SECTORS %s command %02x, CHS=(%d,%d,%d)\n", tag(), m_logical? "LOGICAL": "PHYSICAL", current_command(), desired_cylinder(), desired_head(), desired_sector()); + m_logical = (current_command() & 0x04)!=0; // used in VERIFY and DATA TRANSFER substate + if (TRACE_READ) logerror("READ SECTORS %s command %02x, CHS=(%d,%d,%d)\n", m_logical? "LOGICAL": "PHYSICAL", current_command(), desired_cylinder(), desired_head(), desired_sector()); + + m_bypass = !m_is_hdc9234 && (current_command() & 0x02)!=0; + m_transfer_enabled = (current_command() & 0x01)!=0; m_retry_save = m_register_w[RETRY_COUNT]; m_multi_sector = (m_register_w[SECTOR_COUNT] != 1); m_write = false; @@ -1766,10 +1826,6 @@ void hdc92x4_device::read_sectors() m_first_sector_found = false; } - int cont = NEXT; - bool implied_seek = (current_command() & 0x02)==0; - m_transfer_enabled = (current_command() & 0x01)!=0; - while (cont == NEXT) { switch (m_substate & 0xf0) @@ -1784,7 +1840,7 @@ void hdc92x4_device::read_sectors() data_transfer(cont); break; default: - logerror("%s: BUG: Unknown substate %02x in read_sectors, aborting command\n", tag(), m_substate); + logerror("BUG: Unknown substate %02x in read_sectors, aborting command\n", m_substate); set_command_done(TC_DATAERR); cont = ERROR; } @@ -1794,9 +1850,10 @@ void hdc92x4_device::read_sectors() /* READ TRACK Read all ID and data fields as they appear on the track. Command 5A only - transmits the ID fields via DMA, which 5B transmits all ID and data fields. - Note that the specifications do not mention any gaps to be transmitted as - well. + transmits the ID fields via DMA, while 5B transmits all ID and data fields. + Apart from the ID fields and the data fields, the specs [1] and [2] do not + mention any further transmitted data, so this is not a verbatim copy of + the track. Command word @@ -1810,7 +1867,7 @@ void hdc92x4_device::read_track() { if (m_substate == UNDEF) { - if (TRACE_READTRACK) logerror("%s: READ TRACK command %02x, head = %d\n", tag(), current_command(), desired_head()); + if (TRACE_READTRACK) logerror("READ TRACK command %02x, head = %d\n", current_command(), desired_head()); dma_address_out(m_register_w[DMA23_16], m_register_w[DMA15_8], m_register_w[DMA7_0]); m_transfer_enabled = (current_command() & 1)!=0; } @@ -1821,7 +1878,7 @@ void hdc92x4_device::read_track() switch (m_substate) { case WAITINDEX0: - if (TRACE_READTRACK && TRACE_DETAIL) logerror("%s: Read track - waiting for index hole\n", tag()); + if (TRACE_READTRACK && TRACE_DETAIL) logerror("Read track - waiting for index hole\n"); if (!index_hole()) { m_substate = WAITINDEX1; @@ -1830,7 +1887,7 @@ void hdc92x4_device::read_track() else { // We're above the index hole; wait for the index line going down - if (TRACE_READTRACK && TRACE_DETAIL) logerror("%s: Index hole just passing by ... waiting for next\n", tag()); + if (TRACE_READTRACK && TRACE_DETAIL) logerror("Index hole just passing by ... waiting for next\n"); wait_line(INDEX_LINE, ASSERT_LINE, WAITINDEX1, false); cont = WAIT; } @@ -1841,12 +1898,12 @@ void hdc92x4_device::read_track() cont = WAIT; break; case TRACKSTART: - if (TRACE_READTRACK && TRACE_DETAIL) logerror("%s: Read track - index hole arrived\n", tag()); + if (TRACE_READTRACK && TRACE_DETAIL) logerror("Read track - index hole arrived\n"); live_start(READ_TRACK); cont = WAIT; break; case TRACKDONE: - if (TRACE_READTRACK && TRACE_SUBSTATES) logerror("%s: Track reading done\n", tag()); + if (TRACE_READTRACK && TRACE_SUBSTATES) logerror("Track reading done\n"); cont = SUCCESS; m_out_dmarq(CLEAR_LINE); m_out_dip(CLEAR_LINE); @@ -1868,12 +1925,28 @@ void hdc92x4_device::read_track() 1. Before starting the command, the user program must have set up a sector sequence table in the controller RAM (located on the PCB): + + 9224: Floppy or generic HD + (cylinder, head, sector1, size) (4 bytes) + (cylinder, head, sector2, size) ... + + 9224: ST-506 HD + (cylinder, head, sector1) (3 bytes) + (cylinder, head, sector2) ... + + --------------------------- + + 9234: FM Floppy + (cylinder, head, sector1, size) (4 bytes) + (cylinder, head, sector2, size) ... + + 9234: PC-AT + (ident, cylinder, head, sector1) (4 bytes) + (ident, cylinder, head, sector2) ... + + 9234: MFM Floppy or generic HD (ident, cylinder, head, sector1, size) (5 bytes) - (ident, cylinder, head, sector2, size) - (ident, cylinder, head, sector3, size) - ... - ident is not required for floppy FM operation. size is not required - for IBM AT-compatible hard disks. + (ident, cylinder, head, sector2, size) ... 2. The DMA registers must point to the beginning of the table @@ -1918,7 +1991,7 @@ void hdc92x4_device::format_track() { if (m_substate == UNDEF) { - if (TRACE_FORMAT) logerror("%s: FORMAT TRACK command %02x, head = %d\n", tag(), current_command(), desired_head()); + if (TRACE_FORMAT) logerror("FORMAT TRACK command %02x, head = %d\n", current_command(), desired_head()); m_substate = WAITINDEX0; m_deleted = (current_command() & 0x10)!=0; m_reduced_write_current = (current_command() & 0x08)!=0; @@ -1935,13 +2008,27 @@ void hdc92x4_device::format_track() if (TRACE_FORMAT && TRACE_DETAIL) { - logerror("%s: GAP0 length = %d\n", tag(), m_gap0_size); - logerror("%s: GAP1 length = %d\n", tag(), m_gap1_size); - logerror("%s: GAP2 length = %d\n", tag(), m_gap2_size); - logerror("%s: GAP3 length = %d\n", tag(), m_gap3_size); - logerror("%s: Sync size = %d\n", tag(), m_sync_size); - logerror("%s: Sector count = %d\n", tag(), m_sector_count); - logerror("%s: Sector size = %d\n", tag(), m_sector_size); + logerror("GAP0 length = %d\n", m_gap0_size); + logerror("GAP1 length = %d\n", m_gap1_size); + logerror("GAP2 length = %d\n", m_gap2_size); + logerror("GAP3 length = %d\n", m_gap3_size); + logerror("Sync size = %d\n", m_sync_size); + logerror("Sector count = %d\n", m_sector_count); + logerror("Sector size = %d\n", m_sector_size); + } + + if (TRACE_FORMAT) + { + if (!m_is_hdc9234 && (m_selected_drive_type==TYPE_ST)) + { + // For ST-506 mode (9224), GAP0 and GAP1 should be equal [1] + if (m_gap0_size != m_gap1_size) + logerror("Warning: GAP0 (%d) and GAP1 (%d) must be equal in ST-506 mode.\n", m_gap0_size, m_gap1_size); + + // For ST-506 mode (9224), sector size is 512 [1] + if (m_sector_size != 512) + logerror("Warning: Sector size (%d) must be 512 in ST-506 mode.\n", m_sector_size); + } } dma_address_out(m_register_r[CURRENT_IDENT], m_register_r[CURRENT_CYLINDER], m_register_r[CURRENT_HEAD]); @@ -1953,7 +2040,7 @@ void hdc92x4_device::format_track() switch (m_substate) { case WAITINDEX0: - if (TRACE_FORMAT && TRACE_DETAIL) logerror("%s: Format track; looking for track start\n", tag()); + if (TRACE_FORMAT && TRACE_DETAIL) logerror("Format track; looking for track start\n"); if (!index_hole()) { m_substate = WAITINDEX1; @@ -1962,24 +2049,24 @@ void hdc92x4_device::format_track() else { // We're above the index hole right now, so wait for the line going down - if (TRACE_FORMAT && TRACE_DETAIL) logerror("%s: Index hole just passing by ... \n", tag()); + if (TRACE_FORMAT && TRACE_DETAIL) logerror("Index hole just passing by ... \n"); wait_line(INDEX_LINE, CLEAR_LINE, WAITINDEX1, false); cont = WAIT; } break; case WAITINDEX1: // Waiting for the next rising edge - if (TRACE_FORMAT && TRACE_DETAIL) logerror("%s: Waiting for next index hole\n", tag()); + if (TRACE_FORMAT && TRACE_DETAIL) logerror("Waiting for next index hole\n"); wait_line(INDEX_LINE, ASSERT_LINE, TRACKSTART, false); cont = WAIT; break; case TRACKSTART: - if (TRACE_FORMAT && TRACE_DETAIL) logerror("%s: Format track - index hole arrived\n", tag()); + if (TRACE_FORMAT && TRACE_DETAIL) logerror("Format track - index hole arrived\n"); live_start(FORMAT_TRACK); cont = WAIT; break; case TRACKDONE: - if (FORMAT_TRACK && TRACE_SUBSTATES) logerror("%s: Track writing done\n", tag()); + if (FORMAT_TRACK && TRACE_SUBSTATES) logerror("Track writing done\n"); cont = SUCCESS; break; } @@ -2004,34 +2091,44 @@ void hdc92x4_device::format_track() Command word - 7 6 5 4 3 2 1 0 + Physical: +-----+------+-------+------+-----+-----+-----+------+ - | 1 |NoSeek|Logical|DelMrk|RedWC| Precompensation | + | 1 |NoSeek| 0 |DelMrk|RedWC| Precompensation | + +-----+------+-------+------+-----+-----+-----+------+ + + Logical: + +-----+------+-------+------+-----+-----+-----+------+ + | 1 |Bypass| 1 |DelMrk|RedWC| Precompensation | 9224 + +-----+------+-------+------+-----+-----+-----+------+ + +-----+------+-------+------+-----+-----+-----+------+ + | 1 |NoSeek| 1 |DelMrk|RedWC| Precompensation | 9234 +-----+------+-------+------+-----+-----+-----+------+ */ void hdc92x4_device::write_sectors() { - m_logical = (current_command() & 0x20)!=0; + int cont = NEXT; + bool implied_seek = (current_command() & 0x40)==0; if (m_substate == UNDEF) { - if (TRACE_WRITE) logerror("%s: WRITE SECTORS %s command %02x, CHS=(%d,%d,%d)\n", tag(), m_logical? "LOGICAL" : "PHYSICAL", current_command(), desired_cylinder(), desired_head(), desired_sector()); + // Command init + m_logical = (current_command() & 0x20)!=0; + if (TRACE_WRITE) logerror("WRITE SECTORS %s command %02x, CHS=(%d,%d,%d)\n", m_logical? "LOGICAL" : "PHYSICAL", current_command(), desired_cylinder(), desired_head(), desired_sector()); + m_multi_sector = (m_register_w[SECTOR_COUNT] != 1); m_substate = READ_ID; - + m_bypass = !m_is_hdc9234 && (current_command() & 0x40)!=0; m_deleted = (current_command() & 0x10)!=0; m_reduced_write_current = (current_command() & 0x08)!=0; m_precompensation = (current_command() & 0x07); // Important for DATA TRANSFER m_transfer_enabled = true; - // Something interesting here: - // - // The values for sync and gap2 are passed to the formatting routing - // but how do we know their values right now, when we are writing sectors? - // Since this is not clearly stated in the specification, we have to - // use the default values here - // Actually, why can we choose that value for formatting in the first place? + // For formatting, the values for GAP2 and SYNC can be set as parameters. + // However, these areas must be rewritten during sector writing, and + // there is no way to specify these values for that operation. It seems + // to be a design feature of the 92x4 that does not make sense at all. + // We just assume the standard values here. if (using_floppy()) { @@ -2048,9 +2145,6 @@ void hdc92x4_device::write_sectors() m_first_sector_found = false; } - int cont = NEXT; - bool implied_seek = (current_command() & 0x40)==0; - while (cont == NEXT) { // We're dispatching by substate value range @@ -2067,7 +2161,7 @@ void hdc92x4_device::write_sectors() data_transfer(cont); break; default: - logerror("%s: BUG: Unknown substate %02x in write_sectors, aborting command\n", tag(), m_substate); + logerror("BUG: Unknown substate %02x in write_sectors, aborting command\n", m_substate); set_command_done(TC_DATAERR); cont = ERROR; } @@ -2146,7 +2240,7 @@ bool hdc92x4_device::found_mark(int state) */ void hdc92x4_device::live_start(int state) { - if (TRACE_LIVE) logerror("%s: [%s] Live start substate=%02x\n", tag(), ttsn().c_str(), state); + if (TRACE_LIVE) logerror("[%s] Live start substate=%02x\n", ttsn().c_str(), state); m_live_state.time = machine().time(); m_live_state.state = state; m_live_state.next_state = -1; @@ -2167,7 +2261,7 @@ void hdc92x4_device::live_start(int state) live_run(); m_last_live_state = UNDEF; - if (TRACE_LIVE) logerror("%s: [%s] Live start end\n", tag(), ttsn().c_str()); // delete + if (TRACE_LIVE) logerror("[%s] Live start end\n", ttsn().c_str()); // delete } void hdc92x4_device::live_run() @@ -2194,9 +2288,9 @@ void hdc92x4_device::live_run_until(attotime limit) if (TRACE_LIVE) { if (limit == attotime::never) - logerror("%s: [%s live] live_run, live_state=%02x, mode=%s\n", tag(), tts(m_live_state.time).c_str(), m_live_state.state, fm_mode()? "FM":"MFM"); + logerror("[%s live] live_run, live_state=%02x, mode=%s\n", tts(m_live_state.time).c_str(), m_live_state.state, fm_mode()? "FM":"MFM"); else - logerror("%s: [%s live] live_run until %s, live_state=%02x, mode=%s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str(), m_live_state.state, fm_mode()? "FM":"MFM"); + logerror("[%s live] live_run until %s, live_state=%02x, mode=%s\n", tts(m_live_state.time).c_str(), tts(limit).c_str(), m_live_state.state, fm_mode()? "FM":"MFM"); } if (limit == attotime::never) @@ -2228,7 +2322,7 @@ void hdc92x4_device::live_run_until(attotime limit) if (TRACE_LIVE && m_last_live_state != SEARCH_IDAM) { - logerror("%s: [%s live] SEARCH_IDAM [limit %s]\n", tag(),tts(m_live_state.time).c_str(), tts(limit).c_str()); + logerror("[%s live] SEARCH_IDAM [limit %s]\n",tts(m_live_state.time).c_str(), tts(limit).c_str()); m_last_live_state = m_live_state.state; } @@ -2237,14 +2331,14 @@ void hdc92x4_device::live_run_until(attotime limit) if (read_one_bit(limit)) { - if (TRACE_LIVE) logerror("%s: [%s live] SEARCH_IDAM limit reached\n", tag(), tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] SEARCH_IDAM limit reached\n", tts(m_live_state.time).c_str()); return; } - // logerror("%s: SEARCH_IDAM\n", tts(m_live_state.time).c_str()); - if (TRACE_SHIFT) logerror("%s: [%s live] shift = %04x data=%02x c=%d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg, + // logerror("SEARCH_IDAM\n", tts(m_live_state.time).c_str()); + if (TRACE_SHIFT) logerror("[%s live] shift = %04x data=%02x c=%d\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg, get_data_from_encoding(m_live_state.shift_reg), m_live_state.bit_counter); - // [1] p. 9: The ID field sync mark must be found within 33,792 byte times + // [1,2]: The ID field sync mark must be found within 33,792 byte times if (m_live_state.bit_count_total > 33792*16) { // Desired sector not found within time @@ -2260,7 +2354,7 @@ void hdc92x4_device::live_run_until(attotime limit) // MFM case if (m_live_state.shift_reg == 0x4489) { - if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str()); preset_crc(m_live_state, 0xa1); m_live_state.data_separator_phase = false; m_live_state.bit_counter = 0; @@ -2273,7 +2367,7 @@ void hdc92x4_device::live_run_until(attotime limit) // FM case if (m_live_state.shift_reg == 0xf57e) { - if (TRACE_LIVE) logerror("%s: SEARCH_IDAM: IDAM found\n", tag()); + if (TRACE_LIVE) logerror("SEARCH_IDAM: IDAM found\n"); preset_crc(m_live_state, 0xfe); m_live_state.data_separator_phase = false; m_live_state.bit_counter = 0; @@ -2296,14 +2390,14 @@ void hdc92x4_device::live_run_until(attotime limit) if (TRACE_LIVE && m_last_live_state != READ_TWO_MORE_A1_IDAM) { - logerror("%s: [%s live] READ_TWO_MORE_A1\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] READ_TWO_MORE_A1\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } // Beyond time limit? if (read_one_bit(limit)) return; - if (TRACE_SHIFT) logerror("%s: [%s live] shift = %04x data=%02x c=%d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg, + if (TRACE_SHIFT) logerror("[%s live] shift = %04x data=%02x c=%d\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg, get_data_from_encoding(m_live_state.shift_reg), m_live_state.bit_counter); if (m_live_state.bit_count_total > 33792*16) @@ -2325,12 +2419,12 @@ void hdc92x4_device::live_run_until(attotime limit) m_live_state.state = SEARCH_IDAM; } else - if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str()); // Continue break; } - if (TRACE_LIVE) logerror("%s: [%s live] Found data value %02X\n", tag(),tts(m_live_state.time).c_str(), m_live_state.data_reg); + if (TRACE_LIVE) logerror("[%s live] Found data value %02X\n",tts(m_live_state.time).c_str(), m_live_state.data_reg); // Check for ident field (fe, ff, fd, fc) if ((m_live_state.data_reg & 0xfc) != 0xfc) @@ -2339,9 +2433,9 @@ void hdc92x4_device::live_run_until(attotime limit) if (TRACE_LIVE) { if (m_live_state.data_reg == 0xf8 || m_live_state.data_reg == 0xfb) - logerror("%s: [%s live] Looks like a DAM; continue to next mark\n", tag(), tts(m_live_state.time).c_str()); + logerror("[%s live] Looks like a DAM; continue to next mark\n", tts(m_live_state.time).c_str()); else - logerror("%s: [%s live] Missing ident data after A1A1A1, and it was not DAM; format corrupt?\n", tag(), tts(m_live_state.time).c_str()); + logerror("[%s live] Missing ident data after A1A1A1, and it was not DAM; format corrupt?\n", tts(m_live_state.time).c_str()); } m_live_state.state = SEARCH_IDAM; break; @@ -2357,7 +2451,7 @@ void hdc92x4_device::live_run_until(attotime limit) case READ_ID_FIELDS_INTO_REGS: if (TRACE_LIVE && m_last_live_state != READ_ID_FIELDS_INTO_REGS) { - logerror("%s: [%s live] READ_ID_FIELDS_INTO_REGS\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] READ_ID_FIELDS_INTO_REGS\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } @@ -2370,7 +2464,7 @@ void hdc92x4_device::live_run_until(attotime limit) slot = (m_live_state.bit_counter >> 4)-1; - if (TRACE_LIVE) logerror("%s: slot %d = %02x, crc=%04x\n", tag(), slot, m_live_state.data_reg, m_live_state.crc); + if (TRACE_LIVE) logerror("slot %d = %02x, crc=%04x\n", slot, m_live_state.data_reg, m_live_state.crc); m_register_r[register_number(slot)] = m_live_state.data_reg; @@ -2394,7 +2488,7 @@ void hdc92x4_device::live_run_until(attotime limit) case SEARCH_DAM: if (TRACE_LIVE && m_last_live_state != SEARCH_DAM) { - logerror("%s: [%s live] SEARCH_DAM\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] SEARCH_DAM\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } @@ -2403,21 +2497,21 @@ void hdc92x4_device::live_run_until(attotime limit) if(read_one_bit(limit)) return; - if (TRACE_SHIFT) logerror("%s: [%s live] shift = %04x data=%02x c=%d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg, + if (TRACE_SHIFT) logerror("[%s live] shift = %04x data=%02x c=%d\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg, get_data_from_encoding(m_live_state.shift_reg), m_live_state.bit_counter); if (!fm_mode()) { // MFM if(m_live_state.bit_counter > 43*16) { - if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag()); + if (TRACE_FAIL) logerror("SEARCH_DAM failed\n"); wait_for_realtime(SEARCH_DAM_FAILED); return; } if (m_live_state.bit_counter >= 28*16 && m_live_state.shift_reg == 0x4489) { - if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str()); preset_crc(m_live_state, 0xa1); m_live_state.data_separator_phase = false; m_live_state.bit_counter = 0; @@ -2428,18 +2522,30 @@ void hdc92x4_device::live_run_until(attotime limit) { // FM if (m_live_state.bit_counter > 23*16) { - if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag()); + if (TRACE_FAIL) logerror("SEARCH_DAM failed\n"); wait_for_realtime(SEARCH_DAM_FAILED); return; } - if (m_live_state.bit_counter >= 11*16 && (m_live_state.shift_reg == 0xf56a || m_live_state.shift_reg == 0xf56b || - m_live_state.shift_reg == 0xf56e || m_live_state.shift_reg == 0xf56f)) { - if (TRACE_LIVE) logerror("%s: SEARCH_DAM: found DAM = %04x\n", tag(), m_live_state.shift_reg); - preset_crc(m_live_state, m_live_state.shift_reg); - m_live_state.data_separator_phase = false; - m_live_state.bit_counter = 0; - m_live_state.state = READ_SECTOR_DATA; + if (m_live_state.bit_counter >= 11*16) + { + if ((m_live_state.shift_reg & 0xfffe) == 0xf56a) { + if (TRACE_LIVE) logerror("SEARCH_DAM: found DEL DAM = %04x\n", m_live_state.shift_reg); + preset_crc(m_live_state, m_live_state.shift_reg); + m_live_state.data_separator_phase = false; + m_live_state.bit_counter = 0; + m_live_state.state = READ_SECTOR_DATA; + set_bits(m_register_r[CHIP_STATUS], CS_DELDATA, true); + } + else { + if ((m_live_state.shift_reg & 0xfffe) == 0xf56e) { + if (TRACE_LIVE) logerror("SEARCH_DAM: found DAM = %04x\n", m_live_state.shift_reg); + preset_crc(m_live_state, m_live_state.shift_reg); + m_live_state.data_separator_phase = false; + m_live_state.bit_counter = 0; + m_live_state.state = READ_SECTOR_DATA; + } + } } } break; @@ -2447,14 +2553,14 @@ void hdc92x4_device::live_run_until(attotime limit) case READ_TWO_MORE_A1_DAM: { if (TRACE_LIVE && m_last_live_state != READ_TWO_MORE_A1_DAM) { - logerror("%s: [%s live] READ_TWO_MORE_A1_DAM\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] READ_TWO_MORE_A1_DAM\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } if(read_one_bit(limit)) return; - if (TRACE_SHIFT) logerror("%s: [%s live] shift = %04x data=%02x c=%d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg, + if (TRACE_SHIFT) logerror("[%s live] shift = %04x data=%02x c=%d\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg, get_data_from_encoding(m_live_state.shift_reg), m_live_state.bit_counter); // Repeat until we have collected 16 bits @@ -2471,23 +2577,23 @@ void hdc92x4_device::live_run_until(attotime limit) return; } else - if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str()); // Continue break; } - if (TRACE_LIVE) logerror("%s: [%s live] Found data value %02X\n", tag(),tts(m_live_state.time).c_str(), m_live_state.data_reg); + if (TRACE_LIVE) logerror("[%s live] Found data value %02X\n",tts(m_live_state.time).c_str(), m_live_state.data_reg); if ((m_live_state.data_reg & 0xff) == 0xf8) { - if (TRACE_LIVE) logerror("%s: Found deleted data mark F8 after DAM sync\n", tag()); + if (TRACE_LIVE) logerror("Found deleted data mark F8 after DAM sync\n"); set_bits(m_register_r[CHIP_STATUS], CS_DELDATA, true); } else { if ((m_live_state.data_reg & 0xff) != 0xfb) { - if (TRACE_FAIL) logerror("%s: Missing FB/F8 data mark after DAM sync\n", tag()); + if (TRACE_FAIL) logerror("Missing FB/F8 data mark after DAM sync\n"); wait_for_realtime(SEARCH_DAM_FAILED); return; } @@ -2498,7 +2604,7 @@ void hdc92x4_device::live_run_until(attotime limit) break; } case SEARCH_DAM_FAILED: - if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag()); + if (TRACE_FAIL) logerror("SEARCH_DAM failed\n"); m_live_state.state = IDLE; return; @@ -2506,14 +2612,14 @@ void hdc92x4_device::live_run_until(attotime limit) { if (TRACE_LIVE && m_last_live_state != READ_SECTOR_DATA) { - logerror("%s: [%s live] READ_SECTOR_DATA\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] READ_SECTOR_DATA\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } if(read_one_bit(limit)) return; - // Request bus release at the first bit of each byte (floppy; [1], fig 5 and 6) + // Request bus release at the first bit of each byte (floppy; [2], fig 5 and 6) if (m_transfer_enabled) { if ((m_live_state.bit_counter & 15)== 1) @@ -2531,7 +2637,7 @@ void hdc92x4_device::live_run_until(attotime limit) // Repeat until we have collected 16 bits if (m_live_state.bit_counter & 15) break; - if (TRACE_LIVE) logerror("%s: [%s live] Found data value %02X, CRC=%04x\n", tag(),tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.crc); + if (TRACE_LIVE) logerror("[%s live] Found data value %02X, CRC=%04x\n",tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.crc); int slot = (m_live_state.bit_counter >> 4)-1; if (slot < sector_size()) @@ -2552,7 +2658,7 @@ void hdc92x4_device::live_run_until(attotime limit) } else { - if (TRACE_LIVE) logerror("%s: [%s live] Sector read completed\n", tag(),tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Sector read completed\n",tts(m_live_state.time).c_str()); wait_for_realtime(IDLE); } return; @@ -2564,14 +2670,14 @@ void hdc92x4_device::live_run_until(attotime limit) case READ_SECTOR_DATA_CONT: if (TRACE_LIVE && m_last_live_state != READ_SECTOR_DATA_CONT) { - logerror("%s: [%s live] READ_SECTOR_DATA_CONT\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] READ_SECTOR_DATA_CONT\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } // Did the system CPU send the DMA ACK in the meantime? if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0) { - if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer overrun\n", tag()); + if (TRACE_FAIL) logerror("No DMA ACK - buffer overrun\n"); set_bits(m_register_r[INT_STATUS], TC_DATAERR, true); m_live_state.state = IDLE; return; @@ -2610,13 +2716,13 @@ void hdc92x4_device::live_run_until(attotime limit) // 5. Write the CRC bytes if (TRACE_LIVE) - logerror("%s: [%s live] WRITE_DAM_AND_SECTOR\n", tag(), tts(m_live_state.time).c_str()); + logerror("[%s live] WRITE_DAM_AND_SECTOR\n", tts(m_live_state.time).c_str()); skip_on_track(m_gap2_size, WRITE_DAM_SYNC); break; case WRITE_DAM_SYNC: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sync zeros\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sync zeros\n"); // Clear the overrun/underrun flag set_bits(m_register_r[INT_STATUS], ST_OVRUN, false); @@ -2624,12 +2730,12 @@ void hdc92x4_device::live_run_until(attotime limit) break; case WRITE_A1: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write three A1\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write three A1\n"); write_on_track(0x4489, 3, WRITE_DATAMARK); break; case WRITE_DATAMARK: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write data mark and sector contents\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write data mark and sector contents\n"); if (fm_mode()) { // Init the CRC for the DAM and sector @@ -2707,7 +2813,7 @@ void hdc92x4_device::live_run_until(attotime limit) // byte in two iterations to get both if (m_live_state.byte_counter > 0) { - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write CRC\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write CRC\n"); m_live_state.byte_counter--; write_on_track(encode((m_live_state.crc >> 8) & 0xff), 1, WRITE_DATA_CRC); } @@ -2721,7 +2827,7 @@ void hdc92x4_device::live_run_until(attotime limit) case WRITE_DONE: if (m_substate == DATA_TRANSFER_WRITE) { - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sector complete\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sector complete\n"); m_pll.stop_writing(m_floppy, m_live_state.time); m_live_state.state = IDLE; return; @@ -2752,19 +2858,19 @@ void hdc92x4_device::live_run_until(attotime limit) // ================================================== case FORMAT_TRACK: - if (TRACE_LIVE) logerror("%s: FORMAT_TRACK\n", tag()); + if (TRACE_LIVE) logerror("FORMAT_TRACK\n"); m_live_state.state = WRITE_GAP0; m_pll.start_writing(m_live_state.time); break; case WRITE_GAP0: // GAP0 length is in DMA7_0 (negated, 2s comp) - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing GAP0\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing GAP0\n"); write_on_track(encode(fm_mode()? 0xff : 0x4e), m_gap0_size, WRITE_IXAM_SYNC); break; case WRITE_IXAM_SYNC: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing IXAM sync\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing IXAM sync\n"); write_on_track(encode(0x00), m_sync_size, WRITE_IXAM); break; @@ -2772,7 +2878,7 @@ void hdc92x4_device::live_run_until(attotime limit) // FM: FC with clock D7 = 1111 -111 -111 1010 // MFM: C2 = 11000010 // 0101 0010 -010 0100 - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing IXAM\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing IXAM\n"); if (fm_mode()) write_on_track(0xf77a, 1, WRITE_GAP1); else @@ -2787,7 +2893,7 @@ void hdc92x4_device::live_run_until(attotime limit) case WRITE_GAP1: // GAP1 length is in DMA15_8 - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing GAP1\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing GAP1\n"); write_on_track(encode(fm_mode()? 0xff : 0x4e), m_gap1_size, WRITE_IDAM_SYNC); break; @@ -2796,7 +2902,7 @@ void hdc92x4_device::live_run_until(attotime limit) // We assume it reads the bytes and writes them directly on the disk case WRITE_IDAM_SYNC: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing IDAM sync\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing IDAM sync\n"); write_on_track(encode(0x00), m_sync_size, WRITE_IDAM); break; @@ -2804,22 +2910,36 @@ void hdc92x4_device::live_run_until(attotime limit) // Set the over/underrun flag and hope that it will be cleared before we enter the next state (after writing) set_bits(m_register_r[INT_STATUS], ST_OVRUN, true); m_out_dmarq(ASSERT_LINE); + // CRC covers the header starting at the FE (FM) or the first A1 (MFM) + preset_crc(m_live_state, 0); - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing IDAM and header\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing IDAM and header\n"); if (fm_mode()) { - write_on_track(0xf57e, 1, WRITE_HEADER); + write_on_track(0xf57e, 1, WRITE_HEADER); // Write FE (IDAM+Ident) m_live_state.byte_counter = 4; } else { - write_on_track(0x4489, 3, WRITE_HEADER); + write_on_track(0x4489, 3, (m_is_hdc9234)? WRITE_HEADER : WRITE_IDENT); // Write A1A1A1; ident follows in track layout data m_live_state.byte_counter = 5; } - preset_crc(m_live_state, 0); + // note that the actual writing happens after the break + break; + + case WRITE_IDENT: + // Only for 9224, MFM (there is no ident byte in the track layout) + write_on_track(encode(0xfe), 1, WRITE_HEADER); // Write FE + m_live_state.byte_counter--; break; case WRITE_HEADER: + // 9224: FM Floppy = track side sector size + // 9224: MFM Floppy = track side sector size + + // 9234: FM floppy = track side sector size (FE already written) + // 9234: MFM floppy = ident track side sector size + if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0) // No DMA (we do not get access to the ID table); exit m_live_state.state= NO_DMA_ACK; @@ -2849,7 +2969,7 @@ void hdc92x4_device::live_run_until(attotime limit) if (m_live_state.byte_counter > 0) { UINT8 crct = (m_live_state.crc >> 8) & 0xff; - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write CRC byte %02x\n", tag(), crct); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write CRC byte %02x\n", crct); m_live_state.byte_counter--; write_on_track(encode(crct), 1, WRITE_HEADER_CRC); } @@ -2859,13 +2979,13 @@ void hdc92x4_device::live_run_until(attotime limit) break; case WRITE_GAP2: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing GAP2\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing GAP2\n"); write_on_track(encode(fm_mode()? 0xff : 0x4e), m_gap2_size, WRITE_DAM_SYNC); break; case WRITE_GAP3: m_sector_count--; - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Writing GAP3\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Writing GAP3\n"); write_on_track(encode(fm_mode()? 0xff : 0x4e), m_gap3_size, (m_sector_count>0)? WRITE_IDAM_SYNC : WRITE_GAP4); break; @@ -2874,7 +2994,7 @@ void hdc92x4_device::live_run_until(attotime limit) wait_line(INDEX_LINE, ASSERT_LINE, TRACKDONE, true); if (TRACE_WRITE && TRACE_DETAIL && m_last_live_state != WRITE_GAP4) { - logerror("%s: Writing GAP4\n", tag()); + logerror("Writing GAP4\n"); m_last_live_state = WRITE_GAP4; } // Write a single byte; when the index hole shows up, the live run will be aborted @@ -2889,7 +3009,7 @@ void hdc92x4_device::live_run_until(attotime limit) // Quite simple. Read the next ID fields, then the sector contents. // Continue until the next index hole shows up (live_abort). case READ_TRACK: - if (TRACE_LIVE) logerror("%s: READ_TRACK\n", tag()); + if (TRACE_LIVE) logerror("READ_TRACK\n"); m_live_state.state = READ_TRACK_ID; break; @@ -2903,17 +3023,24 @@ void hdc92x4_device::live_run_until(attotime limit) case READ_TRACK_ID_DONE: if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0) { - if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer overrun\n", tag()); + if (TRACE_FAIL) logerror("No DMA ACK - buffer overrun\n"); set_bits(m_register_r[INT_STATUS], TC_DATAERR, true); m_live_state.state = IDLE; return; } - if (TRACE_LIVE) logerror("%s: READ_TRACK1\n", tag()); + if (TRACE_LIVE) logerror("READ_TRACK1\n"); m_out_dip(ASSERT_LINE); // Write the header via DMA - for (int i=0; i < header_length(); i++) + // TODO: Does the FE byte belong to the ID fields? What about the + // CRC field? Specs do not clarify. Check with real controller. + // For now we return the same ID format as used for Format Track + // (with ident expect in FM mode, no CRC) + if (!fm_mode() && m_is_hdc9234) + m_out_dma(0, m_register_r[CURRENT_IDENT], 0xff); + + for (int i=0; i <= header_length()-2; i++) m_out_dma(0, m_register_r[register_number(i)], 0xff); m_out_dip(CLEAR_LINE); @@ -2929,14 +3056,14 @@ void hdc92x4_device::live_run_until(attotime limit) // The pause is implemented by doing dummy reads on the floppy if (read_one_bit(limit)) { - if (TRACE_LIVE) logerror("%s: [%s live] return; limit=%s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str()); + if (TRACE_LIVE) logerror("[%s live] return; limit=%s\n", tts(m_live_state.time).c_str(), tts(limit).c_str()); return; } // Repeat until we have collected 16 bits if ((m_live_state.bit_counter & 15)==0) { - if (TRACE_READ && TRACE_DETAIL) logerror("%s: [%s live] Read byte %02x, repeat = %d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.repeat); + if (TRACE_READ && TRACE_DETAIL) logerror("[%s live] Read byte %02x, repeat = %d\n", tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.repeat); wait_for_realtime(READ_TRACK_NEXT_BYTE); return; } @@ -2982,14 +3109,14 @@ void hdc92x4_device::live_run_until(attotime limit) break; case NO_DMA_ACK: - if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer underrun\n", tag()); + if (TRACE_FAIL) logerror("No DMA ACK - buffer underrun\n"); set_bits(m_register_r[INT_STATUS], TC_DATAERR, true); m_pll.stop_writing(m_floppy, m_live_state.time); m_live_state.state = IDLE; return; default: - logerror("%s: Unknown live state: %02x\n", tag(), m_live_state.state); + logerror("Unknown live state: %02x\n", m_live_state.state); m_last_live_state = m_live_state.state; return; } @@ -3006,13 +3133,13 @@ void hdc92x4_device::live_run_until(attotime limit) THIS IS THE HARDDISK-ONLY LIVE_RUN NB: Although unlikely, hard disks may be recorded in FM format with this controller - [1], section "Drive select", table + [2], section "Drive select", table This is currently unsupported; hard disks are forced to MFM */ void hdc92x4_device::live_run_hd_until(attotime limit) { int slot = 0; - if (TRACE_LIVE) logerror("%s: live_run_hd\n", tag()); + if (TRACE_LIVE) logerror("live_run_hd\n"); if (m_live_state.state == IDLE || m_live_state.next_state != -1) return; @@ -3020,16 +3147,16 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if (TRACE_LIVE) { if (limit == attotime::never) - logerror("%s: [%s live] live_run_hd, live_state=%02x, mode=%s\n", tag(), tts(m_live_state.time).c_str(), m_live_state.state, fm_mode()? "FM":"MFM"); + logerror("[%s live] live_run_hd, live_state=%02x, mode=%s\n", tts(m_live_state.time).c_str(), m_live_state.state, fm_mode()? "FM":"MFM"); else - logerror("%s: [%s live] live_run_hd until %s, live_state=%02x, mode=%s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str(), m_live_state.state, fm_mode()? "FM":"MFM"); + logerror("[%s live] live_run_hd until %s, live_state=%02x, mode=%s\n", tts(m_live_state.time).c_str(), tts(limit).c_str(), m_live_state.state, fm_mode()? "FM":"MFM"); } // We did not specify an upper time bound, so we take the next index pulse if (limit == attotime::never && m_harddisk != nullptr) { limit = m_harddisk->track_end_time(); - if (TRACE_LIVE) logerror("%s: [%s live] live_run_hd new limit %s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str()); + if (TRACE_LIVE) logerror("[%s live] live_run_hd new limit %s\n", tts(m_live_state.time).c_str(), tts(limit).c_str()); } while (true) @@ -3039,7 +3166,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) case SEARCH_IDAM: if (TRACE_LIVE && m_last_live_state != SEARCH_IDAM) { - logerror("%s: [%s live] SEARCH_IDAM [limit %s]\n", tag(),tts(m_live_state.time).c_str(), tts(limit).c_str()); + logerror("[%s live] SEARCH_IDAM [limit %s]\n",tts(m_live_state.time).c_str(), tts(limit).c_str()); m_last_live_state = m_live_state.state; } @@ -3048,14 +3175,14 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if (read_from_mfmhd(limit)) { - if (TRACE_LIVE) logerror("%s: [%s live] SEARCH_IDAM limit reached\n", tag(), tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] SEARCH_IDAM limit reached\n", tts(m_live_state.time).c_str()); return; } if (TRACE_LIVE) - if ((m_live_state.bit_counter & 0x000f)==0) logerror("%s: [%s live] Read %04x\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg); + if ((m_live_state.bit_counter & 0x000f)==0) logerror("[%s live] Read %04x\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg); - // [1] p. 9: The ID field sync mark must be found within 33,792 byte times + // [1,2]: The ID field sync mark must be found within 33,792 byte times if (m_live_state.bit_count_total > 33792*16) { // Desired sector not found within time @@ -3068,7 +3195,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if (found_mark(SEARCH_IDAM)) { - if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(), tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n", tts(m_live_state.time).c_str()); preset_crc(m_live_state, 0xa1); m_live_state.data_separator_phase = false; m_live_state.bit_counter = 0; @@ -3099,9 +3226,9 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if (TRACE_LIVE) { if (m_live_state.data_reg == 0xf8 || m_live_state.data_reg == 0xfb) - logerror("%s: [%s live] Looks like a DAM; continue to next mark\n", tag(), tts(m_live_state.time).c_str()); + logerror("[%s live] Looks like a DAM; continue to next mark\n", tts(m_live_state.time).c_str()); else - logerror("%s: [%s live] Missing ident data after A1, and it was not DAM; format corrupt?\n", tag(), tts(m_live_state.time).c_str()); + logerror("[%s live] Missing ident data after A1, and it was not DAM; format corrupt?\n", tts(m_live_state.time).c_str()); } m_live_state.state = SEARCH_IDAM; } @@ -3116,7 +3243,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) case READ_ID_FIELDS_INTO_REGS: if (TRACE_LIVE && m_last_live_state != READ_ID_FIELDS_INTO_REGS) { - logerror("%s: [%s live] READ_ID_FIELDS_INTO_REGS\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] READ_ID_FIELDS_INTO_REGS\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } @@ -3125,10 +3252,10 @@ void hdc92x4_device::live_run_hd_until(attotime limit) // Repeat until we have collected 16 bits if (m_live_state.bit_counter & 15) break; - if (TRACE_LIVE) logerror("%s: slot %d = %02x, crc=%04x\n", tag(), slot, m_live_state.data_reg, m_live_state.crc); + if (TRACE_LIVE) logerror("slot %d = %02x, crc=%04x\n", slot, m_live_state.data_reg, m_live_state.crc); m_register_r[register_number(slot++)] = m_live_state.data_reg; - if(slot > 5) + if (slot > header_length()) { // We successfully read the ID fields; let's wait for the machine time to catch up. if (reading_track()) @@ -3144,7 +3271,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) case SEARCH_DAM: if (TRACE_LIVE && m_last_live_state != SEARCH_DAM) { - logerror("%s: [%s live] SEARCH_DAM\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] SEARCH_DAM\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } set_bits(m_register_r[CHIP_STATUS], CS_DELDATA, false); @@ -3152,18 +3279,18 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if (read_from_mfmhd(limit)) return; if (TRACE_LIVE) - if ((m_live_state.bit_counter & 15)==0) logerror("%s: [%s live] Read %04x\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg); + if ((m_live_state.bit_counter & 15)==0) logerror("[%s live] Read %04x\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg); if (m_live_state.bit_counter > 30*16) { - if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag()); + if (TRACE_FAIL) logerror("SEARCH_DAM failed\n"); wait_for_realtime(SEARCH_DAM_FAILED); return; } if (found_mark(SEARCH_DAM)) { - if (TRACE_LIVE) logerror("%s: [%s live] Found an A1 mark\n", tag(),tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Found an A1 mark\n",tts(m_live_state.time).c_str()); preset_crc(m_live_state, 0xa1); m_live_state.data_separator_phase = false; m_live_state.bit_counter = 0; @@ -3178,14 +3305,14 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if ((m_live_state.data_reg & 0xff) == 0xf8) { - if (TRACE_LIVE) logerror("%s: [%s live] Found deleted data mark F8 after DAM sync\n", tag(), tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Found deleted data mark F8 after DAM sync\n", tts(m_live_state.time).c_str()); set_bits(m_register_r[CHIP_STATUS], CS_DELDATA, true); } else { if ((m_live_state.data_reg & 0xff) != 0xfb) { - if (TRACE_FAIL) logerror("%s: [%s live] Missing FB/F8 data mark after DAM sync; found %04x\n", tag(), tts(m_live_state.time).c_str(), m_live_state.shift_reg); + if (TRACE_FAIL) logerror("[%s live] Missing FB/F8 data mark after DAM sync; found %04x\n", tts(m_live_state.time).c_str(), m_live_state.shift_reg); wait_for_realtime(SEARCH_DAM_FAILED); return; } @@ -3195,14 +3322,14 @@ void hdc92x4_device::live_run_hd_until(attotime limit) break; case SEARCH_DAM_FAILED: - if (TRACE_FAIL) logerror("%s: SEARCH_DAM failed\n", tag()); + if (TRACE_FAIL) logerror("SEARCH_DAM failed\n"); m_live_state.state = IDLE; return; case READ_SECTOR_DATA: if (TRACE_LIVE && m_last_live_state != READ_SECTOR_DATA) { - logerror("%s: [%s live] READ_SECTOR_DATA\n", tag(),tts(m_live_state.time).c_str()); + logerror("[%s live] READ_SECTOR_DATA\n",tts(m_live_state.time).c_str()); m_last_live_state = m_live_state.state; } @@ -3222,7 +3349,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if (m_live_state.bit_counter & 15) break; slot = (m_live_state.bit_counter >> 4)-1; - if (TRACE_LIVE) logerror("%s: [%s live] Found data value [%d/%d] = %02X, CRC=%04x\n", tag(),tts(m_live_state.time).c_str(), slot, sector_size(), m_live_state.data_reg, m_live_state.crc); + if (TRACE_LIVE) logerror("[%s live] Found data value [%d/%d] = %02X, CRC=%04x\n",tts(m_live_state.time).c_str(), slot, sector_size(), m_live_state.data_reg, m_live_state.crc); if (slot < sector_size()) { @@ -3250,7 +3377,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) } else { - if (TRACE_LIVE) logerror("%s: [%s live] Sector read completed\n", tag(),tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Sector read completed\n",tts(m_live_state.time).c_str()); wait_for_realtime(IDLE); } return; @@ -3263,7 +3390,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) // Did the system CPU send the DMA ACK in the meantime? if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0) { - if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer overrun\n", tag()); + if (TRACE_FAIL) logerror("No DMA ACK - buffer overrun\n"); set_bits(m_register_r[INT_STATUS], TC_DATAERR, true); m_live_state.state = IDLE; return; @@ -3277,7 +3404,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) m_out_dip(ASSERT_LINE); m_out_dma(0, m_register_r[DATA], 0xff); - if (TRACE_LIVE) logerror("%s: [%s live] Byte %02x sent via DMA\n", tag(),tts(m_live_state.time).c_str(), m_register_r[DATA] & 0xff); + if (TRACE_LIVE) logerror("[%s live] Byte %02x sent via DMA\n",tts(m_live_state.time).c_str(), m_register_r[DATA] & 0xff); } m_live_state.state = READ_SECTOR_DATA; break; @@ -3288,14 +3415,14 @@ void hdc92x4_device::live_run_hd_until(attotime limit) // The pause is implemented by doing dummy reads on the hard disk if (read_from_mfmhd(limit)) { - if (TRACE_LIVE) logerror("%s: [%s live] return; limit=%s\n", tag(), tts(m_live_state.time).c_str(), tts(limit).c_str()); + if (TRACE_LIVE) logerror("[%s live] return; limit=%s\n", tts(m_live_state.time).c_str(), tts(limit).c_str()); return; } // Repeat until we have collected 16 bits if ((m_live_state.bit_counter & 15)==0) { - if (TRACE_READ && TRACE_DETAIL) logerror("%s: [%s live] Read byte %02x, repeat = %d\n", tag(), tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.repeat); + if (TRACE_READ && TRACE_DETAIL) logerror("[%s live] Read byte %02x, repeat = %d\n", tts(m_live_state.time).c_str(), m_live_state.data_reg, m_live_state.repeat); wait_for_realtime(READ_TRACK_NEXT_BYTE); return; } @@ -3315,7 +3442,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) case WRITE_TRACK_BYTE: if (write_to_mfmhd(limit)) { - if (TRACE_LIVE) logerror("%s: [%s live] write limit reached\n", tag(), tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] write limit reached\n", tts(m_live_state.time).c_str()); return; } @@ -3346,13 +3473,13 @@ void hdc92x4_device::live_run_hd_until(attotime limit) // ======= HD sector write ===================================== case WRITE_DAM_AND_SECTOR: - if (TRACE_LIVE) logerror("%s: [%s live] Skipping GAP2\n", tag(), tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s live] Skipping GAP2\n", tts(m_live_state.time).c_str()); skip_on_track(m_gap2_size, WRITE_DAM_SYNC); break; case WRITE_DAM_SYNC: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sync zeros\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sync zeros\n"); // Clear the overrun/underrun flag set_bits(m_register_r[INT_STATUS], ST_OVRUN, false); @@ -3360,12 +3487,12 @@ void hdc92x4_device::live_run_hd_until(attotime limit) break; case WRITE_A1: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write one A1\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write one A1\n"); write_on_track(encode_a1_hd(), 1, WRITE_DATAMARK); break; case WRITE_DATAMARK: - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write data mark\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write data mark\n"); // Init the CRC for the ident byte and sector preset_crc(m_live_state, 0xa1); // only one A1 @@ -3394,7 +3521,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) } else { - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sector byte, %d to go\n", tag(), m_live_state.byte_counter); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sector byte, %d to go\n", m_live_state.byte_counter); // This is hard disk, so set DIP only at the beginning if (m_live_state.byte_counter == sector_size()) @@ -3433,7 +3560,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) case WRITE_DATA_CRC: if (m_live_state.byte_counter > 0) { - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write CRC\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write CRC\n"); m_live_state.byte_counter--; write_on_track(encode_hd((m_live_state.crc >> 8) & 0xff), 1, WRITE_DATA_CRC); } @@ -3446,7 +3573,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) case WRITE_DONE: if (m_substate == DATA_TRANSFER_WRITE) { - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: Write sector complete\n", tag()); + if (TRACE_WRITE && TRACE_DETAIL) logerror("Write sector complete\n"); m_live_state.state = IDLE; return; } @@ -3464,7 +3591,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) // Read the next ID fields, then the sector contents. // Continue until the next index hole shows up (live_abort). case READ_TRACK: - if (TRACE_LIVE) logerror("%s: READ_TRACK\n", tag()); + if (TRACE_LIVE) logerror("READ_TRACK\n"); m_live_state.state = READ_TRACK_ID; break; @@ -3479,16 +3606,23 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0) { // We need an ACK right now, or the header bytes will be lost - if (TRACE_FAIL) logerror("%s: No DMA ACK - buffer overrun\n", tag()); + if (TRACE_FAIL) logerror("No DMA ACK - buffer overrun\n"); set_bits(m_register_r[INT_STATUS], TC_DATAERR, true); m_live_state.state = IDLE; return; } - if (TRACE_LIVE) logerror("%s: READ_TRACK_ID_DONE\n", tag()); + if (TRACE_LIVE) logerror("READ_TRACK_ID_DONE\n"); m_out_dip(ASSERT_LINE); // Write the header via DMA - for (int i=0; i < header_length(); i++) + // TODO: Does the FE byte belong to the ID fields? What about the + // CRC field? Specs do not clarify. Check with real controller. + // For now we return the same ID format as used for Format Track + // (with ident expect in FM mode, no CRC) + if (m_is_hdc9234) + m_out_dma(0, m_register_r[CURRENT_IDENT], 0xff); + + for (int i=0; i <= header_length()-2; i++) m_out_dma(0, m_register_r[register_number(i)], 0xff); // Continue with reading the sector data @@ -3511,18 +3645,18 @@ void hdc92x4_device::live_run_hd_until(attotime limit) // Write GAP4 until the next pulse // ================================================== case FORMAT_TRACK: - if (TRACE_LIVE) logerror("%s: FORMAT_TRACK\n", tag()); + if (TRACE_LIVE) logerror("FORMAT_TRACK\n"); m_live_state.state = WRITE_GAP1; break; case WRITE_GAP1: // GAP1 length is in DMA15_8 - if (TRACE_GAPS) logerror("%s: Writing GAP1; size=%d\n", tag(), m_gap1_size); + if (TRACE_GAPS) logerror("Writing GAP1; size=%d\n", m_gap1_size); write_on_track(encode_hd(0x4e), m_gap1_size, WRITE_IDAM_SYNC); break; case WRITE_IDAM_SYNC: - if (TRACE_GAPS) logerror("%s: Writing IDAM sync, size=%d\n", tag(), m_sync_size); + if (TRACE_GAPS) logerror("Writing IDAM sync, size=%d\n", m_sync_size); write_on_track(encode_hd(0x00), m_sync_size, WRITE_IDAM); break; @@ -3530,13 +3664,29 @@ void hdc92x4_device::live_run_hd_until(attotime limit) // Set the over/underrun flag and hope that it will be cleared before we enter the next state (after writing) set_bits(m_register_r[INT_STATUS], ST_OVRUN, true); m_out_dmarq(ASSERT_LINE); - if (TRACE_HEADER) logerror("%s: Writing IDAM and header: ", tag()); - write_on_track(encode_a1_hd(), 1, WRITE_HEADER); - m_live_state.byte_counter = 5; // TODO: Check this for AT mode preset_crc(m_live_state, 0); + if (TRACE_HEADER) logerror("Writing IDAM and header\n"); + write_on_track(encode_a1_hd(), 1, (m_is_hdc9234)? WRITE_HEADER : WRITE_IDENT); + // AT mode does not use a size field; the sector size must + // be specified by call parameters + m_live_state.byte_counter = 5; + if (m_selected_drive_type==TYPE_AT) m_live_state.byte_counter--; + break; + + case WRITE_IDENT: + // 9224 does not allow for a user-defined ident field + write_on_track(encode_hd(0xfe), 1, WRITE_HEADER); + // ST type does not use a size field + if (m_selected_drive_type==TYPE_ST) m_live_state.byte_counter--; break; case WRITE_HEADER: + // 9224: Generic HD = track side sector size + // 9224: ST-506 HD = track side sector + + // 9234: Generic HD = ident track side sector size + // 9234: PC-AT HD = ident track side sector + if ((m_register_r[INT_STATUS] & ST_OVRUN)!=0) // No DMA (we do not get access to the ID table); exit m_live_state.state= NO_DMA_ACK; @@ -3545,7 +3695,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) m_out_dip(ASSERT_LINE); m_live_state.byte_counter--; UINT8 headbyte = m_in_dma(0, 0xff); - if (TRACE_HEADER) logerror("%02x ", headbyte); + if (TRACE_HEADER) logerror("%02x\n", headbyte); write_on_track(encode_hd(headbyte), 1, (m_live_state.byte_counter>0)? WRITE_HEADER : WRITE_HEADER_CRC); if (m_live_state.byte_counter==0) @@ -3562,7 +3712,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) if (m_live_state.byte_counter > 0) { UINT8 crct = (m_live_state.crc >> 8) & 0xff; - if (TRACE_HEADER) logerror("%02x ", crct); + if (TRACE_HEADER) logerror("%02x\n", crct); m_live_state.byte_counter--; write_on_track(encode_hd(crct), 1, WRITE_HEADER_CRC); } @@ -3574,13 +3724,13 @@ void hdc92x4_device::live_run_hd_until(attotime limit) break; case WRITE_GAP2: - if (TRACE_GAPS) logerror("%s: Writing GAP2, size=%d\n", tag(), m_gap2_size); + if (TRACE_GAPS) logerror("Writing GAP2, size=%d\n", m_gap2_size); write_on_track(encode_hd(0x4e), m_gap2_size, WRITE_DAM_SYNC); break; case WRITE_GAP3: m_sector_count--; - if (TRACE_GAPS) logerror("%s: Writing GAP3, size=%d\n", tag(), m_gap3_size); + if (TRACE_GAPS) logerror("Writing GAP3, size=%d\n", m_gap3_size); write_on_track(encode_hd(0x4e), m_gap3_size, (m_sector_count>0)? WRITE_IDAM_SYNC : WRITE_GAP4); break; @@ -3589,7 +3739,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) wait_line(INDEX_LINE, ASSERT_LINE, TRACKDONE, true); if (TRACE_GAPS && m_last_live_state != WRITE_GAP4) { - logerror("%s: Writing GAP4\n", tag()); + logerror("Writing GAP4\n"); m_last_live_state = WRITE_GAP4; } // Write a single byte; when the index hole shows up, the live run will be aborted @@ -3598,7 +3748,7 @@ void hdc92x4_device::live_run_hd_until(attotime limit) // -------------------------------------------------------- default: - if (TRACE_LIVE) logerror("%s: Unknown state: %02x\n", tag(), m_live_state.state); + if (TRACE_LIVE) logerror("Unknown state: %02x\n", m_live_state.state); break; } } @@ -3619,7 +3769,7 @@ void hdc92x4_device::live_sync() if(m_live_state.time > machine().time()) { // If so, we must roll back to the last checkpoint - if (TRACE_SYNC) logerror("%s: [%s] Rolling back and replaying [%s live]\n", tag(), ttsn().c_str(), tts(m_live_state.time).c_str()); + if (TRACE_SYNC) logerror("[%s] Rolling back and replaying [%s live]\n", ttsn().c_str(), tts(m_live_state.time).c_str()); rollback(); // and replay until we reach the machine time @@ -3639,7 +3789,7 @@ void hdc92x4_device::live_sync() { // We are behind machine time, so we will never get back to that // time, thus we can commit that position - if (TRACE_SYNC) logerror("%s: [%s] Committing [%s live]\n", tag(), ttsn().c_str(), tts(m_live_state.time).c_str()); + if (TRACE_SYNC) logerror("[%s] Committing [%s live]\n", ttsn().c_str(), tts(m_live_state.time).c_str()); // Commit bits from pll buffer to disk until live time (if there is something to write) if (using_floppy()) @@ -3666,7 +3816,7 @@ void hdc92x4_device::live_abort() { if (!m_live_state.time.is_never() && m_live_state.time > machine().time()) { - if (TRACE_LIVE) logerror("%s: [%s] Abort; rolling back and replaying [%s live]\n", tag(), ttsn().c_str(), tts(m_live_state.time).c_str()); + if (TRACE_LIVE) logerror("[%s] Abort; rolling back and replaying [%s live]\n", ttsn().c_str(), tts(m_live_state.time).c_str()); rollback(); live_run_until(machine().time()); } @@ -3733,7 +3883,7 @@ void hdc92x4_device::wait_for_realtime(int state) { m_live_state.next_state = state; m_timer->adjust(m_live_state.time - machine().time()); - if (TRACE_LIVE) logerror("%s: [%s live] Waiting for real time [%s] to catch up; next state = %02x\n", tag(), tts(m_live_state.time).c_str(), ttsn().c_str(), state); + if (TRACE_LIVE) logerror("[%s live] Waiting for real time [%s] to catch up; next state = %02x\n", tts(m_live_state.time).c_str(), ttsn().c_str(), state); } /* @@ -3858,7 +4008,7 @@ void hdc92x4_device::encode_raw(UINT16 raw) m_live_state.bit_counter = 16; m_live_state.shift_reg = m_live_state.shift_reg_save = raw; m_live_state.last_data_bit = raw & 1; - if (TRACE_WRITE && TRACE_DETAIL) logerror("%s: [%s live] Write %02x (%04x)\n", tag(), tts(m_live_state.time).c_str(), get_data_from_encoding(raw), raw); + if (TRACE_WRITE && TRACE_DETAIL) logerror("[%s live] Write %02x (%04x)\n", tts(m_live_state.time).c_str(), get_data_from_encoding(raw), raw); checkpoint(); } @@ -4115,7 +4265,7 @@ READ8_MEMBER( hdc92x4_device::read ) { // Data register reply = m_register_r[m_register_pointer]; - if (TRACE_READREG) logerror("%s: Read register[%d] -> %02x\n", tag(), m_register_pointer, reply); + if (TRACE_READREG) logerror("Read register[%d] -> %02x\n", m_register_pointer, reply); // Autoincrement until DATA is reached. if (m_register_pointer < DATA) m_register_pointer++; @@ -4126,8 +4276,8 @@ READ8_MEMBER( hdc92x4_device::read ) reply = m_register_r[INT_STATUS]; // "The interrupt pin is reset to its inactive state - // when the UDC interrupt status register is read." [1] (p.3) - if (TRACE_READREG) logerror("%s: Read interrupt status register -> %02x\n", tag(), reply); + // when the UDC interrupt status register is read." [1,2] + if (TRACE_READREG) logerror("Read interrupt status register -> %02x\n", reply); set_interrupt(CLEAR_LINE); // Clear the bits due to interrupt status register read. @@ -4147,8 +4297,8 @@ WRITE8_MEMBER( hdc92x4_device::write ) { if ((offset & 1) == 0) { - if (TRACE_COMMAND) logerror("%s: New register write access %02x\n", tag(), data & 0xff); - if (m_executing) logerror("%s: Error - previous command %02x not completed; register access ignored\n", tag(), current_command()); + if (TRACE_COMMAND) logerror("New register write access %02x\n", data & 0xff); + if (m_executing) logerror("Error - previous command %02x not completed; register access ignored\n", current_command()); else { m_regvalue = data & 0xff; @@ -4157,8 +4307,8 @@ WRITE8_MEMBER( hdc92x4_device::write ) } else { - if (TRACE_COMMAND) logerror("%s: New incoming command %02x\n", tag(), data); - if (m_executing) logerror("%s: Error - previous command %02x not completed; new command %02x ignored\n", tag(), current_command(), data); + if (TRACE_COMMAND) logerror("New incoming command %02x\n", data); + if (m_executing) logerror("Error - previous command %02x not completed; new command %02x ignored\n", current_command(), data); else { m_register_w[COMMAND] = data; @@ -4179,9 +4329,9 @@ void hdc92x4_device::process_command() if (TRACE_SETREG) { if (m_register_pointer == INT_COMM_TERM) - logerror("%s: Setting interrupt trigger DONE=%d READY=%d\n", tag(), (m_regvalue & TC_INTDONE)? 1:0, (m_regvalue & TC_INTRDCH)? 1:0); + logerror("Setting interrupt trigger DONE=%d READY=%d\n", (m_regvalue & TC_INTDONE)? 1:0, (m_regvalue & TC_INTRDCH)? 1:0); else - logerror("%s: register[%d] <- %02x\n", tag(), m_register_pointer, m_regvalue); + logerror("register[%d] <- %02x\n", m_register_pointer, m_regvalue); } m_register_w[m_register_pointer] = m_regvalue; @@ -4190,7 +4340,7 @@ void hdc92x4_device::process_command() if (m_register_pointer < DESIRED_HEAD) m_register_r[m_register_pointer] = m_regvalue; // Note for the PC-AT mode: The DATA register contains two bits (5,4) - // that are defined as "Actual sector size" ([1] p. 7). The + // that are defined as "Actual sector size" ([2] p. 7). The // specification does not say anything about the meaning of these // bits. The desired sector size is already specified by bits 6 and 5 // of the DESIRED_HEAD register, so we ignore these bits for now. @@ -4200,7 +4350,10 @@ void hdc92x4_device::process_command() } else { - // Reset DONE and BAD_SECTOR [1], p.7 + // Reset DONE and BAD_SECTOR [2], p.7 + // BAD_SECTOR is set by writing the sector header field HEAD with bit + // 7 set to one. When reading the header, the flag, together with all + // other bits, is copied into the CURRENT_HEAD register. set_bits(m_register_r[INT_STATUS], ST_DONE | ST_BADSECT, false); // Reset interrupt line (not explicitly mentioned in spec, but seems reasonable @@ -4230,7 +4383,7 @@ void hdc92x4_device::process_command() } if (!found) { - logerror("%s: Command %02x not defined\n", tag(), m_register_w[COMMAND]); + logerror("Command %02x not defined\n", m_register_w[COMMAND]); } } auxbus_out(); @@ -4238,7 +4391,7 @@ void hdc92x4_device::process_command() void hdc92x4_device::reenter_command_processing() { - if (TRACE_DELAY) logerror("%s: Re-enter command processing; live state = %02x\n", tag(), m_live_state.state); + if (TRACE_DELAY) logerror("Re-enter command processing; live state = %02x\n", m_live_state.state); // Do we have a live run on the track? if (m_live_state.state != IDLE) { @@ -4250,7 +4403,7 @@ void hdc92x4_device::reenter_command_processing() // We're here when there is no live_run anymore // Where were we last time? // Take care not to restart commands because of the index callback - if (TRACE_DELAY) logerror("%s: Continue with substate %02x\n", tag(), m_substate); + if (TRACE_DELAY) logerror("Continue with substate %02x\n", m_substate); if (m_executing && m_substate != UNDEF) (this->*m_command)(); auxbus_out(); } @@ -4269,15 +4422,15 @@ void hdc92x4_device::set_command_done(int flags) { set_bits(m_register_r[INT_STATUS], ST_TERMCOD, false); // clear the previously set flags m_register_r[INT_STATUS] |= flags; - if (TRACE_DONE) logerror("%s: command %02x done, flags=%02x\n", tag(), current_command(), flags); + if (TRACE_DONE) logerror("command %02x done, flags=%02x\n", current_command(), flags); } else { - if (TRACE_DONE) logerror("%s: command %02x done\n", tag(), current_command()); + if (TRACE_DONE) logerror("command %02x done\n", current_command()); } - // [1], p. 6 - if (TRACE_INT) logerror("%s: Raise interrupt DONE\n", tag()); + // [1]; [2] p. 6 + if (TRACE_INT) logerror("Raise interrupt DONE\n"); set_interrupt(ASSERT_LINE); m_substate = UNDEF; @@ -4302,14 +4455,14 @@ void hdc92x4_device::set_command_done() The specification is not really precise on the times when this bus is used, but at least we can rely on this information: - - Whenever there is no output of data, the bus is sampled. ([1], p.8, + - Whenever there is no output of data, the bus is sampled. ([2], p.8, Drive status register). Data is sampled at the rising edge of STB*. As the minimum STB* pulse is 800ns with min 100ns S0/S1 settling time and min 100ns hold time we can say that the bus is polled at a maximum rate of 1 MHz. - Data for the DMA address is output only when the address is initially - set; also when the address must be set again on error ([1], p.5, + set; also when the address must be set again on error ([2], p.5, DMA registers). The external memory system has to take care of the addressing for subsequent bytes. The address will be increased by the length of a sector during multiple sector read/write operations. @@ -4344,7 +4497,7 @@ void hdc92x4_device::auxbus_in(UINT8 data) if (!m_initialized) return; - if (TRACE_AUXBUS) logerror("%s: Got value %02x via auxbus: ecc=%d index=%d seek_comp=%d tr00=%d user=%d writeprot=%d ready=%d fault=%d\n", + if (TRACE_AUXBUS) logerror("Got value %02x via auxbus: ecc=%d index=%d seek_comp=%d tr00=%d user=%d writeprot=%d ready=%d fault=%d\n", tag(), data, (data&HDC_DS_ECCERR)? 1:0, (data&HDC_DS_INDEX)? 1:0, (data&HDC_DS_SKCOM)? 1:0, (data&HDC_DS_TRK00)? 1:0, @@ -4379,20 +4532,20 @@ bool hdc92x4_device::waiting_for_other_line(int line) void hdc92x4_device::index_handler() { int level = index_hole()? ASSERT_LINE : CLEAR_LINE; - if (TRACE_LINES) logerror("%s: [%s] Index handler; level=%d\n", tag(), ttsn().c_str(), level); + if (TRACE_LINES) logerror("[%s] Index handler; level=%d\n", ttsn().c_str(), level); // Synchronize our position on the track live_sync(); if (level==ASSERT_LINE) { - if (TRACE_INDEX) logerror("%s: Index pulse\n", tag()); + if (TRACE_INDEX) logerror("Index pulse\n"); if (m_wait_for_index) m_stop_after_index = true; } if (waiting_for_line(INDEX_LINE, level)) { - if (TRACE_LINES) logerror("%s: [%s] Index pulse level=%d triggers event\n", tag(), ttsn().c_str(), level); + if (TRACE_LINES) logerror("[%s] Index pulse level=%d triggers event\n", ttsn().c_str(), level); m_substate = m_state_after_line; m_state_after_line = UNDEF; if (m_stopwrite) @@ -4414,7 +4567,7 @@ void hdc92x4_device::index_handler() void hdc92x4_device::ready_handler() { int level = drive_ready()? ASSERT_LINE : CLEAR_LINE; - if (TRACE_LINES) logerror("%s: [%s] Ready handler; level=%d\n", tag(), ttsn().c_str(), level); + if (TRACE_LINES) logerror("[%s] Ready handler; level=%d\n", ttsn().c_str(), level); // Set the interrupt status flag set_bits(m_register_r[INT_STATUS], ST_RDYCHNG, true); @@ -4425,7 +4578,7 @@ void hdc92x4_device::ready_handler() // Raise an interrupt if desired if (m_register_w[INT_COMM_TERM] & TC_INTRDCH) { - if (TRACE_INT) logerror("%s: Raise interrupt READY change\n", tag()); + if (TRACE_INT) logerror("Raise interrupt READY change\n"); set_interrupt(ASSERT_LINE); } @@ -4441,7 +4594,7 @@ void hdc92x4_device::ready_handler() void hdc92x4_device::seek_complete_handler() { int level = seek_complete()? ASSERT_LINE : CLEAR_LINE; - if (TRACE_LINES) logerror("%s: [%s] Seek complete handler; level=%d\n", tag(), ttsn().c_str(), level); + if (TRACE_LINES) logerror("[%s] Seek complete handler; level=%d\n", ttsn().c_str(), level); // Synchronize our position on the track live_sync(); @@ -4488,7 +4641,7 @@ void hdc92x4_device::auxbus_out() m_output2 = (m_output2 & 0xb0) | desired_head(); if (m_reduced_write_current) m_output2 |= OUT2_REDWRT; - if (TRACE_AUXBUS) logerror("%s: [%s] Setting OUTPUT1=%02x, OUTPUT2=%02x\n", tag(), ttsn().c_str(), m_output1, m_output2); + if (TRACE_AUXBUS) logerror("[%s] Setting OUTPUT1=%02x, OUTPUT2=%02x\n", ttsn().c_str(), m_output1, m_output2); if (m_output1 != m_output1_old || m_output2 != m_output2_old) { @@ -4502,7 +4655,7 @@ void hdc92x4_device::auxbus_out() void hdc92x4_device::dma_address_out(UINT8 addrub, UINT8 addrhb, UINT8 addrlb) { - if (TRACE_DMA) logerror("%s: Setting DMA address %06x\n", tag(), (addrub<<16 | addrhb<<8 | addrlb)&0xffffff); + if (TRACE_DMA) logerror("Setting DMA address %06x\n", (addrub<<16 | addrhb<<8 | addrlb)&0xffffff); m_out_auxbus((offs_t)HDC_OUTPUT_DMA_ADDR, addrub); m_out_auxbus((offs_t)HDC_OUTPUT_DMA_ADDR, addrhb); m_out_auxbus((offs_t)HDC_OUTPUT_DMA_ADDR, addrlb); @@ -4542,7 +4695,7 @@ WRITE_LINE_MEMBER( hdc92x4_device::dmaack ) { if (state==ASSERT_LINE) { - if (TRACE_DMA) logerror("%s: [%s] DMA acknowledged\n", tag(), ttsn().c_str()); + if (TRACE_DMA) logerror("[%s] DMA acknowledged\n", ttsn().c_str()); set_bits(m_register_r[INT_STATUS], ST_OVRUN, false); } } @@ -4563,7 +4716,7 @@ void hdc92x4_device::connect_hard_drive(mfm_harddisk_device* harddisk) { m_harddisk = harddisk; m_hd_encoding = m_harddisk->get_encoding(); - if (TRACE_SELECT && TRACE_DETAIL) logerror("%s: HD encoding = %d\n", tag(), m_hd_encoding); + if (TRACE_SELECT && TRACE_DETAIL) logerror("HD encoding = %d\n", m_hd_encoding); } /* @@ -4603,7 +4756,7 @@ WRITE_LINE_MEMBER( hdc92x4_device::reset ) { if (state == ASSERT_LINE) { - if (TRACE_LINES) logerror("%s: Reset via RST line\n", tag()); + if (TRACE_LINES) logerror("Reset via RST line\n"); device_reset(); } } @@ -4639,6 +4792,7 @@ void hdc92x4_device::device_reset() m_live_state.state = IDLE; m_live_state.time = attotime::never; m_logical = true; + m_bypass = false; m_multi_sector = false; m_output1 = 0; m_output2 = 0x80; diff --git a/src/devices/machine/hdc92x4.h b/src/devices/machine/hdc92x4.h index fc862101919..ab7011c5ec7 100644 --- a/src/devices/machine/hdc92x4.h +++ b/src/devices/machine/hdc92x4.h @@ -381,6 +381,9 @@ protected: // Read/write logical or physical? bool m_logical; + // Shall bad sectors be bypassed or shall the command be terminated in error? + bool m_bypass; + // Signals to abort writing bool m_stopwrite; @@ -445,7 +448,7 @@ protected: int sector_size(); // Returns the sector header length - int header_length(); + virtual int header_length() =0; // Returns the index of the register for the header field int register_number(int slot); @@ -453,6 +456,9 @@ protected: // Is the currently selected drive a floppy drive? bool using_floppy(); + // Was the Bad Sector flag set for the recently read sector header? + bool bad_sector(); + // Common subprograms READ ID, VERIFY, and DATA TRANSFER void read_id(int& cont, bool implied_seek, bool wait_seek_complete); void verify(int& cont); @@ -488,6 +494,7 @@ public: protected: int step_time() override; + int header_length() override; }; class hdc9234_device : public hdc92x4_device @@ -497,6 +504,7 @@ public: protected: int step_time() override; + int header_length() override; }; #endif diff --git a/src/devices/machine/mc6852.cpp b/src/devices/machine/mc6852.cpp index b0cf1ff9ca9..e8ed3241b92 100644 --- a/src/devices/machine/mc6852.cpp +++ b/src/devices/machine/mc6852.cpp @@ -39,51 +39,6 @@ const device_type MC6852 = &device_creator; #define LOG 0 -#define S_RDA 0x01 -#define S_TDRA 0x02 -#define S_DCD 0x04 -#define S_CTS 0x08 -#define S_TUF 0x10 -#define S_RX_OVRN 0x20 -#define S_PE 0x40 -#define S_IRQ 0x80 - - -#define C1_RX_RS 0x01 -#define C1_TX_RS 0x02 -#define C1_STRIP_SYNC 0x04 -#define C1_CLEAR_SYNC 0x08 -#define C1_TIE 0x10 -#define C1_RIE 0x20 -#define C1_AC_MASK 0xc0 -#define C1_AC_C2 0x00 -#define C1_AC_C3 0x40 -#define C1_AC_SYNC 0x80 -#define C1_AC_TX_FIFO 0xc0 - - -#define C2_PC1 0x01 -#define C2_PC2 0x02 -#define C2_1_2_BYTE 0x04 -#define C2_WS_MASK 0x38 -#define C2_WS_6_E 0x00 -#define C2_WS_6_O 0x08 -#define C2_WS_7 0x10 -#define C2_WS_8 0x18 -#define C2_WS_7_E 0x20 -#define C2_WS_7_O 0x28 -#define C2_WS_8_E 0x30 -#define C2_WS_8_O 0x38 -#define C2_TX_SYNC 0x40 -#define C2_EIE 0x80 - - -#define C3_E_I_SYNC 0x01 -#define C3_1_2_SYNC 0x02 -#define C3_CLEAR_CTS 0x04 -#define C3_CTUF 0x08 - - //************************************************************************** // LIVE DEVICE @@ -122,6 +77,9 @@ void mc6852_device::device_start() m_write_sm_dtr.resolve_safe(); m_write_tuf.resolve_safe(); + set_rcv_rate(m_rx_clock); + set_tra_rate(m_tx_clock); + // register for state saving save_item(NAME(m_status)); save_item(NAME(m_cr)); @@ -146,17 +104,16 @@ void mc6852_device::device_reset() m_rx_fifo = std::queue(); m_tx_fifo = std::queue(); - transmit_register_reset(); receive_register_reset(); - - set_rcv_rate(m_rx_clock); - set_tra_rate(m_tx_clock); - - /* set receiver shift register to all 1's */ - m_rsr = 0xff; + transmit_register_reset(); /* reset and inhibit receiver/transmitter sections */ m_cr[0] |= (C1_TX_RS | C1_RX_RS); + m_cr[1] &= ~(C2_EIE | C2_PC2 | C2_PC1); + m_status &= ~S_TDRA; + + /* set receiver shift register to all 1's */ + m_rsr = 0xff; } @@ -235,18 +192,40 @@ WRITE8_MEMBER( mc6852_device::write ) { switch (m_cr[0] & C1_AC_MASK) { - case C1_AC_C2: + case C1_AC_C2: { /* control 2 */ + if (LOG) logerror("MC6852 '%s' Control 2 %02x\n", tag(), data); m_cr[1] = data; + + int data_bit_count = 0; + parity_t parity = PARITY_NONE; + stop_bits_t stop_bits = STOP_BITS_1; + + switch (data & C2_WS_MASK) + { + case 0: data_bit_count = 6; parity = PARITY_EVEN; break; + case 1: data_bit_count = 6; parity = PARITY_ODD; break; + case 2: data_bit_count = 7; parity = PARITY_NONE; break; + case 3: data_bit_count = 8; parity = PARITY_NONE; break; + case 4: data_bit_count = 7; parity = PARITY_EVEN; break; + case 5: data_bit_count = 7; parity = PARITY_ODD; break; + case 6: data_bit_count = 8; parity = PARITY_EVEN; break; + case 7: data_bit_count = 8; parity = PARITY_ODD; break; + } + + set_data_frame(1, data_bit_count, parity, stop_bits); + } break; case C1_AC_C3: /* control 3 */ + if (LOG) logerror("MC6852 '%s' Control 3 %02x\n", tag(), data); m_cr[2] = data; break; case C1_AC_SYNC: /* sync code */ + if (LOG) logerror("MC6852 '%s' Sync Code %02x\n", tag(), data); m_scr = data; break; @@ -254,6 +233,7 @@ WRITE8_MEMBER( mc6852_device::write ) /* transmit data FIFO */ if (m_tx_fifo.size() < 3) { + if (LOG) logerror("MC6852 '%s' Transmit FIFO %02x\n", tag(), data); m_tx_fifo.push(data); } break; @@ -261,6 +241,8 @@ WRITE8_MEMBER( mc6852_device::write ) } else { + if (LOG) logerror("MC6852 '%s' Control 1 %02x\n", tag(), data); + /* receiver reset */ if (data & C1_RX_RS) { @@ -274,6 +256,8 @@ WRITE8_MEMBER( mc6852_device::write ) m_status &= ~(S_RX_OVRN | S_PE | S_DCD | S_RDA); m_rsr = 0xff; + + receive_register_reset(); } /* transmitter reset */ @@ -289,6 +273,8 @@ WRITE8_MEMBER( mc6852_device::write ) if (LOG) logerror("MC6852 '%s' Transmitter Reset\n", tag()); m_status &= ~(S_TUF | S_CTS | S_TDRA); + + transmit_register_reset(); } if (LOG) diff --git a/src/devices/machine/mc6852.h b/src/devices/machine/mc6852.h index 68cd76f6126..4987c64729b 100644 --- a/src/devices/machine/mc6852.h +++ b/src/devices/machine/mc6852.h @@ -99,6 +99,57 @@ protected: virtual void rcv_complete() override; private: + enum + { + S_IRQ = 0x80, + S_PE = 0x40, + S_RX_OVRN = 0x20, + S_TUF = 0x10, + S_CTS = 0x08, + S_DCD = 0x04, + S_TDRA = 0x02, + S_RDA = 0x01 + }; + + enum + { + C1_AC_MASK = 0xc0, + C1_AC_C2 = 0x00, + C1_AC_C3 = 0x40, + C1_AC_SYNC = 0x80, + C1_AC_TX_FIFO = 0xc0, + C1_AC2 = 0x80, + C1_AC1 = 0x40, + C1_RIE = 0x20, + C1_TIE = 0x10, + C1_CLEAR_SYNC = 0x08, + C1_STRIP_SYNC = 0x04, + C1_TX_RS = 0x02, + C1_RX_RS = 0x01 + }; + + enum + { + C2_EIE = 0x80, + C2_TX_SYNC = 0x40, + C2_WS_MASK = 0x38, + C2_WS3 = 0x20, + C2_WS2 = 0x10, + C2_WS1 = 0x08, + C2_1_2_BYTE = 0x04, + C2_PC_MASK = 0x03, + C2_PC2 = 0x02, + C2_PC1 = 0x01 + }; + + enum + { + C3_CTUF = 0x08, + C3_CTS = 0x04, + C3_1_2_SYNC = 0x02, + C3_E_I_SYNC = 0x01 + }; + devcb_write_line m_write_tx_data; devcb_write_line m_write_irq; devcb_write_line m_write_sm_dtr; diff --git a/src/devices/machine/s3c24xx.hxx b/src/devices/machine/s3c24xx.hxx index ca7bc05a90d..adb57cd1977 100644 --- a/src/devices/machine/s3c24xx.hxx +++ b/src/devices/machine/s3c24xx.hxx @@ -19,7 +19,6 @@ #define CLOCK_MULTIPLIER 1 -#define BIT(x,n) (((x)>>(n))&1) #define BITS(x,m,n) (((x)>>(n))&(((UINT32)1<<((m)-(n)+1))-1)) #define CLR_BITS(x,m,n) ((x) & ~((((UINT32)1 << ((m) - (n) + 1)) - 1) << n)) diff --git a/src/devices/machine/s3c44b0.cpp b/src/devices/machine/s3c44b0.cpp index 19579a1aa03..bf81606cf12 100644 --- a/src/devices/machine/s3c44b0.cpp +++ b/src/devices/machine/s3c44b0.cpp @@ -284,7 +284,6 @@ void s3c44b0_device::device_reset() #define CLOCK_MULTIPLIER 1 -#define BIT(x,n) (((x)>>(n))&1) #define BITS(x,m,n) (((x)>>(n))&(((UINT32)1<<((m)-(n)+1))-1)) #define CLR_BITS(x,m,n) ((x) & ~((((UINT32)1 << ((m) - (n) + 1)) - 1) << n)) diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index 96dd03fa1a9..7cf98458d1b 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -4,6 +4,8 @@ #include "upd765.h" #include "debugger.h" +#define LOG 0 + const device_type UPD765A = &device_creator; const device_type UPD765B = &device_creator; const device_type I8272A = &device_creator; @@ -235,7 +237,7 @@ void upd765_family_device::soft_reset() void upd765_family_device::tc_w(bool _tc) { - logerror("%s: tc=%d\n", tag(), _tc); + if (LOG) logerror("tc=%d\n", _tc); if(tc != _tc && _tc) { live_sync(); tc_done = true; @@ -304,7 +306,7 @@ READ8_MEMBER(upd765_family_device::dor_r) WRITE8_MEMBER(upd765_family_device::dor_w) { - logerror("%s: dor = %02x\n", tag(), data); + if (LOG) logerror("dor = %02x\n", data); UINT8 diff = dor ^ data; dor = data; if(diff & 4) @@ -367,7 +369,7 @@ READ8_MEMBER(upd765_family_device::msr_r) WRITE8_MEMBER(upd765_family_device::dsr_w) { - logerror("%s: dsr_w %02x\n", tag(), data); + if (LOG) logerror("dsr_w %02x\n", data); if(data & 0x80) soft_reset(); dsr = data & 0x7f; @@ -386,7 +388,7 @@ READ8_MEMBER(upd765_family_device::fifo_r) case PHASE_EXEC: if(internal_drq) return fifo_pop(false); - logerror("%s: fifo_r in phase %d\n", tag(), main_phase); + if (LOG) logerror("fifo_r in phase %d\n", main_phase); break; case PHASE_RESULT: @@ -397,7 +399,7 @@ READ8_MEMBER(upd765_family_device::fifo_r) main_phase = PHASE_CMD; break; default: - logerror("%s: fifo_r in phase %d\n", tag(), main_phase); + if (LOG) logerror("fifo_r in phase %d\n", main_phase); break; } @@ -415,7 +417,7 @@ WRITE8_MEMBER(upd765_family_device::fifo_w) if(cmd == C_INCOMPLETE) break; if(cmd == C_INVALID) { - logerror("%s: Invalid on %02x\n", tag(), command[0]); + if (LOG) logerror("Invalid on %02x\n", command[0]); main_phase = PHASE_RESULT; result[0] = ST0_UNK; result_pos = 1; @@ -430,11 +432,11 @@ WRITE8_MEMBER(upd765_family_device::fifo_w) fifo_push(data, false); return; } - logerror("%s: fifo_w in phase %d\n", tag(), main_phase); + if (LOG) logerror("fifo_w in phase %d\n", main_phase); break; default: - logerror("%s: fifo_w in phase %d\n", tag(), main_phase); + if (LOG) logerror("fifo_w in phase %d\n", main_phase); break; } } @@ -501,7 +503,7 @@ void upd765_family_device::fifo_push(UINT8 data, bool internal) if(fifo_pos == 16) { if(internal) { if(!(st1 & ST1_OR)) - logerror("%s: Fifo overrun\n", tag()); + if (LOG) logerror("Fifo overrun\n"); st1 |= ST1_OR; } return; @@ -522,7 +524,7 @@ UINT8 upd765_family_device::fifo_pop(bool internal) if(!fifo_pos) { if(internal) { if(!(st1 & ST1_OR)) - logerror("%s: Fifo underrun\n", tag()); + if (LOG) logerror("Fifo underrun\n"); st1 |= ST1_OR; } return 0; @@ -1031,8 +1033,8 @@ void upd765_family_device::live_run(attotime limit) command[12+cur_live.byte_counter-16] = byte; live_write_mfm(byte); if(cur_live.byte_counter == 19) - logerror("%s: formatting sector %02x %02x %02x %02x\n", - tag(), command[12], command[13], command[14], command[15]); + if (LOG) logerror("formatting sector %02x %02x %02x %02x\n", + command[12], command[13], command[14], command[15]); } else if(cur_live.byte_counter < 22) live_write_mfm(cur_live.crc >> 8); else if(cur_live.byte_counter < 44) @@ -1067,8 +1069,8 @@ void upd765_family_device::live_run(attotime limit) command[12+cur_live.byte_counter-7] = byte; live_write_fm(byte); if(cur_live.byte_counter == 10) - logerror("%s: formatting sector %02x %02x %02x %02x\n", - tag(), command[12], command[13], command[14], command[15]); + if (LOG) logerror("formatting sector %02x %02x %02x %02x\n", + command[12], command[13], command[14], command[15]); } else if(cur_live.byte_counter < 13) live_write_fm(cur_live.crc >> 8); else if(cur_live.byte_counter < 24) @@ -1119,7 +1121,7 @@ void upd765_family_device::live_run(attotime limit) break; default: - logerror("%s: Unknown live state %d\n", tts(cur_live.tm).c_str(), cur_live.state); + if (LOG) logerror("%s: Unknown live state %d\n", tts(cur_live.tm).c_str(), cur_live.state); return; } } @@ -1226,8 +1228,7 @@ void upd765_family_device::start_command(int cmd) tc_done = false; switch(cmd) { case C_CONFIGURE: - logerror("%s: command configure %02x %02x %02x\n", - tag(), + if (LOG) logerror("command configure %02x %02x %02x\n", command[1], command[2], command[3]); // byte 1 is ignored, byte 3 is precompensation-related fifocfg = command[2]; @@ -1236,7 +1237,7 @@ void upd765_family_device::start_command(int cmd) break; case C_DUMP_REG: - logerror("%s: command dump regs\n", tag()); + if (LOG) logerror("command dump regs\n"); main_phase = PHASE_RESULT; result[0] = flopi[0].pcn; result[1] = flopi[1].pcn; @@ -1261,11 +1262,11 @@ void upd765_family_device::start_command(int cmd) main_phase = PHASE_RESULT; result[0] = locked ? 0x10 : 0x00; result_pos = 1; - logerror("%s: command lock (%s)\n", tag(), locked ? "on" : "off"); + if (LOG) logerror("command lock (%s)\n", locked ? "on" : "off"); break; case C_PERPENDICULAR: - logerror("%s: command perpendicular\n", tag()); + if (LOG) logerror("command perpendicular\n"); perpmode = command[1]; main_phase = PHASE_CMD; break; @@ -1309,7 +1310,7 @@ void upd765_family_device::start_command(int cmd) (fi.dev->wpt_r() ? ST3_WP : 0x00) | (fi.dev->trk00_r() ? 0x00 : ST3_T0) | (fi.dev->twosid_r() ? 0x00 : ST3_TS); - logerror("%s: command sense drive status %d (%02x)\n", tag(), fi.id, result[0]); + if (LOG) logerror("command sense drive status %d (%02x)\n", fi.id, result[0]); result_pos = 1; break; } @@ -1317,7 +1318,7 @@ void upd765_family_device::start_command(int cmd) case C_SENSE_INTERRUPT_STATUS: { // Documentation is somewhat contradictory w.r.t polling // and irq. PC bios, especially 5150, requires that only - // one irq happens. That's also wait the ns82077a doc + // one irq happens. That's also what the ns82077a doc // says it does. OTOH, a number of docs says you need to // call SIS 4 times, once per drive... // @@ -1339,7 +1340,7 @@ void upd765_family_device::start_command(int cmd) if(fid == 4) { result[0] = ST0_UNK; result_pos = 1; - logerror("%s: command sense interrupt status (%02x)\n", tag(), result[0]); + if (LOG) logerror("command sense interrupt status (%02x)\n", result[0]); break; } @@ -1349,7 +1350,7 @@ void upd765_family_device::start_command(int cmd) result[0] = fi.st0; result[1] = fi.pcn; - logerror("%s: command sense interrupt status (fid=%d %02x %02x)\n", tag(), fid, result[0], result[1]); + if (LOG) logerror("command sense interrupt status (fid=%d %02x %02x)\n", fid, result[0], result[1]); result_pos = 2; other_irq = false; @@ -1358,8 +1359,7 @@ void upd765_family_device::start_command(int cmd) } case C_SPECIFY: - logerror("%s: command specify %02x %02x\n", - tag(), + if (LOG) logerror("command specify %02x %02x\n", command[1], command[2]); spec = (command[1] << 8) | command[2]; main_phase = PHASE_CMD; @@ -1377,10 +1377,10 @@ void upd765_family_device::start_command(int cmd) void upd765_family_device::command_end(floppy_info &fi, bool data_completion) { - logerror("%s: command done (%s) -", tag(), data_completion ? "data" : "seek"); + if (LOG) logerror("command done (%s) -", data_completion ? "data" : "seek"); for(int i=0; i != result_pos; i++) - logerror(" %02x", result[i]); - logerror("\n"); + if (LOG) logerror(" %02x", result[i]); + if (LOG) logerror("\n"); fi.main_state = fi.sub_state = IDLE; if(data_completion) data_irq = true; @@ -1394,7 +1394,7 @@ void upd765_family_device::command_end(floppy_info &fi, bool data_completion) void upd765_family_device::recalibrate_start(floppy_info &fi) { - logerror("%s: command recalibrate\n", tag()); + if (LOG) logerror("command recalibrate\n"); fi.main_state = RECALIBRATE; fi.sub_state = SEEK_WAIT_STEP_TIME_DONE; fi.dir = 1; @@ -1406,7 +1406,7 @@ void upd765_family_device::recalibrate_start(floppy_info &fi) void upd765_family_device::seek_start(floppy_info &fi) { - logerror("%s: command %sseek %d\n", tag(), command[0] & 0x80 ? "relative " : "", command[2]); + if (LOG) logerror("command %sseek %d\n", command[0] & 0x80 ? "relative " : "", command[2]); fi.main_state = SEEK; fi.sub_state = SEEK_WAIT_STEP_TIME_DONE; fi.dir = fi.pcn > command[2] ? 1 : 0; @@ -1489,8 +1489,7 @@ void upd765_family_device::read_data_start(floppy_info &fi) fi.sub_state = HEAD_LOAD_DONE; mfm = command[0] & 0x40; - logerror("%s: command read%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", - tag(), + if (LOG) logerror("command read%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", command[0] & 0x08 ? " deleted" : "", command[0] & 0x80 ? " mt" : "", command[0] & 0x40 ? " mfm" : "", @@ -1534,8 +1533,7 @@ void upd765_family_device::scan_start(floppy_info &fi) fi.sub_state = HEAD_LOAD_DONE; mfm = command[0] & 0x40; - logerror("%s: command scan%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x stp=%02x rate=%d\n", - tag(), + if (LOG) logerror("command scan%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x stp=%02x rate=%d\n", command[0] & 0x08 ? " deleted" : "", command[0] & 0x80 ? " mt" : "", command[0] & 0x40 ? " mfm" : "", @@ -1638,8 +1636,7 @@ void upd765_family_device::read_data_continue(floppy_info &fi) live_start(fi, SEARCH_ADDRESS_MARK_HEADER); return; } - logerror("%s: reading sector %02x %02x %02x %02x\n", - tag(), + if (LOG) logerror("reading sector %02x %02x %02x %02x\n", cur_live.idbuf[0], cur_live.idbuf[1], cur_live.idbuf[2], @@ -1714,7 +1711,7 @@ void upd765_family_device::read_data_continue(floppy_info &fi) return; default: - logerror("%s: read sector unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); + if (LOG) logerror("%s: read sector unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); return; } } @@ -1725,8 +1722,7 @@ void upd765_family_device::write_data_start(floppy_info &fi) fi.main_state = WRITE_DATA; fi.sub_state = HEAD_LOAD_DONE; mfm = command[0] & 0x40; - logerror("%s: command write%s data%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", - tag(), + if (LOG) logerror("command write%s data%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", command[0] & 0x08 ? " deleted" : "", command[0] & 0x80 ? " mt" : "", command[0] & 0x40 ? " mfm" : "", @@ -1840,7 +1836,7 @@ void upd765_family_device::write_data_continue(floppy_info &fi) return; default: - logerror("%s: write sector unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); + if (LOG) logerror("%s: write sector unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); return; } } @@ -1853,8 +1849,7 @@ void upd765_family_device::read_track_start(floppy_info &fi) mfm = command[0] & 0x40; sectors_read = 0; - logerror("%s: command read track%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", - tag(), + if (LOG) logerror("command read track%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n", command[0] & 0x40 ? " mfm" : "", command[0], command[1], @@ -1936,7 +1931,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi) return; case WAIT_INDEX_DONE: - logerror("%s: index found, reading track\n", tag()); + if (LOG) logerror("index found, reading track\n"); fi.sub_state = SCAN_ID; live_start(fi, SEARCH_ADDRESS_MARK_HEADER); return; @@ -1946,8 +1941,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi) st1 |= ST1_DE; } st1 &= ~ST1_MA; - logerror("%s: reading sector %02x %02x %02x %02x\n", - tag(), + if (LOG) logerror("reading sector %02x %02x %02x %02x\n", cur_live.idbuf[0], cur_live.idbuf[1], cur_live.idbuf[2], @@ -2010,7 +2004,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi) return; default: - logerror("%s: read track unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); + if (LOG) logerror("%s: read track unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); return; } } @@ -2027,8 +2021,7 @@ void upd765_family_device::format_track_start(floppy_info &fi) fi.sub_state = HEAD_LOAD_DONE; mfm = command[0] & 0x40; - logerror("%s: command format track %s h=%02x n=%02x sc=%02x gpl=%02x d=%02x\n", - tag(), + if (LOG) logerror("command format track %s h=%02x n=%02x sc=%02x gpl=%02x d=%02x\n", command[0] & 0x40 ? "mfm" : "fm", command[1], command[2], command[3], command[4], command[5]); @@ -2063,7 +2056,7 @@ void upd765_family_device::format_track_continue(floppy_info &fi) return; case WAIT_INDEX_DONE: - logerror("%s: index found, writing track\n", tag()); + if (LOG) logerror("index found, writing track\n"); fi.sub_state = TRACK_DONE; cur_live.pll.start_writing(machine().time()); live_start(fi, WRITE_TRACK_PRE_SECTORS); @@ -2083,7 +2076,7 @@ void upd765_family_device::format_track_continue(floppy_info &fi) return; default: - logerror("%s: format track unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); + if (LOG) logerror("%s: format track unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); return; } } @@ -2095,8 +2088,7 @@ void upd765_family_device::read_id_start(floppy_info &fi) fi.sub_state = HEAD_LOAD_DONE; mfm = command[0] & 0x40; - logerror("%s: command read id%s, rate=%d\n", - tag(), + if (LOG) logerror("command read id%s, rate=%d\n", command[0] & 0x40 ? " mfm" : "", cur_rate); @@ -2162,7 +2154,7 @@ void upd765_family_device::read_id_continue(floppy_info &fi) return; default: - logerror("%s: read id unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); + if (LOG) logerror("%s: read id unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); return; } } @@ -2174,7 +2166,7 @@ void upd765_family_device::check_irq() cur_irq = data_irq || other_irq || internal_drq; cur_irq = cur_irq && (dor & 4) && (mode != MODE_AT || (dor & 8)); if(cur_irq != old_irq) { - logerror("%s: irq = %d\n", tag(), cur_irq); + if (LOG) logerror("irq = %d\n", cur_irq); intrq_cb(cur_irq); } } @@ -2232,7 +2224,7 @@ void upd765_family_device::run_drive_ready_polling() for(int fid=0; fid<4; fid++) { bool ready = get_ready(fid); if(ready != flopi[fid].ready) { - logerror("%s: polled %d : %d -> %d\n", tag(), fid, flopi[fid].ready, ready); + if (LOG) logerror("polled %d : %d -> %d\n", fid, flopi[fid].ready, ready); flopi[fid].ready = ready; if(!flopi[fid].st0_filled) { flopi[fid].st0 = ST0_ABRT | fid; @@ -2289,7 +2281,7 @@ void upd765_family_device::index_callback(floppy_image_device *floppy, int state break; default: - logerror("%s: Index pulse on unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); + if (LOG) logerror("%s: Index pulse on unknown sub-state %d\n", ttsn().c_str(), fi.sub_state); break; } @@ -2337,7 +2329,7 @@ void upd765_family_device::general_continue(floppy_info &fi) break; default: - logerror("%s: general_continue on unknown main-state %d\n", ttsn().c_str(), fi.main_state); + if (LOG) logerror("%s: general_continue on unknown main-state %d\n", ttsn().c_str(), fi.main_state); break; } } @@ -2378,7 +2370,7 @@ bool upd765_family_device::write_one_bit(const attotime &limit) void upd765_family_device::live_write_raw(UINT16 raw) { - // logerror("write %04x %04x\n", raw, cur_live.crc); + // if (LOG) logerror("write %04x %04x\n", raw, cur_live.crc); cur_live.shift_reg = raw; cur_live.data_bit_context = raw & 1; } @@ -2398,7 +2390,7 @@ void upd765_family_device::live_write_mfm(UINT8 mfm) cur_live.data_reg = mfm; cur_live.shift_reg = raw; cur_live.data_bit_context = context; - // logerror("write %02x %04x %04x\n", mfm, cur_live.crc, raw); + // if (LOG) logerror("write %02x %04x %04x\n", mfm, cur_live.crc, raw); } void upd765_family_device::live_write_fm(UINT8 fm) @@ -2410,13 +2402,13 @@ void upd765_family_device::live_write_fm(UINT8 fm) cur_live.data_reg = fm; cur_live.shift_reg = raw; cur_live.data_bit_context = fm & 1; - // logerror("write %02x %04x %04x\n", fm, cur_live.crc, raw); + // if (LOG) logerror("write %02x %04x %04x\n", fm, cur_live.crc, raw); } bool upd765_family_device::sector_matches() const { if(0) - logerror("%s: matching %02x %02x %02x %02x - %02x %02x %02x %02x\n", tag(), + if (LOG) logerror("matching %02x %02x %02x %02x - %02x %02x %02x %02x\n", cur_live.idbuf[0], cur_live.idbuf[1], cur_live.idbuf[2], cur_live.idbuf[3], command[2], command[3], command[4], command[5]); return diff --git a/src/devices/sound/bsmt2000.cpp b/src/devices/sound/bsmt2000.cpp index 26df9eb080f..7e92bcb80fb 100644 --- a/src/devices/sound/bsmt2000.cpp +++ b/src/devices/sound/bsmt2000.cpp @@ -52,13 +52,6 @@ static MACHINE_CONFIG_FRAGMENT( bsmt2000 ) MACHINE_CONFIG_END -// default address map for the external memory interface -// the BSMT can address a full 32 bits but typically only 24 are used -static ADDRESS_MAP_START( bsmt2000, AS_0, 8, bsmt2000_device) - AM_RANGE(0x00000, 0xffffff) AM_ROM -ADDRESS_MAP_END - - // ROM definition for the BSMT2000 program ROM ROM_START( bsmt2000 ) ROM_REGION( 0x2000, "bsmt2000", 0 ) @@ -79,11 +72,9 @@ ROM_END bsmt2000_device::bsmt2000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, BSMT2000, "BSMT2000", tag, owner, clock, "bsmt2000", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), - m_space_config("samples", ENDIANNESS_LITTLE, 8, 32, 0, nullptr), + device_rom_interface(mconfig, *this, 32), m_ready_callback(nullptr), m_stream(nullptr), - m_direct(nullptr), m_cpu(nullptr), m_register_select(0), m_write_data(0), @@ -93,7 +84,6 @@ bsmt2000_device::bsmt2000_device(const machine_config &mconfig, const char *tag, m_right_data(0), m_write_pending(false) { - m_address_map[0] = *ADDRESS_MAP_NAME(bsmt2000); } @@ -140,9 +130,6 @@ void bsmt2000_device::device_start() // find our CPU m_cpu = subdevice("bsmt2000"); - // find our direct access - m_direct = &space().direct(); - // create the stream; BSMT typically runs at 24MHz and writes to a DAC, so // in theory we should generate a 24MHz stream, but that's certainly overkill // internally at 24MHz the max output sample rate is 32kHz @@ -170,16 +157,6 @@ void bsmt2000_device::device_reset() } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *bsmt2000_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} - //------------------------------------------------- // device_timer - handle deferred writes and @@ -296,7 +273,7 @@ READ16_MEMBER( bsmt2000_device::tms_data_r ) READ16_MEMBER( bsmt2000_device::tms_rom_r ) { // underlying logic assumes this is a sign-extended value - return (INT8)m_direct->read_byte((m_rom_bank << 16) + m_rom_address); + return (INT8)read_byte((m_rom_bank << 16) + m_rom_address); } diff --git a/src/devices/sound/bsmt2000.h b/src/devices/sound/bsmt2000.h index 41490230566..2b80c685418 100644 --- a/src/devices/sound/bsmt2000.h +++ b/src/devices/sound/bsmt2000.h @@ -37,7 +37,7 @@ class bsmt2000_device : public device_t, public device_sound_interface, - public device_memory_interface + public device_rom_interface { typedef void (*ready_callback)(bsmt2000_device &device); @@ -61,9 +61,6 @@ protected: virtual void device_reset() override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; @@ -88,12 +85,10 @@ private: }; // configuration state - const address_space_config m_space_config; ready_callback m_ready_callback; // internal state sound_stream * m_stream; - direct_read_data * m_direct; tms32015_device * m_cpu; UINT16 m_register_select; UINT16 m_write_data; diff --git a/src/devices/sound/c352.cpp b/src/devices/sound/c352.cpp index 2da83f0dd4d..a56a8fa5fe3 100644 --- a/src/devices/sound/c352.cpp +++ b/src/devices/sound/c352.cpp @@ -1,26 +1,19 @@ // license:BSD-3-Clause -// copyright-holders:R. Belmont +// copyright-holders:R. Belmont, superctr /* - c352.c - Namco C352 custom PCM chip emulation - v1.2 - By R. Belmont - Additional code by cync and the hoot development team + c352.c - Namco C352 custom PCM chip emulation + v2.0 + By R. Belmont + Rewritten and improved by superctr + Additional code by cync and the hoot development team - Thanks to Cap of VivaNonno for info and The_Author for preliminary reverse-engineering + Thanks to Cap of VivaNonno for info and The_Author for preliminary reverse-engineering - Chip specs: - 32 voices - Supports 8-bit linear and 8-bit muLaw samples - Output: digital, 16 bit, 4 channels - Output sample rate is the input clock / (288 * 2). - - superctr: The clock divider appears to be configurable for each system. - Below is a list of the divider values followed by the systems that use it. - - * 228: System 11. - * 288: System 22, Super 22, NB-1/2, ND-1, FL. - * 296: System 23, Super 23. - * 332: System 12. + Chip specs: + 32 voices + Supports 8-bit linear and 8-bit muLaw samples + Output: digital, 16 bit, 4 channels + Output sample rate is the input clock / (288 * 2). */ #include "emu.h" @@ -32,11 +25,6 @@ // device type definition const device_type C352 = &device_creator; -// default address map -static ADDRESS_MAP_START( c352, AS_0, 8, c352_device ) - AM_RANGE(0x000000, 0xffffff) AM_ROM -ADDRESS_MAP_END - //************************************************************************** // LIVE DEVICE //************************************************************************** @@ -48,8 +36,7 @@ ADDRESS_MAP_END c352_device::c352_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, C352, "C352", tag, owner, clock, "c352", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), - m_space_config("samples", ENDIANNESS_LITTLE, 8, 24, 0, nullptr, *ADDRESS_MAP_NAME(c352)) + device_rom_interface(mconfig, *this, 24) { } @@ -64,413 +51,194 @@ void c352_device::static_set_divider(device_t &device, int setting) c352.m_divider = setting; } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *c352_device::memory_space_config(address_spacenum spacenum) const +void c352_device::fetch_sample(c352_voice_t* v) { - return (spacenum == 0) ? &m_space_config : nullptr; -} + v->last_sample = v->sample; -// noise generator -int c352_device::get_mseq_bit() -{ - unsigned int mask = (1 << (7 - 1)); - unsigned int reg = m_mseq_reg; - unsigned int bit = reg & (1 << (17 - 1)); - - if (bit) + if(v->flags & C352_FLG_NOISE) { - reg = ((reg ^ mask) << 1) | 1; + m_random = (m_random>>1) ^ ((-(m_random&1)) & 0xfff6); + v->sample = m_random; } else { - reg = reg << 1; - } + INT8 s; - m_mseq_reg = reg; + s = (INT8)read_byte(v->pos); - return (reg & 1); -} - -void c352_device::mix_one_channel(unsigned long ch, long sample_count) -{ - int i; - - signed short sample, nextsample; - signed short noisebuf; - UINT16 noisecnt; - INT32 frequency, delta, offset, cnt, flag; - UINT32 bank; - UINT32 pos; - - frequency = m_c352_ch[ch].pitch; - delta=frequency; - - pos = m_c352_ch[ch].current_addr; // sample pointer - offset = m_c352_ch[ch].pos; // 16.16 fixed-point offset into the sample - flag = m_c352_ch[ch].flag; - bank = m_c352_ch[ch].bank << 16; - - noisecnt = m_c352_ch[ch].noisecnt; - noisebuf = m_c352_ch[ch].noisebuf; - - for(i = 0 ; (i < sample_count) && (flag & C352_FLG_BUSY) ; i++) - { - offset += delta; - cnt = (offset>>16)&0x7fff; - if (cnt) // if there is a whole sample part, chop it off now that it's been applied - { - offset &= 0xffff; - } - - if (pos > 0x1000000) - { - m_c352_ch[ch].flag &= ~C352_FLG_BUSY; - return; - } - - sample = (char)m_direct->read_byte(pos); - nextsample = (char)m_direct->read_byte(pos+cnt); - - // sample is muLaw, not 8-bit linear (Fighting Layer uses this extensively) - if (flag & C352_FLG_MULAW) - { - sample = m_mulaw_table[(unsigned char)sample]; - nextsample = m_mulaw_table[(unsigned char)nextsample]; - } + if(v->flags & C352_FLG_MULAW) + v->sample = m_mulaw_table[(UINT8)s]; else + v->sample = s<<8; + + UINT16 pos = v->pos&0xffff; + + if((v->flags & C352_FLG_LOOP) && v->flags & C352_FLG_REVERSE) { - sample <<= 8; - nextsample <<= 8; + // backwards>forwards + if((v->flags & C352_FLG_LDIR) && pos == v->wave_loop) + v->flags &= ~C352_FLG_LDIR; + // forwards>backwards + else if(!(v->flags & C352_FLG_LDIR) && pos == v->wave_end) + v->flags |= C352_FLG_LDIR; + + v->pos += (v->flags&C352_FLG_LDIR) ? -1 : 1; } - - // play noise instead of sample data - if (flag & C352_FLG_NOISE) + else if(pos == v->wave_end) { - int noise_level = 0x8000; - sample = m_c352_ch[ch].noise = (m_c352_ch[ch].noise << 1) | get_mseq_bit(); - sample = (sample & (noise_level - 1)) - (noise_level >> 1); - if (sample > 0x7f) + if((v->flags & C352_FLG_LINK) && (v->flags & C352_FLG_LOOP)) { - sample = 0x7f; + v->pos = (v->wave_start<<16) | v->wave_loop; + v->flags |= C352_FLG_LOOPHIST; } - else if (sample < 0) + else if(v->flags & C352_FLG_LOOP) { - sample = 0xff; - } - sample = m_mulaw_table[(unsigned char)sample]; - - if ( (pos+cnt) == pos ) - { - noisebuf += sample; - noisecnt++; - sample = noisebuf / noisecnt; + v->pos = (v->pos&0xff0000) | v->wave_loop; + v->flags |= C352_FLG_LOOPHIST; } else { - if ( noisecnt ) - { - sample = noisebuf / noisecnt; - } - else - { - sample = m_mulaw_table[0x7f]; // Nearest sound(s) is here. - } - noisebuf = 0; - noisecnt = ( flag & C352_FLG_FILTER ) ? 0 : 1; + v->flags |= C352_FLG_KEYOFF; + v->flags &= ~C352_FLG_BUSY; + v->sample=0; } } - - // apply linear interpolation - if ( (flag & (C352_FLG_FILTER | C352_FLG_NOISE)) == 0 ) - { - sample = (short)(sample + ((nextsample-sample) * (((double)(0x0000ffff&offset) )/0x10000))); - } - - if ( flag & C352_FLG_PHASEFL ) - { - m_channel_l[i] += ((-sample * m_c352_ch[ch].vol_l)>>8); - } else { - m_channel_l[i] += ((sample * m_c352_ch[ch].vol_l)>>8); - } - - if ( flag & C352_FLG_PHASEFR ) - { - m_channel_r[i] += ((-sample * m_c352_ch[ch].vol_r)>>8); - } - else - { - m_channel_r[i] += ((sample * m_c352_ch[ch].vol_r)>>8); - } - - if ( flag & C352_FLG_PHASERL ) - { - m_channel_l2[i] += ((-sample * m_c352_ch[ch].vol_l2)>>8); - } - else - { - m_channel_l2[i] += ((sample * m_c352_ch[ch].vol_l2)>>8); - } - m_channel_r2[i] += ((sample * m_c352_ch[ch].vol_r2)>>8); - - if ( (flag & C352_FLG_REVERSE) && (flag & C352_FLG_LOOP) ) - { - if ( !(flag & C352_FLG_LDIR) ) - { - pos += cnt; - if ( - (((pos&0xFFFF) > m_c352_ch[ch].end_addr) && ((pos&0xFFFF) < m_c352_ch[ch].start) && (m_c352_ch[ch].start > m_c352_ch[ch].end_addr) ) || - (((pos&0xFFFF) > m_c352_ch[ch].end_addr) && ((pos&0xFFFF) > m_c352_ch[ch].start) && (m_c352_ch[ch].start < m_c352_ch[ch].end_addr) ) || - ((pos > (bank|0xFFFF)) && (m_c352_ch[ch].end_addr == 0xFFFF)) - ) - { - m_c352_ch[ch].flag |= C352_FLG_LDIR; - m_c352_ch[ch].flag |= C352_FLG_LOOPHIST; - } - } - else - { - pos -= cnt; - if ( - (((pos&0xFFFF) < m_c352_ch[ch].repeat) && ((pos&0xFFFF) < m_c352_ch[ch].end_addr) && (m_c352_ch[ch].end_addr > m_c352_ch[ch].start) ) || - (((pos&0xFFFF) < m_c352_ch[ch].repeat) && ((pos&0xFFFF) > m_c352_ch[ch].end_addr) && (m_c352_ch[ch].end_addr < m_c352_ch[ch].start) ) || - ((pos < bank) && (m_c352_ch[ch].repeat == 0x0000)) - ) - { - m_c352_ch[ch].flag &= ~C352_FLG_LDIR; - m_c352_ch[ch].flag |= C352_FLG_LOOPHIST; - } - } - } - else if ( flag & C352_FLG_REVERSE ) - { - pos -= cnt; - if ( - (((pos&0xFFFF) < m_c352_ch[ch].end_addr) && ((pos&0xFFFF) < m_c352_ch[ch].start) && (m_c352_ch[ch].start > m_c352_ch[ch].end_addr) ) || - (((pos&0xFFFF) < m_c352_ch[ch].end_addr) && ((pos&0xFFFF) > m_c352_ch[ch].start) && (m_c352_ch[ch].start < m_c352_ch[ch].end_addr) ) || - ((pos < bank) && (m_c352_ch[ch].end_addr == 0x0000)) - ) - { - if ( (flag & C352_FLG_LINK) && (flag & C352_FLG_LOOP) ) - { - m_c352_ch[ch].bank = m_c352_ch[ch].start_addr & 0xFF; - m_c352_ch[ch].start_addr = m_c352_ch[ch].repeat_addr; - m_c352_ch[ch].start = m_c352_ch[ch].start_addr; - m_c352_ch[ch].repeat = m_c352_ch[ch].repeat_addr; - pos = (m_c352_ch[ch].bank<<16) + m_c352_ch[ch].start_addr; - m_c352_ch[ch].flag |= C352_FLG_LOOPHIST; - } - else if (flag & C352_FLG_LOOP) - { - pos = (pos & 0xFF0000) + m_c352_ch[ch].repeat; - m_c352_ch[ch].flag |= C352_FLG_LOOPHIST; - } - else - { - m_c352_ch[ch].flag |= C352_FLG_KEYOFF; - m_c352_ch[ch].flag &= ~C352_FLG_BUSY; - return; - } - } - } else { - pos += cnt; - if ( - (((pos&0xFFFF) > m_c352_ch[ch].end_addr) && ((pos&0xFFFF) < m_c352_ch[ch].start) && (m_c352_ch[ch].start > m_c352_ch[ch].end_addr) ) || - (((pos&0xFFFF) > m_c352_ch[ch].end_addr) && ((pos&0xFFFF) > m_c352_ch[ch].start) && (m_c352_ch[ch].start < m_c352_ch[ch].end_addr) ) || - ((pos > (bank|0xFFFF)) && (m_c352_ch[ch].end_addr == 0xFFFF)) - ) - { - if ( (flag & C352_FLG_LINK) && (flag & C352_FLG_LOOP) ) - { - m_c352_ch[ch].bank = m_c352_ch[ch].start_addr & 0xFF; - m_c352_ch[ch].start_addr = m_c352_ch[ch].repeat_addr; - m_c352_ch[ch].start = m_c352_ch[ch].start_addr; - m_c352_ch[ch].repeat = m_c352_ch[ch].repeat_addr; - pos = (m_c352_ch[ch].bank<<16) + m_c352_ch[ch].start_addr; - m_c352_ch[ch].flag |= C352_FLG_LOOPHIST; - } - else if (flag & C352_FLG_LOOP) - { - pos = (pos & 0xFF0000) + m_c352_ch[ch].repeat; - m_c352_ch[ch].flag |= C352_FLG_LOOPHIST; - } - else - { - m_c352_ch[ch].flag |= C352_FLG_KEYOFF; - m_c352_ch[ch].flag &= ~C352_FLG_BUSY; - return; - } - } + v->pos += (v->flags&C352_FLG_REVERSE) ? -1 : 1; } } - - m_c352_ch[ch].noisecnt = noisecnt; - m_c352_ch[ch].noisebuf = noisebuf; - m_c352_ch[ch].pos = offset; - m_c352_ch[ch].current_addr = pos; } - void c352_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) { - int i, j; - stream_sample_t *bufferl = outputs[0]; - stream_sample_t *bufferr = outputs[1]; - stream_sample_t *bufferl2 = outputs[2]; - stream_sample_t *bufferr2 = outputs[3]; - - for(i = 0 ; i < samples ; i++) + + int i,j; + INT16 s; + stream_sample_t *buffer_fl = outputs[0]; + stream_sample_t *buffer_fr = outputs[1]; + stream_sample_t *buffer_rl = outputs[2]; + stream_sample_t *buffer_rr = outputs[3]; + c352_voice_t* v; + + long out[4]; + + for(i=0;iflags & C352_FLG_BUSY) + { + v->counter += v->freq; - for (j = 0 ; j < 32 ; j++) - { - mix_one_channel(j, samples); - } + if(v->counter > 0x10000) + { + v->counter &= 0xffff; + fetch_sample(v); + } - for(i = 0 ; i < samples ; i++) - { - *bufferl++ = (short) (m_channel_l[i] >>3); - *bufferr++ = (short) (m_channel_r[i] >>3); - *bufferl2++ = (short) (m_channel_l2[i] >>3); - *bufferr2++ = (short) (m_channel_r2[i] >>3); + s = v->sample; + + // Interpolate samples + if((v->flags & C352_FLG_FILTER) == 0) + s = v->last_sample + (v->counter*(v->sample-v->last_sample)>>16); + } + + // Left + out[0] += ((v->flags & C352_FLG_PHASEFL) ? -s * (v->vol_f>>8) : s * (v->vol_f>>8))>>8; + out[2] += ((v->flags & C352_FLG_PHASERL) ? -s * (v->vol_r>>8) : s * (v->vol_r>>8))>>8; + + // Right + out[1] += ((v->flags & C352_FLG_PHASEFR) ? -s * (v->vol_f&0xff) : s * (v->vol_f&0xff))>>8; + out[3] += ((v->flags & C352_FLG_PHASEFR) ? -s * (v->vol_r&0xff) : s * (v->vol_r&0xff))>>8; + } + + *buffer_fl++ = (INT16) (out[0]>>3); + *buffer_fr++ = (INT16) (out[1]>>3); + *buffer_rl++ = (INT16) (out[2]>>3); + *buffer_rr++ = (INT16) (out[3]>>3); } + + } -unsigned short c352_device::read_reg16(unsigned long address) +UINT16 c352_device::read_reg16(unsigned long address) { - unsigned long chan; - unsigned short val; - m_stream->update(); - - chan = (address >> 4) & 0xfff; - if (chan > 31) + + const int reg_map[8] = { - val = 0; - } + offsetof(c352_voice_t,vol_f) / sizeof(UINT16), + offsetof(c352_voice_t,vol_r) / sizeof(UINT16), + offsetof(c352_voice_t,freq) / sizeof(UINT16), + offsetof(c352_voice_t,flags) / sizeof(UINT16), + offsetof(c352_voice_t,wave_bank) / sizeof(UINT16), + offsetof(c352_voice_t,wave_start) / sizeof(UINT16), + offsetof(c352_voice_t,wave_end) / sizeof(UINT16), + offsetof(c352_voice_t,wave_loop) / sizeof(UINT16), + }; + + if(address < 0x100) + return *((UINT16*)&m_c352_v[address/8]+reg_map[address%8]); else - { - if ((address & 0xf) == 6) - { - val = m_c352_ch[chan].flag; - } - else - { - val = 0; - } - } - return val; + return 0; + + return 0; } void c352_device::write_reg16(unsigned long address, unsigned short val) -{ - unsigned long chan; +{ + m_stream->update(); + + const int reg_map[8] = + { + offsetof(c352_voice_t,vol_f) / sizeof(UINT16), + offsetof(c352_voice_t,vol_r) / sizeof(UINT16), + offsetof(c352_voice_t,freq) / sizeof(UINT16), + offsetof(c352_voice_t,flags) / sizeof(UINT16), + offsetof(c352_voice_t,wave_bank) / sizeof(UINT16), + offsetof(c352_voice_t,wave_start) / sizeof(UINT16), + offsetof(c352_voice_t,wave_end) / sizeof(UINT16), + offsetof(c352_voice_t,wave_loop) / sizeof(UINT16), + }; + int i; - m_stream->update(); - - chan = (address >> 4) & 0xfff; - - if ( address >= 0x400 ) + if(address < 0x100) { - switch(address) + //printf("w %04lx,%04x, %d\n", address, val, reg_map[address&7]); + *((UINT16*)&m_c352_v[address/8]+reg_map[address%8]) = val; + } + else if(address == 0x200) + m_control = val; + else if(address == 0x202) // execute keyons/keyoffs + { + for(i=0;i<32;i++) { - case 0x404: // execute key-ons/offs - for ( i = 0 ; i <= 31 ; i++ ) - { - if ( m_c352_ch[i].flag & C352_FLG_KEYON ) - { - if (m_c352_ch[i].start_addr != m_c352_ch[i].end_addr) - { - m_c352_ch[i].current_addr = (m_c352_ch[i].bank << 16) + m_c352_ch[i].start_addr; - m_c352_ch[i].start = m_c352_ch[i].start_addr; - m_c352_ch[i].repeat = m_c352_ch[i].repeat_addr; - m_c352_ch[i].noisebuf = 0; - m_c352_ch[i].noisecnt = 0; - m_c352_ch[i].flag &= ~(C352_FLG_KEYON | C352_FLG_LOOPHIST); - m_c352_ch[i].flag |= C352_FLG_BUSY; - } - } - else if ( m_c352_ch[i].flag & C352_FLG_KEYOFF ) - { - m_c352_ch[i].flag &= ~C352_FLG_BUSY; - m_c352_ch[i].flag &= ~(C352_FLG_KEYOFF); - } - } - break; - default: - break; + if((m_c352_v[i].flags & C352_FLG_KEYON)) + { + m_c352_v[i].pos = (m_c352_v[i].wave_bank<<16) | m_c352_v[i].wave_start; + + m_c352_v[i].sample = 0; + m_c352_v[i].last_sample = 0; + m_c352_v[i].counter = 0x10000; + + m_c352_v[i].flags |= C352_FLG_BUSY; + m_c352_v[i].flags &= ~(C352_FLG_KEYON|C352_FLG_LOOPHIST); + + //printf("voice %d : pos= %08x\n",i,m_c352_v[i].pos); + } + else if(m_c352_v[i].flags & C352_FLG_KEYOFF) + { + m_c352_v[i].flags &= ~(C352_FLG_BUSY|C352_FLG_KEYOFF); + } } - return; - } - - if (chan > 31) - { - LOG(("C352 CTRL %08lx %04x\n", address, val)); - return; - } - switch(address & 0xf) - { - case 0x0: - // volumes (output 1) - LOG(("CH %02ld LVOL %02x RVOL %02x\n", chan, val & 0xff, val >> 8)); - m_c352_ch[chan].vol_l = val & 0xff; - m_c352_ch[chan].vol_r = val >> 8; - break; - - case 0x2: - // volumes (output 2) - LOG(("CH %02ld RLVOL %02x RRVOL %02x\n", chan, val & 0xff, val >> 8)); - m_c352_ch[chan].vol_l2 = val & 0xff; - m_c352_ch[chan].vol_r2 = val >> 8; - break; - - case 0x4: - // pitch - LOG(("CH %02ld PITCH %04x\n", chan, val)); - m_c352_ch[chan].pitch = val; - break; - - case 0x6: - // flags - LOG(("CH %02ld FLAG %02x\n", chan, val)); - m_c352_ch[chan].flag = val; - break; - - case 0x8: - // bank (bits 16-31 of address); - m_c352_ch[chan].bank = val & 0xff; - LOG(("CH %02ld BANK %02x", chan, m_c352_ch[chan].bank)); - break; - - case 0xa: - // start address - LOG(("CH %02ld SADDR %04x\n", chan, val)); - m_c352_ch[chan].start_addr = val; - break; - - case 0xc: - // end address - LOG(("CH %02ld EADDR %04x\n", chan, val)); - m_c352_ch[chan].end_addr = val; - break; - - case 0xe: - // loop address - LOG(("CH %02ld LADDR %04x\n", chan, val)); - m_c352_ch[chan].repeat_addr = val; - break; - - default: - LOG(("CH %02ld UNKN %01lx %04x", chan, address & 0xf, val)); - break; } } @@ -481,9 +249,6 @@ void c352_device::device_start() double y_max = 127.0; double u = 10.0; - // find our direct access - m_direct = &space().direct(); - m_sample_rate_base = clock() / m_divider; m_stream = machine().sound().stream_alloc(*this, 0, 4, m_sample_rate_base); @@ -496,53 +261,52 @@ void c352_device::device_start() if (i & 0x80) { - x = -x; + x = -x; } - m_mulaw_table[i] = (short)x; + m_mulaw_table[i] = (UINT16)x; } // register save state info for (i = 0; i < 32; i++) { - save_item(NAME(m_c352_ch[i].vol_l), i); - save_item(NAME(m_c352_ch[i].vol_r), i); - save_item(NAME(m_c352_ch[i].vol_l2), i); - save_item(NAME(m_c352_ch[i].vol_r2), i); - save_item(NAME(m_c352_ch[i].bank), i); - save_item(NAME(m_c352_ch[i].noise), i); - save_item(NAME(m_c352_ch[i].noisebuf), i); - save_item(NAME(m_c352_ch[i].noisecnt), i); - save_item(NAME(m_c352_ch[i].pitch), i); - save_item(NAME(m_c352_ch[i].start_addr), i); - save_item(NAME(m_c352_ch[i].end_addr), i); - save_item(NAME(m_c352_ch[i].repeat_addr), i); - save_item(NAME(m_c352_ch[i].flag), i); - save_item(NAME(m_c352_ch[i].start), i); - save_item(NAME(m_c352_ch[i].repeat), i); - save_item(NAME(m_c352_ch[i].current_addr), i); - save_item(NAME(m_c352_ch[i].pos), i); + save_item(NAME(m_c352_v[i].pos), i); + save_item(NAME(m_c352_v[i].counter), i); + save_item(NAME(m_c352_v[i].sample), i); + save_item(NAME(m_c352_v[i].last_sample), i); + save_item(NAME(m_c352_v[i].vol_f), i); + save_item(NAME(m_c352_v[i].vol_r), i); + save_item(NAME(m_c352_v[i].freq), i); + save_item(NAME(m_c352_v[i].flags), i); + save_item(NAME(m_c352_v[i].wave_bank), i); + save_item(NAME(m_c352_v[i].wave_start), i); + save_item(NAME(m_c352_v[i].wave_end), i); + save_item(NAME(m_c352_v[i].wave_loop), i); } + save_item(NAME(m_random)); + save_item(NAME(m_control)); + } void c352_device::device_reset() { // clear all channels states - memset(m_c352_ch, 0, sizeof(c352_ch_t)*32); + memset(m_c352_v, 0, sizeof(c352_voice_t)*32); // init noise generator - m_mseq_reg = 0x12345678; + m_random = 0x1234; + m_control = 0; } READ16_MEMBER( c352_device::read ) { - return(read_reg16(offset*2)); + return(read_reg16(offset)); } WRITE16_MEMBER( c352_device::write ) { if (mem_mask == 0xffff) { - write_reg16(offset*2, data); + write_reg16(offset, data); } else { diff --git a/src/devices/sound/c352.h b/src/devices/sound/c352.h index d64917d3252..d1ec81289f9 100644 --- a/src/devices/sound/c352.h +++ b/src/devices/sound/c352.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:R. Belmont +// copyright-holders:R. Belmont, superctr #pragma once #ifndef __C352_H__ @@ -24,7 +24,7 @@ class c352_device : public device_t, public device_sound_interface, - public device_memory_interface + public device_rom_interface { public: // construction/destruction @@ -46,11 +46,6 @@ protected: // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - - const address_space_config m_space_config; - private: enum { C352_FLG_BUSY = 0x8000, // channel is busy @@ -71,45 +66,38 @@ private: C352_FLG_LOOP = 0x0002, // loop forward C352_FLG_REVERSE = 0x0001 // play sample backwards }; + + struct c352_voice_t { - struct c352_ch_t - { - UINT8 vol_l; - UINT8 vol_r; - UINT8 vol_l2; - UINT8 vol_r2; - UINT8 bank; - INT16 noise; - INT16 noisebuf; - UINT16 noisecnt; - UINT16 pitch; - UINT16 start_addr; - UINT16 end_addr; - UINT16 repeat_addr; - UINT32 flag; + UINT32 pos; + UINT32 counter; + + INT16 sample; + INT16 last_sample; + + UINT16 vol_f; + UINT16 vol_r; + UINT16 freq; + UINT16 flags; + + UINT16 wave_bank; + UINT16 wave_start; + UINT16 wave_end; + UINT16 wave_loop; - UINT16 start; - UINT16 repeat; - UINT32 current_addr; - UINT32 pos; }; - - c352_ch_t m_c352_ch[32]; + int m_sample_rate_base; int m_divider; + + c352_voice_t m_c352_v[32]; + INT16 m_mulaw_table[256]; + + UINT16 m_random; + UINT16 m_control; // control flags, purpose unknown. + + void fetch_sample(c352_voice_t* v); - long m_channel_l[2048*2]; - long m_channel_r[2048*2]; - long m_channel_l2[2048*2]; - long m_channel_r2[2048*2]; - - short m_mulaw_table[256]; - unsigned int m_mseq_reg; - direct_read_data *m_direct; - - // private functions - int get_mseq_bit(void); - void mix_one_channel(unsigned long ch, long sample_count); unsigned short read_reg16(unsigned long address); void write_reg16(unsigned long address, unsigned short val); }; diff --git a/src/devices/sound/es5503.cpp b/src/devices/sound/es5503.cpp index 8103ffbc456..c5fe731717e 100644 --- a/src/devices/sound/es5503.cpp +++ b/src/devices/sound/es5503.cpp @@ -44,11 +44,6 @@ static const UINT32 wavemasks[8] = { 0x1ff00, 0x1fe00, 0x1fc00, 0x1f800, 0x1f000 static const UINT32 accmasks[8] = { 0xff, 0x1ff, 0x3ff, 0x7ff, 0xfff, 0x1fff, 0x3fff, 0x7fff }; static const int resshifts[8] = { 9, 10, 11, 12, 13, 14, 15, 16 }; -// default address map -static ADDRESS_MAP_START( es5503, AS_0, 8, es5503_device ) - AM_RANGE(0x000000, 0x1ffff) AM_ROM -ADDRESS_MAP_END - //************************************************************************** // LIVE DEVICE //************************************************************************** @@ -60,22 +55,12 @@ ADDRESS_MAP_END es5503_device::es5503_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, ES5503, "Ensoniq ES5503", tag, owner, clock, "es5503", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), - m_space_config("es5503_samples", ENDIANNESS_LITTLE, 8, 17, 0, nullptr, *ADDRESS_MAP_NAME(es5503)), + device_rom_interface(mconfig, *this, 17), m_irq_func(*this), m_adc_func(*this) { } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *es5503_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} //------------------------------------------------- // static_set_type - configuration helper to set @@ -184,9 +169,9 @@ void es5503_device::sound_stream_update(sound_stream &stream, stream_sample_t ** // channel strobe is always valid when reading; this allows potentially banking per voice m_channel_strobe = (ctrl>>4) & 0xf; - data = (INT32)m_direct->read_byte(ramptr + wtptr) ^ 0x80; + data = (INT32)read_byte(ramptr + wtptr) ^ 0x80; - if (m_direct->read_byte(ramptr + wtptr) == 0x00) + if (read_byte(ramptr + wtptr) == 0x00) { halt_osc(osc, 1, &acc, resshift); } @@ -227,9 +212,6 @@ void es5503_device::device_start() { int osc; - // find our direct access - m_direct = &space().direct(); - m_irq_func.resolve_safe(); m_adc_func.resolve_safe(0); diff --git a/src/devices/sound/es5503.h b/src/devices/sound/es5503.h index 941c56ef8c4..075cde4cf02 100644 --- a/src/devices/sound/es5503.h +++ b/src/devices/sound/es5503.h @@ -23,7 +23,7 @@ class es5503_device : public device_t, public device_sound_interface, - public device_memory_interface + public device_rom_interface { public: // construction/destruction @@ -50,11 +50,6 @@ protected: // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - - const address_space_config m_space_config; - devcb_write_line m_irq_func; devcb_read8 m_adc_func; @@ -96,8 +91,6 @@ private: emu_timer *m_timer; - direct_read_data *m_direct; - void halt_osc(int onum, int type, UINT32 *accumulator, int resshift); }; diff --git a/src/devices/sound/multipcm.cpp b/src/devices/sound/multipcm.cpp index 0ce61d419f7..60583bf04dc 100644 --- a/src/devices/sound/multipcm.cpp +++ b/src/devices/sound/multipcm.cpp @@ -448,16 +448,10 @@ void multipcm_device::set_bank(UINT32 leftoffs, UINT32 rightoffs) const device_type MULTIPCM = &device_creator; -// default address map -static ADDRESS_MAP_START( multipcm, AS_0, 8, multipcm_device ) - AM_RANGE(0x000000, 0x3fffff) AM_ROM -ADDRESS_MAP_END - multipcm_device::multipcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, MULTIPCM, "Sega/Yamaha 315-5560", tag, owner, clock, "multipcm", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), - m_space_config("mpcm_samples", ENDIANNESS_LITTLE, 8, 24, 0, nullptr), + device_rom_interface(mconfig, *this, 24), m_stream(nullptr), m_samples(nullptr), m_slots(nullptr), @@ -469,7 +463,6 @@ multipcm_device::multipcm_device(const machine_config &mconfig, const char *tag, m_attack_step(nullptr), m_decay_release_step(nullptr), m_freq_step_table(nullptr), - m_direct(nullptr), m_left_pan_table(nullptr), m_right_pan_table(nullptr), m_linear_to_exp_volume(nullptr), @@ -477,18 +470,8 @@ multipcm_device::multipcm_device(const machine_config &mconfig, const char *tag, m_pitch_scale_tables(nullptr), m_amplitude_scale_tables(nullptr) { - m_address_map[0] = *ADDRESS_MAP_NAME(multipcm); } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *multipcm_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} //------------------------------------------------- // device_config_complete - perform any @@ -506,9 +489,6 @@ void multipcm_device::device_config_complete() void multipcm_device::device_start() { - // find our direct access - m_direct = &space().direct(); - const float clock_divider = 180.0f; m_rate = (float)clock() / clock_divider; @@ -612,7 +592,7 @@ void multipcm_device::device_start() for (INT32 sample_byte = 0; sample_byte < 12; sample_byte++) { - data[sample_byte] = (UINT8)m_direct->read_byte((sample * 12) + sample_byte); + data[sample_byte] = (UINT8)read_byte((sample * 12) + sample_byte); } m_samples[sample].m_start = (data[0] << 16) | (data[1] << 8) | (data[2] << 0); @@ -711,7 +691,7 @@ void multipcm_device::sound_stream_update(sound_stream &stream, stream_sample_t UINT32 vol = (slot->m_total_level >> TL_SHIFT) | (slot->m_pan << 7); UINT32 adr = slot->m_offset >> TL_SHIFT; UINT32 step = slot->m_step; - INT32 csample = (INT16) (m_direct->read_byte(slot->m_base + adr) << 8); + INT32 csample = (INT16) (read_byte(slot->m_base + adr) << 8); INT32 fpart = slot->m_offset & ((1 << TL_SHIFT) - 1); INT32 sample = (csample * fpart + slot->m_prev_sample * ((1 << TL_SHIFT) - fpart)) >> TL_SHIFT; diff --git a/src/devices/sound/multipcm.h b/src/devices/sound/multipcm.h index 3abb6bd214e..8b66783f67e 100644 --- a/src/devices/sound/multipcm.h +++ b/src/devices/sound/multipcm.h @@ -7,7 +7,7 @@ class multipcm_device : public device_t, public device_sound_interface, - public device_memory_interface + public device_rom_interface { public: multipcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); @@ -26,11 +26,6 @@ protected: // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - - const address_space_config m_space_config; - private: struct sample_t { @@ -110,8 +105,6 @@ private: UINT32 *m_decay_release_step; // Envelope step tables UINT32 *m_freq_step_table; // Frequency step table - direct_read_data *m_direct; - INT32 *m_left_pan_table; INT32 *m_right_pan_table; INT32 *m_linear_to_exp_volume; diff --git a/src/devices/sound/okim6295.cpp b/src/devices/sound/okim6295.cpp index d7af7157792..f5b2490fb52 100644 --- a/src/devices/sound/okim6295.cpp +++ b/src/devices/sound/okim6295.cpp @@ -71,12 +71,6 @@ const UINT8 okim6295_device::s_volume_table[16] = 0x00, }; -// default address map -static ADDRESS_MAP_START( okim6295, AS_0, 8, okim6295_device ) - AM_RANGE(0x00000, 0x3ffff) AM_ROM -ADDRESS_MAP_END - - //************************************************************************** // LIVE DEVICE @@ -89,15 +83,13 @@ ADDRESS_MAP_END okim6295_device::okim6295_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, OKIM6295, "OKI6295", tag, owner, clock, "okim6295", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), - m_space_config("samples", ENDIANNESS_LITTLE, 8, 18, 0, nullptr, *ADDRESS_MAP_NAME(okim6295)), + device_rom_interface(mconfig, *this, 18), m_region(*this, DEVICE_SELF), m_command(-1), m_bank_installed(false), m_bank_offs(0), m_stream(nullptr), - m_pin7_state(0), - m_direct(nullptr) + m_pin7_state(0) { } @@ -120,9 +112,6 @@ void okim6295_device::static_set_pin7(device_t &device, int pin7) void okim6295_device::device_start() { - // find our direct access - m_direct = &space().direct(); - // create the stream int divisor = m_pin7_state ? 132 : 165; m_stream = machine().sound().stream_alloc(*this, 0, 1, clock() / divisor); @@ -179,17 +168,6 @@ void okim6295_device::device_clock_changed() } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *okim6295_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} - - //------------------------------------------------- // stream_generate - handle update requests for // our sound stream @@ -202,7 +180,7 @@ void okim6295_device::sound_stream_update(sound_stream &stream, stream_sample_t // iterate over voices and accumulate sample data for (auto & elem : m_voice) - elem.generate_adpcm(*m_direct, outputs[0], samples); + elem.generate_adpcm(*this, outputs[0], samples); } @@ -304,14 +282,14 @@ void okim6295_device::write_command(UINT8 command) // determine the start/stop positions offs_t base = m_command * 8; - offs_t start = m_direct->read_byte(base + 0) << 16; - start |= m_direct->read_byte(base + 1) << 8; - start |= m_direct->read_byte(base + 2) << 0; + offs_t start = read_byte(base + 0) << 16; + start |= read_byte(base + 1) << 8; + start |= read_byte(base + 2) << 0; start &= 0x3ffff; - offs_t stop = m_direct->read_byte(base + 3) << 16; - stop |= m_direct->read_byte(base + 4) << 8; - stop |= m_direct->read_byte(base + 5) << 0; + offs_t stop = read_byte(base + 3) << 16; + stop |= read_byte(base + 4) << 8; + stop |= read_byte(base + 5) << 0; stop &= 0x3ffff; if (start < stop) @@ -396,7 +374,7 @@ okim6295_device::okim_voice::okim_voice() // add them to an output stream //------------------------------------------------- -void okim6295_device::okim_voice::generate_adpcm(direct_read_data &direct, stream_sample_t *buffer, int samples) +void okim6295_device::okim_voice::generate_adpcm(device_rom_interface &rom, stream_sample_t *buffer, int samples) { // skip if not active if (!m_playing) @@ -406,7 +384,7 @@ void okim6295_device::okim_voice::generate_adpcm(direct_read_data &direct, strea while (samples-- != 0) { // fetch the next sample byte - int nibble = direct.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4); + int nibble = rom.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4); // output to the buffer, scaling by the volume // signal in range -2048..2047, volume in range 2..32 => signal * volume / 2 in range -32768..32767 diff --git a/src/devices/sound/okim6295.h b/src/devices/sound/okim6295.h index 4fb85839f5c..b637ed057a4 100644 --- a/src/devices/sound/okim6295.h +++ b/src/devices/sound/okim6295.h @@ -54,7 +54,7 @@ enum class okim6295_device : public device_t, public device_sound_interface, - public device_memory_interface + public device_rom_interface { public: // construction/destruction @@ -80,9 +80,6 @@ protected: virtual void device_post_load() override; virtual void device_clock_changed() override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; @@ -91,7 +88,7 @@ protected: { public: okim_voice(); - void generate_adpcm(direct_read_data &direct, stream_sample_t *buffer, int samples); + void generate_adpcm(device_rom_interface &rom, stream_sample_t *buffer, int samples); oki_adpcm_state m_adpcm; // current ADPCM state bool m_playing; @@ -102,7 +99,6 @@ protected: }; // configuration state - const address_space_config m_space_config; optional_memory_region m_region; // internal state @@ -114,7 +110,6 @@ protected: offs_t m_bank_offs; sound_stream * m_stream; UINT8 m_pin7_state; - direct_read_data * m_direct; static const UINT8 s_volume_table[16]; }; diff --git a/src/devices/sound/okim9810.cpp b/src/devices/sound/okim9810.cpp index cd89d77a3e0..059cdb63b4d 100644 --- a/src/devices/sound/okim9810.cpp +++ b/src/devices/sound/okim9810.cpp @@ -62,11 +62,6 @@ const UINT32 okim9810_device::s_sampling_freq_table[16] = 0 }; -// default address map -static ADDRESS_MAP_START( okim9810, AS_0, 8, okim9810_device ) - AM_RANGE(0x000000, 0xffffff) AM_ROM -ADDRESS_MAP_END - //************************************************************************** @@ -80,8 +75,7 @@ ADDRESS_MAP_END okim9810_device::okim9810_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, OKIM9810, "OKI9810", tag, owner, clock, "okim9810", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), - m_space_config("samples", ENDIANNESS_BIG, 8, 24, 0, nullptr, *ADDRESS_MAP_NAME(okim9810)), + device_rom_interface(mconfig, *this, 24), m_stream(nullptr), m_TMP_register(0x00), m_global_volume(0x00), @@ -97,9 +91,6 @@ okim9810_device::okim9810_device(const machine_config &mconfig, const char *tag, void okim9810_device::device_start() { - // find our direct access - m_direct = &space().direct(); - // create the stream //int divisor = m_pin7 ? 132 : 165; m_stream = machine().sound().stream_alloc(*this, 0, 2, clock()); @@ -168,16 +159,6 @@ void okim9810_device::device_clock_changed() } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *okim9810_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} - //------------------------------------------------- // stream_generate - handle update requests for @@ -192,7 +173,7 @@ void okim9810_device::sound_stream_update(sound_stream &stream, stream_sample_t // iterate over voices and accumulate sample data for (auto & elem : m_voice) - elem.generate_audio(*m_direct, outputs, samples, m_global_volume, clock(), m_filter_type); + elem.generate_audio(*this, outputs, samples, m_global_volume, clock(), m_filter_type); } @@ -313,31 +294,31 @@ void okim9810_device::write_command(UINT8 data) const offs_t base = m_TMP_register * 8; offs_t startAddr; - UINT8 startFlags = m_direct->read_byte(base + 0); - startAddr = m_direct->read_byte(base + 1) << 16; - startAddr |= m_direct->read_byte(base + 2) << 8; - startAddr |= m_direct->read_byte(base + 3) << 0; + UINT8 startFlags = read_byte(base + 0); + startAddr = read_byte(base + 1) << 16; + startAddr |= read_byte(base + 2) << 8; + startAddr |= read_byte(base + 3) << 0; offs_t endAddr; - UINT8 endFlags = m_direct->read_byte(base + 4); - endAddr = m_direct->read_byte(base + 5) << 16; - endAddr |= m_direct->read_byte(base + 6) << 8; - endAddr |= m_direct->read_byte(base + 7) << 0; + UINT8 endFlags = read_byte(base + 4); + endAddr = read_byte(base + 5) << 16; + endAddr |= read_byte(base + 6) << 8; + endAddr |= read_byte(base + 7) << 0; // Sub-table if (startFlags & 0x80) { offs_t subTable = startAddr; // TODO: New startFlags &= 0x80. Are there further subtables? - startFlags = m_direct->read_byte(subTable + 0); - startAddr = m_direct->read_byte(subTable + 1) << 16; - startAddr |= m_direct->read_byte(subTable + 2) << 8; - startAddr |= m_direct->read_byte(subTable + 3) << 0; + startFlags = read_byte(subTable + 0); + startAddr = read_byte(subTable + 1) << 16; + startAddr |= read_byte(subTable + 2) << 8; + startAddr |= read_byte(subTable + 3) << 0; // TODO: What does byte (subTable + 4) refer to? - endAddr = m_direct->read_byte(subTable + 5) << 16; - endAddr |= m_direct->read_byte(subTable + 6) << 8; - endAddr |= m_direct->read_byte(subTable + 7) << 0; + endAddr = read_byte(subTable + 5) << 16; + endAddr |= read_byte(subTable + 6) << 8; + endAddr |= read_byte(subTable + 7) << 0; } m_voice[channel].m_sample = 0; @@ -446,7 +427,7 @@ okim9810_device::okim_voice::okim_voice() // add them to an output stream //------------------------------------------------- -void okim9810_device::okim_voice::generate_audio(direct_read_data &direct, +void okim9810_device::okim_voice::generate_audio(device_rom_interface &rom, stream_sample_t **buffers, int samples, const UINT8 global_volume, @@ -478,7 +459,7 @@ void okim9810_device::okim_voice::generate_audio(direct_read_data &direct, if (m_sample == 0) { // fetch the first sample nibble - int nibble0 = direct.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4); + int nibble0 = rom.read_byte(m_base_offset + m_sample / 2) >> (((m_sample & 1) << 2) ^ 4); switch (m_playbackAlgo) { case OKIM9810_ADPCM_PLAYBACK: @@ -504,7 +485,7 @@ void okim9810_device::okim_voice::generate_audio(direct_read_data &direct, } // And fetch the second sample nibble - int nibble1 = direct.read_byte(m_base_offset + (m_sample+1) / 2) >> ((((m_sample+1) & 1) << 2) ^ 4); + int nibble1 = rom.read_byte(m_base_offset + (m_sample+1) / 2) >> ((((m_sample+1) & 1) << 2) ^ 4); switch (m_playbackAlgo) { case OKIM9810_ADPCM_PLAYBACK: diff --git a/src/devices/sound/okim9810.h b/src/devices/sound/okim9810.h index ea37366288e..5bdafed1f3b 100644 --- a/src/devices/sound/okim9810.h +++ b/src/devices/sound/okim9810.h @@ -68,7 +68,7 @@ enum class okim9810_device : public device_t, public device_sound_interface, - public device_memory_interface + public device_rom_interface { public: // construction/destruction @@ -89,9 +89,6 @@ protected: virtual void device_post_load() override; virtual void device_clock_changed() override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; @@ -100,7 +97,7 @@ protected: { public: okim_voice(); - void generate_audio(direct_read_data &direct, + void generate_audio(device_rom_interface &rom, stream_sample_t **buffers, int samples, const UINT8 global_volume, @@ -137,10 +134,8 @@ protected: }; // internal state - const address_space_config m_space_config; sound_stream* m_stream; - direct_read_data* m_direct; UINT8 m_TMP_register; diff --git a/src/devices/sound/qs1000.cpp b/src/devices/sound/qs1000.cpp index 07a8fc1223e..80e7526b7be 100644 --- a/src/devices/sound/qs1000.cpp +++ b/src/devices/sound/qs1000.cpp @@ -167,12 +167,6 @@ ROM_START( qs1000 ) ROM_END -// Wavetable ROM address map -static ADDRESS_MAP_START( qs1000, AS_0, 8, qs1000_device ) - AM_RANGE(0x000000, 0xffffff) AM_ROM AM_REGION("qs1000", 0) -ADDRESS_MAP_END - - //************************************************************************** // LIVE DEVICE //************************************************************************** @@ -183,7 +177,7 @@ ADDRESS_MAP_END qs1000_device::qs1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, QS1000, "QS1000", tag, owner, clock, "qs1000", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), + device_rom_interface(mconfig, *this, 24), m_external_rom(false), m_in_p1_cb(*this), m_in_p2_cb(*this), @@ -192,12 +186,9 @@ qs1000_device::qs1000_device(const machine_config &mconfig, const char *tag, dev m_out_p2_cb(*this), m_out_p3_cb(*this), //m_serial_w_cb(*this), - m_space_config("samples", ENDIANNESS_LITTLE, 8, 24, 0, nullptr), m_stream(nullptr), - m_direct(nullptr), m_cpu(*this, "cpu") { - m_address_map[0] = *ADDRESS_MAP_NAME(qs1000); } @@ -226,9 +217,6 @@ machine_config_constructor qs1000_device::device_mconfig_additions() const //------------------------------------------------- void qs1000_device::device_start() { - // Find our direct access - m_direct = &space().direct(); - // The QS1000 operates at 24MHz. Creating a stream at that rate // would be overkill so we opt for a fraction of that rate which // gives reasonable results @@ -311,16 +299,6 @@ void qs1000_device::device_reset() } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- -const address_space_config *qs1000_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} - - //------------------------------------------------- // device_timer - handle deferred writes and // resets as a timer callback @@ -520,7 +498,7 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t ** if (chan.m_start + chan.m_adpcm_addr >= chan.m_loop_end) chan.m_adpcm_addr = chan.m_loop_start - chan.m_start; - UINT8 data = m_direct->read_byte(chan.m_start + (chan.m_adpcm_addr >> 1)); + UINT8 data = read_byte(chan.m_start + (chan.m_adpcm_addr >> 1)); UINT8 nibble = (chan.m_adpcm_addr & 1 ? data : data >> 4) & 0xf; chan.m_adpcm_signal = chan.m_adpcm.clock(nibble); } @@ -553,7 +531,7 @@ void qs1000_device::sound_stream_update(sound_stream &stream, stream_sample_t ** } } - INT8 result = m_direct->read_byte(chan.m_addr) - 128; + INT8 result = read_byte(chan.m_addr) - 128; chan.m_acc += chan.m_freq; chan.m_addr = (chan.m_addr + (chan.m_acc >> 18)) & QS1000_ADDRESS_MASK; @@ -573,9 +551,9 @@ void qs1000_device::start_voice(int ch) UINT32 table_addr = (m_channels[ch].m_regs[0x01] << 16) | (m_channels[ch].m_regs[0x02] << 8) | m_channels[ch].m_regs[0x03]; // Fetch the sound information - UINT16 freq = (m_direct->read_byte(table_addr + 0) << 8) | m_direct->read_byte(table_addr + 1); - UINT16 word1 = (m_direct->read_byte(table_addr + 2) << 8) | m_direct->read_byte(table_addr + 3); - UINT16 base = (m_direct->read_byte(table_addr + 4) << 8) | m_direct->read_byte(table_addr + 5); + UINT16 freq = (read_byte(table_addr + 0) << 8) | read_byte(table_addr + 1); + UINT16 word1 = (read_byte(table_addr + 2) << 8) | read_byte(table_addr + 3); + UINT16 base = (read_byte(table_addr + 4) << 8) | read_byte(table_addr + 5); if (LOGGING_ENABLED) printf("[%.6x] Freq:%.4x ????:%.4x Addr:%.4x\n", table_addr, freq, word1, base); @@ -585,42 +563,42 @@ void qs1000_device::start_voice(int ch) return; // Fetch the sample pointers and flags - UINT8 byte0 = m_direct->read_byte(base); + UINT8 byte0 = read_byte(base); UINT32 start_addr; start_addr = byte0 << 16; - start_addr |= m_direct->read_byte(base + 1) << 8; - start_addr |= m_direct->read_byte(base + 2) << 0; + start_addr |= read_byte(base + 1) << 8; + start_addr |= read_byte(base + 2) << 0; start_addr &= QS1000_ADDRESS_MASK; UINT32 loop_start; loop_start = (byte0 & 0xf0) << 16; - loop_start |= m_direct->read_byte(base + 3) << 12; - loop_start |= m_direct->read_byte(base + 4) << 4; - loop_start |= m_direct->read_byte(base + 5) >> 4; + loop_start |= read_byte(base + 3) << 12; + loop_start |= read_byte(base + 4) << 4; + loop_start |= read_byte(base + 5) >> 4; loop_start &= QS1000_ADDRESS_MASK; UINT32 loop_end; loop_end = (byte0 & 0xf0) << 16; - loop_end |= (m_direct->read_byte(base + 5) & 0xf) << 16; - loop_end |= m_direct->read_byte(base + 6) << 8; - loop_end |= m_direct->read_byte(base + 7); + loop_end |= (read_byte(base + 5) & 0xf) << 16; + loop_end |= read_byte(base + 6) << 8; + loop_end |= read_byte(base + 7); loop_end &= QS1000_ADDRESS_MASK; - UINT8 byte8 = m_direct->read_byte(base + 8); + UINT8 byte8 = read_byte(base + 8); if (LOGGING_ENABLED) { - UINT8 byte9 = m_direct->read_byte(base + 9); - UINT8 byte10 = m_direct->read_byte(base + 10); - UINT8 byte11 = m_direct->read_byte(base + 11); - UINT8 byte12 = m_direct->read_byte(base + 12); - UINT8 byte13 = m_direct->read_byte(base + 13); - UINT8 byte14 = m_direct->read_byte(base + 14); - UINT8 byte15 = m_direct->read_byte(base + 15); + UINT8 byte9 = read_byte(base + 9); + UINT8 byte10 = read_byte(base + 10); + UINT8 byte11 = read_byte(base + 11); + UINT8 byte12 = read_byte(base + 12); + UINT8 byte13 = read_byte(base + 13); + UINT8 byte14 = read_byte(base + 14); + UINT8 byte15 = read_byte(base + 15); printf("[%.6x] Sample Start:%.6x Loop Start:%.6x Loop End:%.6x Params: %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n", base, start_addr, loop_start, loop_end, byte8, byte9, byte10, byte11, byte12, byte13, byte14, byte15); } diff --git a/src/devices/sound/qs1000.h b/src/devices/sound/qs1000.h index 48545485169..b47576a7245 100644 --- a/src/devices/sound/qs1000.h +++ b/src/devices/sound/qs1000.h @@ -55,7 +55,7 @@ class qs1000_device : public device_t, public device_sound_interface, - public device_memory_interface + public device_rom_interface { public: // construction/destruction @@ -82,9 +82,6 @@ protected: virtual void device_reset() override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; @@ -128,9 +125,7 @@ public: //devcb_write8 m_serial_w_cb; // Internal state - const address_space_config m_space_config; sound_stream * m_stream; - direct_read_data * m_direct; required_device m_cpu; // Wavetable engine diff --git a/src/devices/sound/segapcm.cpp b/src/devices/sound/segapcm.cpp index 555ee019b16..d0e7864dd1f 100644 --- a/src/devices/sound/segapcm.cpp +++ b/src/devices/sound/segapcm.cpp @@ -19,7 +19,7 @@ const device_type SEGAPCM = &device_creator; segapcm_device::segapcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, SEGAPCM, "Sega PCM", tag, owner, clock, "segapcm", __FILE__), device_sound_interface(mconfig, *this), - m_rom(*this, DEVICE_SELF), + device_rom_interface(mconfig, *this, 21), m_ram(nullptr), m_bank(0), m_bankshift(0), @@ -35,7 +35,7 @@ segapcm_device::segapcm_device(const machine_config &mconfig, const char *tag, d void segapcm_device::device_start() { - int mask, rom_mask; + int mask; m_ram = std::make_unique(0x800); @@ -46,10 +46,7 @@ void segapcm_device::device_start() if (!mask) mask = BANK_MASK7 >> 16; - for(rom_mask = 1; rom_mask < m_rom.length(); rom_mask *= 2) { }; - rom_mask--; - - m_bankmask = mask & (rom_mask >> m_bankshift); + m_bankmask = mask & (0x1fffff >> m_bankshift); m_stream = stream_alloc(0, 2, clock() / 128); @@ -97,7 +94,7 @@ void segapcm_device::sound_stream_update(sound_stream &stream, stream_sample_t * /* only process active channels */ if (!(regs[0x86]&1)) { - const UINT8 *rom = m_rom + ((regs[0x86] & m_bankmask) << m_bankshift); + int offset = (regs[0x86] & m_bankmask) << m_bankshift; UINT32 addr = (regs[0x85] << 16) | (regs[0x84] << 8) | m_low[ch]; UINT32 loop = (regs[0x05] << 16) | (regs[0x04] << 8); UINT8 end = regs[6] + 1; @@ -120,7 +117,7 @@ void segapcm_device::sound_stream_update(sound_stream &stream, stream_sample_t * } /* fetch the sample */ - v = rom[(addr >> 8) & m_rom.mask()] - 0x80; + v = read_byte(offset + (addr >> 8)) - 0x80; /* apply panning and advance */ outputs[0][i] += v * (regs[2] & 0x7f); diff --git a/src/devices/sound/segapcm.h b/src/devices/sound/segapcm.h index 48474134b46..5861db66940 100644 --- a/src/devices/sound/segapcm.h +++ b/src/devices/sound/segapcm.h @@ -35,7 +35,8 @@ //************************************************************************** class segapcm_device : public device_t, - public device_sound_interface + public device_sound_interface, + public device_rom_interface { public: segapcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); @@ -55,7 +56,6 @@ protected: virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; private: - required_region_ptr m_rom; std::unique_ptr m_ram; UINT8 m_low[16]; int m_bank; diff --git a/src/devices/sound/vlm5030.cpp b/src/devices/sound/vlm5030.cpp index 90295f2807e..eabdbccb89e 100644 --- a/src/devices/sound/vlm5030.cpp +++ b/src/devices/sound/vlm5030.cpp @@ -159,16 +159,10 @@ static const int vlm5030_speed_table[8] = const device_type VLM5030 = &device_creator; -// default address map -static ADDRESS_MAP_START( vlm5030, AS_0, 8, vlm5030_device ) - AM_RANGE(0x0000, 0xffff) AM_ROM -ADDRESS_MAP_END - vlm5030_device::vlm5030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, VLM5030, "VLM5030", tag, owner, clock, "vlm5030", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), - m_space_config("samples", ENDIANNESS_LITTLE, 8, 16, 0, nullptr, *ADDRESS_MAP_NAME(vlm5030)), + device_rom_interface(mconfig, *this, 16), m_channel(nullptr), m_coeff(nullptr), m_address(0), @@ -202,16 +196,6 @@ vlm5030_device::vlm5030_device(const machine_config &mconfig, const char *tag, d memset(m_x, 0, sizeof(m_x)); } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *vlm5030_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == AS_0) ? &m_space_config : nullptr; -} - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -284,8 +268,7 @@ int vlm5030_device::get_bits(int sbit,int bits) int offset = m_address + (sbit>>3); int data; - data = space(AS_0).read_byte(offset) | - space(AS_0).read_byte(offset+1)<<8; + data = read_byte(offset) | (read_byte(offset+1)<<8); data >>= (sbit&7); data &= (0xff>>(8-bits)); @@ -305,7 +288,7 @@ int vlm5030_device::parse_frame() m_old_k[i] = m_new_k[i]; /* command byte check */ - cmd = space(AS_0).read_byte(m_address); + cmd = read_byte(m_address); if( cmd & 0x01 ) { /* extend frame */ m_new_energy = m_new_pitch = 0; @@ -469,8 +452,7 @@ WRITE_LINE_MEMBER( vlm5030_device::st ) else { /* indirect accedd mode */ table = (m_latch_data&0xfe) + (((int)m_latch_data&1)<<8); - m_address = (space(AS_0).read_byte(table)<<8) - | space(AS_0).read_byte(table+1); + m_address = (read_byte(table)<<8) | read_byte(table+1); #if 0 /* show unsupported parameter message */ if( m_interp_step != 1) diff --git a/src/devices/sound/vlm5030.h b/src/devices/sound/vlm5030.h index ca5dca436d7..93768a8c14f 100644 --- a/src/devices/sound/vlm5030.h +++ b/src/devices/sound/vlm5030.h @@ -6,7 +6,7 @@ #define __VLM5030_H__ class vlm5030_device : public device_t, - public device_sound_interface, public device_memory_interface + public device_sound_interface, public device_rom_interface { public: vlm5030_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); @@ -32,9 +32,6 @@ protected: virtual void device_start() override; virtual void device_reset() override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; diff --git a/src/devices/sound/ymf278b.cpp b/src/devices/sound/ymf278b.cpp index 67db79498e7..30984c780c5 100644 --- a/src/devices/sound/ymf278b.cpp +++ b/src/devices/sound/ymf278b.cpp @@ -54,12 +54,6 @@ #define LOG(x) do { if (VERBOSE) logerror x; } while (0) -// default address map -static ADDRESS_MAP_START( ymf278b, AS_0, 8, ymf278b_device ) - AM_RANGE(0x000000, 0x3fffff) AM_ROM -ADDRESS_MAP_END - - /**************************************************************************/ int ymf278b_device::compute_rate(YMF278BSlot *slot, int val) @@ -255,23 +249,23 @@ void ymf278b_device::sound_stream_update(sound_stream &stream, stream_sample_t * { // 8 bit case 0: - sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>16))<<8; + sample = read_byte(slot->startaddr + (slot->stepptr>>16))<<8; break; // 12 bit case 1: if (slot->stepptr & 0x10000) - sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 | - (m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0); + sample = read_byte(slot->startaddr + (slot->stepptr>>17)*3+2)<<8 | + (read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) << 4 & 0xf0); else - sample = m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 | - (m_direct->read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0); + sample = read_byte(slot->startaddr + (slot->stepptr>>17)*3)<<8 | + (read_byte(slot->startaddr + (slot->stepptr>>17)*3+1) & 0xf0); break; // 16 bit case 2: - sample = m_direct->read_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 | - m_direct->read_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1); + sample = read_byte(slot->startaddr + ((slot->stepptr>>16)*2))<<8 | + read_byte(slot->startaddr + ((slot->stepptr>>16)*2)+1); break; // ?? bit, effect is unknown, datasheet says it's prohibited @@ -485,7 +479,7 @@ void ymf278b_device::C_w(UINT8 reg, UINT8 data) else offset = m_wavetblhdr*0x80000 + (slot->wave - 384) * 12; for (i = 0; i < 12; i++) - p[i] = m_direct->read_byte(offset+i); + p[i] = read_byte(offset+i); slot->bits = (p[0]&0xc0)>>6; slot->startaddr = (p[2] | (p[1]<<8) | ((p[0]&0x3f)<<16)); @@ -762,7 +756,7 @@ READ8_MEMBER( ymf278b_device::read ) ret = (m_pcmregs[m_port_C] & 0x1f) | 0x20; // device ID in upper bits break; case 6: - ret = m_direct->read_byte(m_memadr); + ret = read_byte(m_memadr); m_memadr = (m_memadr + 1) & 0x3fffff; break; @@ -969,7 +963,6 @@ void ymf278b_device::device_start() { int i; - m_direct = &space().direct(); m_clock = clock(); m_irq_handler.resolve(); @@ -1032,12 +1025,10 @@ const device_type YMF278B = &device_creator; ymf278b_device::ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, YMF278B, "YMF278B", tag, owner, clock, "ymf278b", __FILE__), device_sound_interface(mconfig, *this), - device_memory_interface(mconfig, *this), - m_space_config("samples", ENDIANNESS_BIG, 8, 22, 0, nullptr), + device_rom_interface(mconfig, *this, 22), m_irq_handler(*this), m_last_fm_data(0) { - m_address_map[0] = *ADDRESS_MAP_NAME(ymf278b); } //------------------------------------------------- diff --git a/src/devices/sound/ymf278b.h b/src/devices/sound/ymf278b.h index 6c750fcfd91..508afb5dd60 100644 --- a/src/devices/sound/ymf278b.h +++ b/src/devices/sound/ymf278b.h @@ -14,7 +14,7 @@ class ymf278b_device : public device_t, public device_sound_interface, - public device_memory_interface + public device_rom_interface { public: ymf278b_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); @@ -36,9 +36,6 @@ protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override { return (spacenum == AS_0) ? &m_space_config : nullptr; } - // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; @@ -131,8 +128,6 @@ private: sound_stream * m_stream; std::unique_ptr m_mix_buffer; - direct_read_data * m_direct; - const address_space_config m_space_config; devcb_write_line m_irq_handler; UINT8 m_last_fm_data; diff --git a/src/devices/video/gb_lcd.cpp b/src/devices/video/gb_lcd.cpp index 024ba3d777a..e4e34e8e2e7 100644 --- a/src/devices/video/gb_lcd.cpp +++ b/src/devices/video/gb_lcd.cpp @@ -419,7 +419,7 @@ void gb_lcd_device::common_reset() // specific reg initialization m_vid_regs[0x06] = 0xff; - for (int i = 0x0c; i < _NR_GB_VID_REGS; i++) + for (int i = 0x0c; i < NR_GB_VID_REGS; i++) m_vid_regs[i] = 0xff; LCDSTAT = 0x80; diff --git a/src/devices/video/gb_lcd.h b/src/devices/video/gb_lcd.h index 4e512e3da79..4c443d827e2 100644 --- a/src/devices/video/gb_lcd.h +++ b/src/devices/video/gb_lcd.h @@ -12,9 +12,6 @@ #include "emu.h" -#define _NR_GB_VID_REGS 0x40 - - struct layer_struct { UINT8 enabled; UINT8 *bg_tiles; @@ -82,7 +79,9 @@ protected: int m_window_lines_drawn; - UINT8 m_vid_regs[_NR_GB_VID_REGS]; + static constexpr unsigned NR_GB_VID_REGS = 0x40; + + UINT8 m_vid_regs[NR_GB_VID_REGS]; UINT8 m_bg_zbuf[160]; UINT16 m_cgb_bpal[32]; /* CGB current background palette table */ diff --git a/src/mame/video/gba.cpp b/src/devices/video/gba_lcd.cpp similarity index 62% rename from src/mame/video/gba.cpp rename to src/devices/video/gba_lcd.cpp index 17b8d926938..e3af8236da6 100644 --- a/src/mame/video/gba.cpp +++ b/src/devices/video/gba_lcd.cpp @@ -2,7 +2,7 @@ // copyright-holders:R. Belmont,Ryan Holtz /*************************************************************************** - gba.c + gba_lcd.c File to handle emulation of the video hardware of the Game Boy Advance @@ -11,7 +11,165 @@ ***************************************************************************/ #include "emu.h" -#include "includes/gba.h" +#include "rendlay.h" + +#include "gba_lcd.h" + +/* LCD I/O Registers */ +#define DISPCNT HWLO(0x000) /* 0x4000000 2 R/W LCD Control */ +#define GRNSWAP HWHI(0x000) /* 0x4000002 2 R/W Undocumented - Green Swap */ +#define DISPSTAT HWLO(0x004) /* 0x4000004 2 R/W General LCD Status (STAT,LYC) */ +#define VCOUNT HWHI(0x004) /* 0x4000006 2 R Vertical Counter (LY) */ +#define BG0CNT HWLO(0x008) /* 0x4000008 2 R/W BG0 Control */ +#define BG1CNT HWHI(0x008) /* 0x400000A 2 R/W BG1 Control */ +#define BG2CNT HWLO(0x00C) /* 0x400000C 2 R/W BG2 Control */ +#define BG3CNT HWHI(0x00C) /* 0x400000E 2 R/W BG3 Control */ +#define BG0HOFS HWLO(0x010) /* 0x4000010 2 W BG0 X-Offset */ +#define BG0VOFS HWHI(0x010) /* 0x4000012 2 W BG0 Y-Offset */ +#define BG1HOFS HWLO(0x014) /* 0x4000014 2 W BG1 X-Offset */ +#define BG1VOFS HWHI(0x014) /* 0x4000016 2 W BG1 Y-Offset */ +#define BG2HOFS HWLO(0x018) /* 0x4000018 2 W BG2 X-Offset */ +#define BG2VOFS HWHI(0x018) /* 0x400001A 2 W BG2 Y-Offset */ +#define BG3HOFS HWLO(0x01C) /* 0x400001C 2 W BG3 X-Offset */ +#define BG3VOFS HWHI(0x01C) /* 0x400001E 2 W BG3 Y-Offset */ +#define BG2PA HWLO(0x020) /* 0x4000020 2 W BG2 Rotation/Scaling Parameter A (dx) */ +#define BG2PB HWHI(0x020) /* 0x4000022 2 W BG2 Rotation/Scaling Parameter B (dmx) */ +#define BG2PC HWLO(0x024) /* 0x4000024 2 W BG2 Rotation/Scaling Parameter C (dy) */ +#define BG2PD HWHI(0x024) /* 0x4000026 2 W BG2 Rotation/Scaling Parameter D (dmy) */ +#define BG2X WORD(0x028) /* 0x4000028 4 W BG2 Reference Point X-Coordinate */ +#define BG2Y WORD(0x02C) /* 0x400002C 4 W BG2 Reference Point Y-Coordinate */ +#define BG3PA HWLO(0x030) /* 0x4000030 2 W BG3 Rotation/Scaling Parameter A (dx) */ +#define BG3PB HWHI(0x030) /* 0x4000032 2 W BG3 Rotation/Scaling Parameter B (dmx) */ +#define BG3PC HWLO(0x034) /* 0x4000034 2 W BG3 Rotation/Scaling Parameter C (dy) */ +#define BG3PD HWHI(0x034) /* 0x4000036 2 W BG3 Rotation/Scaling Parameter D (dmy) */ +#define BG3X WORD(0x038) /* 0x4000038 4 W BG3 Reference Point X-Coordinate */ +#define BG3Y WORD(0x03C) /* 0x400003C 4 W BG3 Reference Point Y-Coordinate */ +#define WIN0H HWLO(0x040) /* 0x4000040 2 W Window 0 Horizontal Dimensions */ +#define WIN1H HWHI(0x040) /* 0x4000042 2 W Window 1 Horizontal Dimensions */ +#define WIN0V HWLO(0x044) /* 0x4000044 2 W Window 0 Vertical Dimensions */ +#define WIN1V HWHI(0x044) /* 0x4000046 2 W Window 1 Vertical Dimensions */ +#define WININ HWLO(0x048) /* 0x4000048 2 R/W Inside of Window 0 and 1 */ +#define WINOUT HWHI(0x048) /* 0x400004A 2 R/W Inside of OBJ Window & Outside of Windows */ +#define MOSAIC HWLO(0x04C) /* 0x400004C 2 W Mosaic Size */ + /* 0x400004E 2 - Unused */ +#define BLDCNT HWLO(0x050) /* 0x4000050 2 R/W Color Special Effects Selection */ +#define BLDALPHA HWHI(0x050) /* 0x4000052 2 W Alpha Blending Coefficients */ +#define BLDY HWLO(0x054) /* 0x4000054 2 W Brightness (Fade-In/Out) Coefficient */ + /* 0x4000056 2 - Unused */ + +#define DISPSTAT_SET(val) HWLO_SET(0x004, val) +#define DISPSTAT_RESET(val) HWLO_RESET(0x004, val) + +#define DISPSTAT_VBL 0x0001 +#define DISPSTAT_HBL 0x0002 +#define DISPSTAT_VCNT 0x0004 +#define DISPSTAT_VBL_IRQ_EN 0x0008 +#define DISPSTAT_HBL_IRQ_EN 0x0010 +#define DISPSTAT_VCNT_IRQ_EN 0x0020 +#define DISPSTAT_VCNT_VALUE 0xff00 + +#define DISPCNT_MODE 0x0007 +#define DISPCNT_FRAMESEL 0x0010 +#define DISPCNT_HBL_FREE 0x0020 + +#define DISPCNT_VRAM_MAP 0x0040 +#define DISPCNT_VRAM_MAP_2D 0x0000 +#define DISPCNT_VRAM_MAP_1D 0x0040 + +#define DISPCNT_BLANK 0x0080 +#define DISPCNT_BG0_EN 0x0100 +#define DISPCNT_BG1_EN 0x0200 +#define DISPCNT_BG2_EN 0x0400 +#define DISPCNT_BG3_EN 0x0800 +#define DISPCNT_OBJ_EN 0x1000 +#define DISPCNT_WIN0_EN 0x2000 +#define DISPCNT_WIN1_EN 0x4000 +#define DISPCNT_OBJWIN_EN 0x8000 + +#define OBJ_Y_COORD 0x00ff +#define OBJ_ROZMODE 0x0300 +#define OBJ_ROZMODE_NONE 0x0000 +#define OBJ_ROZMODE_ROZ 0x0100 +#define OBJ_ROZMODE_DISABLE 0x0200 +#define OBJ_ROZMODE_DBLROZ 0x0300 + +#define OBJ_MODE 0x0c00 +#define OBJ_MODE_NORMAL 0x0000 +#define OBJ_MODE_ALPHA 0x0400 +#define OBJ_MODE_WINDOW 0x0800 +#define OBJ_MODE_UNDEFINED 0x0c00 + +#define OBJ_MOSAIC 0x1000 + +#define OBJ_PALMODE 0x2000 +#define OBJ_PALMODE_16 0x0000 +#define OBJ_PALMODE_256 0x2000 + +#define OBJ_SHAPE 0xc000 +#define OBJ_SHAPE_SQR 0x0000 +#define OBJ_SHAPE_HORIZ 0x4000 +#define OBJ_SHAPE_VERT 0x8000 + +#define OBJ_X_COORD 0x01ff +#define OBJ_SCALE_PARAM 0x3e00 +#define OBJ_SCALE_PARAM_SHIFT 9 +#define OBJ_HFLIP 0x1000 +#define OBJ_VFLIP 0x2000 +#define OBJ_SIZE 0xc000 +#define OBJ_SIZE_8 0x0000 +#define OBJ_SIZE_16 0x4000 +#define OBJ_SIZE_32 0x8000 +#define OBJ_SIZE_64 0xc000 + +#define OBJ_TILENUM 0x03ff +#define OBJ_PRIORITY 0x0c00 +#define OBJ_PRIORITY_SHIFT 10 +#define OBJ_PALNUM 0xf000 +#define OBJ_PALNUM_SHIFT 12 + +#define BGCNT_SCREENSIZE 0xc000 +#define BGCNT_SCREENSIZE_SHIFT 14 +#define BGCNT_PALETTESET_WRAP 0x2000 +#define BGCNT_SCREENBASE 0x1f00 +#define BGCNT_SCREENBASE_SHIFT 8 +#define BGCNT_PALETTE256 0x0080 +#define BGCNT_MOSAIC 0x0040 +#define BGCNT_CHARBASE 0x003c +#define BGCNT_CHARBASE_SHIFT 2 +#define BGCNT_PRIORITY 0x0003 + +#define BLDCNT_BG0TP1 0x0001 +#define BLDCNT_BG1TP1 0x0002 +#define BLDCNT_BG2TP1 0x0004 +#define BLDCNT_BG3TP1 0x0008 +#define BLDCNT_OBJTP1 0x0010 +#define BLDCNT_BDTP1 0x0020 +#define BLDCNT_SFX 0x00c0 +#define BLDCNT_SFX_NONE 0x0000 +#define BLDCNT_SFX_ALPHA 0x0040 +#define BLDCNT_SFX_LIGHTEN 0x0080 +#define BLDCNT_SFX_DARKEN 0x00c0 +#define BLDCNT_BG0TP2 0x0100 +#define BLDCNT_BG1TP2 0x0200 +#define BLDCNT_BG2TP2 0x0400 +#define BLDCNT_BG3TP2 0x0800 +#define BLDCNT_OBJTP2 0x1000 +#define BLDCNT_BDTP2 0x2000 +#define BLDCNT_TP2_SHIFT 8 + +#define TILEOBJ_TILE 0x03ff +#define TILEOBJ_HFLIP 0x0400 +#define TILEOBJ_VFLIP 0x0800 +#define TILEOBJ_PALETTE 0xf000 + +#define GBA_MODE0 0 +#define GBA_MODE1 1 +#define GBA_MODE2 2 +#define GBA_MODE345 3 + +#define GBA_SUBMODE0 0 +#define GBA_SUBMODE1 1 +#define GBA_SUBMODE2 2 #define VERBOSE_LEVEL (0) @@ -24,7 +182,7 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, co va_start( v, s_fmt ); vsprintf( buf, s_fmt, v ); va_end( v ); - device.logerror( "%08x: %s", device.machine().driver_data()->m_maincpu->pc(), buf ); + device.logerror( "%08x: %s", device.machine().describe_context(), buf ); } } @@ -33,21 +191,77 @@ static const int coeff[32] = { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 }; -/* Utility functions */ -static inline UINT32 alpha_blend_pixel(UINT32 color0, UINT32 color1, int ca, int cb); -static inline UINT32 increase_brightness(UINT32 color, int coeff_); -static inline UINT32 decrease_brightness(UINT32 color, int coeff_); +static inline UINT32 alpha_blend_pixel(UINT32 color0, UINT32 color1, int ca, int cb) +{ + if(color0 < 0x80000000) + { + int r0 = (color0 >> 0) & 0x1f; + int g0 = (color0 >> 5) & 0x1f; + int b0 = (color0 >> 10) & 0x1f; + int r1 = (color1 >> 0) & 0x1f; + int g1 = (color1 >> 5) & 0x1f; + int b1 = (color1 >> 10) & 0x1f; + int r = ((r0 * ca) >> 4) + ((r1 * cb) >> 4); + int g = ((g0 * ca) >> 4) + ((g1 * cb) >> 4); + int b = ((b0 * ca) >> 4) + ((b1 * cb) >> 4); -#define GBA_MODE0 0 -#define GBA_MODE1 1 -#define GBA_MODE2 2 -#define GBA_MODE345 3 + if(r > 0x1f) r = 0x1f; + if(g > 0x1f) g = 0x1f; + if(b > 0x1f) b = 0x1f; -#define GBA_SUBMODE0 0 -#define GBA_SUBMODE1 1 -#define GBA_SUBMODE2 2 + return (color0 & 0xffff0000) | (b << 10) | (g << 5) | r; + } + return color0; +} -inline void gba_state::update_mask(UINT8* mask, int mode, int submode, UINT32* obj_win, UINT8 inwin0, UINT8 inwin1, UINT8 in0_mask, UINT8 in1_mask, UINT8 out_mask) +static inline UINT32 increase_brightness(UINT32 color, int coeff_) +{ + int r = (color >> 0) & 0x1f; + int g = (color >> 5) & 0x1f; + int b = (color >> 10) & 0x1f; + + r += ((0x1f - r) * coeff_) >> 4; + g += ((0x1f - g) * coeff_) >> 4; + b += ((0x1f - b) * coeff_) >> 4; + + if(r > 0x1f) r = 0x1f; + if(g > 0x1f) g = 0x1f; + if(b > 0x1f) b = 0x1f; + + return (color & 0xffff0000) | (b << 10) | (g << 5) | r; +} + +static inline UINT32 decrease_brightness(UINT32 color, int coeff_) +{ + int r = (color >> 0) & 0x1f; + int g = (color >> 5) & 0x1f; + int b = (color >> 10) & 0x1f; + + r -= (r * coeff_) >> 4; + g -= (g * coeff_) >> 4; + b -= (b * coeff_) >> 4; + + if(r < 0) r = 0; + if(g < 0) g = 0; + if(b < 0) b = 0; + + return (color & 0xffff0000) | (b << 10) | (g << 5) | r; +} + +const device_type GBA_LCD = &device_creator; + +gba_lcd_device::gba_lcd_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, GBA_LCD, "GBA LCD", tag, owner, clock, "gba_lcd", __FILE__) + , device_video_interface(mconfig, *this) + , m_int_hblank_cb(*this) + , m_int_vblank_cb(*this) + , m_int_vcount_cb(*this) + , m_dma_hblank_cb(*this) + , m_dma_vblank_cb(*this) +{ +} + +inline void gba_lcd_device::update_mask(UINT8* mask, int mode, int submode, UINT32* obj_win, UINT8 inwin0, UINT8 inwin1, UINT8 in0_mask, UINT8 in1_mask, UINT8 out_mask) { UINT8 mode_mask = 0; if (submode == GBA_SUBMODE2) @@ -57,7 +271,7 @@ inline void gba_state::update_mask(UINT8* mask, int mode, int submode, UINT32* o mask[x] = out_mask; if ((obj_win[x] & 0x80000000) == 0) - mask[x] = m_WINOUT >> 8; + mask[x] = WINOUT >> 8; if (inwin1) { @@ -97,22 +311,22 @@ inline void gba_state::update_mask(UINT8* mask, int mode, int submode, UINT32* o } } -void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* line1, UINT32* line2, UINT32* line3, UINT32* lineOBJ, UINT32* lineOBJWin, UINT32* lineMix, int bpp) +void gba_lcd_device::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* line1, UINT32* line2, UINT32* line3, UINT32* lineOBJ, UINT32* lineOBJWin, UINT32* lineMix, int bpp) { - UINT32 backdrop = ((UINT16*)m_gba_pram.target())[0] | 0x30000000; + UINT32 backdrop = ((UINT16*)m_pram.get())[0] | 0x30000000; int inWindow0 = 0; int inWindow1 = 0; - UINT8 inWin0Mask = m_WININ & 0x00ff; - UINT8 inWin1Mask = m_WININ >> 8; - UINT8 outMask = m_WINOUT & 0x00ff; + UINT8 inWin0Mask = WININ & 0x00ff; + UINT8 inWin1Mask = WININ >> 8; + UINT8 outMask = WINOUT & 0x00ff; UINT8 masks[240]; // this puts together WinMasks with the fact that some modes/submodes skip specific layers! if (submode == GBA_SUBMODE2) { - if (m_DISPCNT & DISPCNT_WIN0_EN) + if (DISPCNT & DISPCNT_WIN0_EN) { - UINT8 v0 = m_WIN0V >> 8; - UINT8 v1 = m_WIN0V & 0x00ff; + UINT8 v0 = WIN0V >> 8; + UINT8 v1 = WIN0V & 0x00ff; inWindow0 = ((v0 == v1) && (v0 >= 0xe8)) ? 1 : 0; if (v1 >= v0) inWindow0 |= (y >= v0 && y < v1) ? 1 : 0; @@ -120,10 +334,10 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* inWindow0 |= (y >= v0 || y < v1) ? 1 : 0; } - if (m_DISPCNT & DISPCNT_WIN1_EN) + if (DISPCNT & DISPCNT_WIN1_EN) { - UINT8 v0 = m_WIN1V >> 8; - UINT8 v1 = m_WIN1V & 0x00ff; + UINT8 v0 = WIN1V >> 8; + UINT8 v1 = WIN1V & 0x00ff; inWindow1 = ((v0 == v1) && (v0 >= 0xe8)) ? 1 : 0; if (v1 >= v0) inWindow1 |= (y >= v0 && y < v1) ? 1 : 0; @@ -136,24 +350,24 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* switch (mode) { case 0: - draw_bg_scanline(line0, y, DISPCNT_BG0_EN, m_BG0CNT, m_BG0HOFS, m_BG0VOFS); - draw_bg_scanline(line1, y, DISPCNT_BG1_EN, m_BG1CNT, m_BG1HOFS, m_BG1VOFS); - draw_bg_scanline(line2, y, DISPCNT_BG2_EN, m_BG2CNT, m_BG2HOFS, m_BG2VOFS); - draw_bg_scanline(line3, y, DISPCNT_BG3_EN, m_BG3CNT, m_BG3HOFS, m_BG3VOFS); + draw_bg_scanline(line0, y, DISPCNT_BG0_EN, BG0CNT, BG0HOFS, BG0VOFS); + draw_bg_scanline(line1, y, DISPCNT_BG1_EN, BG1CNT, BG1HOFS, BG1VOFS); + draw_bg_scanline(line2, y, DISPCNT_BG2_EN, BG2CNT, BG2HOFS, BG2VOFS); + draw_bg_scanline(line3, y, DISPCNT_BG3_EN, BG3CNT, BG3HOFS, BG3VOFS); break; case 1: - draw_bg_scanline(line0, y, DISPCNT_BG0_EN, m_BG0CNT, m_BG0HOFS, m_BG0VOFS); - draw_bg_scanline(line1, y, DISPCNT_BG1_EN, m_BG1CNT, m_BG1HOFS, m_BG1VOFS); - draw_roz_scanline(line2, y, DISPCNT_BG2_EN, m_BG2CNT, m_BG2X, m_BG2Y, m_BG2PA, m_BG2PB, m_BG2PC, m_BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed); + draw_bg_scanline(line0, y, DISPCNT_BG0_EN, BG0CNT, BG0HOFS, BG0VOFS); + draw_bg_scanline(line1, y, DISPCNT_BG1_EN, BG1CNT, BG1HOFS, BG1VOFS); + draw_roz_scanline(line2, y, DISPCNT_BG2_EN, BG2CNT, BG2X, BG2Y, BG2PA, BG2PB, BG2PC, BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed); break; case 2: - draw_roz_scanline(line2, y, DISPCNT_BG2_EN, m_BG2CNT, m_BG2X, m_BG2Y, m_BG2PA, m_BG2PB, m_BG2PC, m_BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed); - draw_roz_scanline(line3, y, DISPCNT_BG3_EN, m_BG3CNT, m_BG3X, m_BG3Y, m_BG3PA, m_BG3PB, m_BG3PC, m_BG3PD, &m_gfxBG3X, &m_gfxBG3Y, m_gfxBG3Changed); + draw_roz_scanline(line2, y, DISPCNT_BG2_EN, BG2CNT, BG2X, BG2Y, BG2PA, BG2PB, BG2PC, BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed); + draw_roz_scanline(line3, y, DISPCNT_BG3_EN, BG3CNT, BG3X, BG3Y, BG3PA, BG3PB, BG3PC, BG3PD, &m_gfxBG3X, &m_gfxBG3Y, m_gfxBG3Changed); break; case 3: case 4: case 5: - draw_roz_bitmap_scanline(line2, y, DISPCNT_BG2_EN, m_BG2CNT, m_BG2X, m_BG2Y, m_BG2PA, m_BG2PB, m_BG2PC, m_BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed, bpp); + draw_roz_bitmap_scanline(line2, y, DISPCNT_BG2_EN, BG2CNT, BG2X, BG2Y, BG2PA, BG2PB, BG2PC, BG2PD, &m_gfxBG2X, &m_gfxBG2Y, m_gfxBG2Changed, bpp); break; } @@ -231,19 +445,19 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* top2 = 0x08; } - if (top2 & (m_BLDCNT >> BLDCNT_TP2_SHIFT)) - color = alpha_blend_pixel(color, back, coeff[m_BLDALPHA & 0x1f], coeff[(m_BLDALPHA >> 8) & 0x1f]); + if (top2 & (BLDCNT >> BLDCNT_TP2_SHIFT)) + color = alpha_blend_pixel(color, back, coeff[BLDALPHA & 0x1f], coeff[(BLDALPHA >> 8) & 0x1f]); else { - if (top & m_BLDCNT) + if (top & BLDCNT) { - switch(m_BLDCNT & BLDCNT_SFX) + switch(BLDCNT & BLDCNT_SFX) { case BLDCNT_SFX_LIGHTEN: - color = increase_brightness(color, coeff[m_BLDY & 0x1f]); + color = increase_brightness(color, coeff[BLDY & 0x1f]); break; case BLDCNT_SFX_DARKEN: - color = decrease_brightness(color, coeff[m_BLDY & 0x1f]); + color = decrease_brightness(color, coeff[BLDY & 0x1f]); break; } } @@ -252,9 +466,9 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* } else if (submode == GBA_SUBMODE1 || (submode == GBA_SUBMODE2 && masks[x] & 0x20)) { - if (top & m_BLDCNT) + if (top & BLDCNT) { - switch(m_BLDCNT & BLDCNT_SFX) + switch(BLDCNT & BLDCNT_SFX) { case BLDCNT_SFX_NONE: break; @@ -308,15 +522,15 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* } } - if (top2 & (m_BLDCNT >> BLDCNT_TP2_SHIFT)) - color = alpha_blend_pixel(color, back, coeff[m_BLDALPHA & 0x1f], coeff[(m_BLDALPHA >> 8) & 0x1f]); + if (top2 & (BLDCNT >> BLDCNT_TP2_SHIFT)) + color = alpha_blend_pixel(color, back, coeff[BLDALPHA & 0x1f], coeff[(BLDALPHA >> 8) & 0x1f]); } break; case BLDCNT_SFX_LIGHTEN: - color = increase_brightness(color, coeff[m_BLDY & 0x1f]); + color = increase_brightness(color, coeff[BLDY & 0x1f]); break; case BLDCNT_SFX_DARKEN: - color = decrease_brightness(color, coeff[m_BLDY & 0x1f]); + color = decrease_brightness(color, coeff[BLDY & 0x1f]); break; } } @@ -329,20 +543,20 @@ void gba_state::draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* m_gfxBG3Changed = 0; } -void gba_state::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed, int depth) +void gba_lcd_device::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed, int depth) { - UINT8 *src8 = (UINT8 *)m_gba_vram.target(); - UINT16 *src16 = (UINT16 *)m_gba_vram.target(); - UINT16 *palette = (UINT16 *)m_gba_pram.target(); + UINT8 *src8 = (UINT8 *)m_vram.get(); + UINT16 *src16 = (UINT16 *)m_vram.get(); + UINT16 *palette = (UINT16 *)m_pram.get(); INT32 sx = (depth == 4) ? 160 : 240; INT32 sy = (depth == 4) ? 128 : 160; UINT32 prio = ((ctrl & BGCNT_PRIORITY) << 25) + 0x1000000; INT32 cx, cy, pixx, pixy, x; - if ((depth == 8) && (m_DISPCNT & DISPCNT_FRAMESEL)) + if ((depth == 8) && (DISPCNT & DISPCNT_FRAMESEL)) src8 += 0xa000; - if ((depth == 4) && (m_DISPCNT & DISPCNT_FRAMESEL)) + if ((depth == 4) && (DISPCNT & DISPCNT_FRAMESEL)) src16 += 0xa000/2; // sign extend roz parameters @@ -371,7 +585,7 @@ void gba_state::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enab if(ctrl & BGCNT_MOSAIC) { - INT32 mosaic_line = ((m_MOSAIC & 0xf0) >> 4) + 1; + INT32 mosaic_line = ((MOSAIC & 0xf0) >> 4) + 1; INT32 tempy = (ypos / mosaic_line) * mosaic_line; cx = X + tempy*PB; cy = Y + tempy*PD; @@ -408,7 +622,7 @@ void gba_state::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enab if(ctrl & BGCNT_MOSAIC) { - INT32 mosaicx = (m_MOSAIC & 0x0f) + 1; + INT32 mosaicx = (MOSAIC & 0x0f) + 1; if(mosaicx > 1) { INT32 m = 1; @@ -426,14 +640,14 @@ void gba_state::draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enab } } -void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed) +void gba_lcd_device::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed) { UINT32 base, mapbase, size; static const INT32 sizes[4] = { 128, 256, 512, 1024 }; INT32 cx, cy, pixx, pixy; - UINT8 *mgba_vram = (UINT8 *)m_gba_vram.target(); + UINT8 *mgba_vram = (UINT8 *)m_vram.get(); UINT32 tile; - UINT16 *pgba_pram = (UINT16 *)m_gba_pram.target(); + UINT16 *pgba_pram = (UINT16 *)m_pram.get(); UINT16 pixel; UINT32 prio = ((ctrl & BGCNT_PRIORITY) << 25) + 0x1000000; int x = 0; @@ -441,7 +655,7 @@ void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, for (x = 0; x < 240; x++) scanline[x] = 0x80000000; - if (m_DISPCNT & enablemask) + if (DISPCNT & enablemask) { base = ((ctrl & BGCNT_CHARBASE) >> BGCNT_CHARBASE_SHIFT) * 0x4000; // VRAM base of tiles mapbase = ((ctrl & BGCNT_SCREENBASE) >> BGCNT_SCREENBASE_SHIFT) * 0x800; // VRAM base of map @@ -473,7 +687,7 @@ void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, if(ctrl & BGCNT_MOSAIC) { - int mosaic_line = ((m_MOSAIC & 0xf0) >> 4) + 1; + int mosaic_line = ((MOSAIC & 0xf0) >> 4) + 1; int y = ypos % mosaic_line; cx -= y*PB; cy -= y*PD; @@ -538,7 +752,7 @@ void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, if(ctrl & BGCNT_MOSAIC) { - int mosaicx = (m_MOSAIC & 0x0f) + 1; + int mosaicx = (MOSAIC & 0x0f) + 1; if(mosaicx > 1) { int m = 1; @@ -557,10 +771,10 @@ void gba_state::draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, } } -void gba_state::draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs) +void gba_lcd_device::draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs) { - UINT8 *vram = (UINT8*)m_gba_vram.target(); - UINT16 *palette = (UINT16*)m_gba_pram.target(); + UINT8 *vram = (UINT8*)m_vram.get(); + UINT16 *palette = (UINT16*)m_pram.get(); UINT8 *chardata = &vram[((ctrl & BGCNT_CHARBASE) >> BGCNT_CHARBASE_SHIFT) * 0x4000]; UINT16 *screendata = (UINT16*)&vram[((ctrl & BGCNT_SCREENBASE) >> BGCNT_SCREENBASE_SHIFT) * 0x800]; UINT32 priority = ((ctrl & BGCNT_PRIORITY) << 25) + 0x1000000; @@ -568,15 +782,15 @@ void gba_state::draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, INT32 height = 256; INT32 maskx, masky, pixx, pixy; UINT8 use_mosaic = (ctrl & BGCNT_MOSAIC) ? 1 : 0; - INT32 mosaicx = (m_MOSAIC & 0x000f) + 1; - INT32 mosaicy = ((m_MOSAIC & 0x00f0) >> 4) + 1; + INT32 mosaicx = (MOSAIC & 0x000f) + 1; + INT32 mosaicy = ((MOSAIC & 0x00f0) >> 4) + 1; INT32 stride; int x = 0; for (x = 0; x < 240; x++) scanline[x] = 0x80000000; - if(m_DISPCNT & enablemask) + if(DISPCNT & enablemask) { switch((ctrl & BGCNT_SCREENSIZE) >> BGCNT_SCREENSIZE_SHIFT) { @@ -712,19 +926,19 @@ void gba_state::draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, } } -void gba_state::draw_gba_oam_window(UINT32 *scanline, int y) +void gba_lcd_device::draw_gba_oam_window(UINT32 *scanline, int y) { INT16 gba_oamindex; UINT32 tilebytebase, tileindex, tiledrawindex; UINT32 width, height; - UINT16 *pgba_oam = (UINT16 *)m_gba_oam.target(); - UINT8 *src = (UINT8*)m_gba_vram.target(); + UINT16 *pgba_oam = (UINT16 *)m_oam.get(); + UINT8 *src = (UINT8*)m_vram.get(); int x = 0; for (x = 0; x < 240; x++) scanline[x] = 0x80000000; - if (m_DISPCNT & DISPCNT_OBJWIN_EN) + if (DISPCNT & DISPCNT_OBJWIN_EN) { for( gba_oamindex = 127; gba_oamindex >= 0; gba_oamindex-- ) { @@ -868,11 +1082,11 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y) if((attr0 & OBJ_PALMODE) == OBJ_PALMODE_256) { int inc = 32; - if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) + if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) { continue; } - if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) + if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) { inc = sx >> 2; } @@ -907,11 +1121,11 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y) else { int inc = 32; - if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) + if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) { continue; } - if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) + if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) { inc = sx >> 3; } @@ -971,12 +1185,12 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y) { cury_ = height - cury_ - 1; } - if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) + if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) { continue; } - if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) + if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) { inc = width >> 2; } @@ -1050,12 +1264,12 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y) { cury_ = height - cury_ - 1; } - if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) + if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) { continue; } - if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) + if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) { inc = width >> 3; } @@ -1156,23 +1370,23 @@ void gba_state::draw_gba_oam_window(UINT32 *scanline, int y) } } -void gba_state::draw_gba_oam(UINT32 *scanline, int y) +void gba_lcd_device::draw_gba_oam(UINT32 *scanline, int y) { INT16 gba_oamindex; INT32 mosaiccnt = 0; - INT32 mosaicy = ((m_MOSAIC & 0xf000) >> 12) + 1; - INT32 mosaicx = ((m_MOSAIC & 0x0f00) >> 8) + 1; + INT32 mosaicy = ((MOSAIC & 0xf000) >> 12) + 1; + INT32 mosaicx = ((MOSAIC & 0x0f00) >> 8) + 1; UINT32 tileindex, tiledrawindex; //, tilebytebase UINT8 width, height; - UINT16 *pgba_oam = (UINT16 *)m_gba_oam.target(); - UINT8 *src = (UINT8 *)m_gba_vram.target(); - UINT16 *palette = (UINT16*)m_gba_pram.target(); + UINT16 *pgba_oam = (UINT16 *)m_oam.get(); + UINT8 *src = (UINT8 *)m_vram.get(); + UINT16 *palette = (UINT16*)m_pram.get(); int x = 0; for (x = 0; x < 240; x++) scanline[x] = 0x80000000; - if( m_DISPCNT & DISPCNT_OBJ_EN ) + if( DISPCNT & DISPCNT_OBJ_EN ) { for( gba_oamindex = 0; gba_oamindex < 128; gba_oamindex++ ) { @@ -1322,12 +1536,12 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y) { INT32 inc = 32; - if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) + if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) { continue; } - if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) + if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) { inc = width >> 2; } @@ -1383,12 +1597,12 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y) INT32 inc = 32; INT32 palentry = (attr2 >> 8) & 0xf0; - if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) + if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) { continue; } - if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) + if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) { inc = width >> 3; } @@ -1487,12 +1701,12 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y) cury = height - cury - 1; } - if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) + if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) { continue; } - if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) + if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) { inc = width >> 2; } @@ -1595,12 +1809,12 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y) cury = height - cury - 1; } - if((m_DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) + if((DISPCNT & DISPCNT_MODE) > 2 && tiledrawindex < 0x200) { continue; } - if((m_DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) + if((DISPCNT & DISPCNT_VRAM_MAP) == DISPCNT_VRAM_MAP_1D) { inc = width >> 3; } @@ -1747,15 +1961,15 @@ void gba_state::draw_gba_oam(UINT32 *scanline, int y) } } -inline int gba_state::is_in_window(int x, int window) +inline int gba_lcd_device::is_in_window(int x, int window) { - int x0 = m_WIN0H >> 8; - int x1 = m_WIN0H & 0x00ff; + int x0 = WIN0H >> 8; + int x1 = WIN0H & 0x00ff; if(window == 1) { - x0 = m_WIN1H >> 8; - x1 = m_WIN1H & 0x00ff; + x0 = WIN1H >> 8; + x1 = WIN1H & 0x00ff; } if(x0 <= x1) @@ -1776,64 +1990,7 @@ inline int gba_state::is_in_window(int x, int window) return 0; } -static inline UINT32 alpha_blend_pixel(UINT32 color0, UINT32 color1, int ca, int cb) -{ - if(color0 < 0x80000000) - { - int r0 = (color0 >> 0) & 0x1f; - int g0 = (color0 >> 5) & 0x1f; - int b0 = (color0 >> 10) & 0x1f; - int r1 = (color1 >> 0) & 0x1f; - int g1 = (color1 >> 5) & 0x1f; - int b1 = (color1 >> 10) & 0x1f; - int r = ((r0 * ca) >> 4) + ((r1 * cb) >> 4); - int g = ((g0 * ca) >> 4) + ((g1 * cb) >> 4); - int b = ((b0 * ca) >> 4) + ((b1 * cb) >> 4); - - if(r > 0x1f) r = 0x1f; - if(g > 0x1f) g = 0x1f; - if(b > 0x1f) b = 0x1f; - - return (color0 & 0xffff0000) | (b << 10) | (g << 5) | r; - } - return color0; -} - -static inline UINT32 increase_brightness(UINT32 color, int coeff_) -{ - int r = (color >> 0) & 0x1f; - int g = (color >> 5) & 0x1f; - int b = (color >> 10) & 0x1f; - - r += ((0x1f - r) * coeff_) >> 4; - g += ((0x1f - g) * coeff_) >> 4; - b += ((0x1f - b) * coeff_) >> 4; - - if(r > 0x1f) r = 0x1f; - if(g > 0x1f) g = 0x1f; - if(b > 0x1f) b = 0x1f; - - return (color & 0xffff0000) | (b << 10) | (g << 5) | r; -} - -static inline UINT32 decrease_brightness(UINT32 color, int coeff_) -{ - int r = (color >> 0) & 0x1f; - int g = (color >> 5) & 0x1f; - int b = (color >> 10) & 0x1f; - - r -= (r * coeff_) >> 4; - g -= (g * coeff_) >> 4; - b -= (b * coeff_) >> 4; - - if(r < 0) r = 0; - if(g < 0) g = 0; - if(b < 0) b = 0; - - return (color & 0xffff0000) | (b << 10) | (g << 5) | r; -} - -void gba_state::draw_scanline(int y) +void gba_lcd_device::draw_scanline(int y) { bitmap_ind16 &bitmap = m_bitmap; UINT16 *scanline = &bitmap.pix16(y); @@ -1841,7 +1998,7 @@ void gba_state::draw_scanline(int y) int depth = 0; // forced blank - if (m_DISPCNT & DISPCNT_BLANK) + if (DISPCNT & DISPCNT_BLANK) { // forced blank is white for (int x = 0; x < 240; x++) @@ -1849,28 +2006,28 @@ void gba_state::draw_scanline(int y) return; } - if(!m_fxOn && !m_windowOn && !(m_DISPCNT & DISPCNT_OBJWIN_EN)) + if(!m_fxOn && !m_windowOn && !(DISPCNT & DISPCNT_OBJWIN_EN)) submode = GBA_SUBMODE0; - else if(m_fxOn && !m_windowOn && !(m_DISPCNT & DISPCNT_OBJWIN_EN)) + else if(m_fxOn && !m_windowOn && !(DISPCNT & DISPCNT_OBJWIN_EN)) submode = GBA_SUBMODE1; else submode = GBA_SUBMODE2; - if ((m_DISPCNT & 7) == 3) + if ((DISPCNT & 7) == 3) depth = 16; - else if ((m_DISPCNT & 7) == 4) + else if ((DISPCNT & 7) == 4) depth = 8; - else if ((m_DISPCNT & 7) == 5) + else if ((DISPCNT & 7) == 5) depth = 4; - //printf("mode = %d, %d\n", m_DISPCNT & 7, submode); + //printf("mode = %d, %d\n", DISPCNT & 7, submode); - switch(m_DISPCNT & 7) + switch(DISPCNT & 7) { case 0: case 1: case 2: - draw_modes(m_DISPCNT & 7, submode, y, &m_xferscan[0][1024], &m_xferscan[1][1024], &m_xferscan[2][1024], &m_xferscan[3][1024], &m_xferscan[4][1024], &m_xferscan[5][1024], &m_xferscan[6][1024], depth); + draw_modes(DISPCNT & 7, submode, y, &m_xferscan[0][1024], &m_xferscan[1][1024], &m_xferscan[2][1024], &m_xferscan[3][1024], &m_xferscan[4][1024], &m_xferscan[5][1024], &m_xferscan[6][1024], depth); break; case 3: case 4: @@ -1885,17 +2042,328 @@ void gba_state::draw_scanline(int y) { scanline[x] = m_xferscan[6][1024 + x] & 0x7fff; } - - return; } -void gba_state::video_start() +static const char *reg_names[] = { + /* LCD I/O Registers */ + "DISPCNT", "GRNSWAP", "DISPSTAT", "VCOUNT", + "BG0CNT", "BG1CNT", "BG2CNT", "BG3CNT", + "BG0HOFS", "BG0VOFS", "BG1HOFS", "BG1VOFS", + "BG2HOFS", "BG2VOFS", "BG3HOFS", "BG3VOFS", + "BG2PA", "BG2PB", "BG2PC", "BG2PD", + "BG2X_L", "BG2X_H", "BG2Y_L", "BG2Y_H", + "BG3PA", "BG3PB", "BG3PC", "BG3PD", + "BG3X_L", "BG3X_H", "BG3Y_L", "BG3Y_H", + "WIN0H", "WIN1H", "WIN0V", "WIN1V", + "WININ", "WINOUT", "MOSAIC", "Unused", + "BLDCNT", "BLDALPHA", "BLDY", "Unused", + "Unused", "Unused", "Unused", "Unused", +}; + +READ32_MEMBER(gba_lcd_device::video_r) { - machine().first_screen()->register_screen_bitmap(m_bitmap); + UINT32 retval = 0; + + switch( offset ) + { + case 0x0004/4: + retval = (DISPSTAT & 0xffff) | (machine().first_screen()->vpos()<<16); + break; + default: + if( ACCESSING_BITS_0_15 ) + { + retval |= m_regs[offset] & 0x0000ffff; + } + if( ACCESSING_BITS_16_31 ) + { + retval |= m_regs[offset] & 0xffff0000; + } + break; + } + + assert_always(offset < ARRAY_LENGTH(reg_names) / 2, "Not enough register names in gba_lcd_device"); + + if (ACCESSING_BITS_0_15) + { + verboselog(*this, 2, "GBA I/O Read: %s = %04x\n", reg_names[offset * 2], retval & 0x0000ffff); + } + if (ACCESSING_BITS_16_31) + { + verboselog(*this, 2, "GBA I/O Read: %s = %04x\n", reg_names[offset * 2 + 1], (retval & 0xffff0000) >> 16); + } + + return retval; } -UINT32 gba_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +WRITE32_MEMBER(gba_lcd_device::video_w) +{ + COMBINE_DATA(&m_regs[offset]); + + assert_always(offset < ARRAY_LENGTH(reg_names) / 2, "Not enough register names in gba_lcd_device"); + + if (ACCESSING_BITS_0_15) + { + verboselog(*this, 2, "GBA I/O Write: %s = %04x\n", reg_names[offset * 2], data & 0x0000ffff); + } + if (ACCESSING_BITS_16_31) + { + verboselog(*this, 2, "GBA I/O Write: %s = %04x\n", reg_names[offset * 2 + 1], (data & 0xffff0000) >> 16); + } + + switch( offset ) + { + case 0x0000/4: + if( ACCESSING_BITS_0_15 ) + { + if(DISPCNT & (DISPCNT_WIN0_EN | DISPCNT_WIN1_EN)) + { + m_windowOn = 1; + } + else + { + m_windowOn = 0; + } + } + break; + case 0x0028/4: + m_gfxBG2Changed |= 1; + break; + case 0x002c/4: + m_gfxBG2Changed |= 2; + break; + case 0x0038/4: + m_gfxBG3Changed |= 1; + break; + case 0x003c/4: + m_gfxBG3Changed |= 2; + break; + case 0x0050/4: + if( ACCESSING_BITS_0_15 ) + { + if(BLDCNT & BLDCNT_SFX) + { + m_fxOn = 1; + } + else + { + m_fxOn = 0; + } + } + break; + } +} + +static inline UINT32 combine_data_32_16(UINT32 prev, UINT32 data, UINT32 mem_mask) +{ + COMBINE_DATA(&prev); + switch(mem_mask) + { + case 0x000000ff: + prev &= 0xffff00ff; + prev |= data << 8; + break; + case 0x0000ff00: + prev &= 0xffffff00; + prev |= data >> 8; + break; + case 0x00ff0000: + prev &= 0x00ffffff; + prev |= data << 8; + break; + case 0xff000000: + prev &= 0xff00ffff; + prev |= data >> 8; + break; + default: + break; + } + return prev; +} + +READ32_MEMBER(gba_lcd_device::gba_pram_r) +{ + return m_pram[offset]; +} + +WRITE32_MEMBER(gba_lcd_device::gba_pram_w) +{ + m_pram[offset] = combine_data_32_16(m_pram[offset], data, mem_mask); +} + +READ32_MEMBER(gba_lcd_device::gba_vram_r) +{ + return m_vram[offset]; +} + +WRITE32_MEMBER(gba_lcd_device::gba_vram_w) +{ + m_vram[offset] = combine_data_32_16(m_vram[offset], data, mem_mask); +} + +READ32_MEMBER(gba_lcd_device::gba_oam_r) +{ + return m_oam[offset]; +} + +WRITE32_MEMBER(gba_lcd_device::gba_oam_w) +{ + m_oam[offset] = combine_data_32_16(m_oam[offset], data, mem_mask); +} + +TIMER_CALLBACK_MEMBER(gba_lcd_device::perform_hbl) +{ + int scanline = machine().first_screen()->vpos(); + + // draw only visible scanlines + if (scanline < 160) + { + draw_scanline(scanline); + + if (!m_dma_hblank_cb.isnull()) + m_dma_hblank_cb(ASSERT_LINE); + } + + if ((DISPSTAT & DISPSTAT_HBL_IRQ_EN ) != 0) + { + if (!m_int_hblank_cb.isnull()) + m_int_hblank_cb(ASSERT_LINE); + } + + DISPSTAT_SET(DISPSTAT_HBL); + + m_hbl_timer->adjust(attotime::never); +} + +TIMER_CALLBACK_MEMBER(gba_lcd_device::perform_scan) +{ + // clear hblank and raster IRQ flags + DISPSTAT_RESET(DISPSTAT_HBL|DISPSTAT_VCNT); + + int scanline = machine().first_screen()->vpos(); + + // VBL is set for scanlines 160 through 226 (but not 227, which is the last line) + if (scanline >= 160 && scanline < 227) + { + DISPSTAT_SET(DISPSTAT_VBL); + + // VBL IRQ and DMA on line 160 + if (scanline == 160) + { + if (DISPSTAT & DISPSTAT_VBL_IRQ_EN) + { + if (!m_int_vblank_cb.isnull()) + m_int_vblank_cb(ASSERT_LINE); + } + + if (!m_dma_vblank_cb.isnull()) + m_dma_vblank_cb(ASSERT_LINE); + } + } + else + { + DISPSTAT_RESET(DISPSTAT_VBL); + } + + // handle VCNT match interrupt/flag + if (scanline == ((DISPSTAT >> 8) & 0xff)) + { + DISPSTAT_SET(DISPSTAT_VCNT); + + if (DISPSTAT & DISPSTAT_VCNT_IRQ_EN) + { + if (!m_int_vcount_cb.isnull()) + m_int_vcount_cb(ASSERT_LINE); + } + } + + m_hbl_timer->adjust(machine().first_screen()->time_until_pos(scanline, 240)); + m_scan_timer->adjust(machine().first_screen()->time_until_pos(( scanline + 1 ) % 228, 0)); +} + +PALETTE_INIT_MEMBER(gba_lcd_device, gba) +{ + for( UINT8 b = 0; b < 32; b++ ) + { + for( UINT8 g = 0; g < 32; g++ ) + { + for( UINT8 r = 0; r < 32; r++ ) + { + palette.set_pen_color( ( b << 10 ) | ( g << 5 ) | r, pal5bit(r), pal5bit(g), pal5bit(b) ); + } + } + } +} + +UINT32 gba_lcd_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect); return 0; } + +void gba_lcd_device::device_start() +{ + /* resolve callbacks */ + m_int_hblank_cb.resolve(); + m_int_vblank_cb.resolve(); + m_int_vcount_cb.resolve(); + m_dma_hblank_cb.resolve(); + m_dma_vblank_cb.resolve(); + + m_pram = make_unique_clear(0x400 / 4); + m_vram = make_unique_clear(0x18000 / 4); + m_oam = make_unique_clear(0x400 / 4); + + save_pointer(NAME(m_pram.get()), 0x400 / 4); + save_pointer(NAME(m_vram.get()), 0x18000 / 4); + save_pointer(NAME(m_oam.get()), 0x400 / 4); + + m_screen->register_screen_bitmap(m_bitmap); + + /* create a timer to fire scanline functions */ + m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_lcd_device::perform_scan),this)); + m_hbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_lcd_device::perform_hbl),this)); + m_scan_timer->adjust(machine().first_screen()->time_until_pos(0, 0)); + + save_item(NAME(m_windowOn)); + save_item(NAME(m_fxOn)); + save_item(NAME(m_gfxBG2Changed)); + save_item(NAME(m_gfxBG3Changed)); + save_item(NAME(m_gfxBG2X)); + save_item(NAME(m_gfxBG2Y)); + save_item(NAME(m_gfxBG3X)); + save_item(NAME(m_gfxBG3Y)); + save_item(NAME(m_xferscan)); +} + +void gba_lcd_device::device_reset() +{ + memset(m_regs, 0, sizeof(m_regs)); + + m_gfxBG2Changed = 0; + m_gfxBG3Changed = 0; + m_gfxBG2X = 0; + m_gfxBG2Y = 0; + m_gfxBG3X = 0; + m_gfxBG3Y = 0; + m_windowOn = 0; + m_fxOn = 0; + + m_scan_timer->adjust(machine().first_screen()->time_until_pos(0, 0)); + m_hbl_timer->adjust(attotime::never); +} + +static MACHINE_CONFIG_FRAGMENT( gba_lcd ) + MCFG_SCREEN_ADD("screen", LCD) + MCFG_SCREEN_RAW_PARAMS(XTAL_16_777216MHz/4, 308, 0, 240, 228, 0, 160) + MCFG_SCREEN_UPDATE_DEVICE(DEVICE_SELF, gba_lcd_device, screen_update) + MCFG_SCREEN_PALETTE("palette") + + MCFG_DEFAULT_LAYOUT(layout_lcd) + MCFG_PALETTE_ADD("palette", 32768) + MCFG_PALETTE_INIT_OWNER(gba_lcd_device, gba) +MACHINE_CONFIG_END + +machine_config_constructor gba_lcd_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( gba_lcd ); +} diff --git a/src/devices/video/gba_lcd.h b/src/devices/video/gba_lcd.h new file mode 100644 index 00000000000..6ca7405f7cb --- /dev/null +++ b/src/devices/video/gba_lcd.h @@ -0,0 +1,170 @@ +// license:BSD-3-Clause +// copyright-holders:R. Belmont,Ryan Holtz +/*************************************************************************** + + gba_lcd.h + + File to handle emulation of the video hardware of the Game Boy Advance + + By R. Belmont, Ryan Holtz + +***************************************************************************/ + +#pragma once + +#ifndef __GBA_LCD_H__ +#define __GBA_LCD_H__ + +#include "emu.h" + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +// device type definition +extern const device_type GBA_LCD; + + +//************************************************************************** +// DEVICE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_GBA_LCD_ADD(_tag) \ + MCFG_DEVICE_ADD(_tag, GBA_LCD, 0) + +#define MCFG_GBA_LCD_INT_HBLANK(_devcb) \ + devcb = &gba_lcd_device::set_int_hblank_callback(*device, DEVCB_##_devcb); + +#define MCFG_GBA_LCD_INT_VBLANK(_devcb) \ + devcb = &gba_lcd_device::set_int_vblank_callback(*device, DEVCB_##_devcb); + +#define MCFG_GBA_LCD_INT_VCOUNT(_devcb) \ + devcb = &gba_lcd_device::set_int_vcount_callback(*device, DEVCB_##_devcb); + +#define MCFG_GBA_LCD_DMA_HBLANK(_devcb) \ + devcb = &gba_lcd_device::set_dma_hblank_callback(*device, DEVCB_##_devcb); + +#define MCFG_GBA_LCD_DMA_VBLANK(_devcb) \ + devcb = &gba_lcd_device::set_dma_vblank_callback(*device, DEVCB_##_devcb); + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +template +class gba_registers +{ +protected: + static constexpr unsigned REG_BASE = BASE; + + UINT32 &WORD(unsigned x) { return m_regs[(x - REG_BASE) / 4]; } // 32-bit Register + const UINT32 &WORD(unsigned x) const { return m_regs[(x - REG_BASE) / 4]; } // 32-bit Register + UINT16 HWHI(unsigned x) const { return UINT16(WORD(x) >> 16); } // 16-bit Register, Upper Half-Word + UINT16 HWLO(unsigned x) const { return UINT16(WORD(x)); } // 16-bit Register, Lower Half-Word + + UINT32 &WORD_SET(unsigned x, UINT32 y) { return WORD(x) |= y; } + UINT32 &HWHI_SET(unsigned x, UINT16 y) { return WORD(x) |= UINT32(y) << 16; } + UINT32 &HWLO_SET(unsigned x, UINT16 y) { return WORD(x) |= UINT32(y); } + + UINT32 &WORD_RESET(unsigned x, UINT32 y) { return WORD(x) &= ~y; } + UINT32 &HWHI_RESET(unsigned x, UINT16 y) { return WORD(x) &= ~(UINT32(y) << 16); } + UINT32 &HWLO_RESET(unsigned x, UINT16 y) { return WORD(x) &= ~UINT32(y); } + + UINT32 m_regs[COUNT]; +}; + + +class gba_lcd_device + : public device_t + , public device_video_interface + , protected gba_registers<0x060 / 4, 0x000> +{ +public: + gba_lcd_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + DECLARE_READ32_MEMBER(video_r); + DECLARE_WRITE32_MEMBER(video_w); + DECLARE_READ32_MEMBER(gba_pram_r); + DECLARE_WRITE32_MEMBER(gba_pram_w); + DECLARE_READ32_MEMBER(gba_vram_r); + DECLARE_WRITE32_MEMBER(gba_vram_w); + DECLARE_READ32_MEMBER(gba_oam_r); + DECLARE_WRITE32_MEMBER(gba_oam_w); + DECLARE_PALETTE_INIT(gba); + TIMER_CALLBACK_MEMBER(perform_hbl); + TIMER_CALLBACK_MEMBER(perform_scan); + + template static devcb_base &set_int_hblank_callback(device_t &device, _Object object) + { + return downcast(device).m_int_hblank_cb.set_callback(object); + } + + template static devcb_base &set_int_vblank_callback(device_t &device, _Object object) + { + return downcast(device).m_int_vblank_cb.set_callback(object); + } + + template static devcb_base &set_int_vcount_callback(device_t &device, _Object object) + { + return downcast(device).m_int_vcount_cb.set_callback(object); + } + + template static devcb_base &set_dma_hblank_callback(device_t &device, _Object object) + { + return downcast(device).m_dma_hblank_cb.set_callback(object); + } + + template static devcb_base &set_dma_vblank_callback(device_t &device, _Object object) + { + return downcast(device).m_dma_vblank_cb.set_callback(object); + } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual machine_config_constructor device_mconfig_additions() const override; + +private: + inline void update_mask(UINT8* mask, int mode, int submode, UINT32* obj_win, UINT8 inwin0, UINT8 inwin1, UINT8 in0_mask, UINT8 in1_mask, UINT8 out_mask); + void draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* line1, UINT32* line2, UINT32* line3, UINT32* lineOBJ, UINT32* lineOBJWin, UINT32* lineMix, int bpp); + void draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed, int depth); + void draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed); + void draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs); + void draw_gba_oam_window(UINT32 *scanline, int y); + void draw_gba_oam(UINT32 *scanline, int y); + inline int is_in_window(int x, int window); + void draw_scanline(int y); + + devcb_write_line m_int_hblank_cb; /* H-Blank interrupt callback function */ + devcb_write_line m_int_vblank_cb; /* V-Blank interrupt callback function */ + devcb_write_line m_int_vcount_cb; /* V-Counter Match interrupt callback function */ + devcb_write_line m_dma_hblank_cb; /* H-Blank DMA request callback function */ + devcb_write_line m_dma_vblank_cb; /* V-Blank DMA request callback function */ + + std::unique_ptr m_pram; + std::unique_ptr m_vram; + std::unique_ptr m_oam; + + emu_timer *m_scan_timer, *m_hbl_timer; + + bitmap_ind16 m_bitmap; + + UINT8 m_windowOn; + UINT8 m_fxOn; + UINT8 m_gfxBG2Changed; + UINT8 m_gfxBG3Changed; + INT32 m_gfxBG2X; + INT32 m_gfxBG2Y; + INT32 m_gfxBG3X; + INT32 m_gfxBG3Y; + + UINT32 m_xferscan[7][240+2048]; +}; + +#endif /* GBA_LCD_H_ */ diff --git a/src/devices/video/gf4500.cpp b/src/devices/video/gf4500.cpp index d4b7e86f056..4ad49d4acf7 100644 --- a/src/devices/video/gf4500.cpp +++ b/src/devices/video/gf4500.cpp @@ -26,7 +26,6 @@ static inline void ATTR_PRINTF(3,4) verboselog( device_t &device, int n_level, c } } -#define BIT(x,n) (((x)>>(n))&1) #define BITS(x,m,n) (((x)>>(n))&(((UINT32)1<<((m)-(n)+1))-1)) #define GF4500_FRAMEBUF_OFFSET 0x20000 diff --git a/src/emu/devfind.cpp b/src/emu/devfind.cpp index 803bd0a15e5..febe71d8b3a 100644 --- a/src/emu/devfind.cpp +++ b/src/emu/devfind.cpp @@ -156,10 +156,11 @@ bool finder_base::report_missing(bool found, const char *objname, bool required) return true; // otherwise, report + std::string region_fulltag = m_base.subtag(m_tag); if (required) - osd_printf_error("Required %s '%s' not found\n", objname, m_tag); + osd_printf_error("Required %s '%s' not found\n", objname, region_fulltag.c_str()); else - osd_printf_verbose("Optional %s '%s' not found\n", objname, m_tag); + osd_printf_verbose("Optional %s '%s' not found\n", objname, region_fulltag.c_str()); return !required; } diff --git a/src/emu/devfind.h b/src/emu/devfind.h index 08a5b6fcccb..4b0d849bb80 100644 --- a/src/emu/devfind.h +++ b/src/emu/devfind.h @@ -14,8 +14,8 @@ #error Dont include this file directly; include emu.h instead. #endif -#ifndef __DEVFIND_H__ -#define __DEVFIND_H__ +#ifndef MAME_EMU_DEVFIND_H +#define MAME_EMU_DEVFIND_H #define FINDER_DUMMY_TAG "finder_dummy_tag" @@ -350,7 +350,7 @@ public: // operators to make use transparent operator _PointerType *() const { return this->m_target; } - _PointerType operator[](int index) const { assert(index < m_length); return this->m_target[index]; } + const _PointerType &operator[](int index) const { assert(index < m_length); return this->m_target[index]; } _PointerType &operator[](int index) { assert(index < m_length); return this->m_target[index]; } // setter for setting the object and its length @@ -409,7 +409,7 @@ public: // operators to make use transparent operator _PointerType *() const { return this->m_target; } - _PointerType operator[](int index) const { return this->m_target[index]; } + const _PointerType &operator[](int index) const { return this->m_target[index]; } _PointerType &operator[](int index) { return this->m_target[index]; } // getter for explicit fetching @@ -507,4 +507,4 @@ public: }; -#endif /* __DEVFIND_H__ */ +#endif /* MAME_EMU_DEVFIND_H */ diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp index 97c9559e9a9..d4d2be3d4b5 100644 --- a/src/emu/diimage.cpp +++ b/src/emu/diimage.cpp @@ -1254,53 +1254,6 @@ void device_image_interface::update_names(const device_type device_type, const c } } -//------------------------------------------------- -// software_name_split - helper that splits a -// software_list:software:part string into -// separate software_list, software, and part -// strings. -// -// str1:str2:str3 => swlist_name - str1, swname - str2, swpart - str3 -// str1:str2 => swlist_name - nullptr, swname - str1, swpart - str2 -// str1 => swlist_name - nullptr, swname - str1, swpart - nullptr -// -// Notice however that we could also have been -// passed a string swlist_name:swname, and thus -// some special check has to be performed in this -// case. -//------------------------------------------------- - -void device_image_interface::software_name_split(const std::string &swlist_swname, std::string &swlist_name, std::string &swname, std::string &swpart) -{ - // reset all output parameters - swlist_name.clear(); - swname.clear(); - swpart.clear(); - - // if no colon, this is the swname by itself - auto split1 = swlist_swname.find_first_of(':'); - if (split1 == std::string::npos) - { - swname = swlist_swname; - return; - } - - // if one colon, it is the swname and swpart alone - auto split2 = swlist_swname.find_first_of(':', split1 + 1); - if (split2 == std::string::npos) - { - swname = swlist_swname.substr(0, split1); - swpart = swlist_swname.substr(split1 + 1); - return; - } - - // if two colons present, split into 3 parts - swlist_name = swlist_swname.substr(0, split1); - swname = swlist_swname.substr(split1 + 1, split2 - (split1 + 1)); - swpart = swlist_swname.substr(split2 + 1); -} - - //------------------------------------------------- // find_software_item //------------------------------------------------- @@ -1309,7 +1262,8 @@ const software_part *device_image_interface::find_software_item(const std::strin { // split full software name into software list name and short software name std::string swlist_name, swinfo_name, swpart_name; - software_name_split(path, swlist_name, swinfo_name, swpart_name); + if (!software_name_parse(path, &swlist_name, &swinfo_name, &swpart_name)) + return nullptr; // determine interface const char *interface = nullptr; diff --git a/src/emu/diimage.h b/src/emu/diimage.h index d2ea51c47e7..aac698230b8 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -238,7 +238,6 @@ public: bool load_software(software_list_device &swlist, const char *swname, const rom_entry *entry); int reopen_for_write(const std::string &path); - static void software_name_split(const std::string &swlist_swname, std::string &swlist_name, std::string &swname, std::string &swpart); static void static_set_user_loadable(device_t &device, bool user_loadable) { device_image_interface *img; if (!device.interface(img)) diff --git a/src/emu/dirom.cpp b/src/emu/dirom.cpp new file mode 100644 index 00000000000..45a4dd2dc56 --- /dev/null +++ b/src/emu/dirom.cpp @@ -0,0 +1,59 @@ +#include "emu.h" + + +device_rom_interface::device_rom_interface(const machine_config &mconfig, device_t &device, UINT8 addrwidth, endianness_t endian, UINT8 datawidth) : + device_memory_interface(mconfig, device), + m_rom_config("rom", endian, datawidth, addrwidth) +{ +} + +device_rom_interface::~device_rom_interface() +{ +} + +const address_space_config *device_rom_interface::memory_space_config(address_spacenum spacenum) const +{ + return spacenum ? nullptr : &m_rom_config; +} + +void device_rom_interface::set_rom(const void *base, UINT32 size) +{ + UINT32 mend = m_rom_config.addr_width() == 32 ? 0xffffffff : (1 << m_rom_config.addr_width()) - 1; + UINT32 rend = size-1; + if(rend > mend) { + device().logerror("Warning: The rom for device %s is %x bytes, while the chip addressing space is only %x bytes.\n", device().tag(), rend+1, mend+1); + rend = mend; + } + if(rend == mend) + space().install_rom(0, mend, const_cast(base)); + else { + // Round up to the nearest power-of-two-minus-one + UINT32 rmask = rend; + rmask |= rmask >> 1; + rmask |= rmask >> 2; + rmask |= rmask >> 4; + rmask |= rmask >> 8; + rmask |= rmask >> 16; + if(rmask != rend) + space().unmap_read(0, mend); + // Mirror over the high bits. mend and rmask are both + // powers-of-two-minus-one, so the xor works + space().install_rom(0, rend, mend ^ rmask, const_cast(base)); + } +} + +void device_rom_interface::interface_pre_start() +{ + m_rom_direct = &space().direct(); + + if(!has_configured_map(0)) { + memory_region *reg = device().memregion(DEVICE_SELF); + if(reg) + set_rom(reg->base(), reg->bytes()); + else { + UINT32 end = m_rom_config.addr_width() == 32 ? 0xffffffff : (1 << m_rom_config.addr_width()) - 1; + space().unmap_read(0, end); + } + } +} + diff --git a/src/emu/dirom.h b/src/emu/dirom.h new file mode 100644 index 00000000000..900b5a09517 --- /dev/null +++ b/src/emu/dirom.h @@ -0,0 +1,46 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert +/*************************************************************************** + + dirom.h + + Interface to a rom, either through a memory map or a region + +***************************************************************************/ + +#pragma once + +#ifndef __EMU_H__ +#error Dont include this file directly; include emu.h instead. +#endif + +#ifndef __DIROM_H__ +#define __DIROM_H__ + +class device_rom_interface : public device_memory_interface +{ +public: + device_rom_interface(const machine_config &mconfig, device_t &device, UINT8 addrwidth, endianness_t endian = ENDIANNESS_LITTLE, UINT8 datawidth = 8); + virtual ~device_rom_interface(); + + inline UINT8 read_byte(offs_t byteaddress) { return m_rom_direct->read_byte(byteaddress); } + inline UINT16 read_word(offs_t byteaddress) { return m_rom_direct->read_word(byteaddress); } + inline UINT32 read_dword(offs_t byteaddress) { return m_rom_direct->read_dword(byteaddress); } + inline UINT64 read_qword(offs_t byteaddress) { return m_rom_direct->read_qword(byteaddress); } + + void set_rom(const void *base, UINT32 size); + +private: + const address_space_config m_rom_config; + direct_read_data *m_rom_direct; + + virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override; + virtual void interface_pre_start() override; + + DECLARE_READ8_MEMBER(z8_r); + DECLARE_READ16_MEMBER(z16_r); + DECLARE_READ32_MEMBER(z32_r); + DECLARE_READ64_MEMBER(z64_r); +}; + +#endif diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h index c74c9ec24b8..0bd5567f0fa 100644 --- a/src/emu/drivers/xtal.h +++ b/src/emu/drivers/xtal.h @@ -146,6 +146,7 @@ enum XTAL_16MHz = 16000000, /* Extremely common, used on 100's of PCBs */ XTAL_16_384MHz = 16384000, XTAL_16_5888MHz = 16588800, /* SM 7238 */ + XTAL_16_777216MHz = 16777216, /* Nintendo Game Boy Advance */ XTAL_16_9344MHz = 16934400, /* Usually used to drive 90's Yamaha OPL/FM chips (44100 * 384) */ XTAL_17_36MHz = 17360000, /* OMTI Series 10 SCSI controller */ XTAL_17_73447MHz = 17734470, /* (~4x PAL subcarrier) */ diff --git a/src/emu/emu.h b/src/emu/emu.h index 54a3b2787ad..6424c4efec5 100644 --- a/src/emu/emu.h +++ b/src/emu/emu.h @@ -67,6 +67,7 @@ typedef device_t * (*machine_config_constructor)(machine_config &config, device_ #include "devfind.h" #include "distate.h" #include "dimemory.h" +#include "dirom.h" #include "diexec.h" #include "opresolv.h" #include "digfx.h" diff --git a/src/emu/emucore.h b/src/emu/emucore.h index a8e464f0b8b..6e80277113b 100644 --- a/src/emu/emucore.h +++ b/src/emu/emucore.h @@ -7,10 +7,10 @@ General core utilities and macros used throughout the emulator. ***************************************************************************/ -#pragma once +#ifndef MAME_EMU_EMUCORE_H +#define MAME_EMU_EMUCORE_H -#ifndef __EMUCORE_H__ -#define __EMUCORE_H__ +#pragma once // standard C includes #include @@ -27,6 +27,7 @@ #endif // standard C++ includes +#include #include #include #include @@ -240,36 +241,28 @@ inline TYPE operator--(TYPE &value, int) { TYPE const old(value); --value; retur #define ENDIAN_VALUE_NE_NNE(endian,neval,nneval) (((endian) == ENDIANNESS_NATIVE) ? (neval) : (nneval)) -// useful macros to deal with bit shuffling encryptions -#define BIT(x,n) (((x)>>(n))&1) +// useful functions to deal with bit shuffling encryptions +template constexpr T BIT(T x, U n) { return (x >> n) & T(1); } -#define BITSWAP8(val,B7,B6,B5,B4,B3,B2,B1,B0) \ - ((BIT(val,B7) << 7) | (BIT(val,B6) << 6) | (BIT(val,B5) << 5) | (BIT(val,B4) << 4) | \ - (BIT(val,B3) << 3) | (BIT(val,B2) << 2) | (BIT(val,B1) << 1) | (BIT(val,B0) << 0)) +template constexpr T bitswap(T val, U b) +{ + return BIT(val, b) << 0U; +} -#define BITSWAP16(val,B15,B14,B13,B12,B11,B10,B9,B8,B7,B6,B5,B4,B3,B2,B1,B0) \ - ((BIT(val,B15) << 15) | (BIT(val,B14) << 14) | (BIT(val,B13) << 13) | (BIT(val,B12) << 12) | \ - (BIT(val,B11) << 11) | (BIT(val,B10) << 10) | (BIT(val, B9) << 9) | (BIT(val, B8) << 8) | \ - (BIT(val, B7) << 7) | (BIT(val, B6) << 6) | (BIT(val, B5) << 5) | (BIT(val, B4) << 4) | \ - (BIT(val, B3) << 3) | (BIT(val, B2) << 2) | (BIT(val, B1) << 1) | (BIT(val, B0) << 0)) +template constexpr T bitswap(T val, U b, V... c) +{ + return (BIT(val, b) << sizeof...(c)) | bitswap(val, c...); +} -#define BITSWAP24(val,B23,B22,B21,B20,B19,B18,B17,B16,B15,B14,B13,B12,B11,B10,B9,B8,B7,B6,B5,B4,B3,B2,B1,B0) \ - ((BIT(val,B23) << 23) | (BIT(val,B22) << 22) | (BIT(val,B21) << 21) | (BIT(val,B20) << 20) | \ - (BIT(val,B19) << 19) | (BIT(val,B18) << 18) | (BIT(val,B17) << 17) | (BIT(val,B16) << 16) | \ - (BIT(val,B15) << 15) | (BIT(val,B14) << 14) | (BIT(val,B13) << 13) | (BIT(val,B12) << 12) | \ - (BIT(val,B11) << 11) | (BIT(val,B10) << 10) | (BIT(val, B9) << 9) | (BIT(val, B8) << 8) | \ - (BIT(val, B7) << 7) | (BIT(val, B6) << 6) | (BIT(val, B5) << 5) | (BIT(val, B4) << 4) | \ - (BIT(val, B3) << 3) | (BIT(val, B2) << 2) | (BIT(val, B1) << 1) | (BIT(val, B0) << 0)) - -#define BITSWAP32(val,B31,B30,B29,B28,B27,B26,B25,B24,B23,B22,B21,B20,B19,B18,B17,B16,B15,B14,B13,B12,B11,B10,B9,B8,B7,B6,B5,B4,B3,B2,B1,B0) \ - ((BIT(val,B31) << 31) | (BIT(val,B30) << 30) | (BIT(val,B29) << 29) | (BIT(val,B28) << 28) | \ - (BIT(val,B27) << 27) | (BIT(val,B26) << 26) | (BIT(val,B25) << 25) | (BIT(val,B24) << 24) | \ - (BIT(val,B23) << 23) | (BIT(val,B22) << 22) | (BIT(val,B21) << 21) | (BIT(val,B20) << 20) | \ - (BIT(val,B19) << 19) | (BIT(val,B18) << 18) | (BIT(val,B17) << 17) | (BIT(val,B16) << 16) | \ - (BIT(val,B15) << 15) | (BIT(val,B14) << 14) | (BIT(val,B13) << 13) | (BIT(val,B12) << 12) | \ - (BIT(val,B11) << 11) | (BIT(val,B10) << 10) | (BIT(val, B9) << 9) | (BIT(val, B8) << 8) | \ - (BIT(val, B7) << 7) | (BIT(val, B6) << 6) | (BIT(val, B5) << 5) | (BIT(val, B4) << 4) | \ - (BIT(val, B3) << 3) | (BIT(val, B2) << 2) | (BIT(val, B1) << 1) | (BIT(val, B0) << 0)) +// explicit versions that check number of bit position arguments +template constexpr T BITSWAP8(T val, U... b) { static_assert(sizeof...(b) == 8U, "wrong number of bits"); return bitswap(val, b...); } +template constexpr T BITSWAP16(T val, U... b) { static_assert(sizeof...(b) == 16U, "wrong number of bits"); return bitswap(val, b...); } +template constexpr T BITSWAP24(T val, U... b) { static_assert(sizeof...(b) == 24U, "wrong number of bits"); return bitswap(val, b...); } +template constexpr T BITSWAP32(T val, U... b) { static_assert(sizeof...(b) == 32U, "wrong number of bits"); return bitswap(val, b...); } +template constexpr T BITSWAP40(T val, U... b) { static_assert(sizeof...(b) == 40U, "wrong number of bits"); return bitswap(val, b...); } +template constexpr T BITSWAP48(T val, U... b) { static_assert(sizeof...(b) == 48U, "wrong number of bits"); return bitswap(val, b...); } +template constexpr T BITSWAP56(T val, U... b) { static_assert(sizeof...(b) == 56U, "wrong number of bits"); return bitswap(val, b...); } +template constexpr T BITSWAP64(T val, U... b) { static_assert(sizeof...(b) == 64U, "wrong number of bits"); return bitswap(val, b...); } @@ -426,4 +419,4 @@ inline UINT64 d2u(double d) return u.vv; } -#endif /* __EMUCORE_H__ */ +#endif /* MAME_EMU_EMUCORE_H */ diff --git a/src/emu/image.cpp b/src/emu/image.cpp index 5fbc5844b9d..06998ad37e6 100644 --- a/src/emu/image.cpp +++ b/src/emu/image.cpp @@ -10,19 +10,13 @@ ***************************************************************************/ #include -#include #include "emu.h" #include "emuopts.h" #include "image.h" #include "config.h" #include "xmlfile.h" - -//************************************************************************** -// STATIC VARIABLES -//************************************************************************** - -static std::regex s_potenial_softlist_regex("\\w+(\\:\\w+\\:\\w+)?"); +#include "softlist.h" //************************************************************************** @@ -54,7 +48,7 @@ image_manager::image_manager(running_machine &machine) image.set_init_phase(); // try as a softlist - if (std::regex_match(image_name, s_potenial_softlist_regex)) + if (software_name_parse(image_name)) result = image.load_software(image_name); // failing that, try as an image diff --git a/src/emu/render.cpp b/src/emu/render.cpp index 5b15bc4498e..51669bf5320 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -74,15 +74,6 @@ enum -//************************************************************************** -// MACROS -//************************************************************************** - -#define ISWAP(var1, var2) do { int temp = var1; var1 = var2; var2 = temp; } while (0) -#define FSWAP(var1, var2) do { float temp = var1; var1 = var2; var2 = temp; } while (0) - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -136,8 +127,8 @@ inline void apply_orientation(render_bounds &bounds, int orientation) // swap first if (orientation & ORIENTATION_SWAP_XY) { - FSWAP(bounds.x0, bounds.y0); - FSWAP(bounds.x1, bounds.y1); + std::swap(bounds.x0, bounds.y0); + std::swap(bounds.x1, bounds.y1); } // apply X flip @@ -164,9 +155,9 @@ inline void apply_orientation(render_bounds &bounds, int orientation) inline void normalize_bounds(render_bounds &bounds) { if (bounds.x0 > bounds.x1) - FSWAP(bounds.x0, bounds.x1); + std::swap(bounds.x0, bounds.x1); if (bounds.y0 > bounds.y1) - FSWAP(bounds.y0, bounds.y1); + std::swap(bounds.y0, bounds.y1); } @@ -947,7 +938,7 @@ render_target::render_target(render_manager &manager, const internal_layout *lay if (manager.machine().options().uneven_stretch() && !manager.machine().options().uneven_stretch_x()) m_scale_mode = SCALE_FRACTIONAL; else - m_scale_mode = manager.machine().options().uneven_stretch_x()? SCALE_FRACTIONAL_X : SCALE_INTEGER; + m_scale_mode = manager.machine().options().uneven_stretch_x() ? SCALE_FRACTIONAL_X : SCALE_INTEGER; // determine the base orientation based on options if (!manager.machine().options().rotate()) @@ -1177,7 +1168,7 @@ void render_target::compute_visible_area(INT32 target_width, INT32 target_height // first apply target orientation if (target_orientation & ORIENTATION_SWAP_XY) - FSWAP(width, height); + std::swap(width, height); // apply the target pixel aspect ratio height *= target_pixel_aspect; @@ -1235,8 +1226,8 @@ void render_target::compute_visible_area(INT32 target_width, INT32 target_height if (y_is_integer) yscale = std::min(maxyscale, std::max(1.0f, render_round_nearest(yscale))); // check if we have user defined scale factors, if so use them instead - xscale = m_int_scale_x? m_int_scale_x : xscale; - yscale = m_int_scale_y? m_int_scale_y : yscale; + xscale = m_int_scale_x > 0 ? m_int_scale_x : xscale; + yscale = m_int_scale_y > 0 ? m_int_scale_y : yscale; // set the final width/height visible_width = render_round_nearest(src_width * xscale); @@ -2051,7 +2042,7 @@ void render_target::add_element_primitives(render_primitive_list &list, const ob INT32 height = render_round_nearest(xform.yscale); set_render_bounds_wh(&prim->bounds, render_round_nearest(xform.xoffs), render_round_nearest(xform.yoffs), (float) width, (float) height); if (xform.orientation & ORIENTATION_SWAP_XY) - ISWAP(width, height); + std::swap(width, height); width = std::min(width, m_maxtexwidth); height = std::min(height, m_maxtexheight); diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp index d7a8b8d86d8..6ae687db843 100644 --- a/src/emu/softlist.cpp +++ b/src/emu/softlist.cpp @@ -8,10 +8,20 @@ ***************************************************************************/ +#include + #include "softlist.h" #include "hash.h" #include "expat.h" + +//************************************************************************** +// STATIC VARIABLES +//************************************************************************** + +static std::regex s_potenial_softlist_regex("\\w+(\\:\\w+)*"); + + //************************************************************************** // FEATURE LIST ITEM //************************************************************************** @@ -808,3 +818,65 @@ void softlist_parser::parse_soft_end(const char *tagname) } } + +//------------------------------------------------- +// software_name_parse - helper that splits a +// software_list:software:part string into +// separate software_list, software, and part +// strings. +// +// str1:str2:str3 => swlist_name - str1, swname - str2, swpart - str3 +// str1:str2 => swlist_name - nullptr, swname - str1, swpart - str2 +// str1 => swlist_name - nullptr, swname - str1, swpart - nullptr +// +// Notice however that we could also have been +// passed a string swlist_name:swname, and thus +// some special check has to be performed in this +// case. +//------------------------------------------------- + +bool software_name_parse(const std::string &text, std::string *swlist_name, std::string *swname, std::string *swpart) +{ + // first, sanity check the arguments + if (!std::regex_match(text, s_potenial_softlist_regex)) + return false; + + // reset all output parameters (if specified of course) + if (swlist_name != nullptr) + swlist_name->clear(); + if (swname != nullptr) + swname->clear(); + if (swpart != nullptr) + swpart->clear(); + + // if no colon, this is the swname by itself + auto split1 = text.find_first_of(':'); + if (split1 == std::string::npos) + { + if (swname != nullptr) + *swname = text; + return true; + } + + // if one colon, it is the swname and swpart alone + auto split2 = text.find_first_of(':', split1 + 1); + if (split2 == std::string::npos) + { + if (swname != nullptr) + *swname = text.substr(0, split1); + if (swpart != nullptr) + *swpart = text.substr(split1 + 1); + return true; + } + + // if two colons present, split into 3 parts + if (swlist_name != nullptr) + *swlist_name = text.substr(0, split1); + if (swname != nullptr) + *swname = text.substr(split1 + 1, split2 - (split1 + 1)); + if (swpart != nullptr) + *swpart = text.substr(split2 + 1); + return true; +} + + diff --git a/src/emu/softlist.h b/src/emu/softlist.h index 6f3b69deaa7..d38779afe5d 100644 --- a/src/emu/softlist.h +++ b/src/emu/softlist.h @@ -205,5 +205,10 @@ private: }; +// ----- Helpers ----- + +// parses a software name (e.g. - 'apple2e:agentusa:flop1') into its consituent parts (returns false if cannot parse) +bool software_name_parse(const std::string &text, std::string *swlist_name = nullptr, std::string *swname = nullptr, std::string *swpart = nullptr); + #endif // __SOFTLIST_H_ diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index 0ccda19620e..c4ff85dee41 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -1252,7 +1252,7 @@ int lua_engine::lua_memory_region::l_region_write(lua_State *L) if(region.endianness() == ENDIANNESS_BIG) region.base()[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; else - region.base()[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; + region.base()[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; val >>= 8; } @@ -1317,7 +1317,7 @@ int lua_engine::lua_memory_share::l_share_write(lua_State *L) if(share.endianness() == ENDIANNESS_BIG) ptr[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; else - ptr[(BYTE8_XOR_BE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; + ptr[(BYTE8_XOR_LE(addr) & lowmask) | (addr & ~lowmask)] = val & 0xff; val >>= 8; } @@ -1942,9 +1942,10 @@ lua_engine::~lua_engine() close(); } -void lua_engine::call_plugin(const char *data, const char *name) +const char *lua_engine::call_plugin(const char *data, const char *name) { std::string field("cb_"); + const char *ret = nullptr; field += name; lua_settop(m_lua_state, 0); lua_getfield(m_lua_state, LUA_REGISTRYINDEX, field.c_str()); @@ -1952,17 +1953,21 @@ void lua_engine::call_plugin(const char *data, const char *name) if(!lua_isfunction(m_lua_state, -1)) { lua_pop(m_lua_state, 1); - return; + return nullptr; } lua_pushstring(m_lua_state, data); int error; - if((error = lua_pcall(m_lua_state, 1, 0, 0)) != LUA_OK) + if((error = lua_pcall(m_lua_state, 1, 1, 0)) != LUA_OK) { if(error == LUA_ERRRUN) printf("%s\n", lua_tostring(m_lua_state, -1)); lua_pop(m_lua_state, 1); - return; + return nullptr; } + if(lua_isstring(m_lua_state, -1)) + ret = lua_tostring(m_lua_state, -1); + lua_pop(m_lua_state, 1); + return ret; } int lua_engine::l_emu_register_callback(lua_State *L) diff --git a/src/frontend/mame/luaengine.h b/src/frontend/mame/luaengine.h index 4e18aefbfde..f07be2239d6 100644 --- a/src/frontend/mame/luaengine.h +++ b/src/frontend/mame/luaengine.h @@ -62,7 +62,7 @@ public: std::vector &get_menu() { return m_menu; } void attach_notifiers(); void on_frame_done(); - void call_plugin(const char *data, const char *name); + const char *call_plugin(const char *data, const char *name); private: struct hook { diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp index 7357d3f66c2..36edddc66b2 100644 --- a/src/frontend/mame/ui/selgame.cpp +++ b/src/frontend/mame/ui/selgame.cpp @@ -1027,7 +1027,6 @@ void menu_select_game::build_list(const char *filter_text, int filter, bool bios for (auto & s_driver : s_drivers) { - auto entries = rom_build_entries(s_driver->rom); if (!bioscheck && filter != FILTER_BIOS && (s_driver->flags & MACHINE_IS_BIOS_ROOT) != 0) continue; @@ -1113,15 +1112,19 @@ void menu_select_game::build_list(const char *filter_text, int filter, bool bios } break; case FILTER_CHD: - for (const rom_entry &rom : entries) - if (ROMENTRY_ISREGION(&rom) && ROMREGION_ISDISKDATA(&rom)) - { - m_displaylist.push_back(s_driver); - break; + { + auto entries = rom_build_entries(s_driver->rom); + for (const rom_entry &rom : entries) + if (ROMENTRY_ISREGION(&rom) && ROMREGION_ISDISKDATA(&rom)) + { + m_displaylist.push_back(s_driver); + break; + } } break; case FILTER_NOCHD: { + auto entries = rom_build_entries(s_driver->rom); bool found = false; for (const rom_entry &rom : entries) if (ROMENTRY_ISREGION(&rom) && ROMREGION_ISDISKDATA(&rom)) diff --git a/src/frontend/mame/ui/submenu.cpp b/src/frontend/mame/ui/submenu.cpp index ebef1f9a33c..3d0b866618a 100644 --- a/src/frontend/mame/ui/submenu.cpp +++ b/src/frontend/mame/ui/submenu.cpp @@ -140,7 +140,7 @@ submenu::submenu(mame_ui_manager &mui, render_container &container, std::vector< else opts = dynamic_cast(options); - for (auto & sm_option : m_options) + for (option & sm_option : m_options) { switch (sm_option.type) { @@ -176,6 +176,12 @@ submenu::submenu(mame_ui_manager &mui, render_container &container, std::vector< sm_option.value.clear(); std::string descr(sm_option.entry->description()), delim(", "); descr.erase(0, descr.find(":") + 2); + + std::string default_value(sm_option.entry->default_value()); + std::string auto_value(OSDOPTVAL_AUTO); + if (default_value == auto_value) + descr = auto_value + delim + descr; + size_t p1, p2 = 0; while ((p1 = descr.find_first_not_of(delim, p2)) != std::string::npos) { diff --git a/src/lib/formats/abc800_dsk.cpp b/src/lib/formats/abc800_dsk.cpp index 5686d502382..033ff309dcd 100644 --- a/src/lib/formats/abc800_dsk.cpp +++ b/src/lib/formats/abc800_dsk.cpp @@ -135,7 +135,7 @@ const abc800_format::format abc800_format::formats[] = { { // 1M 8 inch double density floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, - 2000, 26, 77, 2, 256, {}, 1, {}, 55, 22, 54 + 1200, 26, 77, 2, 256, {}, 1, {}, 55, 22, 54 }, {} diff --git a/src/lib/formats/ti99_dsk.cpp b/src/lib/formats/ti99_dsk.cpp index 8315bcafd91..9e9288cbc5f 100644 --- a/src/lib/formats/ti99_dsk.cpp +++ b/src/lib/formats/ti99_dsk.cpp @@ -40,7 +40,7 @@ #include #include -#include "emu.h" // osd_printf_verbose +#include "emu.h" // osd_printf_* (in osdcore.h) #include "imageutl.h" #include "ti99_dsk.h" @@ -113,17 +113,17 @@ bool ti99_floppy_format::load(io_generic *io, UINT32 form_factor, floppy_image * int track_size = get_track_size(cell_size, sector_count); int track_count = file_size / (track_size*heads); - if (TRACE) osd_printf_verbose("ti99_dsk: track count = %d\n", track_count); + if (TRACE) osd_printf_info("ti99_dsk: track count = %d\n", track_count); if (track_count > maxtrack) { - osd_printf_verbose("ti99_dsk: Floppy disk has too many tracks for this drive.\n"); + osd_printf_error("ti99_dsk: Floppy disk has too many tracks for this drive.\n"); return false; } bool doubletracks = (track_count * 2 <= maxtrack); - if (doubletracks) osd_printf_verbose("ti99_dsk: 40-track image in an 80-track drive. On save, image size will double.\n"); + if (doubletracks) osd_printf_warning("ti99_dsk: 40-track image in an 80-track drive. On save, image size will double.\n"); // Read the image for(int head=0; head < heads; head++) @@ -224,7 +224,7 @@ bool ti99_floppy_format::save(io_generic *io, floppy_image *image) else maxsect = 9; } } - if (TRACE) osd_printf_verbose("ti99_dsk: Sectors/track: %d\n", maxsect); + if (TRACE) osd_printf_info("ti99_dsk: Sectors/track: %d\n", maxsect); // We try different cell sizes until we find a fitting size. // If this fails, we fall back to a size of 2000 ns @@ -245,12 +245,12 @@ bool ti99_floppy_format::save(io_generic *io, floppy_image *image) { if (min_heads()==1) { - if (TRACE) osd_printf_verbose("ti99_dsk: We don't have a second side and the format allows for single-sided recording.\n"); + if (TRACE) osd_printf_info("ti99_dsk: We don't have a second side and the format allows for single-sided recording.\n"); return true; } else { - osd_printf_verbose("ti99_dsk: No second side, but this format requires two-sided recording. Saving empty tracks.\n"); + osd_printf_warning("ti99_dsk: No second side, but this format requires two-sided recording. Saving empty tracks.\n"); } } } @@ -262,8 +262,8 @@ bool ti99_floppy_format::save(io_generic *io, floppy_image *image) { if (head == 0 && track == 0) { - if (marks >=6) { if (TRACE) osd_printf_verbose("ti99_dsk: Decoding with cell size %d successful.\n", cell_size); } - else osd_printf_verbose("ti99_dsk: No address marks found on track 0. Assuming MFM format.\n"); + if (marks >=6) { if (TRACE) osd_printf_info("ti99_dsk: Decoding with cell size %d successful.\n", cell_size); } + else osd_printf_info("ti99_dsk: No address marks found on track 0. Assuming MFM format.\n"); } } // Save to the file @@ -299,7 +299,7 @@ void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, U if (check_for_address_marks(trackdata, floppy_image::FM)==false) { - if (head==0 && track==0) osd_printf_verbose("ti99_dsk: Cannot find FM address marks on track %d, head %d; likely broken or unformatted.\n", track, head); + if (head==0 && track==0) osd_printf_warning("ti99_dsk: Cannot find FM address marks on track %d, head %d; likely broken or unformatted.\n", track, head); return; } @@ -323,7 +323,8 @@ void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, U if (((i-start-30)%334==0) && (i < start + 9*334)) { // DAM - raw_w(buffer, 16, 0xf56f); + // FB (1111010101101111) = normal data, F8 (1111010101101010)= deleted data + raw_w(buffer, 16, (trackdata[i]==0xf8)? 0xf56a : 0xf56f); } else { @@ -343,7 +344,7 @@ void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, U } if (crc1 != found_crc) { - osd_printf_verbose("ti99_dsk: Warning: CRC1 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc1& 0xffff); + osd_printf_error("ti99_dsk: Warning: CRC1 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc1& 0xffff); } } else @@ -363,7 +364,7 @@ void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, U } if (crc2 != found_crc) { - osd_printf_verbose("ti99_dsk: Warning: CRC2 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc2& 0xffff); + osd_printf_error("ti99_dsk: Warning: CRC2 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc2& 0xffff); } } } @@ -391,7 +392,7 @@ void ti99_floppy_format::generate_track_mfm(int track, int head, int cell_size, if (check_for_address_marks(trackdata, floppy_image::MFM)==false) { - if (track==0 && head==0) osd_printf_verbose("ti99_dsk: Cannot find MFM address marks on track %d, head %d; likely broken or unformatted.\n", track, head); + if (track==0 && head==0) osd_printf_error("ti99_dsk: Cannot find MFM address marks on track %d, head %d; likely broken or unformatted.\n", track, head); return; } @@ -439,7 +440,7 @@ void ti99_floppy_format::generate_track_mfm(int track, int head, int cell_size, } if (crc1 != found_crc) { - osd_printf_verbose("ti99_dsk: Warning: CRC1 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc & 0xffff, crc1& 0xffff); + osd_printf_error("ti99_dsk: Warning: CRC1 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc & 0xffff, crc1& 0xffff); } } else @@ -459,7 +460,7 @@ void ti99_floppy_format::generate_track_mfm(int track, int head, int cell_size, } if (crc2 != found_crc) { - osd_printf_verbose("ti99_dsk: Warning: CRC2 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc2& 0xffff); + osd_printf_error("ti99_dsk: Warning: CRC2 does not match (track=%d, head=%d). Found = %04x, calc = %04x\n", track, head, found_crc& 0xffff, crc2& 0xffff); } } } @@ -735,7 +736,7 @@ int ti99_sdf_format::identify(io_generic *io, UINT32 form_factor) // as a bad sector map if ((file_size / SECTOR_SIZE) % 10 == 3) { - if (TRACE) osd_printf_verbose("ti99_dsk: Stripping map of bad sectors at image end\n"); + if (TRACE) osd_printf_info("ti99_dsk: Stripping map of bad sectors at image end\n"); file_size -= SECTOR_SIZE*3; } @@ -772,15 +773,15 @@ int ti99_sdf_format::identify(io_generic *io, UINT32 form_factor) // Check from contents if ((vib.id[0]=='D')&&(vib.id[1]=='S')&&(vib.id[2]=='K')) { - if (TRACE) osd_printf_verbose("ti99_dsk: Found formatted SDF disk medium\n"); + if (TRACE) osd_printf_info("ti99_dsk: Found formatted SDF disk medium\n"); vote = 100; } else { - if (TRACE) osd_printf_verbose("ti99_dsk: No valid VIB found; disk may be unformatted\n"); + if (TRACE) osd_printf_info("ti99_dsk: No valid VIB found; disk may be unformatted\n"); } } - else if (TRACE) osd_printf_verbose("ti99_dsk: Disk image is not a SDF image\n"); + else if (TRACE) osd_printf_info("ti99_dsk: Disk image is not a SDF image\n"); return vote; } @@ -816,7 +817,7 @@ void ti99_sdf_format::determine_sizes(io_generic *io, int& cell_size, int& secto if (vib.density < 4) cell_size = 2000; else cell_size = 1000; } - if (TRACE) osd_printf_verbose("ti99_dsk: VIB says that this disk is %s density with %d sectors per track, %d tracks, and %d heads\n", (cell_size==4000)? "single": ((cell_size==2000)? "double" : "high"), sector_count, vib.tracksperside, heads); + if (TRACE) osd_printf_info("ti99_dsk: VIB says that this disk is %s density with %d sectors per track, %d tracks, and %d heads\n", (cell_size==4000)? "single": ((cell_size==2000)? "double" : "high"), sector_count, vib.tracksperside, heads); have_vib = true; } @@ -855,13 +856,13 @@ void ti99_sdf_format::determine_sizes(io_generic *io, int& cell_size, int& secto { if (sector_count == 16 && sector_count1 == 18) { - osd_printf_verbose("ti99_dsk: Warning: Invalid 16-sector format. Assuming 18 sectors.\n"); + osd_printf_warning("ti99_dsk: Warning: Invalid 16-sector format. Assuming 18 sectors.\n"); sector_count = 18; } else { if (heads == 2 && ((cell_size1 != cell_size) || (sector_count1 != sector_count))) - osd_printf_verbose("ti99_dsk: Warning: Disk image size does not correspond with format information in VIB.\n"); + osd_printf_warning("ti99_dsk: Warning: Disk image size does not correspond with format information in VIB.\n"); } } else diff --git a/src/lib/formats/victor9k_dsk.h b/src/lib/formats/victor9k_dsk.h index 5664e66155b..c463803b781 100644 --- a/src/lib/formats/victor9k_dsk.h +++ b/src/lib/formats/victor9k_dsk.h @@ -13,6 +13,8 @@ #include "flopimg.h" +//#define USE_SCP 1 + class victor9k_format : public floppy_image_format_t { public: struct format { diff --git a/src/mame/drivers/abc1600.cpp b/src/mame/drivers/abc1600.cpp index 8a8077d58d4..b53785a1144 100644 --- a/src/mame/drivers/abc1600.cpp +++ b/src/mame/drivers/abc1600.cpp @@ -34,11 +34,14 @@ TODO: + - starting from MAME 0.151, the Z80 DMA reads 0x08 as the 257th byte to transfer from disk t0s14 thus failing a comparison @ 37cfa, leading to a watchdog reset + changing z80dma.cpp:477 to "done = (m_count == 0);" fixes this but isn't the real reason - abcenix boot stuck in a loop @ 37cfa - - segment/page RAM addresses are not correctly decoded, "sas/format/format" can't find the SASI interface because of this - forcetask0 1 t0 0 t1 0 t2 0 t3 0 - sega19 0 task 0 - sega 000 segd 00 pga 008 pgd 4058 virtual 02c730 (should be 004730) + - segment/page RAM addresses are not correctly decoded, "sas/format/format" after abcenix is booted can't find the SASI interface because of this + [:mac] ':3f' (08A98) MAC 7e4a2:0004a2 (SEGA 02f SEGD 09 PGA 09c PGD 8000 NONX 1 WP 0) + should be + [:mac] ':3f' (089A8) MAC 7e4a2:1fe4a2 (SEGA 00f SEGD 0f PGA 0fc PGD 43fc NONX 0 WP 1) + - short/long reset (RSTBUT) - CIO - optimize timers! diff --git a/src/mame/drivers/allied.cpp b/src/mame/drivers/allied.cpp index e170a00af88..c3b6079236f 100644 --- a/src/mame/drivers/allied.cpp +++ b/src/mame/drivers/allied.cpp @@ -382,7 +382,7 @@ WRITE_LINE_MEMBER( allied_state::ic2_cb2_w ) if ((m_display) && (!state)) { m_bit_counter++; - if BIT(m_bit_counter, 0) + if (BIT(m_bit_counter, 0)) m_player_score[m_display-1] = (m_player_score[m_display-1] << 1) | m_disp_data; if (m_bit_counter == 15) m_bit_counter = 0; diff --git a/src/mame/drivers/alphatro.cpp b/src/mame/drivers/alphatro.cpp index 77f72f939b3..d1624498c99 100644 --- a/src/mame/drivers/alphatro.cpp +++ b/src/mame/drivers/alphatro.cpp @@ -175,7 +175,7 @@ MC6845_UPDATE_ROW( alphatro_state::crtc_update_row ) bg = (palette) ? 8 : attr & 7; // amber or RGB fg = (palette) ? 0 : (attr & 0x38) >> 3; - if BIT(attr, 7) // reverse video + if (BIT(attr, 7)) // reverse video { inv ^= 1; chr &= 0x7f; diff --git a/src/mame/drivers/alto2.cpp b/src/mame/drivers/alto2.cpp index 1585759759f..809303922ca 100644 --- a/src/mame/drivers/alto2.cpp +++ b/src/mame/drivers/alto2.cpp @@ -162,6 +162,11 @@ static INPUT_PORTS_START( alto2 ) PORT_CONFNAME( 0x01, 0x01, "Memory switch") PORT_CONFSETTING( 0x00, "on") PORT_CONFSETTING( 0x01, "off") + PORT_CONFNAME( 0x06, 0x02, "CROM/CRAM configuration") + PORT_CONFSETTING( 0x00, "Invalid (no CROM/CRAM)") + PORT_CONFSETTING( 0x02, "1K CROM, 1K CRAM") + PORT_CONFSETTING( 0x04, "2K CROM, 1K CRAM") + PORT_CONFSETTING( 0x06, "1K CROM, 3K CRAM") PORT_CONFNAME( 0x70, 0x00, "Ethernet breath-of-life") PORT_CONFSETTING( 0x00, "off") PORT_CONFSETTING( 0x10, "5 seconds") @@ -252,7 +257,7 @@ ROM_END //************************************************************************** ADDRESS_MAP_START( alto2_ucode_map, AS_0, 32, alto2_state ) - AM_RANGE(0, ALTO2_UCODE_SIZE-1) AM_DEVICE32( "maincpu", alto2_cpu_device, ucode_map, 0xffffffffUL ) + AM_RANGE(0, 4*ALTO2_UCODE_PAGE_SIZE-1) AM_DEVICE32( "maincpu", alto2_cpu_device, ucode_map, 0xffffffffUL ) ADDRESS_MAP_END ADDRESS_MAP_START( alto2_const_map, AS_1, 16, alto2_state ) @@ -275,12 +280,14 @@ static MACHINE_CONFIG_START( alto2, alto2_state ) /* video hardware */ MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::white) MCFG_SCREEN_RAW_PARAMS(XTAL_20_16MHz, - ALTO2_DISPLAY_TOTAL_WIDTH, 0, ALTO2_DISPLAY_WIDTH, - ALTO2_DISPLAY_TOTAL_HEIGHT, 0, ALTO2_DISPLAY_HEIGHT) - MCFG_SCREEN_REFRESH_RATE(30) // two interlaced fields - MCFG_SCREEN_VBLANK_TIME(ALTO2_DISPLAY_VBLANK_TIME) + ALTO2_DISPLAY_TOTAL_WIDTH, + 0, + ALTO2_DISPLAY_WIDTH, + ALTO2_DISPLAY_TOTAL_HEIGHT, + 16, // some scalines of vblank period before + 16+ALTO2_DISPLAY_HEIGHT+8) // and after the usual range + MCFG_SCREEN_REFRESH_RATE(30) // two interlaced fields at 60Hz MCFG_SCREEN_UPDATE_DEVICE("maincpu", alto2_cpu_device, screen_update) - MCFG_SCREEN_VBLANK_DEVICE("maincpu", alto2_cpu_device, screen_eof) MCFG_SCREEN_PALETTE("palette") MCFG_DEFAULT_LAYOUT( layout_vertical ) diff --git a/src/mame/drivers/alvg.cpp b/src/mame/drivers/alvg.cpp index 700561e437c..997f237be06 100644 --- a/src/mame/drivers/alvg.cpp +++ b/src/mame/drivers/alvg.cpp @@ -129,6 +129,38 @@ ROM_START(wrldtour2) ROM_COPY("gfx3",0x108000,0x0000,0x8000) ROM_END +ROM_START(wrldtour3) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("cpu03.512", 0x0000, 0x10000, CRC(56dee967) SHA1(f7b1f69d96c72b0cf738bdf45701502f7306a4a0)) + ROM_REGION(0x10000, "cpu2", 0) + ROM_LOAD("soundc.512", 0x0000, 0x10000, CRC(b44bee01) SHA1(795d8500e5bd73ce23756bf1f5c96db1a3621a70)) + ROM_REGION(0x400000, "sound1", 0) + ROM_LOAD("samp_0.c21", 0x000000, 0x40000, CRC(37beb831) SHA1(2b90d2be0a1bd7c59469846631d2b44bdf9f5f9d)) + ROM_RELOAD(0x000000 + 0x40000, 0x40000) + ROM_RELOAD(0x000000 + 0x80000, 0x40000) + ROM_RELOAD(0x000000 + 0xc0000, 0x40000) + ROM_LOAD("samp_1.c21", 0x100000, 0x40000, CRC(621533c6) SHA1(ca0ed9e89c340cb3b08f9a9002af9997372c1cbf)) + ROM_RELOAD(0x100000 + 0x40000, 0x40000) + ROM_RELOAD(0x100000 + 0x80000, 0x40000) + ROM_RELOAD(0x100000 + 0xc0000, 0x40000) + ROM_LOAD("samp_2.c21", 0x200000, 0x40000, CRC(454a5cca) SHA1(66b1a5832134365fd762fcba4cf4d666f60ebd65)) + ROM_RELOAD(0x200000 + 0x40000, 0x40000) + ROM_RELOAD(0x200000 + 0x80000, 0x40000) + ROM_RELOAD(0x200000 + 0xc0000, 0x40000) + ROM_LOAD("samp_3.c21", 0x300000, 0x40000, CRC(1f4928f4) SHA1(9949ab96644984fab8037224f52ec28d7d7cc967)) + ROM_RELOAD(0x300000 + 0x40000, 0x40000) + ROM_RELOAD(0x300000 + 0x80000, 0x40000) + ROM_RELOAD(0x300000 + 0xc0000, 0x40000) + ROM_REGION(0x110000, "gfx3", 0) + ROM_LOAD("romdef1.c20", 0x00000, 0x40000, CRC(045b21c1) SHA1(134b7eb0f71506d12d9ded24999d530126c558fc)) + ROM_RELOAD( 0x80000, 0x40000) + ROM_LOAD("romdef2.c20", 0x40000, 0x40000, CRC(23c32ee5) SHA1(429b3b069251bb8b681bbc6382ceb6b85125eb79)) + ROM_RELOAD( 0xc0000, 0x40000) + ROM_LOAD("dot03.512", 0x100000, 0x10000, CRC(f8a084bb) SHA1(30eb344ad96b5605693d3a7c703c9ed5c1770ca4)) + ROM_REGION(0x20000, "cpu3", 0) + ROM_COPY("gfx3",0x108000,0x0000,0x8000) +ROM_END + /*------------------------------------------------------------------- / Dinosaur Eggs /-------------------------------------------------------------------*/ @@ -243,6 +275,37 @@ ROM_START(pstlpkr) ROM_RELOAD( 0xc0000, 0x40000) ROM_END +ROM_START(pstlpkr1) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("u2-ddff.512", 0x0000, 0x10000, CRC(83fa0595) SHA1(d6ebb0e63fd964ccaee3979a7fc13b6adf7b837c)) + ROM_REGION(0x10000, "cpu2", 0) + ROM_LOAD("p_pu102.512", 0x0000, 0x10000, CRC(b8fb806e) SHA1(c2dc19820ea22bbcf5808db2fb4be76a4033d6ea)) + ROM_REGION(0x400000, "sound1", 0) + ROM_LOAD("p_parom0.c20", 0x000000, 0x40000, CRC(99986af2) SHA1(52fa7d2979f7f2d6d65ab6d4f7bbfbed16303991)) + ROM_RELOAD(0x000000 + 0x40000, 0x40000) + ROM_RELOAD(0x000000 + 0x80000, 0x40000) + ROM_RELOAD(0x000000 + 0xc0000, 0x40000) + ROM_LOAD("p_parom1.c20", 0x100000, 0x40000, CRC(ae2af238) SHA1(221d3a0e3fb1daad261d723e873ef0727b88889e)) + ROM_RELOAD(0x100000 + 0x40000, 0x40000) + ROM_RELOAD(0x100000 + 0x80000, 0x40000) + ROM_RELOAD(0x100000 + 0xc0000, 0x40000) + ROM_LOAD("p_parom2.c20", 0x200000, 0x40000, CRC(f39560a4) SHA1(cdfdf7b44ff4c3f9f4d39fbd8ecbf141d8568088)) + ROM_RELOAD(0x200000 + 0x40000, 0x40000) + ROM_RELOAD(0x200000 + 0x80000, 0x40000) + ROM_RELOAD(0x200000 + 0xc0000, 0x40000) + ROM_LOAD("p_parom3.c20", 0x300000, 0x40000, CRC(19d5e4de) SHA1(fb59166ebf992e81b92a42898e351d8443adb1c3)) + ROM_RELOAD(0x300000 + 0x40000, 0x40000) + ROM_RELOAD(0x300000 + 0x80000, 0x40000) + ROM_RELOAD(0x300000 + 0xc0000, 0x40000) + ROM_REGION(0x20000, "cpu3", 0) + ROM_LOAD("p_peteu4.512", 0x00000, 0x10000, CRC(caa0cabd) SHA1(caff6ca4a9cce4e3d846502696c8838805673261)) + ROM_REGION(0x100000, "gfx3", 0) + ROM_LOAD("p_peteu5.c20", 0x00000, 0x40000, CRC(1d2cecd8) SHA1(6072a0f744fb9eef728fe7cf5e17d0007edbddd7)) + ROM_RELOAD( 0x80000, 0x40000) + ROM_LOAD("p_peteu6.c20", 0x40000, 0x40000, CRC(3a56376c) SHA1(69febc17b8416c03a58e651447bbe1e14ff27e50)) + ROM_RELOAD( 0xc0000, 0x40000) +ROM_END + /*------------------------------------------------------------------- / Punchy The Clown /-------------------------------------------------------------------*/ @@ -258,6 +321,18 @@ ROM_START(punchy) ROM_RELOAD(0x000000 + 0xc0000, 0x40000) ROM_END +ROM_START(punchy3) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("epc061.r03", 0x0000, 0x10000, CRC(8e91131c) SHA1(1bf1408e4e512b764048f4847cf8e4b7a0bf824d)) + ROM_REGION(0x10000, "cpu2", 0) + ROM_LOAD("eps061.r02", 0x0000, 0x10000, CRC(cfde1b9a) SHA1(cbf9e67df6a6762843272493c2caa1413f70fb27)) + ROM_REGION(0x400000, "sound1", 0) + ROM_LOAD("eps062.r02", 0x000000, 0x40000, CRC(7462a5cd) SHA1(05141bcc91b1a786444bff7fa8ba2a785dc0d376)) + ROM_RELOAD(0x000000 + 0x40000, 0x40000) + ROM_RELOAD(0x000000 + 0x80000, 0x40000) + ROM_RELOAD(0x000000 + 0xc0000, 0x40000) +ROM_END + /*------------------------------------------------------------------- / U.S.A. Football /-------------------------------------------------------------------*/ @@ -276,10 +351,13 @@ ROM_END GAME(1991, agsoccer, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "A.G. Soccer Ball", MACHINE_IS_SKELETON_MECHANICAL) GAME(1992, wrldtour, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1992, wrldtour2, wrldtour, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour R02b", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1992, wrldtour2, wrldtour, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour (R02b)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1992, wrldtour3, wrldtour, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Al's Garage Band Goes On A World Tour (R06a)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1993, usafootb, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "U.S.A. Football", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1993, mystcast, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Mystery Castle", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1993, mystcasta, mystcast, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Mystery Castle (alternate set)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1993, pstlpkr, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Pistol Poker", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1993, punchy, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Punchy The Clown", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1993, mystcast, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Mystery Castle (R02)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1993, mystcasta, mystcast, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Mystery Castle (R03)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1993, pstlpkr, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Pistol Poker (R02)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1993, pstlpkr1, pstlpkr, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Pistol Poker (R01)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1993, punchy, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Punchy The Clown (R02)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1993, punchy3, punchy, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Punchy The Clown (R03)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1993, dinoeggs, 0, alvg, alvg, alvg_state, alvg, ROT0, "Alvin G", "Dinosaur Eggs", MACHINE_IS_SKELETON_MECHANICAL) diff --git a/src/mame/drivers/apf.cpp b/src/mame/drivers/apf.cpp index 92c8d38892f..70e67d66cfe 100644 --- a/src/mame/drivers/apf.cpp +++ b/src/mame/drivers/apf.cpp @@ -145,7 +145,7 @@ private: READ8_MEMBER( apf_state::videoram_r ) { - if BIT(m_pad_data, 7) // AG line + if (BIT(m_pad_data, 7)) // AG line { // Need the cpu and crtc to be locked together for proper graphics // This is a hack to fix Rocket Patrol and Blackjack diff --git a/src/mame/drivers/atari_s2.cpp b/src/mame/drivers/atari_s2.cpp index bafac12ebfb..28504fa74f5 100644 --- a/src/mame/drivers/atari_s2.cpp +++ b/src/mame/drivers/atari_s2.cpp @@ -390,10 +390,10 @@ TIMER_DEVICE_CALLBACK_MEMBER( atari_s2_state::timer_s ) m_timer_s[1] = m_sound1; // set to preset value m_timer_s[2]++; offs_t offs = (m_timer_s[2] & 31) | ((m_sound0 & 15) << 5); - if BIT(m_sound0, 6) + if (BIT(m_sound0, 6)) m_dac->write_unsigned8(m_p_prom[offs]<< 4); // noise - if BIT(m_sound0, 7) + if (BIT(m_sound0, 7)) { bool ab0 = BIT(m_timer_s[3], 0) ^ BIT(m_timer_s[4], 6); bool ab1 = !BIT(m_timer_s[3], 1); @@ -418,7 +418,7 @@ WRITE8_MEMBER( atari_s2_state::sound0_w ) { m_sound0 = data; offs_t offs = (m_timer_s[2] & 31) | ((m_sound0 & 15) << 5); - if BIT(m_sound0, 6) + if (BIT(m_sound0, 6)) m_dac->write_unsigned8(m_p_prom[offs]<< 4); } diff --git a/src/mame/drivers/bcs3.cpp b/src/mame/drivers/bcs3.cpp index bc38ce59c9a..ab44bf58d47 100644 --- a/src/mame/drivers/bcs3.cpp +++ b/src/mame/drivers/bcs3.cpp @@ -105,7 +105,7 @@ READ8_MEMBER( bcs3_state::keyboard_r ) offset ^= 0x3ff; for (i = 0; i < 10; i++) - if BIT(offset, i) + if (BIT(offset, i)) data |= m_io_keyboard[i]->read(); return data; diff --git a/src/mame/drivers/bigbord2.cpp b/src/mame/drivers/bigbord2.cpp index 8c938c3500d..31399b8e252 100644 --- a/src/mame/drivers/bigbord2.cpp +++ b/src/mame/drivers/bigbord2.cpp @@ -338,10 +338,10 @@ WRITE8_MEMBER( bigbord2_state::portcc_w ) /* drive select */ m_floppy = nullptr; - if BIT(data, 7) m_floppy = m_floppy0->get_device(); - if BIT(data, 6) m_floppy = m_floppy1->get_device(); - //if BIT(data, 5) m_floppy = m_floppy2->get_device(); - //if BIT(data, 4) m_floppy = m_floppy3->get_device(); + if (BIT(data, 7)) m_floppy = m_floppy0->get_device(); + if (BIT(data, 6)) m_floppy = m_floppy1->get_device(); + //if (BIT(data, 5)) m_floppy = m_floppy2->get_device(); + //if (BIT(data, 4)) m_floppy = m_floppy3->get_device(); m_fdc->set_floppy(m_floppy); @@ -546,11 +546,11 @@ UINT8 bigbord2_state::crt8002(UINT8 ac_ra, UINT8 ac_chr, UINT8 ac_attr, UINT16 a gfx = 0xff; if (BIT(ac_attr, 6) & BIT(ac_cnt, 13)) // flash gfx = 0; - if BIT(ac_attr, 5) // blank + if (BIT(ac_attr, 5)) // blank gfx = 0; if (ac_curs && BIT(ac_cnt, 14)) // cursor gfx ^= 0xff; - if BIT(ac_attr, 4) // reverse video + if (BIT(ac_attr, 4)) // reverse video gfx ^= 0xff; return gfx; } diff --git a/src/mame/drivers/br8641.cpp b/src/mame/drivers/br8641.cpp index 1e0197a86f1..1f54962d112 100644 --- a/src/mame/drivers/br8641.cpp +++ b/src/mame/drivers/br8641.cpp @@ -124,7 +124,7 @@ READ8_MEMBER( brandt8641_state::port08_r ) UINT8 i, data = 7; for (i = 0; i < 8; i++) - if BIT(m_port09, i) + if (BIT(m_port09, i)) data &= m_io_keyboard[i]->read(); return data | m_port08; diff --git a/src/mame/drivers/by17.cpp b/src/mame/drivers/by17.cpp index 1f9b086df22..ca364187f43 100644 --- a/src/mame/drivers/by17.cpp +++ b/src/mame/drivers/by17.cpp @@ -673,25 +673,19 @@ WRITE8_MEMBER( by17_state::u11_a_w ) m_digit = 0; - if BIT(data, 7) + if (BIT(data, 7)) m_digit = 1; - else - if BIT(data, 6) + else if (BIT(data, 6)) m_digit = 2; - else - if BIT(data, 5) + else if (BIT(data, 5)) m_digit = 3; - else - if BIT(data, 4) + else if (BIT(data, 4)) m_digit = 4; - else - if BIT(data, 3) + else if (BIT(data, 3)) m_digit = 5; - else - if BIT(data, 2) + else if (BIT(data, 2)) m_digit = 6; - else - if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games + else if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games m_digit = 7; if ((m_u10_ca2==0) && m_digit) diff --git a/src/mame/drivers/by35.cpp b/src/mame/drivers/by35.cpp index 2bbd3366cbf..5a94ab5534f 100644 --- a/src/mame/drivers/by35.cpp +++ b/src/mame/drivers/by35.cpp @@ -677,28 +677,21 @@ WRITE8_MEMBER( by35_state::u11_a_w ) m_digit = 0; - if BIT(data, 7) + if (BIT(data, 7)) m_digit = 1; - else - if BIT(data, 6) + else if (BIT(data, 6)) m_digit = 2; - else - if BIT(data, 5) + else if (BIT(data, 5)) m_digit = 3; - else - if BIT(data, 4) + else if (BIT(data, 4)) m_digit = 4; - else - if BIT(data, 3) + else if (BIT(data, 3)) m_digit = 5; - else - if BIT(data, 2) + else if (BIT(data, 2)) m_digit = 6; - else - if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games + else if (BIT(data, 2) && BIT(data, 3)) // Aftermarket 7th digit strobe for 6 digit games m_digit = 7; - else - if (BIT(data, 1) && m_7d) + else if (BIT(data, 1) && m_7d) m_digit = 7; if ((m_u10_ca2==0) && m_digit) @@ -2058,14 +2051,8 @@ ROM_START(saturn2) ROM_CONTINUE( 0x5800, 0x0800) ROM_RELOAD( 0x7000, 0x1000) ROM_REGION(0x10000, "cpu2", 0) - ROM_LOAD("spy_u4.532", 0x8000, 0x1000, CRC(a43887d0) SHA1(6bbc55943fa9f0cd97f946767f21652e19d85265)) - ROM_RELOAD(0x9000, 0x1000) - ROM_RELOAD(0xa000, 0x1000) - ROM_RELOAD(0xb000, 0x1000) - ROM_LOAD("spy_u3.532", 0xc000, 0x1000, CRC(95ffc1b8) SHA1(28f058f74abbbee120dca06f7321bcb588bef3c6)) - ROM_RELOAD(0xd000, 0x1000) - ROM_RELOAD(0xe000, 0x1000) - ROM_RELOAD(0xf000, 0x1000) + ROM_LOAD("sat2_snd.764", 0xc000, 0x2000, CRC(6bf15541) SHA1(dcdd4e8f662818584de9b1ed7ae69d57362ebadb)) + ROM_RELOAD(0xe000, 0x2000) ROM_END /*-------------------------------- diff --git a/src/mame/drivers/c10.cpp b/src/mame/drivers/c10.cpp index b3826e30986..1a5bb2ee87c 100644 --- a/src/mame/drivers/c10.cpp +++ b/src/mame/drivers/c10.cpp @@ -112,7 +112,7 @@ UINT32 c10_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, con // if ((chr < 0x80) && (framecnt & 0x08)) // chr |= 0x80; - if BIT(chr, 7) // ignore attribute bytes + if (BIT(chr, 7)) // ignore attribute bytes x--; else gfx = m_p_chargen[(chr<<4) | ra ]; diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp index dac683d4ad8..741a2ce6620 100644 --- a/src/mame/drivers/c128.cpp +++ b/src/mame/drivers/c128.cpp @@ -202,7 +202,7 @@ UINT8 c128_state::read_memory(address_space &space, offs_t offset, offs_t vma, i break; case 2: // CS8563 - if BIT(offset, 0) + if (BIT(offset, 0)) { data = m_vdc->register_r(space, 0); } @@ -286,7 +286,7 @@ void c128_state::write_memory(address_space &space, offs_t offset, offs_t vma, U break; case 2: // CS8563 - if BIT(offset, 0) + if (BIT(offset, 0)) { m_vdc->register_w(space, 0, data); } diff --git a/src/mame/drivers/camplynx.cpp b/src/mame/drivers/camplynx.cpp index d5647dfbcde..22aa565c06e 100644 --- a/src/mame/drivers/camplynx.cpp +++ b/src/mame/drivers/camplynx.cpp @@ -315,7 +315,7 @@ d0 = read from bank 4 */ m_wbyte = BITSWAP8(data, 0, 0, 0, 0, 4, 5, 6, 7) & 0x0f; // rearrange to 1,2,3,4 // do reads UINT8 rbyte = BITSWAP8(data, 0, 0, 0, 0, 0, 1, 2, 3) & 0x0f; // rearrange to 0,1,2,4 - if BIT(rbyte, 1) + if (BIT(rbyte, 1)) rbyte &= 0x07; // remove 4 if 1 selected (AND gate in IC82) //printf("%s:%X:%X:%X\n", machine().describe_context(), data, rbyte, m_wbyte); switch (rbyte) @@ -569,7 +569,7 @@ INPUT_CHANGED_MEMBER( camplynx_state::brk_key ) WRITE8_MEMBER( camplynx_state::bank1_w ) { - if BIT(m_wbyte, 0) + if (BIT(m_wbyte, 0)) m_p_ram[offset+0x10000] = data; if ((m_wbyte & 0x22) == 0x02) m_p_ram[offset+0x20000] = data; @@ -581,7 +581,7 @@ WRITE8_MEMBER( camplynx_state::bank1_w ) WRITE8_MEMBER( camplynx_state::bank6_w ) { - if BIT(m_wbyte, 0) + if (BIT(m_wbyte, 0)) m_p_ram[offset+0x10000] = data; offset &= 0x5fff; @@ -607,7 +607,7 @@ READ8_MEMBER( camplynx_state::port80_r ) { UINT8 data = ioport("LINE0")->read(); // when reading tape, bit 0 becomes cass-in signal - if BIT(m_port80, 1) + if (BIT(m_port80, 1)) { data &= 0xfe; data |= (m_cass->input() > +0.02) ? 0 : 1; @@ -640,7 +640,7 @@ WRITE8_MEMBER( camplynx_state::port80_w ) WRITE8_MEMBER( camplynx_state::port84_w ) { - if BIT(m_port80, (m_is_128k) ? 3 : 1) // for 128k, bit 2 might be ok too + if (BIT(m_port80, (m_is_128k) ? 3 : 1)) // for 128k, bit 2 might be ok too { // Sine wave output //float t = (float)(unsigned)data - 32.0f; @@ -690,7 +690,7 @@ MC6845_UPDATE_ROW( camplynx_state::lynx48k_update_row ) UINT16 mem = ((ma << 2) + (ra << 5)) & 0x1fff; // determine green bank - if BIT(m_port80, 4) + if (BIT(m_port80, 4)) green_bank = 0x38000+mem; // alt green else green_bank = 0x3c000+mem; // normal green @@ -718,7 +718,7 @@ MC6845_UPDATE_ROW( camplynx_state::lynx128k_update_row ) UINT32 green_bank, *p = &bitmap.pix32(y); UINT16 mem = ((ma << 2) + (ra << 6)) & 0x3fff; // determine green bank - if BIT(m_port80, 4) + if (BIT(m_port80, 4)) green_bank = 0x2c000+mem; // alt green else green_bank = 0x28000+mem; // normal green diff --git a/src/mame/drivers/capcom.cpp b/src/mame/drivers/capcom.cpp index 04c06f3f3f1..182a071247b 100644 --- a/src/mame/drivers/capcom.cpp +++ b/src/mame/drivers/capcom.cpp @@ -136,6 +136,20 @@ ROM_START(bsv103) ROM_FILL( 0x300000, 0x100000,0xff) ROM_END +ROM_START(bsv102) + ROM_REGION16_BE(0x00100000, "user1",0) + ROM_LOAD16_BYTE("u1l_v12.bin", 0x000001, 0x80000, CRC(3e61a32b) SHA1(7708f2c65eea44a872432581ad6ced16e3bbf9f9)) + ROM_LOAD16_BYTE("u1h_v12.bin", 0x000000, 0x80000, CRC(2bfeb237) SHA1(87097d102beff2816cb61d58811dcdf9c04bc18e)) + ROM_REGION(0x00100000, "maincpu", ROMREGION_ERASEFF) + ROM_REGION(0x20000, "cpu2", 0) + ROM_LOAD("u24_v11.bin", 0x0000, 0x2000, CRC(d46212f4) SHA1(50f1279d995b597c468805b323e0252800b28274)) + ROM_REGION(0x400000, "sound1", 0) + ROM_LOAD("u28_v11.bin", 0 , 0x80000, CRC(b076ad2e) SHA1(1be8e3bda2890545253f6f7e4825d2db1d925255)) + ROM_LOAD("u29_v11.bin", 0x100000, 0x20000, CRC(b251a27c) SHA1(bc30791cb9b5497c11f1cff06c89a729a07b5d4a)) + ROM_FILL( 0x200000, 0x100000,0xff) + ROM_FILL( 0x300000, 0x100000,0xff) +ROM_END + ROM_START(bsv100r) ROM_REGION16_BE(0x00100000, "user1",0) ROM_LOAD16_BYTE("u1l_v10i.bin", 0x000001, 0x80000, CRC(304b4da8) SHA1(2643f304adce3543b792bd2d0ec8abe8d9a5478c)) @@ -302,7 +316,8 @@ GAME(1996, abv106, 0, capcom, capcom, capcom_state, capcom, ROT0, GAME(1996, abv106r, abv106, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Airborne (Redemption)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1996, bbb109, 0, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Big Bang Bar (Beta 1.9 US)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1996, bbb108, bbb109, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Big Bang Bar (Beta 1.8 US)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1996, bsv103, 0, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1996, bsv103, 0, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (1.3)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1996, bsv102, bsv103, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (1.2)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1996, bsv100r, bsv103, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (Redemption 1.0)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1996, bsv102r, bsv103, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (Redemption 1.2)", MACHINE_IS_SKELETON_MECHANICAL) GAME(1996, bsb105, bsv103, capcom, capcom, capcom_state, capcom, ROT0, "Capcom", "Breakshot (Beta)", MACHINE_IS_SKELETON_MECHANICAL) diff --git a/src/mame/drivers/cave.cpp b/src/mame/drivers/cave.cpp index c22b7b48539..41a308110bf 100644 --- a/src/mame/drivers/cave.cpp +++ b/src/mame/drivers/cave.cpp @@ -2596,10 +2596,24 @@ static MACHINE_CONFIG_START( pwrinst2, cave_state ) MACHINE_CONFIG_END + + /*************************************************************************** Sailor Moon / Air Gallet ***************************************************************************/ +TIMER_DEVICE_CALLBACK_MEMBER( cave_state::sailormn_startup ) +{ + m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); +} + +MACHINE_RESET_MEMBER(cave_state,sailormn) +{ + timer_device *startup = machine().device("startup"); + startup->adjust(attotime::from_usec(1000), 0, attotime::zero); + MACHINE_RESET_CALL_MEMBER(cave); +} + static MACHINE_CONFIG_START( sailormn, cave_state ) /* basic machine hardware */ @@ -2607,6 +2621,9 @@ static MACHINE_CONFIG_START( sailormn, cave_state ) MCFG_CPU_PROGRAM_MAP(sailormn_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", cave_state, cave_interrupt) + // could be a wachdog, but if it is then our watchdog address is incorrect as there are periods where the game doesn't write it. + MCFG_TIMER_DRIVER_ADD("startup", cave_state, sailormn_startup) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_8MHz) // Bidirectional Communication MCFG_CPU_PROGRAM_MAP(sailormn_sound_map) MCFG_CPU_IO_MAP(sailormn_sound_portmap) @@ -2614,7 +2631,7 @@ static MACHINE_CONFIG_START( sailormn, cave_state ) // MCFG_QUANTUM_TIME(attotime::from_hz(600)) MCFG_MACHINE_START_OVERRIDE(cave_state,cave) - MCFG_MACHINE_RESET_OVERRIDE(cave_state,cave) + MCFG_MACHINE_RESET_OVERRIDE(cave_state,sailormn) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") MCFG_TIMER_DRIVER_ADD("int_timer", cave_state, cave_vblank_start) @@ -2649,6 +2666,8 @@ static MACHINE_CONFIG_START( sailormn, cave_state ) MCFG_OKIM6295_ADD("oki2", 2112000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map) + + MACHINE_CONFIG_END @@ -2849,12 +2868,7 @@ BP962A.U77 23C16000 GFX ***************************************************************************/ - - -#define ROMS_AGALLET \ - ROM_REGION( 0x400000, "maincpu", 0 ) \ - ROM_LOAD16_WORD_SWAP( "bp962a.u45", 0x000000, 0x080000, CRC(24815046) SHA1(f5eeae60b923ae850b335e7898a2760407631d8b) ) \ - \ +#define ROMS_AGALLET_COMMON \ ROM_REGION( 0x80000, "audiocpu", 0 ) \ ROM_LOAD( "bp962a.u9", 0x00000, 0x80000, CRC(06caddbe) SHA1(6a3cc50558ba19a31b21b7f3ec6c6e2846244ff1) ) \ \ @@ -2881,6 +2895,14 @@ BP962A.U77 23C16000 GFX \ ROM_REGION( 0x200000, "oki2", 0 ) \ ROM_LOAD( "bp962a.u47", 0x000000, 0x200000, CRC(6d4e9737) SHA1(81c7ecdfc2d38d0b35e26745866f6672f566f936) ) + + +// these roms were dumped from a board set to Taiwanese region. +#define ROMS_AGALLET \ + ROM_REGION( 0x400000, "maincpu", 0 ) \ + ROM_LOAD16_WORD_SWAP( "bp962a.u45", 0x000000, 0x080000, CRC(24815046) SHA1(f5eeae60b923ae850b335e7898a2760407631d8b) ) \ + ROMS_AGALLET_COMMON + /* the regions differ only in the EEPROM, hence the macro above - all EEPROMs are Factory Defaulted */ ROM_START( agallet ) ROMS_AGALLET @@ -2924,6 +2946,55 @@ ROM_START( agalleth ) ROM_LOAD16_WORD( "agallet_hongkong.nv", 0x0000, 0x0080, CRC(998d1a74) SHA1(13e7e27a18417949d49e97d521781fc0feeef792) ) ROM_END +// these roms were dumped from a board set to the Japanese region. +#define ROMS_AGALLETA \ + ROM_REGION( 0x400000, "maincpu", 0 ) \ + ROM_LOAD16_WORD_SWAP( "u45", 0x000000, 0x080000, CRC(2cab18b0) SHA1(5e779b74d8520cb482697b5efba4746854e7c9fe) ) \ + ROMS_AGALLET_COMMON + +/* the regions differ only in the EEPROM, hence the macro above - all EEPROMs are Factory Defaulted */ +ROM_START( agalleta ) + ROMS_AGALLETA + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD16_WORD( "agallet_europe.nv", 0x0000, 0x0080, CRC(ec38bf65) SHA1(cb8d9eacc0cf55a0c6b187e6673e3354554314b5) ) +ROM_END + +ROM_START( agalletau ) + ROMS_AGALLETA + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD16_WORD( "agallet_usa.nv", 0x0000, 0x0080, CRC(72e65056) SHA1(abf1a86df01064d9d5d8c418e8367817319ec335) ) +ROM_END + +ROM_START( agalletaj ) // the dumped board was this region + ROMS_AGALLETA + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD16_WORD( "agallet_japan.nv", 0x0000, 0x0080, CRC(0753f547) SHA1(aabb987470406b8729894108bc4d050f7200917d) ) +ROM_END + +ROM_START( agalletak ) + ROMS_AGALLETA + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD16_WORD( "agallet_korea.nv", 0x0000, 0x0080, CRC(7f41c253) SHA1(50793d4da0ad6eb590941d26a729a1cf4b3c25c2) ) +ROM_END + +ROM_START( agalletat ) + ROMS_AGALLETA + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD16_WORD( "agallet_taiwan.nv", 0x0000, 0x0080, CRC(0af46742) SHA1(37b704c4c573b2aabd6f016e9e8dd458f95148f7) ) +ROM_END + +ROM_START( agalletah ) + ROMS_AGALLETA + + ROM_REGION16_BE( 0x80, "eeprom", 0 ) + ROM_LOAD16_WORD( "agallet_hongkong.nv", 0x0000, 0x0080, CRC(998d1a74) SHA1(13e7e27a18417949d49e97d521781fc0feeef792) ) +ROM_END + /*************************************************************************** Fever SOS (International) / Dangun Feveron (Japan) @@ -5032,6 +5103,15 @@ GAME( 1996, agalletj, agallet, sailormn, cave, cave_state, agallet, ROT2 GAME( 1996, agalletk, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (Korea)", MACHINE_SUPPORTS_SAVE ) GAME( 1996, agallett, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (Taiwan)", MACHINE_SUPPORTS_SAVE ) GAME( 1996, agalleth, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (Hong Kong)", MACHINE_SUPPORTS_SAVE ) +// this set appears to be older, there is some kind of reset circuit / watchdog circuit check on startup, the same check exists in the above set but the code skips over it so presumably it was removed +// to avoid boards simply hanging on a black screen if the circuit didn't fire. +GAME( 1996, agalleta, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, Europe)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, agalletau, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, USA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, agalletaj, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Akuu Gallet (older, Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, agalletak, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, Korea)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, agalletat, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, Taiwan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, agalletah, agallet, sailormn, cave, cave_state, agallet, ROT270, "Gazelle (Banpresto license)", "Air Gallet (older, Hong Kong)", MACHINE_SUPPORTS_SAVE ) + GAME( 1996, hotdogst, 0, hotdogst, cave, cave_state, hotdogst, ROT90, "Marble", "Hotdog Storm (International)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp index 3632cd95872..36ee05ac6fa 100644 --- a/src/mame/drivers/chihiro.cpp +++ b/src/mame/drivers/chihiro.cpp @@ -13,9 +13,11 @@ Games on this system include.... |*| 20030224 | Crazy Taxi High Roller (Rev B) | Sega / Hitmaker | GDROM | GDX-0002B | 317-0353-COM | | | 2003 | Virtua Cop 3 | Sega | GDROM | GDX-0003 | 317-0354-COM | |*| 20030226 | Virtua Cop 3 (Rev A) | Sega | GDROM | GDX-0003A | 317-0354-COM | +| | 20030226 | Virtua Cop 3 (Rev A) | Sega | CF | MDA-G0010 | 317-0354-COM | |*| 20030521 | Virtua Cop 3 (Rev B) | Sega | GDROM | GDX-0003B | 317-0354-COM | | | 2003 | OutRun 2 | Sega | GDROM | GDX-0004 | 317-0372-COM | |*| 200312 | OutRun 2 (Rev A) | Sega | GDROM | GDX-0004A | 317-0372-COM | +| | 200312 | OutRun 2 (Rev A) | Sega | CF | MDA-G0011 | 317-0372-COM | | | 2003 | OutRun 2 prototype (Rev P) | Sega | GDROM | GDX-0004P | | | | 2004 | Sega Golf Club Network Pro Tour | Sega | GDROM | GDX-0005 | | | | 2004 | Sega Network Taisen Mahjong MJ 2 | Sega | GDROM | GDX-0006 | 317-0374-JPN | @@ -33,12 +35,15 @@ Games on this system include.... | | 2004 | Wangan Midnight Maximum Tune (Export) | Namco | GDROM | GDX-0009 | 317-5101-COM | | | 2004 | Wangan Midnight Maximum Tune (Export) (Rev A) | Namco | GDROM | GDX-0009A | 317-5101-COM | |*| 2004 | Wangan Midnight Maximum Tune (Export) (Rev B) | Namco | GDROM | GDX-0009B | 317-5101-COM | -| | 2004 | OutRun 2 SP (Japan) | Sega | GDROM | GDX-0011 | | +| | 2004 | OutRun 2 Special Tours (Japan) | Sega | GDROM | GDX-0011 | 317-0396-COM | +|*| 2004 | OutRun 2 Special Tours (Rev A) (Japan) | Sega | GDROM | GDX-0011A | 317-0396-COM | |*| 2004 | Ghost Squad | Sega | GDROM | GDX-0012 | 317-0398-COM | |*| 2004 | Ghost Squad (Rev A) | Sega | GDROM | GDX-0012A | 317-0398-COM | +| | 2004 | Ghost Squad (Rev A) | Sega | CF | MDA-G0013 | 317-0398-COM | |*| 2005 | Gundam Battle Operating Simulator | Banpresto | GDROM | GDX-0013 | 317-0400-JPN | -| | 2004 | OutRun 2 Special Tours | Sega | GDROM | GDX-0014 | 317-0xxx-COM | -|*| 2004 | OutRun 2 Special Tours (Rev A) | Sega | GDROM | GDX-0014A | 317-0xxx-COM | +| | 2004 | OutRun 2 Special Tours | Sega | GDROM | GDX-0014 | 317-0396-COM | +|*| 2004 | OutRun 2 Special Tours (Rev A) | Sega | GDROM | GDX-0014A | 317-0396-COM | +| | 2004 | OutRun 2 Special Tours (Rev A) | Sega | CF | MDA-G0012 | 317-0396-COM | |*| 2005 | Wangan Midnight Maximum Tune 2 (Japan) | Namco | GDROM | GDX-0015 | 317-5106-JPN | | | 2005 | Wangan Midnight Maximum Tune 2 (Export) | Namco | GDROM | GDX-0016 | 317-5106-COM | |*| 2005 | Wangan Midnight Maximum Tune 2 (Export) (Rev A) | Namco | GDROM | GDX-0016A | 317-5106-COM | @@ -1811,6 +1816,18 @@ ROM_START( ollie ) ROM_LOAD("317-0377-com.data", 0x00, 0x50, CRC(d2a8b31f) SHA1(e9ee2df30031826db6bc4bd91969e6680255dcf9) ) ROM_END +ROM_START( wangmidj ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0008b", 0, SHA1(ddf8bde014fee2f0a8a320e4ce19a1729b487e48) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + //PIC16C621A (317-5101-COM) + //(sticker 253-5509-5101) + ROM_LOAD("317-5101-com.data", 0x00, 0x50, CRC(3af801f3) SHA1(e9a2558930f3f1f55d5b3c2cadad69329d931f26) ) +ROM_END + ROM_START( wangmid ) CHIHIRO_BIOS @@ -1829,6 +1846,16 @@ ROM_START( wangmid ) ROM_LOAD("crp1231lr10_ver0110.ic2", 0, 0x20000, CRC(0d30707c) SHA1(425e25c6203d0b400d12391916db3f7cdad00f7a) ) // H8/3003 code ROM_END +ROM_START( outr2stj ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0011a", 0, SHA1(097c0c746f3bd2b926a7a9a03f868d99b8f77b09) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-0396-com.pic", 0x000000, 0x004000, CRC(f94cf26f) SHA1(dd4af2b52935c7b2d8cd196ec1a30c0ef0993322) ) +ROM_END + ROM_START( ghostsqo ) CHIHIRO_BIOS @@ -1881,8 +1908,8 @@ ROM_START( outr2st ) DISK_REGION( "gdrom" ) DISK_IMAGE_READONLY( "gdx-0014a", 0, BAD_DUMP SHA1(4f9656634c47631f63eab554a13d19b15558217e) ) - ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) // number was not readable on pic, please fix if known - ROM_LOAD( "317-0xxx-com.pic", 0x000000, 0x004000, CRC(f94cf26f) SHA1(dd4af2b52935c7b2d8cd196ec1a30c0ef0993322) ) + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-0396-com.pic", 0x000000, 0x004000, CRC(f94cf26f) SHA1(dd4af2b52935c7b2d8cd196ec1a30c0ef0993322) ) ROM_END ROM_START( wangmid2j ) @@ -2070,21 +2097,22 @@ ROM_END /* 0006F */ GAME( 2004, mj2f, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev F) (GDX-0006F)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) /* 0006G */ GAME( 2004, mj2, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev G) (GDX-0006G)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) /* 0007 */ GAME( 2004, ollie, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega / Amusement Vision", "Ollie King (GDX-0007)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) -// 0008 GAME( 2004, wangmidjo,wangmidj, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (GDX-0008)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) -// 0008A GAME( 2004, wangmidja,wangmidj, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev A) (GDX-0008A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) -// 0008B GAME( 2004, wangmidj, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev B) (GDX-0008B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0008 GAME( 2004, wangmidjo,wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (GDX-0008)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0008A GAME( 2004, wangmidja,wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev A) (GDX-0008A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0008B */ GAME( 2004, wangmidj, wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev B) (GDX-0008B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) // 0009 GAME( 2004, wangmido, wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (GDX-0009)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) // 0009A GAME( 2004, wangmida, wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (Rev A) (GDX-0009A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) /* 0009B */ GAME( 2004, wangmid, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (Rev B) (GDX-0009B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) // 0010 -// 0011 GAME( 2004, outr2sp, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 SP (Japan) (GDX-0011)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) +// 0011 GAME( 2004, outr2stjo,outr2st, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (Japan) (GDX-0011)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) +/* 0011A */ GAME( 2004, outr2stj, outr2st, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (Japan) (Rev A) (GDX-0011A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) /* 0012 */ GAME( 2004, ghostsqo, ghostsqu, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Ghost Squad (GDX-0012)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) /* 0012A */ GAME( 2004, ghostsqu, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Ghost Squad (Rev A) (GDX-0012A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) /* 0013 */ GAME( 2005, gundamos, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Banpresto", "Gundam Battle Operating Simulator (GDX-0013)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) // 0014 GAME( 2004, outr2sto, outr2st, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (GDX-0014)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) /* 0014A */ GAME( 2004, outr2st, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (Rev A) (GDX-0014A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) /* 0015 */ GAME( 2005, wangmid2j,wangmid2, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Japan) (GDX-0015)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) -// 0016 GAME( 2005, wangmid2o,wangmid2, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Export) (GDX-0016)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0016 GAME( 2005, wangmid2o,wangmid2, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Export) (GDX-0016)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) /* 0016A */ GAME( 2005, wangmid2, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Export) (Rev A) (GDX-0016A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) // 0017 GAME( 2005, mj3o, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (GDX-0017)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) // 0017A GAME( 2005, mj3a, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev A) (GDX-0017A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp new file mode 100644 index 00000000000..3f323d19845 --- /dev/null +++ b/src/mame/drivers/cmi.cpp @@ -0,0 +1,2919 @@ +// license:BSD-3-Clause +// copyright-holders:Phil Bennett +/*************************************************************************** + + Fairlight CMI Series + + driver by Phil Bennett + + Systems supported: + + * CMI IIx + + To do: + + * MASTER 'TIM' test fails + * LGTST 'TIM' test is out of tolerance without 6840 hack. + + Information from: + + CMI SYSTEM SERVICE MANUAL + FAIRLIGHT INSTRUMENTS, FEBRUARY 1985 + Revision 2.1 + + This document is available on archive.org at the following URL: + + https://archive.org/details/fairlight_CMI-IIx_SERVICE_MANUAL + + Summary: + + The Fairlight CMI system conists typically of: + - One velocity-sensitive unweighted keyboard, with a numeric + keypad and several control surfaces + - (Optionally) one additional keyboard, not velocity-sensitive + - One alphanumeric keyboard for manual control + - A 15-inch green-screen monitor and light pen for more direct + control + - A box consisting of: + * An audio board including balanced line drivers for eight + channels and mixed output + * A 500-watt power supply + * A 21-slot backplane + * Two 8-inch double-density floppy disk drives. The format + used is soft-sectored, 128 bytes per sector (single density), + or 256 bytes per sector (double density), using FM + recording. + * And the following cards: + Slot 1: Master Card CMI-02 + Slot 2: General Interface Card CMI-08/28 (Optional) + Slots 3-11: 8 Channel Controller Cards & 1 Voice Master Module Card, order unknown + Slot 12: 64K System RAM Q-096 + Slot 13: 256K System RAM Q-256 + Slot 14: 256K System RAM Q-256 + Slot 15: 4-Port ACIA Module Q-014 (Optional) + Slot 16: Processor Control Module Q-133 + Slot 17: Central Processor Module Q-209 + Slot 18: Lightpen/Graphics Interface Q-219 + Slot 19: Floppy Disk Controller QFC-9 + Slot 20: Hard Disk Controller Q-077 (Optional) + + The Master Keyboard + ------------------- + + The master keyboard has the following features: + - A serial connector for communicating with the CMI mainframe + - A connector for a slave keyboard + - A connector for the alphanumeric keyboard + - Connectors for pedal controls + - Three slider-type analog controls + - Two switch controls (one momentary, one toggle on/off) + - Two lamp indicators for the switches with software-defined + control + - A 12-character LED alphanumeric display + - A 16-switch keypad + + All communications with all peripherals and controls on the master + keyboard is handled via the master keyboard's controller, and as + such there is one single serial link to the "CMI mainframe" box + itself. + + Q209 Dual 6809 Central Processor Card + ------------------------------------- + + The CPU card has two 6809 processors, with robust inter-CPU + communications capabilities including: + - Uninterruptible instructions + - CPU-specific ID register and memory map registers + - Interprocessor interrupts + - Automatic memory map-switching register + + The CPUs are multiplexed onto the address and data buses + in an interleaved manner such that there is no contention + on simultaneous memory accesses. + + All system timing is derived from a 40MHz clock crystal, which + is divided into two opposite-phase 20MHz squre waves. + + Other data entry from service manual to be completed later - RH 12 Aug 2016 + +****************************************************************************/ + +#include "emu.h" +#include "cpu/m6809/m6809.h" +#include "cpu/m6800/m6800.h" +#include "cpu/m68000/m68000.h" + +#include "machine/msm5832.h" +#include "machine/6821pia.h" +#include "machine/6840ptm.h" +#include "machine/6850acia.h" +#include "machine/i8214.h" +#include "machine/wd_fdc.h" +#include "video/dl1416.h" + +#define Q209_CPU_CLOCK 4000000 // ? + +#define M6809_CLOCK 8000000 // wrong +#define MASTER_OSCILLATOR 34291712 + +#define CPU_1 0 +#define CPU_2 1 + +#define MAPPING_A 1 +#define MAPPING_B 0 + +#define NUM_Q256_CARDS 1 // Max of 2 +#define NUM_CHANNEL_CARDS 8 + +#define PAGE_SIZE 2048 +#define PAGE_COUNT (65536 / PAGE_SIZE) +#define PAGE_MASK (PAGE_SIZE - 1) +#define PAGE_SHIFT 5 + +#define PIXEL_CLOCK 10380000 // Add to xtal.h +#define HTOTAL 672 +#define HBLANK_END 0 +#define HBLANK_START 512 +#define VTOTAL 304 +#define VBLANK_END 0 +#define VBLANK_START 256 + +#define HBLANK_FREQ ((double)PIXEL_CLOCK / (double)HTOTAL) +#define VBLANK_FREQ ((double)HBLANK_FREQ / (double)VTOTAL) + +#define MAPSEL_P2_B 0x00 +#define MAPSEL_P2_A 0x03 +#define MAPSEL_P2_A_DMA1 0x04 +#define MAPSEL_P2_A_DMA2 0x05 +#define MAPSEL_P2_A_DMA3 0x06 +#define MAPSEL_P2_A_DMA4 0x07 +#define MAPSEL_P1_B 0x08 +#define MAPSEL_P1_A 0x0b +#define MAPSEL_P1_A_DMA1 0x0c +#define MAPSEL_P1_A_DMA2 0x0d +#define MAPSEL_P1_A_DMA3 0x0e +#define MAPSEL_P1_A_DMA4 0x0f + +#define IRQ_ACINT_LEVEL (7 - 0) +#define IRQ_MIDINT_LEVEL (7 - 0) +#define IRQ_TIMINT_LEVEL (7 - 1) +#define IRQ_INTP1_LEVEL (7 - 2) +#define IRQ_IPI1_LEVEL (7 - 3) +#define IRQ_SMIDINT_LEVEL (7 - 3) +#define IRQ_AIC_LEVEL (7 - 4) + +#define IRQ_CHINT2_LEVEL (8) +#define IRQ_CHINT4_LEVEL (9) +#define IRQ_CHINT6_LEVEL (10) +#define IRQ_CHINT8_LEVEL (11) +#define IRQ_CHINT1_LEVEL (12) +#define IRQ_CHINT3_LEVEL (13) +#define IRQ_CHINT5_LEVEL (14) +#define IRQ_CHINT7_LEVEL (15) + +static const int ch_int_levels[8] = +{ + IRQ_CHINT8_LEVEL, IRQ_CHINT7_LEVEL, IRQ_CHINT6_LEVEL, IRQ_CHINT5_LEVEL, IRQ_CHINT4_LEVEL, IRQ_CHINT3_LEVEL, IRQ_CHINT2_LEVEL, IRQ_CHINT1_LEVEL +}; + +#define IRQ_PERRINT_LEVEL (7 - 0) +#define IRQ_RTCINT_LEVEL (7 - 0) +#define IRQ_RINT_LEVEL (7 - 1) +#define IRQ_INTP2_LEVEL (7 - 2) +#define IRQ_IPI2_LEVEL (7 - 3) +#define IRQ_TOUCHINT_LEVEL (7 - 4) +#define IRQ_PENINT_LEVEL (7 - 5) +#define IRQ_ADINT_LEVEL (7 - 6) +#define IRQ_DISKINT_LEVEL (7 - 7) + +#define FDC_CONTROL_INTEN (1 << 2) + +#define FDC_STATUS_READY (1 << 3) +#define FDC_STATUS_TWO_SIDED (1 << 4) +#define FDC_STATUS_DISK_CHANGE (1 << 5) +#define FDC_STATUS_INTERRUPT (1 << 6) +#define FDC_STATUS_DRIVER_LOAD (1 << 7) + + +#define ENV_DIR_DOWN 0 +#define ENV_DIR_UP 1 + +#define MCFG_CMI01A_ADD(_tag, _channel) \ + MCFG_DEVICE_ADD(_tag, CMI01A_CHANNEL_CARD, 0) \ + cmi01a_device::set_channel_number(*device, _channel); + +#define MCFG_CMI01A_CHANNEL_NUMBER(_channel) \ + cmi01a_device::set_channel_number(*device, _channel); + +class cmi01a_device : public device_t, public device_sound_interface { +public: + cmi01a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + cmi01a_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + + static void set_channel_number(device_t &device, int channel) { dynamic_cast(device).m_channel = channel; } + + DECLARE_WRITE8_MEMBER( cmi01a_ptm_c0 ); + + DECLARE_WRITE8_MEMBER( write ); + DECLARE_READ8_MEMBER( read ); + + DECLARE_WRITE_LINE_MEMBER( cmi01a_1_ca2_w ); + DECLARE_WRITE_LINE_MEMBER( ch_int ); + DECLARE_WRITE_LINE_MEMBER( cmi01a_1_cb2_w ); + + DECLARE_READ_LINE_MEMBER( eosi_r ); + DECLARE_READ_LINE_MEMBER( zx_r ); + + DECLARE_WRITE8_MEMBER( cmi01a_2_a_w ); + DECLARE_WRITE8_MEMBER( cmi01a_2_b_w ); + + virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; + +protected: + virtual void device_start() override; + virtual void device_reset() override; + machine_config_constructor device_mconfig_additions() const override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + static const device_timer_id TIMER_ZX = 0; + + required_device m_pia_0; + required_device m_pia_1; + required_device m_ptm; + + required_device m_cmi02_pia_0; + required_device m_cmi02_pia_1; + + sound_stream* m_stream; + +private: + void zx_timer_cb(); + void run_voice(); + void update_wave_addr(int inc); + + emu_timer * m_zx_timer; + UINT8 m_zx_flag; + UINT8 m_zx_ff; + + int m_channel; + std::unique_ptr m_wave_ram; + UINT16 m_segment_cnt; + UINT8 m_new_addr; // Flag + UINT8 m_env_dir_ctrl; + UINT8 m_vol_latch; + UINT8 m_flt_latch; + + double m_freq; + bool m_active; + + int m_ptm_output; +}; + +const device_type CMI01A_CHANNEL_CARD = &device_creator; + +cmi01a_device::cmi01a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, CMI01A_CHANNEL_CARD, "Fairlight CMI-01A Channel Card", tag, owner, clock, "cmi_01a", __FILE__) + , device_sound_interface(mconfig, *this) + , m_pia_0(*this, "cmi01a_pia_0") + , m_pia_1(*this, "cmi01a_pia_1") + , m_ptm(*this, "cmi01a_ptm") + , m_cmi02_pia_0(*this, "^cmi02_pia_1") + , m_cmi02_pia_1(*this, "^cmi02_pia_2") + , m_stream(nullptr) +{ +} + +MACHINE_CONFIG_FRAGMENT( cmi01a_device ) + MCFG_DEVICE_ADD("cmi01a_pia_0", PIA6821, 0) // pia_cmi01a_1_config + MCFG_PIA_CA2_HANDLER(WRITELINE(cmi01a_device, cmi01a_1_ca2_w)) + MCFG_PIA_CB2_HANDLER(WRITELINE(cmi01a_device, cmi01a_1_cb2_w)) + + MCFG_DEVICE_ADD("cmi01a_pia_1", PIA6821, 0) // pia_cmi01a_2_config + MCFG_PIA_READCA1_HANDLER(READLINE(cmi01a_device, zx_r)) + MCFG_PIA_READCA2_HANDLER(READLINE(cmi01a_device, eosi_r)) + MCFG_PIA_WRITEPA_HANDLER(WRITE8(cmi01a_device, cmi01a_2_a_w)) + MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi01a_device, cmi01a_2_b_w)) + MCFG_PIA_IRQA_HANDLER(WRITELINE(cmi01a_device, ch_int)) + MCFG_PIA_IRQB_HANDLER(WRITELINE(cmi01a_device, ch_int)) + + MCFG_DEVICE_ADD("cmi01a_ptm", PTM6840, 0) // ptm_cmi01a_config + MCFG_PTM6840_OUT0_CB(WRITE8(cmi01a_device, cmi01a_ptm_c0)) +MACHINE_CONFIG_END + +machine_config_constructor cmi01a_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME(cmi01a_device); +} + +void cmi01a_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) +{ + if (m_active && m_vol_latch) + { + int length = samples; + int seg_addr = m_segment_cnt & 0x7f; + UINT8 *wave_ptr = &m_wave_ram[m_segment_cnt & 0x3fff]; + stream_sample_t *buf = outputs[0]; + + while (length--) + { + *buf++ = wave_ptr[seg_addr]; + seg_addr = (seg_addr + 1) & 0x7f; + } + + m_segment_cnt = (m_segment_cnt & ~0x7f) | seg_addr; + } + else + { + memset(outputs[0], 0, samples); + } +} + +void cmi01a_device::device_start() +{ + m_wave_ram = std::make_unique(0x4000); + + m_zx_timer = timer_alloc(TIMER_ZX); + m_zx_timer->adjust(attotime::never); + + m_stream = stream_alloc(0,1,44100); +} + +void cmi01a_device::device_reset() +{ + m_ptm->set_g1(1); + m_ptm->set_g2(1); + m_ptm->set_g3(1); +} + +class cmi_state : public driver_device +{ +public: + cmi_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu1(*this, "maincpu1") + , m_maincpu2(*this, "maincpu2") + , m_muskeyscpu(*this, "muskeys") + , m_alphakeyscpu(*this, "alphakeys") + , m_midicpu(*this, "smptemidi") + , m_cmi07cpu(*this, "cmi07cpu") + , m_msm5832(*this, "msm5832") + , m_i8214_0(*this, "i8214_1") + , m_i8214_1(*this, "i8214_2") + , m_i8214_2(*this, "i8214_3") + , m_q133_pia_0(*this, "q133_pia_1") + , m_q133_pia_1(*this, "q133_pia_2") + , m_q133_ptm(*this, "q133_ptm") + , m_q133_region(*this, "q133") + , m_q219_pia(*this, "q219_pia") + , m_q219_ptm(*this, "q219_ptm") + , m_cmi02_pia_0(*this, "cmi02_pia_1") + , m_cmi02_pia_1(*this, "cmi02_pia_2") + , m_cmi02_ptm(*this, "cmi02_ptm") + , m_ank_pia(*this, "ank_pia") + , m_acia_mkbd_kbd(*this, "acia_mkbd_kbd") + , m_acia_mkbd_cmi(*this, "acia_mkbd_cmi") + , m_cmi07_ptm(*this, "cmi07_ptm") + , m_qfc9_region(*this, "qfc9") + , m_floppy_0(*this, "wd1791:0:8dsdd") + , m_floppy_1(*this, "wd1791:1:8dsdd") + , m_wd1791(*this, "wd1791") + , m_cmi01a_0(*this, "cmi01a_0") + , m_cmi01a_1(*this, "cmi01a_1") + , m_cmi01a_2(*this, "cmi01a_2") + , m_cmi01a_3(*this, "cmi01a_3") + , m_cmi01a_4(*this, "cmi01a_4") + , m_cmi01a_5(*this, "cmi01a_5") + , m_cmi01a_6(*this, "cmi01a_6") + , m_cmi01a_7(*this, "cmi01a_7") + , m_cmi10_pia_u20(*this, "cmi10_pia_u20") + , m_cmi10_pia_u21(*this, "cmi10_pia_u21") + , m_dp1(*this, "dp1") + , m_dp2(*this, "dp2") + , m_dp3(*this, "dp3") + , m_screen(*this, "screen") + , m_palette(*this, "palette") + , m_ankrow_ports(*this, {"ROW0", "ROW1", "ROW2", "ROW3", "ROW4", "ROW5", "ROW6", "ROW7"}) + , m_lp_x_port(*this, "LP_X") + , m_lp_y_port(*this, "LP_Y") + , m_lp_touch_port(*this, "LP_TOUCH") + , m_keypad_a_port(*this, "KEYPAD_A") + , m_keypad_b_port(*this, "KEYPAD_B") + , m_key_mux0_port(*this, {"KEY_0_0", "KEY_1_0", "KEY_2_0"}) + , m_key_mux1_port(*this, {"KEY_0_1", "KEY_1_1", "KEY_2_1"}) + , m_key_mux2_port(*this, {"KEY_0_2", "KEY_1_2", "KEY_2_2"}) + , m_key_mux3_port(*this, {"KEY_0_3", "KEY_1_3", "KEY_2_3"}) + , m_cmi07_ram(*this, "cmi07_ram") + { + } + + void set_interrupt(int cpunum, int level, int state); + + virtual void machine_reset() override; + virtual void machine_start() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + static const device_timer_id TIMER_MAP_SWITCH = 0; + static const device_timer_id TIMER_HBLANK = 1; + static const device_timer_id TIMER_JAM_TIMEOUT = 2; + static const device_timer_id TIMER_CMI10_SCND = 3; + + DECLARE_DRIVER_INIT( cmi2x ); + + // CPU card + DECLARE_READ8_MEMBER( q133_acia_r ); + DECLARE_WRITE8_MEMBER( q133_acia_w ); + DECLARE_WRITE8_MEMBER( i8214_cpu1_w ); + DECLARE_WRITE8_MEMBER( i8214_cpu2_w ); + DECLARE_WRITE_LINE_MEMBER( i8214_1_int_w ); + DECLARE_WRITE_LINE_MEMBER( i8214_2_int_w ); + DECLARE_WRITE_LINE_MEMBER( i8214_3_int_w ); + DECLARE_WRITE_LINE_MEMBER( i8214_3_enlg ); + DECLARE_READ8_MEMBER( shared_ram_r ); + DECLARE_WRITE8_MEMBER( shared_ram_w ); + + DECLARE_READ8_MEMBER( q133_1_porta_r ); + DECLARE_WRITE8_MEMBER( q133_1_porta_w ); + DECLARE_WRITE8_MEMBER( q133_1_portb_w ); + + INTERRUPT_GEN_MEMBER( cmi_iix_vblank ); + IRQ_CALLBACK_MEMBER( cpu1_interrupt_callback ); + IRQ_CALLBACK_MEMBER( cpu2_interrupt_callback ); + + // Video-related + DECLARE_READ8_MEMBER( video_r ); + DECLARE_READ8_MEMBER( lightpen_r ); + DECLARE_READ8_MEMBER( pia_q219_b_r ); + DECLARE_WRITE8_MEMBER( video_w ); + DECLARE_WRITE8_MEMBER( vscroll_w ); + DECLARE_WRITE8_MEMBER( video_attr_w ); + DECLARE_READ8_MEMBER( vram_r ); + DECLARE_WRITE8_MEMBER( vram_w ); + DECLARE_WRITE_LINE_MEMBER( pia_q219_irqa ); + DECLARE_WRITE_LINE_MEMBER( pia_q219_irqb ); + DECLARE_WRITE_LINE_MEMBER( ptm_q219_irq ); + UINT32 screen_update_cmi2x(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + // Memory mapping + DECLARE_READ8_MEMBER( rom_r ); + DECLARE_WRITE8_MEMBER( map_ram_w ); + DECLARE_READ8_MEMBER( vector_r ); + DECLARE_READ8_MEMBER( map_r ); + DECLARE_WRITE8_MEMBER( map_w ); + DECLARE_READ8_MEMBER( atomic_r ); + DECLARE_WRITE8_MEMBER( cpufunc_w ); + DECLARE_READ8_MEMBER( parity_r ); + DECLARE_WRITE8_MEMBER( mapsel_w ); + + // MIDI/SMPTE + DECLARE_WRITE16_MEMBER( midi_dma_w ); + DECLARE_READ16_MEMBER( midi_dma_r ); + + // Floppy + DECLARE_WRITE8_MEMBER( fdc_w ); + DECLARE_READ8_MEMBER( fdc_r ); + DECLARE_WRITE_LINE_MEMBER( wd1791_irq ); + DECLARE_WRITE_LINE_MEMBER( wd1791_drq ); + + // Master card + DECLARE_READ8_MEMBER( cmi02_r ); + DECLARE_WRITE8_MEMBER( cmi02_w ); + DECLARE_WRITE8_MEMBER( master_tune_w ); + + // Alphanumeric keyboard + DECLARE_WRITE_LINE_MEMBER( ank_data_w ); + DECLARE_READ8_MEMBER( ank_col_r ); + DECLARE_WRITE_LINE_MEMBER( ank_cts_w ); + DECLARE_READ_LINE_MEMBER( ank_rts_r ); + + // ??? + DECLARE_READ8_MEMBER( cmi07_r ); + DECLARE_WRITE8_MEMBER( cmi07_w ); + + // Music keyboard/alphanumeric display/keypad + DECLARE_WRITE8_MEMBER( cmi10_u20_a_w ); + DECLARE_WRITE8_MEMBER( cmi10_u20_b_w ); + DECLARE_READ_LINE_MEMBER( cmi10_u20_cb1_r ); + DECLARE_WRITE_LINE_MEMBER( cmi10_u20_cb2_w ); + DECLARE_WRITE_LINE_MEMBER( cmi10_u21_cb2_w ); + DECLARE_READ8_MEMBER( cmi10_u21_a_r ); + DECLARE_WRITE16_MEMBER( cmi_iix_update_dp1 ); + DECLARE_WRITE16_MEMBER( cmi_iix_update_dp2 ); + DECLARE_WRITE16_MEMBER( cmi_iix_update_dp3 ); + + DECLARE_READ_LINE_MEMBER( mkbd_kbd_rx ); + DECLARE_WRITE_LINE_MEMBER( mkbd_kbd_tx ); +#if 0 + DECLARE_READ_LINE_MEMBER( q133_rx ); + DECLARE_WRITE_LINE_MEMBER( q133_tx ); + DECLARE_WRITE_LINE_MEMBER( mkbd_cmi_w ); +#endif + DECLARE_READ_LINE_MEMBER( mkbd_cmi_rx ); + DECLARE_WRITE_LINE_MEMBER( mkbd_cmi_tx ); + DECLARE_WRITE_LINE_MEMBER( msm5832_irq ); + DECLARE_WRITE_LINE_MEMBER( mkbd_acia1_int ); + DECLARE_WRITE_LINE_MEMBER( mkbd_acia2_int ); +#if 0 + DECLARE_WRITE_LINE_MEMBER( q133_acia_int ); +#endif + DECLARE_WRITE_LINE_MEMBER( cmi07_irq ); + +protected: + + required_device m_maincpu1; + required_device m_maincpu2; + required_device m_muskeyscpu; + required_device m_alphakeyscpu; + required_device m_midicpu; + required_device m_cmi07cpu; + + required_device m_msm5832; + required_device m_i8214_0; + required_device m_i8214_1; + required_device m_i8214_2; + required_device m_q133_pia_0; + required_device m_q133_pia_1; + required_device m_q133_ptm; + required_memory_region m_q133_region; + + required_device m_q219_pia; + required_device m_q219_ptm; + + required_device m_cmi02_pia_0; + required_device m_cmi02_pia_1; + required_device m_cmi02_ptm; + + required_device m_ank_pia; + required_device m_acia_mkbd_kbd; + required_device m_acia_mkbd_cmi; + + required_device m_cmi07_ptm; + + required_memory_region m_qfc9_region; + required_device m_floppy_0; + required_device m_floppy_1; + required_device m_wd1791; + + required_device m_cmi01a_0; + required_device m_cmi01a_1; + required_device m_cmi01a_2; + required_device m_cmi01a_3; + required_device m_cmi01a_4; + required_device m_cmi01a_5; + required_device m_cmi01a_6; + required_device m_cmi01a_7; + cmi01a_device* m_channels[8]; + + required_device m_cmi10_pia_u20; + required_device m_cmi10_pia_u21; + required_device m_dp1; + required_device m_dp2; + required_device m_dp3; + + required_device m_screen; + required_device m_palette; + + required_ioport_array<8> m_ankrow_ports; + + required_ioport m_lp_x_port; + required_ioport m_lp_y_port; + required_ioport m_lp_touch_port; + + required_ioport m_keypad_a_port; + required_ioport m_keypad_b_port; + + required_ioport_array<3> m_key_mux0_port; + required_ioport_array<3> m_key_mux1_port; + required_ioport_array<3> m_key_mux2_port; + required_ioport_array<3> m_key_mux3_port; + + required_shared_ptr m_cmi07_ram; + + address_space *m_cpu1space; + address_space *m_cpu2space; + + UINT8 *m_q133_rom; + UINT8 m_q133_acia_rx_data; +// UINT8 m_q133_acia_tx_data; + UINT8 m_q133_acia_status; + UINT8 m_q133_acia_cmd; + UINT8 m_q133_acia_ctrl; + +private: + + emu_timer *m_map_switch_timer; + emu_timer *m_hblank_timer; + emu_timer *m_cmi10_scnd_timer; + emu_timer *m_jam_timeout_timer; + + UINT8 m_video_data; + + // Memory + bool map_is_active(int cpunum, int map, UINT8 *map_info); + void update_address_space(int cpunum, UINT8 mapinfo); + void install_video_ram(int cpunum); + void install_peripherals(int cpunum); + + // Video + void hblank(); + void update_video_pos(int y, int x, int byte_size); + void video_write(int offset); + + // Floppy + void dma_fdc_rom(); + void write_fdc_ctrl(UINT8 data); + void fdc_dma_transfer(); + + int m_int_state[2]; + UINT8 m_hp_int; + std::unique_ptr m_shared_ram; + std::unique_ptr m_scratch_ram[2]; + + /* Memory management */ + UINT8 m_map_sel[16]; + std::unique_ptr m_map_ram[4]; + std::unique_ptr m_q256_ram[4]; + UINT8 m_map_ram_latch; + int m_cpu_active_space[2]; // TODO: Make one register + int m_cpu_map_switch[2]; + + /* Q219 lightpen/graphics card */ + std::unique_ptr m_video_ram; + UINT16 m_x_pos; + UINT8 m_y_pos; + UINT16 m_lp_x; + UINT8 m_lp_y; + UINT8 m_q219_b_touch; + + /* QFC9 floppy disk controller card */ + UINT8 * m_qfc9_region_ptr; + int m_fdc_drq; + UINT8 m_fdc_addr; + UINT8 m_fdc_ctrl; + UINT8 m_fdc_status; + PAIR m_fdc_dma_addr; + PAIR m_fdc_dma_cnt; + + /* CMI-07 */ + UINT8 m_cmi07_ctrl; + + /* CMI-10 */ + UINT8 m_scnd; + + /* Musical keyboard */ + UINT8 m_msm5832_addr; + int m_mkbd_acia1_irq; + int m_mkbd_acia2_irq; + int m_mkbd_tx_start; + int m_mkbd_tx_bits; + int m_mkbd_tx_reg; +}; + +/************************************** + * + * Video hardware + * + *************************************/ + +UINT32 cmi_state::screen_update_cmi2x(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + const pen_t *pen = m_palette->pens(); + UINT8 y_scroll = m_q219_pia->a_output(); + UINT8 invert = (!BIT(m_q219_pia->b_output(), 3)) & 1; + + for (int y = cliprect.min_y; y <= cliprect.max_y; ++y) + { + UINT8 *src = &m_video_ram[(512/8) * ((y + y_scroll) & 0xff)]; + UINT32 *dest = &bitmap.pix32(y, cliprect.min_x); + + for (int x = cliprect.min_x; x <= cliprect.max_x; x += 8) + { + UINT8 data = *src++; + + /* Store 8 pixels */ + for (int i = 0; i < 8; ++i) + *dest++ = pen[BIT(data, 7 - i) ^ invert]; + } + } + + /* Get lightpen position */ + //if (LPCEN && NOT_TOUCHING) + if (m_lp_touch_port->read() && BIT(m_q219_pia->b_output(), 1)) + { + /* Invert target pixel */ + bitmap.pix32(m_lp_y_port->read(), m_lp_x_port->read()) ^= 0x00ffffff; + } + + + + return 0; +} + +void cmi_state::hblank() +{ + int v = m_screen->vpos(); + + if (!m_screen->vblank()) + { + int _touch = m_lp_touch_port->read(); + int _tfh = !BIT(m_q219_pia->b_output(), 2); + + if (v == m_lp_y_port->read()) + { + if (_touch) + m_q219_b_touch = 0; + else + m_q219_b_touch = 1 << 5; + + m_q219_pia->ca1_w(!_touch); + + if (!_touch || !_tfh) + { + /* Latch the counters */ + m_lp_x = m_lp_x_port->read(); + m_lp_y = m_lp_y_port->read(); + + /* LPSTB */ + m_q219_pia->cb1_w(1); + } + } + } + /* Adjust for next scanline */ + if (++v >= VTOTAL) + v = 0; + + m_hblank_timer->adjust(m_screen->time_until_pos(v, HBLANK_START)); + +} + +void cmi_state::update_video_pos(int y, int x, int byte_size) +{ + UINT8 *video_addr = &m_video_ram[m_y_pos * (512 / 8) + (m_x_pos / 8)]; + + if (byte_size) + { + *video_addr = m_video_data; + } + else + { + int bit_mask = 1 << ((7 ^ m_x_pos) & 7); + + *video_addr &= ~bit_mask; + *video_addr |= m_video_data & bit_mask; + } + + if (y > 0) + m_y_pos = (m_y_pos + 1) & 0xff; + else if (y < 0) + m_y_pos = (m_y_pos - 1) & 0xff; + + if (x > 0) + m_x_pos = (m_x_pos + 1) & 0x1ff; + else if (x < 0) + m_x_pos = (m_x_pos - 1) & 0x1ff; +} + +void cmi_state::video_write(int offset) +{ + switch (offset) + { + case 0x0: update_video_pos( 0, 0, 0); break; + case 0x1: update_video_pos( 0, 1, 0); break; + case 0x2: update_video_pos( 0, -1, 0); break; + case 0x3: update_video_pos( 0, 0, 1); break; + case 0x4: update_video_pos( 1, 0, 0); break; + case 0x5: update_video_pos( 1, 1, 0); break; + case 0x6: update_video_pos( 1, -1, 0); break; + case 0x7: update_video_pos( 1, 0, 1); break; + case 0x8: update_video_pos(-1, 0, 0); break; + case 0x9: update_video_pos(-1, 1, 0); break; + case 0xa: update_video_pos(-1, -1, 0); break; + case 0xb: update_video_pos(-1, 0, 1); break; +// default: printf("Video Write %x %x\n", offset, m_video_data); + } +} + +READ8_MEMBER( cmi_state::video_r ) +{ + m_video_data = m_video_ram[m_y_pos * (512 / 8) + (m_x_pos / 8)]; + + video_write(offset); + return m_video_data; +} + +READ8_MEMBER( cmi_state::lightpen_r ) +{ + if (offset & 2) + return m_lp_y; + else + return m_lp_x >> 1; +} + +READ8_MEMBER( cmi_state::pia_q219_b_r ) +{ + return ((m_lp_x << 7) & 0x80) | m_q219_b_touch; +} + + +WRITE8_MEMBER( cmi_state::video_w ) +{ + m_video_data = data; + video_write(offset); +} + +WRITE8_MEMBER( cmi_state::vscroll_w ) +{ + // TODO: Partial updates. Also, this should be done through a PIA +} + +WRITE8_MEMBER( cmi_state::video_attr_w ) +{ + // TODO +} + +WRITE8_MEMBER( cmi_state::vram_w ) +{ + m_video_ram[offset] = data; +} + +READ8_MEMBER( cmi_state::vram_r ) +{ + /* Latch the current video position */ + m_y_pos = (offset >> 6) & 0xff; + m_x_pos = (offset & 0x3f) << 3; + + return m_video_ram[offset]; +} + + + +/* Memory handling */ + +READ8_MEMBER( cmi_state::rom_r ) +{ + UINT16 base = (&space == m_cpu2space ? 0x1000 : 0x2000); + return *(((UINT8 *)m_q133_region->base()) + base + offset); +} + +WRITE8_MEMBER( cmi_state::map_ram_w ) +{ + //printf("map_ram_w: %04x = %02x\n", offset, data); + if ((offset & 1) == 0) + { + m_map_ram_latch = data; + } + else + { + for (int i = 0; i < NUM_Q256_CARDS; ++i) + { + UINT8 map_info; + int map = (offset >> 6); + int page_enable = ((m_map_ram_latch & 0x80) && (i == (m_map_ram_latch & 7))) ? 0x80 : 0; + + m_map_ram[i][offset >> 1] = page_enable | (data & 0x7f); + + /* Determine if this map is in use by either CPU */ + if (map_is_active(CPU_1, map, &map_info)) + update_address_space(0, map_info); + + if (map_is_active(CPU_2, map, &map_info)) + update_address_space(1, map_info); + } + } +} + +READ8_MEMBER( cmi_state::vector_r ) +{ + return m_q133_rom[((&space.device() == m_maincpu2) ? 0xbfe : 0xffe) + offset]; +} + +READ8_MEMBER( cmi_state::map_r ) +{ + int cpunum = (&space.device() == m_maincpu1) ? 0 : 1; + UINT8 data = (m_cpu_active_space[1] << 2) | (m_cpu_active_space[0] << 1) | cpunum; + //printf("map_r %04x = %02x (%d)\n", offset, data, cpunum); + return data; +} + +WRITE8_MEMBER( cmi_state::map_w ) +{ + int cpunum = (&space.device() == m_maincpu1) ? 0 : 1; + //printf("map_w %04x = %02x (%d)\n", offset, data, cpunum); + + m_map_switch_timer->adjust(attotime::from_ticks(data & 0xf, M6809_CLOCK), cpunum); +} + +void cmi_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case TIMER_MAP_SWITCH: + { + //printf("Timer 0 expired\n"); + //printf("Map switch timer: CPU %d\n", param); + m_cpu_active_space[param] = m_cpu_map_switch[param]; + UINT8 map_info = (m_cpu_map_switch[param] == MAPPING_A) ? + m_map_sel[param ? MAPSEL_P2_A : MAPSEL_P1_A] : + m_map_sel[param ? MAPSEL_P2_B : MAPSEL_P1_B]; + update_address_space(param, map_info); + m_map_switch_timer->adjust(attotime::never); + break; + } + + case TIMER_HBLANK: + hblank(); + break; + + case TIMER_JAM_TIMEOUT: + m_maincpu2->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); + m_jam_timeout_timer->adjust(attotime::never); + break; + + case TIMER_CMI10_SCND: + m_cmi10_pia_u20->ca1_w(m_scnd); + m_scnd ^= 1; + m_cmi10_pia_u21->ca1_w(m_scnd); + m_map_switch_timer->adjust(attotime::never); + break; + } +} + +READ8_MEMBER( cmi_state::atomic_r ) +{ + // TODO + //printf("atomic access\n"); + return 0; +} + +WRITE8_MEMBER( cmi_state::cpufunc_w ) +{ + int cpunum = data & 1; + int idx = data & 6; + int bit = (data & 8) >> 3; + //printf("cpufunc_w %04x = %02x cpunum:%d idx:%d bit:%d\n", offset, data, cpunum, idx, bit); + + switch (idx) + { + case 0: set_interrupt(cpunum, IRQ_IPI2_LEVEL, bit ? ASSERT_LINE : CLEAR_LINE); + break; + case 2: // TODO: Hardware trace + break; + case 4: m_cpu_map_switch[cpunum] = bit; + break; + case 6: if (cpunum == CPU_1) + m_maincpu1->set_input_line(M6809_FIRQ_LINE, bit ? ASSERT_LINE : CLEAR_LINE); + else + m_maincpu2->set_input_line(M6809_FIRQ_LINE, bit ? ASSERT_LINE : CLEAR_LINE); + break; + } +} + +READ8_MEMBER( cmi_state::parity_r ) +{ + //printf("parity_r %04x\n", offset); + // TODO + return 0xff; +} + +WRITE8_MEMBER( cmi_state::mapsel_w ) +{ + //printf("mapsel_w %04x = %02x\n", offset, data); + data ^= 0x1f; + m_map_sel[offset] = data; + + if ((offset == MAPSEL_P1_A) && (m_cpu_active_space[0] == MAPPING_A)) + update_address_space(0, data); + else if ((offset == MAPSEL_P1_B) && (m_cpu_active_space[0] == MAPPING_B)) + update_address_space(0, data); + + if ((offset == MAPSEL_P2_A) && (m_cpu_active_space[1] == MAPPING_A)) + update_address_space(1, data); + else if ((offset == MAPSEL_P2_B) && (m_cpu_active_space[1] == MAPPING_B)) + update_address_space(1, data); +} + + + +WRITE16_MEMBER( cmi_state::midi_dma_w ) +{ + address_space *cmi_space = ((offset & 0x8000) ? m_cpu2space : m_cpu1space); + offset &= 0x7fff; + + if (ACCESSING_BITS_0_7) + cmi_space->write_byte(offset * 2 + 1, data); + if (ACCESSING_BITS_8_15) + cmi_space->write_byte(offset * 2, data >> 8); +} + +READ16_MEMBER( cmi_state::midi_dma_r ) +{ + address_space *cmi_space = ((offset & 0x8000) ? m_cpu2space : m_cpu1space); + offset &= 0x7fff; + return cmi_space->read_word(offset * 2); +} + +/* The maps are dynamically populated */ +static ADDRESS_MAP_START( maincpu1_map, AS_PROGRAM, 8, cmi_state ) + AM_RANGE(0xfffe, 0xffff) AM_READ(vector_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( maincpu2_map, AS_PROGRAM, 8, cmi_state ) + AM_RANGE(0xfffe, 0xffff) AM_READ(vector_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( muskeys_map, AS_PROGRAM, 8, cmi_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x007f) AM_RAM + AM_RANGE(0x0080, 0x0083) AM_DEVREADWRITE("cmi10_pia_u21", pia6821_device, read, write) + AM_RANGE(0x0090, 0x0093) AM_DEVREADWRITE("cmi10_pia_u20", pia6821_device, read, write) + AM_RANGE(0x00a0, 0x00a0) AM_DEVREADWRITE("acia_mkbd_kbd", acia6850_device, status_r, control_w) + AM_RANGE(0x00a1, 0x00a1) AM_DEVREADWRITE("acia_mkbd_kbd", acia6850_device, data_r, data_w) + AM_RANGE(0x00b0, 0x00b0) AM_DEVREADWRITE("acia_mkbd_cmi", acia6850_device, status_r, control_w) + AM_RANGE(0x00b1, 0x00b1) AM_DEVREADWRITE("acia_mkbd_cmi", acia6850_device, data_r, data_w) + AM_RANGE(0x4000, 0x47ff) AM_RAM + AM_RANGE(0xb000, 0xb400) AM_ROM + AM_RANGE(0xf000, 0xffff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( alphakeys_map, AS_PROGRAM, 8, cmi_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x007f) AM_RAM + AM_RANGE(0x4000, 0x7fff) AM_READ_PORT("ANK_OPTIONS") + AM_RANGE(0x8000, 0xbfff) AM_DEVREADWRITE("ank_pia", pia6821_device, read, write) + AM_RANGE(0xc000, 0xc3ff) AM_ROM AM_MIRROR(0x3c00) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( midicpu_map, AS_PROGRAM, 16, cmi_state ) + AM_RANGE(0x000000, 0x003fff) AM_ROM + AM_RANGE(0x040000, 0x05ffff) AM_READWRITE(midi_dma_r, midi_dma_w) +// AM_RANGE(0x060000, 0x06001f) TIMERS +// AM_RANGE(0x060050, 0x06005f) ACIA +// AM_RANGE(0x060070, 0x06007f) SMPTE + AM_RANGE(0x080000, 0x083fff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cmi07cpu_map, AS_PROGRAM, 8, cmi_state ) + AM_RANGE(0x0000, 0x3fff) AM_NOP // TODO + AM_RANGE(0x4000, 0x4fff) AM_NOP // TODO + AM_RANGE(0x8000, 0x8fff) AM_DEVREADWRITE("cmi07_ptm", ptm6840_device, read, write) + AM_RANGE(0xc000, 0xffff) AM_RAM AM_SHARE("cmi07_ram") +ADDRESS_MAP_END + +/* Input ports */ +static INPUT_PORTS_START( cmi2x ) + PORT_START("LP_X") + PORT_BIT( 0xffff, HBLANK_START/2, IPT_LIGHTGUN_X) PORT_NAME ("Lightpen X") PORT_MINMAX(0, HBLANK_START - 1) PORT_SENSITIVITY(50) PORT_CROSSHAIR(X, 1.0, 0.0, 0) + + PORT_START("LP_Y") + PORT_BIT( 0xffff, VBLANK_START/2, IPT_LIGHTGUN_Y) PORT_NAME ("Lightpen Y") PORT_MINMAX(0, VBLANK_START - 1) PORT_SENSITIVITY(50) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) + + PORT_START("LP_TOUCH") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME ( "Lightpen Touch" ) PORT_CODE( MOUSECODE_BUTTON1 ) + + /* Alphanumeric keyboard */ + PORT_START("ANK_OPTIONS") + PORT_DIPNAME( 0x07, 0x00, "Speed (baud)" ) + PORT_DIPSETTING( 0x00, "9600" ) + PORT_DIPSETTING( 0x01, "4800" ) + PORT_DIPSETTING( 0x02, "2400" ) + PORT_DIPSETTING( 0x03, "1200" ) + PORT_DIPSETTING( 0x04, "600" ) + PORT_DIPSETTING( 0x05, "300" ) + PORT_DIPSETTING( 0x06, "150" ) + PORT_DIPSETTING( 0x07, "110" ) + + PORT_DIPNAME( 0x30, 0x20, "Parity" ) + PORT_DIPSETTING( 0x00, "Even" ) + PORT_DIPSETTING( 0x10, "None, bit 7 is 0" ) + PORT_DIPSETTING( 0x20, "Odd" ) + PORT_DIPSETTING( 0x30, "None, bit 7 is 1" ) + + PORT_START("ROW0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('+') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') + + PORT_START("ROW1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('-') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') + + PORT_START("ROW2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Set") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Add") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') + + PORT_START("ROW3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_NAME("LShift") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Clear") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("WTF") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') + + PORT_START("ROW4") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Home") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') + + PORT_START("ROW5") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Return (a)") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Return (b)") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') + + PORT_START("ROW6") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('S') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Sub") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("RShift") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') + + PORT_START("ROW7") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') + + /* Keypad */ + PORT_START("KEYPAD_A") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) + + PORT_START("KEYPAD_B") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) + + /* Master musical keyboard */ + PORT_START("KEY_0_0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F0") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F0 #") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G0") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G0 #") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A1") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A1 #") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B1") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C1") + + PORT_START("KEY_0_1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C1 #") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D1") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D1 #") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E1") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F1 #") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G1") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G1 #") + + PORT_START("KEY_0_2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A2") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A2 #") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B2") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C2") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C2 #") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D2") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D2 #") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E2") + + PORT_START("KEY_0_3") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("KEY_1_0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2 #") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G2") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G2 #") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A3") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A3 #") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B3") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C3") + + PORT_START("KEY_1_1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C3 #") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D3") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D3 #") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E3") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G3") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G3 #") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A4") + + PORT_START("KEY_1_2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A4 #") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B4") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B4 #") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C4") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C4 #") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D4") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D4 #") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E4") + + PORT_START("KEY_1_3") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED) + + PORT_START("KEY_2_0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4 #") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G4") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G4 #") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A5") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A5 #") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B5") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C5") + + PORT_START("KEY_2_1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C5 #") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D5") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D5 #") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E5") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5 #") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G5") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G5 #") + + PORT_START("KEY_2_2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A6") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A6 #") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B6") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C6") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C6 #") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D6") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D6 #") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E6") + + PORT_START("KEY_2_3") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F6") +INPUT_PORTS_END + +bool cmi_state::map_is_active(int cpunum, int map, UINT8 *map_info) +{ + if (m_cpu_active_space[cpunum] == MAPPING_A) + { + *map_info = m_map_sel[cpunum ? MAPSEL_P2_A : MAPSEL_P1_A]; + + if ((*map_info & 0x1f) == map) + return 1; + } + else + { + *map_info = m_map_sel[cpunum ? MAPSEL_P2_B : MAPSEL_P1_B]; + + if ((*map_info & 0x1f) == map) + return 1; + } + + return 0; +} + +void cmi_state::update_address_space(int cpunum, UINT8 mapinfo) +{ + int map = mapinfo & 0x1f; + bool vram_en = !BIT(mapinfo, 5); + bool periph_en = !BIT(mapinfo, 7); + int i; + + address_space *space = (cpunum == 0 ? m_cpu1space : m_cpu2space); + + /* Step through the map RAM assignments */ + for (int page = 0; page < PAGE_COUNT; ++page) + { + int address = page * PAGE_SIZE; + UINT8 page_info = 0; + + /* Scan through the cards */ + for (i = 0; i < NUM_Q256_CARDS; ++i) + { + page_info = m_map_ram[i][(map << PAGE_SHIFT) + page]; + + /* Page is enabled in this bank */ + if (page_info & 0x80) + break; + } + + if (BIT(m_cmi07_ctrl, 6)) + { + if ((cpunum == 0) || !BIT(m_cmi07_ctrl, 7)) + { + if (m_cmi07_ctrl & 0x30) + if ((address & 0xc000) == ((m_cmi07_ctrl & 0x30) << 10)) + { + space->install_ram(address, address + PAGE_SIZE, &m_cmi07_ram[(page * PAGE_SIZE) & 0x3fff]); + continue; + } + } + } + + /* No banks had this page enabled - skip */ + if ((page_info & 0x80) == 0) + continue; + + /* If Video RAM is enabled, don't install RAM here */ + if (vram_en && address >= 0x8000 && address <= 0xbfff) + continue; + + /* If peripherals are enabled, don't install RAM here */ + if (periph_en && address >= 0xf000 && address <= 0xffff) // TODO + continue; + + /* Now map the RAM page */ + space->install_ram(address, address + PAGE_SIZE, &m_q256_ram[i][(page_info & 0x7f) * PAGE_SIZE]); + } + + if (vram_en) + install_video_ram(cpunum); + + if (periph_en) + install_peripherals(cpunum); +} + +WRITE8_MEMBER( cmi_state::cmi07_w ) +{ + m_cmi07_ctrl = data; + + m_cmi07cpu->set_input_line(INPUT_LINE_RESET, BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE); + m_cmi07cpu->set_input_line(M6809_FIRQ_LINE, BIT(data, 1) ? CLEAR_LINE : ASSERT_LINE); + m_cmi07cpu->set_input_line(INPUT_LINE_NMI, BIT(data, 2) ? CLEAR_LINE : ASSERT_LINE); + m_cmi07cpu->set_input_line(INPUT_LINE_HALT, BIT(data, 3) ? CLEAR_LINE : ASSERT_LINE); + + /* We need to update the address spaces */ + UINT8 map_info = (m_cpu_active_space[0] == MAPPING_A) ? m_map_sel[MAPSEL_P1_A] : m_map_sel[MAPSEL_P1_B]; + update_address_space(0, map_info); + + map_info = (m_cpu_active_space[1] == MAPPING_A) ? m_map_sel[MAPSEL_P2_A] : m_map_sel[MAPSEL_P2_B]; + update_address_space(1, map_info); +} + +READ8_MEMBER( cmi_state::cmi07_r ) +{ + //printf("CMI 07 R: %x\n", offset); + return 0xff; +} + +READ8_MEMBER( cmi_state::q133_acia_r ) +{ + int acia = (offset >> 2) & 3; + + if (acia != 0) + return 0; + + switch (offset & 3) + { + case 0: + /* Clear RDRF */ + m_q133_acia_status &= ~0x08; + set_interrupt(CPU_1, IRQ_ACINT_LEVEL, CLEAR_LINE); + return m_q133_acia_rx_data; + case 1: + m_q133_acia_status &= ~0x80; + return m_q133_acia_status | 0x10; + case 2: return m_q133_acia_cmd; + case 3: return m_q133_acia_ctrl; + } + + return 0; + +// return m_133_acia->read(0); +} + +WRITE8_MEMBER( cmi_state::q133_acia_w ) +{ + int acia = (offset >> 2) & 3; + + if (acia != 0) + return; + + switch (offset & 3) + { + case 0: break;//printf("%c\n", data); break; // TODO + case 1: break; // Reset + case 2: m_q133_acia_cmd = data; break; + case 3: m_q133_acia_ctrl = data; break; + } + +// m_q133_acia->write(offset & 3, data); +} + +WRITE_LINE_MEMBER( cmi_state::ank_data_w ) +{ +} + +READ8_MEMBER( cmi_state::ank_col_r ) +{ + int row = m_ank_pia->b_output() ^ 0xff; + + switch (row) + { + case 0x01: return m_ankrow_ports[0]->read(); + case 0x02: return m_ankrow_ports[1]->read(); + case 0x04: return m_ankrow_ports[2]->read(); + case 0x08: return m_ankrow_ports[3]->read(); + case 0x10: return m_ankrow_ports[4]->read(); + case 0x20: return m_ankrow_ports[5]->read(); + case 0x40: return m_ankrow_ports[6]->read(); + case 0x80: return m_ankrow_ports[7]->read(); + default: return 0xff; + } +} + + +/************************************** + * + * Floppy disk interface + * + *************************************/ + +void cmi_state::dma_fdc_rom() +{ + /* DMA channel 1 is used*/ + UINT8 map_info = m_map_sel[MAPSEL_P2_A_DMA1]; + int map = map_info & 0x1f; + int addr = m_fdc_dma_addr.w.l & ~PAGE_MASK; + int page = addr / PAGE_SIZE; + UINT8 p_info = 0; + + /* Active low */ + m_fdc_status &= ~FDC_STATUS_DRIVER_LOAD; + + int i; + for (i = 0; i < NUM_Q256_CARDS; ++i) + { + p_info = m_map_ram[i][(map << PAGE_SHIFT) | page]; + + if (p_info & 0x80) + break; + } + + if ((p_info & 0x80) == 0) + { + printf("Trying to DMA FDC driver to a non-enabled page!\n"); + return; + } + + /* TODO: This should be stuck in a deferred write */ + int cnt = std::min(m_fdc_dma_cnt.w.l ^ 0xffff, 2048); + //printf("cnt is %d\n", cnt); + memcpy(&m_q256_ram[i][(p_info & 0x7f) * PAGE_SIZE], m_qfc9_region_ptr, cnt); + m_fdc_status |= FDC_STATUS_DRIVER_LOAD; + + /* TODO: Is this correct? */ + m_fdc_dma_addr.w.l += 0x800; + m_fdc_dma_cnt.w.l = 0; +} + +void cmi_state::write_fdc_ctrl(UINT8 data) +{ + int drive = data & 1; + int side = BIT(data, 5) ? 1 : 0; + + //printf("write_fdc_ctrl: drive:%d side:%d dd:%d data:%02x\n", drive, side, BIT(data, 7) ? 1 : 0, data); + if (drive) + { + m_floppy_1->ss_w(side); + m_wd1791->set_floppy(m_floppy_1); + } + else + { + m_floppy_0->ss_w(side); + m_wd1791->set_floppy(m_floppy_0); + } + m_wd1791->dden_w(BIT(data, 7) ? true : false); + + m_fdc_ctrl = data; +} + +WRITE8_MEMBER( cmi_state::fdc_w ) +{ + //printf("fdc_w: %04x = %02x\n", offset, data); fflush(stdout); + if (offset == 0) + { + switch (m_fdc_addr) + { + case 0x0: /*printf("write_fdc_ctrl: %02x\n", data);*/ write_fdc_ctrl(data); break; + case 0x2: /*printf("fdc_dma_addr : %02x\n", data);*/ m_fdc_dma_addr.b.l = data; break; + case 0x4: /*printf("fdc_dma_addr hi: %02x\n", data);*/ m_fdc_dma_addr.b.h = data; break; + case 0x6: /*printf("fdc_dma_cnt lo: %02x\n", data);*/ m_fdc_dma_cnt.b.l = data; break; + case 0x8: /*printf("fdc_dma_cnt hi: %02x\n", data);*/ m_fdc_dma_cnt.b.h = data; break; + case 0xa: /*printf("dma_fdc_rom\n");*/ dma_fdc_rom(); break; + case 0xc: /*printf("cmd_w: %02x\n", data);*/ m_wd1791->cmd_w(data ^ 0xff); break; + case 0xd: /*printf("track_w: %02x\n", data);*/ m_wd1791->track_w(data ^ 0xff); break; + case 0xe: /*printf("sector_w: %02x\n", data);*/ m_wd1791->sector_w(data ^ 0xff); break; + case 0xf: /*printf("data_w: %02x\n", data);*/ m_wd1791->data_w(data ^ 0xff); break; + default: printf("fdc_w: Invalid access (%x with %x)", m_fdc_addr, data); + } + } + else + m_fdc_addr = data; +} + +READ8_MEMBER( cmi_state::fdc_r ) +{ + if (offset == 0) + { + switch (m_fdc_addr) + { + case 0xc: { UINT8 ret = m_wd1791->status_r(); /*printf("status_r: %02x\n", ret);*/ return ret ^ 0xff; } + case 0xd: { UINT8 ret = m_wd1791->track_r(); /*printf("track_r: %02x\n", ret);*/ return ret ^ 0xff; } + case 0xe: { UINT8 ret = m_wd1791->sector_r(); /*printf("sector_r: %02x\n", ret);*/ return ret ^ 0xff; } + case 0xf: { UINT8 ret = m_wd1791->data_r(); /*printf("data_r: %02x\n", ret);*/ return ret ^ 0xff; } + default: return 0; + } + } + else + return m_fdc_status; +} + +void cmi_state::fdc_dma_transfer() +{ + /* DMA channel 1 is used*/ + UINT8 map_info = m_map_sel[MAPSEL_P2_A_DMA1]; + int map = map_info & 0x1f; + + /* Transfer from disk to RAM */ + if (!BIT(m_fdc_ctrl, 4)) + { + //printf("fdc_dma_transfer: Transfer from disk to RAM\n"); + /* Determine the initial page */ + int cpu_page = (m_fdc_dma_addr.w.l & ~PAGE_MASK) / PAGE_SIZE; + int phys_page = 0; + + //printf("fdc_dma_transfer: m_fdc_dma_addr (RAM addr): %04x\n", m_fdc_dma_addr.w.l); + +// printf("FDC DMA: Disk to [%x] (%x bytes)\n", m_fdc_dma_addr.w.l, m_fdc_dma_cnt.w.l ^ 0xffff); + + int i; + for (i = 0; i < NUM_Q256_CARDS; ++i) + { + phys_page = m_map_ram[i][(map << PAGE_SHIFT) | cpu_page]; + + if (phys_page & 0x80) + break; + } + + //phys_page &= 0x7f; + + //printf("fdc_dma_transfer: fdc_dma_cnt is %04x, drq is %d\n", m_fdc_dma_cnt.w.l, m_fdc_drq); + + for (; m_fdc_dma_cnt.w.l < 0xffff && m_fdc_drq; m_fdc_dma_cnt.w.l++) + { + /* Read a byte at a time */ + UINT8 data = m_wd1791->data_r() ^ 0xff; + + //printf("fdc_dma_transfer, data %02x\n", data); + if (m_cmi07_ctrl & 0x30) + if (BIT(m_cmi07_ctrl, 6) && !BIT(m_cmi07_ctrl, 7)) + { + if ((m_fdc_dma_addr.w.l & 0xc000) == ((m_cmi07_ctrl & 0x30) << 10)) + m_cmi07_ram[m_fdc_dma_addr.w.l & 0x3fff] = data; + } + + if (phys_page & 0x80) + m_q256_ram[i][((phys_page & 0x7f) * PAGE_SIZE) + (m_fdc_dma_addr.w.l & PAGE_MASK)] = data; + + /* TODO: Is updating these correct? */ + if (!BIT(m_fdc_ctrl, 3)) + m_fdc_dma_addr.w.l++; + + if ((m_fdc_dma_addr.w.l % PAGE_SIZE) == 0) + { + ++cpu_page; + + for (int i = 0; i < NUM_Q256_CARDS; ++i) + { + phys_page = m_map_ram[i][(map << PAGE_SHIFT) | cpu_page]; + + if (phys_page & 0x80) + break; + } + } + } + + /* HACK */ + while (m_fdc_drq) + { + //printf("fdc_dma_transfer: fdc_drq is still set; emptying wd1791 until it is lowered\n"); + m_wd1791->data_r(); + } + } + + // Transfer from RAM to disk + else + { + //printf("fdc_dma_transfer: Transfer from RAM to disk\n"); + /* TODO: Check me and combine common code with the above */ + /* Determine the initial page */ + int cpu_page = (m_fdc_dma_addr.w.l & ~PAGE_MASK) / PAGE_SIZE; + int phys_page = 0; + + //printf("fdc_dma_transfer: m_fdc_dma_addr (RAM addr): %04x\n", m_fdc_dma_addr.w.l); + int i; + for (i = 0; i < NUM_Q256_CARDS; ++i) + { + phys_page = m_map_ram[i][(map << PAGE_SHIFT) | cpu_page]; + + if (phys_page & 0x80) + break; + } + + phys_page &= 0x7f; + + //printf("fdc_dma_transfer: fdc_dma_cnt is %04x, drq is %d\n", m_fdc_dma_cnt.w.l, m_fdc_drq); + + for (; m_fdc_dma_cnt.w.l < 0xffff && m_fdc_drq; m_fdc_dma_cnt.w.l++) + { + /* Write a byte at a time */ + UINT8 data = 0; + + /* TODO: This should be stuck in a deferred write */ + if (phys_page & 0x80) + data = m_q256_ram[i][((phys_page & 0x7f) * PAGE_SIZE) + (m_fdc_dma_addr.w.l & PAGE_MASK)]; + + //printf("fdc_dma_transfer: writing data %02x to controller\n", data); + m_wd1791->data_w(data ^ 0xff); + + /* TODO: Is updating these correct? */ + if (!BIT(m_fdc_ctrl, 3)) + m_fdc_dma_addr.w.l++; + + if ((m_fdc_dma_addr.w.l % PAGE_SIZE) == 0) + { + ++cpu_page; + + for (int i = 0; i < NUM_Q256_CARDS; ++i) + { + phys_page = m_map_ram[i][(map << PAGE_SHIFT) | cpu_page]; + + if (phys_page & 0x80) + break; + } + + if ((phys_page & 0x80) == 0) + { + printf("Trying to DMA floppy data from a non-enabled page!\n"); + return; + } + } + } + } +} + +WRITE_LINE_MEMBER( cmi_state::wd1791_irq ) +{ + if (state) + { + m_fdc_status |= FDC_STATUS_INTERRUPT; + + if (m_fdc_ctrl & FDC_CONTROL_INTEN) + set_interrupt(CPU_2, IRQ_DISKINT_LEVEL, ASSERT_LINE); + + } + else + { + m_fdc_status &= ~FDC_STATUS_INTERRUPT; + set_interrupt(CPU_2, IRQ_DISKINT_LEVEL, CLEAR_LINE); + } +} + +WRITE_LINE_MEMBER( cmi_state::wd1791_drq ) +{ + m_fdc_drq = state; + //printf("m_fdc_drq: %d\n", state); + if (state) + fdc_dma_transfer(); +} + + + +/************************************** + * + * Master card and channel cards + * + *************************************/ + +/* +0 - 1f +20 = PIA +21 = PIA +22 = PIA +23 = PIA + +24 = ADC +25 = ADC +26 = HALT CPU 2 +27 = UNHALT CPU 2 +28 - 2B = PIA +*/ + + +WRITE_LINE_MEMBER( cmi01a_device::cmi01a_1_ca2_w ) +{ + // upate_stream() + if (!state) + { + m_segment_cnt = 0x4000 | ((m_pia_0->a_output() & 0x7f) << 7); + m_new_addr = 1; + m_pia_1->cb1_w(1); + } +} + +WRITE_LINE_MEMBER( cmi01a_device::ch_int ) +{ +// printf("CH%d INT: %x %x\n", ch, state, m_int_state[0]); + dynamic_cast(owner())->set_interrupt(CPU_1, ch_int_levels[m_channel], state ? ASSERT_LINE : CLEAR_LINE); +} + +void cmi01a_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch(id) + { + case TIMER_ZX: + zx_timer_cb(); + break; + } +} + +void cmi01a_device::zx_timer_cb() +{ + /* Set ZX */ + if (m_zx_flag == 0) + m_pia_1->ca1_w(1); + else + m_pia_1->ca1_w(0); + + m_zx_flag ^= 1; + + if (m_zx_flag == 0) + { + /* Low to high transition - clock flip flop */ + int op = m_ptm_output; + + /* Set /ZCINT */ + if (op != m_zx_ff) + m_pia_0->ca1_w(0); + + m_zx_ff = op; + m_pia_0->ca1_w(1); + } +} + +void cmi01a_device::run_voice() +{ + int val_a = m_pia_1->a_output(); + int pitch = ((val_a & 3) << 8) | m_pia_1->b_output(); + int o_val = (val_a >> 2) & 0xf; + + int m_tune = m_cmi02_pia_0->b_output(); + double mfreq = (double)(0xf00 | m_tune) * ((double)MASTER_OSCILLATOR / 2.0) / 4096.0; + + double cfreq = ((double)(0x800 | (pitch << 1))* mfreq) / 4096.0; + +// if (cfreq > 0.0) + { + /* Octave register enabled? */ + if (!(o_val & 0x8)) + cfreq /= 2 << ((7 ^ o_val) & 7); + + cfreq /= 16.0f; + + m_freq = cfreq; + + m_stream->set_sample_rate(cfreq); + + // Set timers and things? + attotime zx_period = attotime::from_ticks(64, cfreq); + m_zx_timer->adjust(zx_period, 0, zx_period); + + m_active = true; + } +} + +WRITE_LINE_MEMBER( cmi01a_device::cmi01a_1_cb2_w ) +{ + //streams_update(); + + /* RUN */ + if (state) + { + m_segment_cnt = 0x4000 | ((m_pia_0->a_output() & 0x7f) << 7); + m_new_addr = 1; + + /* Clear /EOSI */ +// pia6821_cb1_w(card->pia[1], 0, 1); + + /* Clear ZX */ + m_pia_1->ca1_w(0); + + /* Clear /ZCINT */ + m_pia_0->ca1_w(1); + + m_ptm->set_g1(0); + m_ptm->set_g2(0); + m_ptm->set_g3(0); + + run_voice(); + } + else + { + /* Clear /EOSI */ + m_pia_1->cb1_w(1); + + m_ptm->set_g1(1); + m_ptm->set_g2(1); + m_ptm->set_g3(1); + + //printf("Stop %d\n", m_channel); + + m_zx_timer->adjust(attotime::never); + m_active = false; + m_zx_flag = 0; // TEST + m_zx_ff = 0; + } + +} + +void cmi01a_device::update_wave_addr(int inc) +{ + int old_cnt = m_segment_cnt; + + if (inc) + ++m_segment_cnt; + + /* Update end of sound interrupt flag */ + m_pia_1->cb1_w((m_segment_cnt & 0x4000) >> 14); + + /* TODO Update zero crossing flag */ + m_pia_1->ca1_w((m_segment_cnt & 0x40)); + + /* Clock a latch on a transition */ + if ((old_cnt & 0x40) && !(m_segment_cnt & 0x40)) + { + // TODO: ECLK + m_pia_1->ca2_w(1); + m_pia_1->ca2_w(0); + } + + /* Zero crossing interrupt is a pulse */ +} + +WRITE8_MEMBER( cmi01a_device::write ) +{ + switch (offset) + { + case 0x0: + if (m_new_addr) + m_new_addr = 0; + + m_wave_ram[m_segment_cnt & 0x3fff] = data; + update_wave_addr(1); + break; + + case 0x3: + m_env_dir_ctrl = ENV_DIR_DOWN; + break; + + case 0x4: + m_env_dir_ctrl = ENV_DIR_UP; + break; + + case 0x5: + m_vol_latch = data; + break; + + case 0x6: + m_flt_latch = data; + break; + + case 0x8: case 0x9: case 0xa: case 0xb: + m_pia_0->write(space, offset & 3, data); + break; + + case 0xc: case 0xd: case 0xe: case 0xf: + m_pia_1->write(space, (BIT(offset, 0) << 1) | BIT(offset, 1), data); + break; + + case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: + { + /* PTM addressing is a little funky */ + int a0 = offset & 1; + int a1 = (m_ptm_output && BIT(offset, 3)) || (!BIT(offset, 3) && BIT(offset, 2)); + int a2 = BIT(offset, 1); + + //printf("CH%d PTM: [%x] %x\n", ch, (a2 << 2) | (a1 << 1) | a0, data); + m_ptm->write(space, (a2 << 2) | (a1 << 1) | a0, data); + break; + } + } +} + +READ8_MEMBER( cmi01a_device::read ) +{ + UINT8 data = 0; + + switch (offset) + { + case 0x0: + if (m_new_addr) + { + m_new_addr = 0; + break; + } + data = m_wave_ram[m_segment_cnt & 0x3fff]; + update_wave_addr(1); + break; + + case 0x3: + m_env_dir_ctrl = ENV_DIR_DOWN; + break; + + case 0x4: + m_env_dir_ctrl = ENV_DIR_UP; + break; + + case 0x8: case 0x9: case 0xa: case 0xb: + data = m_pia_0->read(space, offset & 3); + break; + + case 0xc: case 0xd: case 0xe: case 0xf: + data = m_pia_1->read(space, (BIT(offset, 0) << 1) | BIT(offset, 1)); + break; + + case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: + { + int a0 = offset & 1; + int a1 = (m_ptm_output && BIT(offset, 3)) || (!BIT(offset, 3) && BIT(offset, 2)); + int a2 = BIT(offset, 1); + + data = m_ptm->read(space, (a2 << 2) | (a1 << 1) | a0); + break; + } + } + + return data; +} + +WRITE8_MEMBER( cmi01a_device::cmi01a_ptm_c0 ) +{ + m_ptm_output = data; +} + +READ8_MEMBER( cmi_state::cmi02_r ) +{ + if (offset <= 0x1f) + { + int ch_mask = m_cmi02_pia_0->a_output(); + + for (int i = 0; i < 8; ++i) + { + if (ch_mask & (1 << i)) + return m_channels[i]->read(space, i, offset & 0x1f); + } + + return 0xff; + } + else + { + switch (offset) + { + case 0x20: case 0x21: case 0x22: case 0x23: + return m_cmi02_pia_0->read(space, offset & 3); + + case 0x26: + m_maincpu2->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); + /* LS123 one-shot with 10n and 150k */ + m_jam_timeout_timer->adjust(attotime::from_usec(675)); + return 0xff; + + case 0x27: + m_maincpu2->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); + return 0xff; + + case 0x28: case 0x29: case 0x2a: case 0x2b: + return m_cmi02_pia_1->read(space, offset & 3); + + case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f: + return m_cmi02_ptm->read(space, offset & 7); + + default: + logerror("CMI02 R: %x\n", offset); + return 0; + } + } +} + +WRITE8_MEMBER( cmi_state::cmi02_w ) +{ + if (offset <= 0x1f) + { + int ch_mask = m_cmi02_pia_0->a_output(); + + for (int i = 0; i < 8; ++i) + { + if (ch_mask & (1 << i)) + m_channels[i]->write(space, offset & 0x1f, data, 0xff); + } + } + else + { + switch (offset) + { + case 0x20: case 0x21: case 0x22: case 0x23: + m_cmi02_pia_0->write(space, offset & 3, data); + break; + + case 0x28: case 0x29: case 0x2a: case 0x2b: + m_cmi02_pia_1->write(space, offset & 3, data); + break; + + case 0x30: + m_maincpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + m_i8214_2->b_w(data & 0x7); + m_i8214_2->sgs_w((data >> 3) & 1); + break; + + case 0x31: case 0x32: + set_interrupt(0, IRQ_INTP1_LEVEL, (offset & 2) ? CLEAR_LINE : ASSERT_LINE); + break; + + case 0x33: case 0x34: + set_interrupt(1, IRQ_INTP2_LEVEL, (offset & 4) ? CLEAR_LINE : ASSERT_LINE); + break; + + case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f: + m_cmi02_ptm->write(space, offset & 7, data); + break; + + default: + logerror("CMI02 W: %x %x\n", offset, data); + } + } +} + +void cmi_state::install_video_ram(int cpunum) +{ + address_space *space = (cpunum == CPU_1 ? m_cpu1space : m_cpu2space); + + space->install_readwrite_handler(0x8000, 0xbfff, read8_delegate(FUNC(cmi_state::vram_r),this), write8_delegate(FUNC(cmi_state::vram_w),this)); +} + +WRITE8_MEMBER( cmi_state::i8214_cpu1_w ) +{ + m_maincpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + m_i8214_0->b_w(data & 0x7); + m_i8214_0->sgs_w((data >> 3) & 1); +} + + +WRITE8_MEMBER( cmi_state::i8214_cpu2_w ) +{ + m_maincpu2->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + m_i8214_1->b_w(data & 0x7); + m_i8214_1->sgs_w((data >> 3) & 1); +} + +// TODO: replace with AM_SHARE +READ8_MEMBER( cmi_state::shared_ram_r ) +{ + return m_shared_ram[offset]; +} + +WRITE8_MEMBER( cmi_state::shared_ram_w ) +{ + m_shared_ram[offset] = data; +} + + +WRITE_LINE_MEMBER( cmi_state::ank_cts_w ) +{ +// printf("ANK CTS: %x\n", state); +} + +READ_LINE_MEMBER( cmi_state::ank_rts_r ) +{ +// printf("ANK RTS?\n"); + return 0; +} + +READ_LINE_MEMBER( cmi01a_device::eosi_r ) +{ + return (m_segment_cnt & 0x4000) >> 14; +} + +READ_LINE_MEMBER( cmi01a_device::zx_r ) +{ + return m_segment_cnt & 0x40; +} + +void cmi_state::install_peripherals(int cpunum) +{ + //printf("Installing peripherals for CPU %d\n", cpunum + 1); + address_space *space = (cpunum == CPU_1 ? m_cpu1space : m_cpu2space); + + space->install_readwrite_handler(0xe000, 0xe03f, read8_delegate(FUNC(cmi_state::cmi02_r),this), write8_delegate(FUNC(cmi_state::cmi02_w),this)); + + space->install_readwrite_handler(0xf000, 0xf7ff, read8_delegate(FUNC(cmi_state::rom_r),this), write8_delegate(FUNC(cmi_state::map_ram_w),this)); + + space->install_rom(0xf800, 0xfbff, m_q133_rom + (cpunum == CPU_2 ? 0x1800 : 0x2800)); + + space->install_readwrite_handler(0xfc40, 0xfc4f, read8_delegate(FUNC(cmi_state::parity_r),this), write8_delegate(FUNC(cmi_state::mapsel_w),this)); + //space->install_readwrite_handler(0xfc5a, 0xfc5b, SMH_NOP, SMH_NOP); // Q077 HDD controller - not installed + space->install_readwrite_handler(0xfc5e, 0xfc5e, read8_delegate(FUNC(cmi_state::atomic_r),this), write8_delegate(FUNC(cmi_state::cpufunc_w),this)); + space->install_readwrite_handler(0xfc5f, 0xfc5f, read8_delegate(FUNC(cmi_state::map_r),this), write8_delegate(FUNC(cmi_state::map_w),this)); + space->install_readwrite_handler(0xfc80, 0xfc8f, read8_delegate(FUNC(cmi_state::q133_acia_r),this), write8_delegate(FUNC(cmi_state::q133_acia_w),this)); + space->install_readwrite_handler(0xfc90, 0xfc97, read8_delegate(FUNC(ptm6840_device::read),m_q133_ptm.target()), write8_delegate(FUNC(ptm6840_device::write),m_q133_ptm.target())); + + space->install_readwrite_handler(0xfcbc, 0xfcbc, read8_delegate(FUNC(cmi_state::cmi07_r),this), write8_delegate(FUNC(cmi_state::cmi07_w),this)); + + space->install_read_handler(0xfcc0, 0xfcc3, read8_delegate(FUNC(cmi_state::lightpen_r),this)); + space->install_readwrite_handler(0xfcc4, 0xfcc7, read8_delegate(FUNC(pia6821_device::read),m_q219_pia.target()), write8_delegate(FUNC(pia6821_device::write),m_q219_pia.target())); + space->install_readwrite_handler(0xfcc8, 0xfccf, read8_delegate(FUNC(ptm6840_device::read),m_q219_ptm.target()), write8_delegate(FUNC(ptm6840_device::write),m_q219_ptm.target())); + space->install_readwrite_handler(0xfcd0, 0xfcdc, read8_delegate(FUNC(cmi_state::video_r),this), write8_delegate(FUNC(cmi_state::video_w),this)); + space->install_readwrite_handler(0xfce0, 0xfce1, read8_delegate(FUNC(cmi_state::fdc_r),this), write8_delegate(FUNC(cmi_state::fdc_w),this)); + space->install_readwrite_handler(0xfcf0, 0xfcf7, read8_delegate(FUNC(pia6821_device::read),m_q133_pia_0.target()), write8_delegate(FUNC(pia6821_device::write),m_q133_pia_0.target())); + space->install_readwrite_handler(0xfcf8, 0xfcff, read8_delegate(FUNC(pia6821_device::read),m_q133_pia_1.target()), write8_delegate(FUNC(pia6821_device::write),m_q133_pia_1.target())); + + space->install_write_handler(0xfcfc, 0xfcfc, write8_delegate(FUNC(cmi_state::i8214_cpu1_w),this)); + space->install_write_handler(0xfcfd, 0xfcfd, write8_delegate(FUNC(cmi_state::i8214_cpu2_w),this)); + + space->install_readwrite_handler(0xfd00, 0xfeff, read8_delegate(FUNC(cmi_state::shared_ram_r),this), write8_delegate(FUNC(cmi_state::shared_ram_w),this)); + + space->install_ram(0xff00, 0xfffd, &m_scratch_ram[cpunum][0]); + + space->install_read_handler(0xfffe, 0xffff, read8_delegate(FUNC(cmi_state::vector_r),this)); +} + + +/************************************* + * + * Interrupt Handling + * + *************************************/ + +WRITE_LINE_MEMBER( cmi_state::ptm_q219_irq ) +{ + set_interrupt(CPU_2, IRQ_RINT_LEVEL, state); +} + +IRQ_CALLBACK_MEMBER( cmi_state::cpu1_interrupt_callback ) +{ + /* Switch to mapping A */ + m_cpu_active_space[0] = MAPPING_A; + update_address_space(0, m_map_sel[MAPSEL_P1_A]); + + if (irqline == INPUT_LINE_IRQ0) + { + UINT16 address; + address_space &cmi_space = m_maincpu1->space(AS_PROGRAM); + + if (m_hp_int) + { + int level = m_i8214_2->a_r() ^ 0x7; + address = (cmi_space.read_byte(0xffe0 + level*2) << 8) | cmi_space.read_byte(0xffe0 + level*2 + 1); + //m_hp_int = 0; + } + else + { + int level = m_i8214_0->a_r() ^ 0x7; + address = (cmi_space.read_byte(0xffd0 + level*2) << 8) | cmi_space.read_byte(0xffd0 + level*2 + 1); + } + m_maincpu1->set_pc(address); + } + return 0; +} + +IRQ_CALLBACK_MEMBER( cmi_state::cpu2_interrupt_callback ) +{ + /* Switch to mapping A */ + m_cpu_active_space[1] = MAPPING_A; + update_address_space(1, m_map_sel[MAPSEL_P2_A]); + + /* */ + if (irqline == INPUT_LINE_IRQ0) + { + int level = m_i8214_1->a_r() ^ 0x7; + + address_space &cmi_space = m_maincpu2->space(AS_PROGRAM); + UINT16 address = (cmi_space.read_byte(0xffe0 + level*2) << 8) | cmi_space.read_byte(0xffe0 + level*2 + 1); + + m_maincpu2->set_pc(address); + } + return 0; +} + +void cmi_state::set_interrupt(int cpunum, int level, int state) +{ +// printf("CPU%d Int: %x State: %x (Cur: %x)\n", cpunum, level, state, m_int_state[cpunum]); + + if (state == ASSERT_LINE) + m_int_state[cpunum] |= (1 << level); + else + m_int_state[cpunum] &= ~(1 << level); + + if (cpunum == 0) + { + if (level < 8) + m_i8214_2->r_w(~m_int_state[cpunum]); + else + m_i8214_0->r_w(~(m_int_state[cpunum] >> 8)); + } + else + m_i8214_1->r_w(~m_int_state[cpunum]); +} + +WRITE_LINE_MEMBER( cmi_state::i8214_1_int_w ) +{ + m_maincpu1->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); +} + +WRITE_LINE_MEMBER( cmi_state::i8214_2_int_w ) +{ + m_maincpu2->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); +} + +WRITE_LINE_MEMBER( cmi_state::i8214_3_int_w ) +{ + //if (state) + m_hp_int = state; + m_maincpu1->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); +} + + +WRITE_LINE_MEMBER( cmi_state::i8214_3_enlg ) +{ + // Not needed? +// m_hp_int = state; +} + +WRITE_LINE_MEMBER( cmi_state::pia_q219_irqa ) +{ + set_interrupt(CPU_2, IRQ_TOUCHINT_LEVEL, state); +} + +WRITE_LINE_MEMBER( cmi_state::pia_q219_irqb ) +{ + set_interrupt(CPU_2, IRQ_PENINT_LEVEL, state); +} + + +/* E9 - E11 - MSM5832RS */ +/* + A0-A3 = MSM5832 A0-A3 + A4+CA1 = MSM5832 D0 + A5+CB1 = MSM5832 D1 + A6 = MSM5832 D2 + A7 = MSM5832 D3 + B0 = HOLD + B1 = READ + B2 = WRITE + CB2 = OPTO + B3 = ---- + B4-B7 = PC0-3 + + IRQA/B = /RTINT? +*/ + +READ8_MEMBER( cmi_state::q133_1_porta_r ) +{ + if (BIT(m_q133_pia_0->b_output(), 1)) + { + return m_msm5832->data_r(space, m_msm5832_addr) << 4; + } + return 0xff; +} + +WRITE8_MEMBER( cmi_state::q133_1_porta_w ) +{ + m_msm5832_addr = data & 0xf; +} + +WRITE8_MEMBER( cmi_state::q133_1_portb_w ) +{ +} + +WRITE8_MEMBER( cmi_state::master_tune_w ) +{ +// double mfreq = (double)data * ((double)MASTER_OSCILLATOR / 2.0) / 256.0; +} + +WRITE8_MEMBER( cmi01a_device::cmi01a_2_a_w ) +{ +// top two +} + +WRITE8_MEMBER( cmi01a_device::cmi01a_2_b_w ) +{ +} + + +/* + PA0-7 = BKA0-7 (display) + + PB0 = DA1 + PB1 = DA0 + PB2 = CS2 + PB3 = CU2 + PB4 = CS1 + PB5 = CU1 + PB6 = CS0 + PB7 = CU0 + + CB1 = /KPAD + CB2 = /DWS +*/ + +WRITE8_MEMBER( cmi_state::cmi10_u20_a_w ) +{ + /* + int bk = data; + int bit = 0; + + if (BIT(bk, 3)) + bit = BIT(input_port_read(device->machine, "KEYPAD_A"), bk & 7); + else if (!BIT(bk, 4)) + bit = BIT(input_port_read(device->machine, "KEYPAD_B"), bk & 7); + + pia6821_cb1_w(m_cmi10_pia_u20, 0, !bit); + */ +} + +WRITE8_MEMBER( cmi_state::cmi10_u20_b_w ) +{ +} + +READ_LINE_MEMBER( cmi_state::cmi10_u20_cb1_r ) +{ + int bk = m_cmi10_pia_u20->a_output(); + int bit = 0; + + if (BIT(bk, 3)) + bit = BIT(m_keypad_a_port->read(), bk & 7); + else if (!BIT(bk, 4)) + bit = BIT(m_keypad_b_port->read(), bk & 7); + + return !bit; +} + +WRITE_LINE_MEMBER( cmi_state::cmi10_u20_cb2_w ) +{ + UINT8 data = m_cmi10_pia_u20->a_output() & 0x7f; + UINT8 b_port = m_cmi10_pia_u20->b_output(); + int addr = (BIT(b_port, 0) << 1) | BIT(b_port, 1); + address_space &space = m_maincpu1->space(AS_PROGRAM); // Just needed to call data_w + + /* DP1 */ + m_dp1->ce_w(BIT(b_port, 6)); + m_dp1->cu_w(BIT(b_port, 7)); + m_dp1->wr_w(state); + m_dp1->data_w(space, addr, data, 0xff); + + /* DP2 */ + m_dp2->ce_w(BIT(b_port, 4)); + m_dp2->cu_w(BIT(b_port, 5)); + m_dp2->wr_w(state); + m_dp2->data_w(space, addr & 3, data, 0xff); + + /* DP3 */ + m_dp3->ce_w(BIT(b_port, 2)); + m_dp3->cu_w(BIT(b_port, 3)); + m_dp3->wr_w(state); + m_dp3->data_w(space, addr & 3, data, 0xff); +} + +WRITE16_MEMBER( cmi_state::cmi_iix_update_dp1 ) +{ + output().set_digit_value(0 + (offset ^ 3), data); +} + +WRITE16_MEMBER( cmi_state::cmi_iix_update_dp2 ) +{ + output().set_digit_value(4 + (offset ^ 3), data); +} + +WRITE16_MEMBER( cmi_state::cmi_iix_update_dp3 ) +{ + output().set_digit_value(8 + (offset ^ 3), data); +} + +/* Begin Conversion */ +WRITE_LINE_MEMBER( cmi_state::cmi10_u21_cb2_w ) +{ + // if 0 +// state = state; +} + + +READ8_MEMBER( cmi_state::cmi10_u21_a_r ) +{ +#if 0 +// int thld = m_cmi10_pia_u21->ca2_output(); + int sel = m_cmi10_pia_u20->a_output(); + int key = sel & 7; + int mux = (sel >> 3) & 3; + UINT8 data = 0x38; // slave keyboard not used + + + for (int module = 0; module < 3; ++module) + { +// char keyname[16]; + UINT8 keyval; + int state = 1; + + if (mux == 0 && key == 3) + { + //keyval = input_port_read(device->machine, "ANALOG"); + + /* Unpressed */ + if (keyval <= 0) + state = 1; + /* In flight */ + + #if 0 + else if (keyval <= 80) + { + if (thld == 1) + state = 0; + else + state = 1; + } + /* Fully depressed */ + #endif + else + state = 0; + + } + + data |= state << module; + } + + return data; +#else + int sel = m_cmi10_pia_u20->a_output(); + int key = sel & 7; + int mux = (sel >> 3) & 3; + UINT8 data = 0xf8; // slave keyboard not used + + for (int module = 0; module < 3; ++module) + { + UINT8 keyval = 0; + switch (mux) + { + case 0: + keyval = m_key_mux0_port[module]->read(); + break; + case 1: + keyval = m_key_mux1_port[module]->read(); + break; + case 2: + keyval = m_key_mux2_port[module]->read(); + break; + case 3: + keyval = m_key_mux3_port[module]->read(); + break; + } + + data |= BIT(keyval, key) << module; + } + + return data; +#endif +} + + /************************************* + * + * 6850 ACIAs + * + *************************************/ + +//static int kbd_to_cmi; +//static int cmi_to_kbd; + +READ_LINE_MEMBER( cmi_state::mkbd_kbd_rx ) +{ + return m_ank_pia->cb2_output(); +} + +WRITE_LINE_MEMBER( cmi_state::mkbd_kbd_tx ) +{ +} + +#if 0 +READ_LINE_MEMBER( cmi_state::q133_rx ) +{ + return m_kbd_to_cmi; +} + +WRITE_LINE_MEMBER( cmi_state::q133_tx ) +{ + m_cmi_to_kbd = state; +} + +WRITE_LINE_MEMBER( cmi_state::mkbd_cmi_w ) +{ + +} +#endif + +READ_LINE_MEMBER( cmi_state::mkbd_cmi_rx ) +{ + return 1;//cmi_to_kbd; +} + +WRITE_LINE_MEMBER( cmi_state::mkbd_cmi_tx ) +{ +// kbd_to_cmi = state; + + if (m_mkbd_tx_start == 0) + { + if (!state) + { + m_mkbd_tx_start = 1; + m_mkbd_tx_bits = 10; + m_mkbd_tx_reg = 0; + } + } + else if (m_mkbd_tx_start) + { + m_mkbd_tx_reg = m_mkbd_tx_reg | state << (10 - m_mkbd_tx_bits); + + if (--m_mkbd_tx_bits == 0) + { + m_q133_acia_rx_data = m_mkbd_tx_reg & 0xff; + m_q133_acia_status |= 0x88; + set_interrupt(CPU_1, IRQ_ACINT_LEVEL, ASSERT_LINE); +// printf("%x\n",q133_acia_rx_data); + m_mkbd_tx_start = 0; + } + } +} + +WRITE_LINE_MEMBER( cmi_state::msm5832_irq ) +{ +#if 0 + set_interrupt(CPU_2, IRQ_RTCINT_LEVEL, state ? ASSERT_LINE : CLEAR_LINE); +#endif +} + +WRITE_LINE_MEMBER( cmi_state::mkbd_acia1_int ) +{ + m_mkbd_acia1_irq = state; + + if (m_mkbd_acia1_irq) + m_muskeyscpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + else if (!m_mkbd_acia2_irq) + m_muskeyscpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); +} + +WRITE_LINE_MEMBER( cmi_state::mkbd_acia2_int ) +{ + m_mkbd_acia2_irq = state; + + if (m_mkbd_acia2_irq) + m_muskeyscpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + else if (!m_mkbd_acia1_irq) + m_muskeyscpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); +} + +#if 0 +WRITE_LINE_MEMBER( cmi_state::q133_acia_int ) +{ + m_maincpu1->set_input_line(INPUT_LINE_IRQ0, state ? ASSERT_LINE : CLEAR_LINE); +} +#endif + +WRITE_LINE_MEMBER( cmi_state::cmi07_irq ) +{ + m_cmi07cpu->set_input_line(INPUT_LINE_IRQ0, state ? ASSERT_LINE : CLEAR_LINE); +} + +void cmi_state::machine_reset() +{ + m_cpu1space = &m_maincpu1->space(AS_PROGRAM); + m_cpu2space = &m_maincpu2->space(AS_PROGRAM); + + m_qfc9_region_ptr = (UINT8 *)m_qfc9_region->base(); + + /* Set 8214 interrupt lines */ + m_i8214_0->etlg_w(1); + m_i8214_0->inte_w(1); + m_i8214_1->etlg_w(1); + m_i8214_1->inte_w(1); + m_i8214_2->etlg_w(1); + m_i8214_2->inte_w(1); + + m_hblank_timer->adjust(m_screen->time_until_pos(0, HBLANK_START)); + + m_scnd = 0; + + for (int cpunum = 0; cpunum < 2; ++cpunum) + { + address_space &space = (cpunum == CPU_1 ? m_maincpu1->space(AS_PROGRAM) : m_maincpu2->space(AS_PROGRAM)); + + space.unmap_readwrite(0x0000, 0xffff); + + /* Select A (system) spaces */ + m_cpu_active_space[cpunum] = MAPPING_A; + + install_peripherals(cpunum); + } + + // TODO - we need to detect empty disk drive!! + m_fdc_status |= FDC_STATUS_READY; + + m_int_state[0] = 0; + m_int_state[1] = 0; + + /* CMI-07 */ + m_cmi07_ctrl = 0; + m_cmi07cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + + m_cmi10_scnd_timer->adjust(attotime::from_hz(4000000 / 4 / 2048 / 2), 0, attotime::from_hz(4000000 / 4 / 2048 / 2)); + m_scnd = 0; +} + +void cmi_state::machine_start() +{ + m_q133_rom = (UINT8 *)m_q133_region->base(); + + // allocate timers for the built-in two channel timer + m_map_switch_timer = timer_alloc(TIMER_MAP_SWITCH); + m_hblank_timer = timer_alloc(TIMER_HBLANK); + m_cmi10_scnd_timer = timer_alloc(TIMER_CMI10_SCND); + m_jam_timeout_timer = timer_alloc(TIMER_JAM_TIMEOUT); + + m_map_switch_timer->adjust(attotime::never); + m_hblank_timer->adjust(attotime::never); + m_cmi10_scnd_timer->adjust(attotime::never); + m_jam_timeout_timer->adjust(attotime::never); + + /* Allocate 1kB memory mapping RAM */ + m_map_ram[0] = std::make_unique(0x400); + m_map_ram[1] = std::make_unique(0x400); + m_map_ram[2] = std::make_unique(0x400); + m_map_ram[3] = std::make_unique(0x400); + + /* Allocate 256kB for each Q256 RAM card */ + m_q256_ram[0] = std::make_unique(0x40000); + m_q256_ram[1] = std::make_unique(0x40000); + m_q256_ram[2] = std::make_unique(0x40000); + m_q256_ram[3] = std::make_unique(0x40000); + + /* Allocate 16kB video RAM */ + m_video_ram = std::make_unique(0x4000); + + /* Allocate 512B shared RAM */ + m_shared_ram = std::make_unique(0x200); + + /* Allocate 256B scratch RAM per CPU */ + m_scratch_ram[0] = std::make_unique(0x100); + m_scratch_ram[1] = std::make_unique(0x100); + + m_channels[0] = m_cmi01a_0; + m_channels[1] = m_cmi01a_1; + m_channels[2] = m_cmi01a_2; + m_channels[3] = m_cmi01a_3; + m_channels[4] = m_cmi01a_4; + m_channels[5] = m_cmi01a_5; + m_channels[6] = m_cmi01a_6; + m_channels[7] = m_cmi01a_7; +} + +INTERRUPT_GEN_MEMBER( cmi_state::cmi_iix_vblank ) +{ + /* VSYNC */ + m_q219_pia->cb2_w(1); + m_q219_pia->cb2_w(0); + + /* LPSTB */ + m_q219_pia->cb1_w(0); +} + +static SLOT_INTERFACE_START( cmi2x_floppies ) + SLOT_INTERFACE( "8dsdd", FLOPPY_8_DSDD ) + SLOT_INTERFACE( "8dssd", FLOPPY_8_DSSD ) +SLOT_INTERFACE_END + +static MACHINE_CONFIG_START( cmi2x, cmi_state ) + MCFG_CPU_ADD("maincpu1", M6809E, Q209_CPU_CLOCK) + MCFG_CPU_PROGRAM_MAP(maincpu1_map) + MCFG_CPU_VBLANK_INT_DRIVER("screen", cmi_state, cmi_iix_vblank) + MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cmi_state, cpu1_interrupt_callback) + + MCFG_CPU_ADD("maincpu2", M6809E, Q209_CPU_CLOCK) + MCFG_CPU_PROGRAM_MAP(maincpu2_map) + MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(cmi_state, cpu2_interrupt_callback) + + MCFG_CPU_ADD("muskeys", M6802, 3840000) + MCFG_CPU_PROGRAM_MAP(muskeys_map) + + MCFG_CPU_ADD("alphakeys", M6802, 4000000) + MCFG_CPU_PROGRAM_MAP(alphakeys_map) + MCFG_CPU_PERIODIC_INT_DRIVER(cmi_state, irq0_line_hold, 9600) // TODO: ACIA controls this + + MCFG_CPU_ADD("smptemidi", M68000, 10000000) + MCFG_CPU_PROGRAM_MAP(midicpu_map) + + MCFG_CPU_ADD("cmi07cpu", M6809E, 4000000) // ? + MCFG_CPU_PROGRAM_MAP(cmi07cpu_map) + + /* alpha-numeric display */ + MCFG_DEVICE_ADD("dp1", DL1416T, 0) + MCFG_DL1416_UPDATE_HANDLER(WRITE16(cmi_state, cmi_iix_update_dp1)) + MCFG_DEVICE_ADD("dp2", DL1416T, 0) + MCFG_DL1416_UPDATE_HANDLER(WRITE16(cmi_state, cmi_iix_update_dp2)) + MCFG_DEVICE_ADD("dp3", DL1416T, 0) + MCFG_DL1416_UPDATE_HANDLER(WRITE16(cmi_state, cmi_iix_update_dp3)) + + /* video hardware */ + MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBLANK_END, HBLANK_START, VTOTAL, VBLANK_END, VBLANK_START) + MCFG_SCREEN_UPDATE_DRIVER(cmi_state, screen_update_cmi2x) + MCFG_PALETTE_ADD_MONOCHROME("palette") + + MCFG_MSM5832_ADD("msm5832", XTAL_32_768kHz) + + MCFG_DEVICE_ADD("i8214_1", I8214, 1000000) // cmi_8214_intf_1 + MCFG_I8214_IRQ_CALLBACK(WRITELINE(cmi_state, i8214_1_int_w)) + MCFG_DEVICE_ADD("i8214_2", I8214, 1000000) // cmi_8214_intf_2 + MCFG_I8214_IRQ_CALLBACK(WRITELINE(cmi_state, i8214_2_int_w)) + MCFG_DEVICE_ADD("i8214_3", I8214, 1000000) // cmi_8214_intf_3 + MCFG_I8214_IRQ_CALLBACK(WRITELINE(cmi_state, i8214_3_int_w)) + MCFG_I8214_ENLG_CALLBACK(WRITELINE(cmi_state, i8214_3_enlg)) + + MCFG_DEVICE_ADD("q133_pia_1", PIA6821, 0) // pia_q133_1_config + MCFG_PIA_READPA_HANDLER(READ8(cmi_state, q133_1_porta_r)); + MCFG_PIA_WRITEPA_HANDLER(WRITE8(cmi_state, q133_1_porta_w)); + MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi_state, q133_1_portb_w)); + + MCFG_DEVICE_ADD("q133_pia_2", PIA6821, 0) // pia_q133_2_config + MCFG_DEVICE_ADD("q133_ptm", PTM6840, 0) // ptm_q133_config + MCFG_PTM6840_INTERNAL_CLOCK(2000000) + MCFG_PTM6840_EXTERNAL_CLOCKS(1024, 1, 111) // Third is todo + + MCFG_DEVICE_ADD("q219_pia", PIA6821, 0) // pia_q219_config + MCFG_PIA_READPB_HANDLER(READ8(cmi_state, pia_q219_b_r)); + MCFG_PIA_WRITEPA_HANDLER(WRITE8(cmi_state, vscroll_w)) + MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi_state, video_attr_w)) + MCFG_PIA_IRQA_HANDLER(WRITELINE(cmi_state, pia_q219_irqa)) + MCFG_PIA_IRQB_HANDLER(WRITELINE(cmi_state, pia_q219_irqb)) + + MCFG_DEVICE_ADD("q219_ptm", PTM6840, 0) // ptm_q219_config + MCFG_PTM6840_INTERNAL_CLOCK(2000000) + MCFG_PTM6840_EXTERNAL_CLOCKS(HBLANK_FREQ, VBLANK_FREQ, 1000000) + MCFG_PTM6840_IRQ_CB(WRITELINE(cmi_state, ptm_q219_irq)) + + MCFG_DEVICE_ADD("cmi02_pia_1", PIA6821, 0) // pia_cmi02_1_config + MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi_state, master_tune_w)) + + MCFG_DEVICE_ADD("cmi02_pia_2", PIA6821, 0) // pia_cmi02_2_config + + MCFG_DEVICE_ADD("cmi02_ptm", PTM6840, 0) // ptm_cmi02_config + MCFG_PTM6840_INTERNAL_CLOCK(2000000) // TODO + + MCFG_DEVICE_ADD("ank_pia", PIA6821, 0) // pia_ank_config + MCFG_PIA_READPA_HANDLER(READ8(cmi_state, ank_col_r)) + MCFG_PIA_READCB1_HANDLER(READLINE(cmi_state, ank_rts_r)) + MCFG_PIA_CA2_HANDLER(WRITELINE(cmi_state, ank_cts_w)) + MCFG_PIA_CB2_HANDLER(WRITELINE(cmi_state, ank_data_w)) + + MCFG_DEVICE_ADD("acia_mkbd_cmi", ACIA6850, 1843200 / 12) // acia_mkbd_cmi + MCFG_DEVICE_ADD("acia_mkbd_kbd", ACIA6850, 1843200 / 12) // acia_mkbd_kbd + + MCFG_DEVICE_MODIFY("acia_mkbd_kbd") + MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("acia_mkbd_cmi", acia6850_device, write_rxd)) + MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("acia_mkbd_cmi", acia6850_device, write_cts)) + MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(cmi_state, mkbd_acia1_int)) + + MCFG_DEVICE_MODIFY("acia_mkbd_cmi") + MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("acia_mkbd_kbd", acia6850_device, write_rxd)) + MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("acia_mkbd_kbd", acia6850_device, write_cts)) + MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(cmi_state, mkbd_acia2_int)) + + MCFG_DEVICE_ADD("cmi07_ptm", PTM6840, 0) // ptm_cmi07_config + MCFG_PTM6840_INTERNAL_CLOCK(2000000) // TODO + MCFG_PTM6840_IRQ_CB(WRITELINE(cmi_state, cmi07_irq)) + + MCFG_FD1791_ADD("wd1791", XTAL_16MHz / 8) // wd1791_interface + MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(cmi_state, wd1791_irq)) + MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(cmi_state, wd1791_drq)) + MCFG_FLOPPY_DRIVE_ADD("wd1791:0", cmi2x_floppies, "8dsdd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("wd1791:1", cmi2x_floppies, "8dsdd", floppy_image_device::default_floppy_formats) + + // Channel cards + MCFG_CMI01A_ADD("cmi01a_0", 0) + MCFG_CMI01A_ADD("cmi01a_1", 1) + MCFG_CMI01A_ADD("cmi01a_2", 2) + MCFG_CMI01A_ADD("cmi01a_3", 3) + MCFG_CMI01A_ADD("cmi01a_4", 4) + MCFG_CMI01A_ADD("cmi01a_5", 5) + MCFG_CMI01A_ADD("cmi01a_6", 6) + MCFG_CMI01A_ADD("cmi01a_7", 7) + + /* Musical keyboard */ + MCFG_DEVICE_ADD("cmi10_pia_u20", PIA6821, 0) + MCFG_PIA_READCB1_HANDLER(READLINE(cmi_state, cmi10_u20_cb1_r)) + MCFG_PIA_WRITEPA_HANDLER(WRITE8(cmi_state, cmi10_u20_a_w)) + MCFG_PIA_WRITEPB_HANDLER(WRITE8(cmi_state, cmi10_u20_b_w)) + MCFG_PIA_CB2_HANDLER(WRITELINE(cmi_state, cmi10_u20_cb2_w)) + + MCFG_DEVICE_ADD("cmi10_pia_u21", PIA6821, 0) + MCFG_PIA_READPA_HANDLER(READ8(cmi_state, cmi10_u21_a_r)) + MCFG_PIA_CB2_HANDLER(WRITELINE(cmi_state, cmi10_u21_cb2_w)) +MACHINE_CONFIG_END + +ROM_START( cmi2x ) + /* Q133 Processor control card */ + ROM_REGION( 0x3000, "q133", 0 ) + ROM_LOAD( "q9f0mrk1.bin", 0x000, 0x800, CRC(16f195cc) SHA1(fcc4be370ba60ae5a4145c36cdbdc97a7be91f8f) ) + ROM_LOAD( "f8lmrk5.bin", 0x800, 0x800, CRC(cfc7967f) SHA1(0695cc757cf6fab35414dc068dd2a3e50084685c) ) + + /* For CPU1 */ + ROM_COPY( "q133", 0x000, 0x1000, 0x800 ) + ROM_COPY( "q133", 0x800, 0x1800, 0x400 ) + + /* For CPU2 */ + ROM_COPY( "q133", 0x000, 0x2000, 0x800 ) + ROM_COPY( "q133", 0xc00, 0x2800, 0x400 ) + + /* General Interface (SMPTE/MIDI) CPU */ + ROM_REGION( 0x4000, "smptemidi", 0 ) + ROM_LOAD16_BYTE( "mon1110e.bin", 0x0000, 0x2000, CRC(476f7d5f) SHA1(9af21e0072eaa58cae42947c20dca05d35dfadd0) ) + ROM_LOAD16_BYTE( "mon1110o.bin", 0x0001, 0x2000, CRC(150c8ebe) SHA1(bbd371bebac29628f60537832d0587e83323ad01) ) + + /* QFC9 Floppy disk controller driver */ + ROM_REGION( 0x800, "qfc9", 0 ) + ROM_LOAD( "dqfc911.bin", 0x00, 0x800, CRC(5bc38db2) SHA1(bd840e19e51a336e669c40b9e18cdaf6b3c62a8a) ) + + /* Musical keyboard CPU */ + // Both of these dumps have been trimmed to size from within a roughly 2x-bigger file. + // The actual size is known based on the format apparently used by the dumping device, shared with the prom + // dumps and cmikeys4.bin dump. + ROM_REGION( 0x10000, "muskeys", 0 ) + ROM_LOAD( "velkeysd.bin", 0xb000, 0x0400, CRC(9b636781) SHA1(be29a72a1d6d313dafe0b63951b5e3e18ddb9a21) ) + ROM_LOAD( "kbdioa.bin", 0xfc00, 0x0400, CRC(a5cbe218) SHA1(bc6784aaa5697c28eab126e20500139b8d0c1f50) ) + + /* Alphanumeric keyboard CPU */ + // This dump has been trimmed to size from within a roughly 2x-bigger file. The actual size is known based + // on the format apparently used by the dumping device, shared with the prom dumps and music keys dump. + ROM_REGION( 0x10000, "alphakeys", 0 ) + ROM_LOAD( "cmikeys4.bin", 0xc000, 0x400, CRC(b214fbe9) SHA1(8c404f58ba3e5a50aa42f761e966c74374e96cc9) ) + + // All of these PROM dumps have been trimmed to size from within a roughly 2x-bigger file. + // The actual sizes are known from the schematics and the starting address of the actual PROM data was obvious + // based on repeated data in some of the 256x4 PROMs, but it would be nice to get redumps, in the extremely + // unlikely event that someone finds a CMI IIx for sale. + ROM_REGION( 0x420, "proms", 0 ) + ROM_LOAD( "brom.bin", 0x000, 0x100, CRC(3f730d15) SHA1(095df6eee95b9ad6418b910fb5d2ae46913750f9) ) // Unknown use, lightgun/graphics card + ROM_LOAD( "srom.bin", 0x100, 0x100, CRC(a1b4b71b) SHA1(6ea96480af2f1e43967f209218a74fc17972ce0e) ) // Used to generate signal timing for lightpen + ROM_LOAD( "mrom.bin", 0x200, 0x100, CRC(dc26642c) SHA1(49b207ff80d1b055c3b855dc954129846c49bfe3) ) // Unknown use, master card + ROM_LOAD( "timrom.bin", 0x300, 0x100, CRC(a426e4a2) SHA1(6b7ea128c730f5afd1042820ccd55bbda683afd8) ) // Unknown use, master card + ROM_LOAD( "wrom.bin", 0x400, 0x020, CRC(68a9e17f) SHA1(c3364a37a8d19a1882d7910add1c1df9b63ee32c) ) // Unknown use, lightgun/graphics card +ROM_END + +/* TODO: Machine start? */ +DRIVER_INIT_MEMBER( cmi_state, cmi2x ) +{ +} + +CONS( 1983, cmi2x, 0, 0, cmi2x, cmi2x, cmi_state, cmi2x, "Fairlight", "CMI IIx", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) diff --git a/src/mame/drivers/compis.cpp b/src/mame/drivers/compis.cpp index 063aae353ad..c919817719e 100644 --- a/src/mame/drivers/compis.cpp +++ b/src/mame/drivers/compis.cpp @@ -38,34 +38,198 @@ - Added a nasty hack to get a display on compis2 (wait 20 seconds) - ******************************************************************************/ +******************************************************************************/ -#include "includes/compis.h" -#include "bus/rs232/rs232.h" +/* + + TODO: + + - cannot detect UHRG card (writes 0x1234 to 0x8000 in VRAM but does not read it back?) + +*/ + +#include "emu.h" #include "softlist.h" +#include "bus/centronics/ctronics.h" +#include "bus/compis/graphics.h" +#include "bus/isbx/isbx.h" +#include "bus/rs232/rs232.h" +#include "cpu/i86/i186.h" +#include "cpu/mcs48/mcs48.h" +#include "imagedev/cassette.h" +#include "machine/compiskb.h" +#include "machine/i8251.h" +#include "machine/i8255.h" +#include "machine/i80130.h" +#include "machine/mm58274c.h" +#include "machine/pic8259.h" +#include "machine/pit8253.h" +#include "machine/ram.h" +#include "machine/z80dart.h" + +#define I80186_TAG "ic1" +#define I80130_TAG "ic15" +#define I8251A_TAG "ic59" +#define I8253_TAG "ic60" +#define I8274_TAG "ic65" +#define MM58174A_TAG "ic66" +#define I8255_TAG "ic69" +#define RS232_A_TAG "rs232a" +#define RS232_B_TAG "rs232b" +#define CASSETTE_TAG "cassette" +#define CENTRONICS_TAG "centronics" +#define ISBX_0_TAG "isbx0" +#define ISBX_1_TAG "isbx1" +#define GRAPHICS_TAG "gfx" +#define COMPIS_KEYBOARD_TAG "compiskb" + +class compis_state : public driver_device +{ +public: + compis_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, I80186_TAG), + m_osp(*this, I80130_TAG), + m_pit(*this, I8253_TAG), + m_ppi(*this, I8255_TAG), + m_mpsc(*this, I8274_TAG), + m_centronics(*this, CENTRONICS_TAG), + m_uart(*this, I8251A_TAG), + m_rtc(*this, MM58174A_TAG), + m_cassette(*this, CASSETTE_TAG), + m_graphics(*this, GRAPHICS_TAG), + m_isbx0(*this, ISBX_0_TAG), + m_isbx1(*this, ISBX_1_TAG), + m_ram(*this, RAM_TAG), + m_s8(*this, "S8") + { } + + required_device m_maincpu; + required_device m_osp; + required_device m_pit; + required_device m_ppi; + required_device m_mpsc; + required_device m_centronics; + required_device m_uart; + required_device m_rtc; + required_device m_cassette; + required_device m_graphics; + required_device m_isbx0; + required_device m_isbx1; + required_device m_ram; + required_ioport m_s8; + + virtual void machine_start() override; + virtual void machine_reset() override; + + DECLARE_READ16_MEMBER( pcs6_0_1_r ); + DECLARE_WRITE16_MEMBER( pcs6_0_1_w ); + DECLARE_READ16_MEMBER( pcs6_2_3_r ); + DECLARE_WRITE16_MEMBER( pcs6_2_3_w ); + DECLARE_READ16_MEMBER( pcs6_4_5_r ); + DECLARE_WRITE16_MEMBER( pcs6_4_5_w ); + DECLARE_READ16_MEMBER( pcs6_6_7_r ); + DECLARE_WRITE16_MEMBER( pcs6_6_7_w ); + DECLARE_READ16_MEMBER( pcs6_8_9_r ); + DECLARE_WRITE16_MEMBER( pcs6_8_9_w ); + DECLARE_READ16_MEMBER( pcs6_10_11_r ); + DECLARE_WRITE16_MEMBER( pcs6_10_11_w ); + DECLARE_READ16_MEMBER( pcs6_12_13_r ); + DECLARE_WRITE16_MEMBER( pcs6_12_13_w ); + DECLARE_READ16_MEMBER( pcs6_14_15_r ); + DECLARE_WRITE16_MEMBER( pcs6_14_15_w ); + + DECLARE_READ8_MEMBER( compis_irq_callback ); + + DECLARE_READ8_MEMBER( ppi_pb_r ); + DECLARE_WRITE8_MEMBER( ppi_pc_w ); + + DECLARE_WRITE_LINE_MEMBER( tmr0_w ); + DECLARE_WRITE_LINE_MEMBER( tmr1_w ); + DECLARE_WRITE_LINE_MEMBER( tmr2_w ); + DECLARE_WRITE_LINE_MEMBER( tmr5_w ); + + TIMER_DEVICE_CALLBACK_MEMBER( tape_tick ); + + int m_centronics_busy; + int m_centronics_select; + + DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); + DECLARE_WRITE_LINE_MEMBER(write_centronics_select); + + int m_tmr0; +}; + //************************************************************************** // READ/WRITE HANDLERS //************************************************************************** -//------------------------------------------------- -// tape_mon_w - -//------------------------------------------------- - -WRITE8_MEMBER( compis_state::tape_mon_w ) +READ16_MEMBER( compis_state::pcs6_0_1_r ) { - cassette_state state = BIT(data, 0) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED; - - m_cassette->change_state(state, CASSETTE_MASK_MOTOR); + if (ACCESSING_BITS_0_7) + { + return 0xff; + } + else + { + return m_graphics->dma_ack_r(space, offset); + } } +WRITE16_MEMBER( compis_state::pcs6_0_1_w ) +{ + if (ACCESSING_BITS_0_7) + { + cassette_state state = BIT(data, 0) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED; -//------------------------------------------------- -// isbx -//------------------------------------------------- + m_cassette->change_state(state, CASSETTE_MASK_MOTOR); + } + else + { + m_graphics->dma_ack_w(space, offset, data); + } +} -READ16_MEMBER( compis_state::isbx0_tdma_r ) +READ16_MEMBER( compis_state::pcs6_2_3_r ) +{ + if (ACCESSING_BITS_0_7) + { + return m_mpsc->inta_r(space, 0); + } + else + { + if (BIT(offset, 0)) + { + return m_uart->status_r(space, 0) << 8; + } + else + { + return m_uart->data_r(space, 0) << 8; + } + } +} + +WRITE16_MEMBER( compis_state::pcs6_2_3_w ) +{ + if (ACCESSING_BITS_0_7) + { + } + else + { + if (BIT(offset, 0)) + { + m_uart->control_w(space, 0, data >> 8); + } + else + { + m_uart->data_w(space, 0, data >> 8); + } + } +} + +READ16_MEMBER( compis_state::pcs6_4_5_r ) { if (ACCESSING_BITS_0_7) { @@ -80,7 +244,7 @@ READ16_MEMBER( compis_state::isbx0_tdma_r ) } } -WRITE16_MEMBER( compis_state::isbx0_tdma_w ) +WRITE16_MEMBER( compis_state::pcs6_4_5_w ) { if (ACCESSING_BITS_0_7) { @@ -93,32 +257,11 @@ WRITE16_MEMBER( compis_state::isbx0_tdma_w ) } } -READ16_MEMBER( compis_state::isbx1_tdma_r ) +READ16_MEMBER( compis_state::pcs6_6_7_r ) { if (ACCESSING_BITS_0_7) { - if (offset < 2) - return m_crtc->read(space, offset & 0x01); - else - // monochrome only, hblank? vblank? - if(offset == 2) - { - switch(m_unk_video) - { - case 0x04: - m_unk_video = 0x44; - break; - case 0x44: - m_unk_video = 0x64; - break; - default: - m_unk_video = 0x04; - break; - } - return m_unk_video; - } - else - return 0; + return m_graphics->pcs6_6_r(space, offset); } else { @@ -129,13 +272,11 @@ READ16_MEMBER( compis_state::isbx1_tdma_r ) } } -WRITE16_MEMBER( compis_state::isbx1_tdma_w ) +WRITE16_MEMBER( compis_state::pcs6_6_7_w ) { if (ACCESSING_BITS_0_7) { - // 0x336 is likely the color plane register - if (offset < 2) m_crtc->write(space, offset & 0x01, data); - + m_graphics->pcs6_6_w(space, offset, data); } else { @@ -144,7 +285,7 @@ WRITE16_MEMBER( compis_state::isbx1_tdma_w ) } } -READ16_MEMBER( compis_state::isbx0_cs_r ) +READ16_MEMBER( compis_state::pcs6_8_9_r ) { if (ACCESSING_BITS_0_7) { @@ -156,7 +297,7 @@ READ16_MEMBER( compis_state::isbx0_cs_r ) } } -WRITE16_MEMBER( compis_state::isbx0_cs_w ) +WRITE16_MEMBER( compis_state::pcs6_8_9_w ) { if (ACCESSING_BITS_0_7) { @@ -168,7 +309,7 @@ WRITE16_MEMBER( compis_state::isbx0_cs_w ) } } -READ16_MEMBER( compis_state::isbx0_dack_r ) +READ16_MEMBER( compis_state::pcs6_10_11_r ) { if (ACCESSING_BITS_0_7) { @@ -180,7 +321,7 @@ READ16_MEMBER( compis_state::isbx0_dack_r ) } } -WRITE16_MEMBER( compis_state::isbx0_dack_w ) +WRITE16_MEMBER( compis_state::pcs6_10_11_w ) { if (ACCESSING_BITS_0_7) { @@ -192,7 +333,7 @@ WRITE16_MEMBER( compis_state::isbx0_dack_w ) } } -READ16_MEMBER( compis_state::isbx1_cs_r ) +READ16_MEMBER( compis_state::pcs6_12_13_r ) { if (ACCESSING_BITS_0_7) { @@ -204,7 +345,7 @@ READ16_MEMBER( compis_state::isbx1_cs_r ) } } -WRITE16_MEMBER( compis_state::isbx1_cs_w ) +WRITE16_MEMBER( compis_state::pcs6_12_13_w ) { if (ACCESSING_BITS_0_7) { @@ -216,7 +357,7 @@ WRITE16_MEMBER( compis_state::isbx1_cs_w ) } } -READ16_MEMBER( compis_state::isbx1_dack_r ) +READ16_MEMBER( compis_state::pcs6_14_15_r ) { if (ACCESSING_BITS_0_7) { @@ -228,7 +369,7 @@ READ16_MEMBER( compis_state::isbx1_dack_r ) } } -WRITE16_MEMBER( compis_state::isbx1_dack_w ) +WRITE16_MEMBER( compis_state::pcs6_14_15_w ) { if (ACCESSING_BITS_0_7) { @@ -280,41 +421,17 @@ static ADDRESS_MAP_START( compis_io, AS_IO, 16, compis_state ) //AM_RANGE(0x0180, 0x0181) /* PCS3 */ AM_MIRROR(0x7e) //AM_RANGE(0x0200, 0x0201) /* PCS4 */ AM_MIRROR(0x7e) AM_RANGE(0x0280, 0x028f) /* PCS5 */ AM_MIRROR(0x70) AM_DEVICE(I80130_TAG, i80130_device, io_map) - AM_RANGE(0x0300, 0x0301) /* PCS6:0 */ AM_MIRROR(0xe) AM_WRITE8(tape_mon_w, 0x00ff) - AM_RANGE(0x0310, 0x0311) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, data_r, data_w, 0xff00) - AM_RANGE(0x0312, 0x0313) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, status_r, control_w, 0xff00) - AM_RANGE(0x0320, 0x032f) AM_READWRITE(isbx0_tdma_r, isbx0_tdma_w) - AM_RANGE(0x0330, 0x033f) AM_READWRITE(isbx1_tdma_r, isbx1_tdma_w) - AM_RANGE(0x0340, 0x034f) AM_READWRITE(isbx0_cs_r, isbx0_cs_w) - AM_RANGE(0x0350, 0x035f) AM_READWRITE(isbx0_dack_r, isbx0_dack_w) - AM_RANGE(0x0360, 0x036f) AM_READWRITE(isbx1_cs_r, isbx1_cs_w) - AM_RANGE(0x0370, 0x037f) AM_READWRITE(isbx1_dack_r, isbx1_dack_w) -#ifdef NOT_SUPPORTED_BY_MAME_CORE - AM_RANGE(0x0300, 0x0301) /* PCS6:1 */ AM_MIRROR(0xe) AM_DEVREADWRITE8("upd7220", upd7220_device, dack_r, dack_w, 0xff00) // DMA-ACK graphics - AM_RANGE(0x0310, 0x0311) /* PCS6:2 */ AM_MIRROR(0xe) AM_DEVREAD8(I8274_TAG, i8274_device, inta_r, 0x00ff) // 8274 INTERRUPT ACKNOWLEDGE - AM_RANGE(0x0320, 0x0323) /* PCS6:4 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8274_TAG, i8274_device, cd_ba_r, cd_ba_w, 0x00ff) - AM_RANGE(0x0320, 0x0321) /* PCS6:5 */ AM_MIRROR(0xe) AM_READWRITE8(isbx0_tdma_r, isbx0_tdma_w, 0xff00) // DMA-TERMINATE J8 (iSBX0) - AM_RANGE(0x0330, 0x0333) /* PCS6:6 */ AM_DEVREADWRITE8("upd7220", upd7220_device, read, write, 0x00ff) - AM_RANGE(0x0330, 0x0331) /* PCS6:7 */ AM_MIRROR(0xe) AM_READWRITE8(isbx1_tdma_r, isbx1_tdma_w, 0xff00) // DMA-TERMINATE J9 (iSBX1) - AM_RANGE(0x0340, 0x034f) /* PCS6:8 */ AM_DEVREADWRITE8(ISBX_0_TAG, isbx_slot_device, mcs0_r, mcs0_w, 0x00ff) // 8272 CS0 (8/16-bit) J8 (iSBX0) - AM_RANGE(0x0340, 0x034f) /* PCS6:9 */ AM_DEVREADWRITE8(ISBX_0_TAG, isbx_slot_device, mcs1_r, mcs1_w, 0xff00) // CS1 (16-bit) J8 (iSBX0) - AM_RANGE(0x0350, 0x035f) /* PCS6:10 */ AM_DEVREADWRITE8(ISBX_0_TAG, isbx_slot_device, mcs1_r, mcs1_w, 0x00ff) // CS1 (8-bit) J8 (iSBX0) - AM_RANGE(0x0350, 0x035f) /* PCS6:11 */ AM_DEVREADWRITE8(ISBX_0_TAG, isbx_slot_device, mdack_r, mdack_w, 0xff00) // DMA-ACK J8 (iSBX0) - AM_RANGE(0x0360, 0x036f) /* PCS6:13 */ AM_DEVREADWRITE8(ISBX_1_TAG, isbx_slot_device, mcs0_r, mcs0_w, 0x00ff) // CS0 (8/16-bit) J9 (iSBX1) - AM_RANGE(0x0360, 0x036f) /* PCS6:13 */ AM_DEVREADWRITE8(ISBX_1_TAG, isbx_slot_device, mcs1_r, mcs1_w, 0xff00) // CS1 (16-bit) J9 (iSBX1) - AM_RANGE(0x0370, 0x037f) /* PCS6:14 */ AM_DEVREADWRITE8(ISBX_1_TAG, isbx_slot_device, mcs1_r, mcs1_w, 0x00ff) // CS1 (8-bit) J9 (iSBX1) - AM_RANGE(0x0370, 0x037f) /* PCS6:15 */ AM_DEVREADWRITE8(ISBX_1_TAG, isbx_slot_device, mdack_r, mdack_w, 0xff00) // DMA-ACK J9 (iSBX1) -#endif -ADDRESS_MAP_END - - -//------------------------------------------------- -// ADDRESS_MAP( upd7220_map ) -//------------------------------------------------- - -static ADDRESS_MAP_START( upd7220_map, AS_0, 16, compis_state ) - ADDRESS_MAP_GLOBAL_MASK(0x7fff) - AM_RANGE(0x00000, 0x7fff) AM_RAM AM_SHARE("video_ram") +// AM_RANGE(0x0300, 0x0301) /* PCS6:0 */ AM_MIRROR(0xe) AM_WRITE8(tape_mon_w, 0x00ff) +// AM_RANGE(0x0310, 0x0311) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, data_r, data_w, 0xff00) +// AM_RANGE(0x0312, 0x0313) /* PCS6:3 */ AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, status_r, control_w, 0xff00) + AM_RANGE(0x0300, 0x030f) AM_READWRITE(pcs6_0_1_r, pcs6_0_1_w) + AM_RANGE(0x0310, 0x031f) AM_READWRITE(pcs6_2_3_r, pcs6_2_3_w) + AM_RANGE(0x0320, 0x032f) AM_READWRITE(pcs6_4_5_r, pcs6_4_5_w) + AM_RANGE(0x0330, 0x033f) AM_READWRITE(pcs6_6_7_r, pcs6_6_7_w) + AM_RANGE(0x0340, 0x034f) AM_READWRITE(pcs6_8_9_r, pcs6_8_9_w) + AM_RANGE(0x0350, 0x035f) AM_READWRITE(pcs6_10_11_r, pcs6_10_11_w) + AM_RANGE(0x0360, 0x036f) AM_READWRITE(pcs6_12_13_r, pcs6_12_13_w) + AM_RANGE(0x0370, 0x037f) AM_READWRITE(pcs6_14_15_r, pcs6_14_15_w) ADDRESS_MAP_END @@ -445,20 +562,6 @@ INPUT_PORTS_END // DEVICE CONFIGURATION //************************************************************************** -//------------------------------------------------- -// UPD7220_INTERFACE( hgdc_intf ) -//------------------------------------------------- - -UPD7220_DISPLAY_PIXELS_MEMBER( compis_state::hgdc_display_pixels ) -{ - UINT16 i,gfx = m_video_ram[(address & 0x7fff) >> 1]; - const pen_t *pen = m_palette->pens(); - - for(i=0; i<16; i++) - bitmap.pix32(y, x + i) = pen[BIT(gfx, i)]; -} - - //------------------------------------------------- // I80186_INTERFACE( cpu_intf ) //------------------------------------------------- @@ -612,6 +715,7 @@ void compis_state::machine_reset() m_uart->reset(); m_mpsc->reset(); m_ppi->reset(); + m_graphics->reset(); m_isbx0->reset(); m_isbx1->reset(); } @@ -628,41 +732,25 @@ void compis_state::machine_reset() static MACHINE_CONFIG_START( compis, compis_state ) // basic machine hardware - MCFG_CPU_ADD(I80186_TAG, I80186, XTAL_16MHz) + MCFG_CPU_ADD(I80186_TAG, I80186, XTAL_15_36MHz) MCFG_CPU_PROGRAM_MAP(compis_mem) MCFG_CPU_IO_MAP(compis_io) MCFG_80186_IRQ_SLAVE_ACK(DEVREAD8(DEVICE_SELF, compis_state, compis_irq_callback)) MCFG_80186_TMROUT0_HANDLER(DEVWRITELINE(DEVICE_SELF, compis_state, tmr0_w)) MCFG_80186_TMROUT1_HANDLER(DEVWRITELINE(DEVICE_SELF, compis_state, tmr1_w)) - // video hardware - MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green) - MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) - MCFG_SCREEN_REFRESH_RATE(50) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate - MCFG_SCREEN_SIZE(640, 400) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1) - MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update) - - MCFG_DEVICE_ADD("upd7220", UPD7220, XTAL_4_433619MHz/2) // unknown clock - MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_map) - MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(compis_state, hgdc_display_pixels) - MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) - - MCFG_PALETTE_ADD_MONOCHROME("palette") - // devices - MCFG_DEVICE_ADD(I80130_TAG, I80130, XTAL_16MHz/2) + MCFG_DEVICE_ADD(I80130_TAG, I80130, XTAL_15_36MHz/2) MCFG_I80130_IRQ_CALLBACK(DEVWRITELINE(I80186_TAG, i80186_cpu_device, int0_w)) - //MCFG_I80130_SYSTICK_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir3_w)) + MCFG_I80130_SYSTICK_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir3_w)) MCFG_I80130_DELAY_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir7_w)) MCFG_I80130_BAUD_CALLBACK(WRITELINE(compis_state, tmr2_w)) MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) - MCFG_PIT8253_CLK0(XTAL_16MHz/8) + MCFG_PIT8253_CLK0(XTAL_15_36MHz/8) MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE(I8274_TAG, i8274_device, rxtxcb_w)) - MCFG_PIT8253_CLK1(XTAL_16MHz/8) - MCFG_PIT8253_CLK2(XTAL_16MHz/8) + MCFG_PIT8253_CLK1(XTAL_15_36MHz/8) + MCFG_PIT8253_CLK2(XTAL_15_36MHz/8) MCFG_PIT8253_OUT2_HANDLER(WRITELINE(compis_state, tmr5_w)) MCFG_DEVICE_ADD(I8255_TAG, I8255, 0) @@ -673,12 +761,12 @@ static MACHINE_CONFIG_START( compis, compis_state ) MCFG_DEVICE_ADD(I8251A_TAG, I8251, 0) MCFG_I8251_TXD_HANDLER(DEVWRITELINE(COMPIS_KEYBOARD_TAG, compis_keyboard_device, si_w)) MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE(I80130_TAG, i80130_device, ir2_w)) - //MCFG_I8251_TXRDY_HANDLER(DEVWRITELINE(I80186_TAG, i80186_cpu_device, int1_w)) + MCFG_I8251_TXRDY_HANDLER(DEVWRITELINE(I80186_TAG, i80186_cpu_device, int1_w)) MCFG_DEVICE_ADD(COMPIS_KEYBOARD_TAG, COMPIS_KEYBOARD, 0) MCFG_COMPIS_KEYBOARD_OUT_TX_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd)) - MCFG_I8274_ADD(I8274_TAG, XTAL_16MHz/4, 0, 0, 0, 0) + MCFG_I8274_ADD(I8274_TAG, XTAL_15_36MHz/4, 0, 0, 0, 0) MCFG_Z80DART_OUT_TXDA_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_txd)) MCFG_Z80DART_OUT_DTRA_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_dtr)) MCFG_Z80DART_OUT_RTSA_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_rts)) @@ -687,7 +775,7 @@ static MACHINE_CONFIG_START( compis, compis_state ) MCFG_Z80DART_OUT_RTSB_CB(DEVWRITELINE(RS232_B_TAG, rs232_port_device, write_rts)) MCFG_Z80DART_OUT_INT_CB(DEVWRITELINE(I80186_TAG, i80186_cpu_device, int3_w)) - MCFG_DEVICE_ADD(MM58174A_TAG, MM58274C, 0) + MCFG_DEVICE_ADD(MM58174A_TAG, MM58274C, XTAL_32_768kHz) MCFG_MM58274C_MODE24(0) // 12 hour MCFG_MM58274C_DAY1(1) // monday @@ -711,6 +799,8 @@ static MACHINE_CONFIG_START( compis, compis_state ) MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(compis_state, write_centronics_select)) MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG) + MCFG_COMPIS_GRAPHICS_SLOT_ADD(GRAPHICS_TAG, XTAL_15_36MHz/2, compis_graphics_cards, "hrg") + MCFG_ISBX_SLOT_ADD(ISBX_0_TAG, 0, isbx_cards, "fdc") MCFG_ISBX_SLOT_MINTR0_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir1_w)) MCFG_ISBX_SLOT_MINTR1_CALLBACK(DEVWRITELINE(I80130_TAG, i80130_device, ir0_w)) diff --git a/src/mame/drivers/cps2.cpp b/src/mame/drivers/cps2.cpp index e7d0f7601ce..0ae3e7505ac 100644 --- a/src/mame/drivers/cps2.cpp +++ b/src/mame/drivers/cps2.cpp @@ -8154,6 +8154,43 @@ ROM_START( ssf2th ) ROM_END ROM_START( ssf2xj ) + ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ + ROM_LOAD16_WORD_SWAP( "sfxj.03d", 0x000000, 0x80000, CRC(50b52b37) SHA1(dc0330fcbffbc0077faa20d34a28d6a49b04639e) ) + ROM_LOAD16_WORD_SWAP( "sfxj.04a", 0x080000, 0x80000, CRC(af7767b4) SHA1(61e7364408bf07c01634913c112b6245acce48ab) ) + ROM_LOAD16_WORD_SWAP( "sfxj.05", 0x100000, 0x80000, CRC(f4ff18f5) SHA1(aa713c9e1a2eba35bf1c9b40bb262ff7e46b9ce4) ) + ROM_LOAD16_WORD_SWAP( "sfxj.06b", 0x180000, 0x80000, CRC(413477c2) SHA1(63bf120566db0c23cc726e7cdbf78428582c694f) ) + ROM_LOAD16_WORD_SWAP( "sfxj.07a", 0x200000, 0x80000, CRC(a18b3d83) SHA1(f08dd30a1b864fdd5d05d58a0b43e65077702d32) ) + ROM_LOAD16_WORD_SWAP( "sfxj.08", 0x280000, 0x80000, CRC(2de76f10) SHA1(8cbe96dfeaa41306caa2819b82272ce3b0b9f926) ) + ROM_LOAD16_WORD_SWAP( "sfx.09", 0x300000, 0x80000, CRC(642fae3f) SHA1(746df99b826b9837bba267104132161153c1daff) ) + + ROM_REGION( 0x1000000, "gfx", 0 ) + ROMX_LOAD( "sfx.13m", 0x000000, 0x200000, CRC(cf94d275) SHA1(bf2a6d98a656d1cb5734da7836686242d3211137) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.15m", 0x000002, 0x200000, CRC(5eb703af) SHA1(4b302dbb66e8a5c2ad92798699391e981bada427) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.17m", 0x000004, 0x200000, CRC(ffa60e0f) SHA1(b21b1c749a8241440879bf8e7cb33968ccef97e5) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.19m", 0x000006, 0x200000, CRC(34e825c5) SHA1(4d320fc96d1ef0b9928a8ce801734245a4c097a5) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.14m", 0x800000, 0x100000, CRC(b7cc32e7) SHA1(0f4d26af338dab5dce5b7b34d32ad0c573434ace) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.16m", 0x800002, 0x100000, CRC(8376ad18) SHA1(f4456833fb396e6501f4174c0fe5fd63ea40a188) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.18m", 0x800004, 0x100000, CRC(f5b1b336) SHA1(4b060501e56b9d61294748da5387cdae5280ec4d) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.20m", 0x800006, 0x100000, CRC(459d5c6b) SHA1(32b11ba7a12004aff810d719bff7508204c7b7c0) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.21m", 0xc00000, 0x100000, CRC(e32854af) SHA1(1a5e11e9caa2b96108d89ae660ef1f6bcb469a74) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.23m", 0xc00002, 0x100000, CRC(760f2927) SHA1(491e28e14ee06821fc9e709efa7b91313bc0c2db) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.25m", 0xc00004, 0x100000, CRC(1ee90208) SHA1(83df1d9953560edddc2951ea426d29fb014e6a8a) , ROM_GROUPWORD | ROM_SKIP(6) ) + ROMX_LOAD( "sfx.27m", 0xc00006, 0x100000, CRC(f814400f) SHA1(ad6921af36d0bd5dfb89b1fb53c3ca3fd92d7204) , ROM_GROUPWORD | ROM_SKIP(6) ) + + ROM_REGION( QSOUND_SIZE, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */ + ROM_LOAD( "sfx.01", 0x00000, 0x08000, CRC(b47b8835) SHA1(c8b2d50fe3a329bd0592ea160d505155d873dab1) ) + ROM_CONTINUE( 0x10000, 0x18000 ) + ROM_LOAD( "sfx.02", 0x28000, 0x20000, CRC(0022633f) SHA1(cab3afc79da53e3887eb1ccd1f4d19790728e6cd) ) + + ROM_REGION( 0x400000, "qsound", 0 ) /* QSound samples */ + ROM_LOAD16_WORD_SWAP( "sfx.11m", 0x000000, 0x200000, CRC(9bdbd476) SHA1(a8520f77f30b97aae36408e0c4ca1ebbde1808a5) ) + ROM_LOAD16_WORD_SWAP( "sfx.12m", 0x200000, 0x200000, CRC(a05e3aab) SHA1(d4eb9cae66c74e956569fea8b815156fbd420f83) ) + + SSF2T_JAPAN_KEY +ROM_END + + +ROM_START( ssf2xjr1 ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ ROM_LOAD16_WORD_SWAP( "sfxj.03c", 0x000000, 0x80000, CRC(a7417b79) SHA1(189c3ed546bb2844e9fa9fe7e9aacef728bc8939) ) ROM_LOAD16_WORD_SWAP( "sfxj.04a", 0x080000, 0x80000, CRC(af7767b4) SHA1(61e7364408bf07c01634913c112b6245acce48ab) ) @@ -8190,7 +8227,7 @@ ROM_START( ssf2xj ) ROM_END // interesting version, yellow case (rental?), shows OP instead of AM on startup, uses a different (unique) key to the usual Japan set -ROM_START( ssf2xjr ) +ROM_START( ssf2xjr1r ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ ROM_LOAD16_WORD_SWAP( "sfxo.03c", 0x000000, 0x80000, CRC(2ba33dc6) SHA1(ab31046c1604eae30e55eb0e03804c98765d578e) ) ROM_LOAD16_WORD_SWAP( "sfxo.04a", 0x080000, 0x80000, CRC(ba663dd7) SHA1(46baf0a48e4fd807098aa48e34625964b279a223) ) @@ -9568,8 +9605,9 @@ GAME( 1994, ssf2ta, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, GAME( 1994, ssf2th, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (Hispanic 940223)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, ssf2tu, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940323)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, ssf2tur1, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II Turbo (USA 940223)", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, ssf2xj, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, ssf2xjr, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, ssf2xj, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940311)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, ssf2xjr1, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, ssf2xjr1r, ssf2t, cps2, cps2_2p6b, cps_state, cps2, ROT0, "Capcom", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 rent version)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, avsp, 0, cps2, cps2_3p3b, cps_state, cps2, ROT0, "Capcom", "Alien vs. Predator (Euro 940520)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, avspu, avsp, cps2, cps2_3p3b, cps_state, cps2, ROT0, "Capcom", "Alien vs. Predator (USA 940520)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, avspj, avsp, cps2, cps2_3p3b, cps_state, cps2, ROT0, "Capcom", "Alien vs. Predator (Japan 940520)", MACHINE_SUPPORTS_SAVE ) @@ -10752,7 +10790,7 @@ ROM_START( ssf2tbd ) CPS2_DEAD_KEY ROM_END -ROM_START( ssf2xjd ) +ROM_START( ssf2xjr1d ) ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */ ROM_LOAD16_WORD_SWAP( "sfxjd.03c", 0x000000, 0x80000, CRC(316de996) SHA1(4036539a554a9ccd8b5fc364dfc4c97f3d5efa96) ) ROM_LOAD16_WORD_SWAP( "sfxjd.04a", 0x080000, 0x80000, CRC(9bf3bb2e) SHA1(4bdc6fa585cc67d3b6695f390c95c518cba2bea6) ) @@ -11249,7 +11287,7 @@ GAME( 1994, avspd, avsp, dead_cps2, cps2_3p3b, cps_state, cps2, ROT0, GAME( 1994, dstlku1d, dstlk, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Darkstalkers: The Night Warriors (USA 940705 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, ringdstd, ringdest, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Ring of Destruction: Slammasters II (Euro 940902 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, ssf2tad, ssf2t, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Super Street Fighter II Turbo (Asia 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, ssf2xjd, ssf2t, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1994, ssf2xjr1d,ssf2t, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Super Street Fighter II X: Grand Master Challenge (Japan 940223 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1994, xmcotar1d,xmcota, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "X-Men: Children of the Atom (Euro 950105 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1995, mshud, msh, dead_cps2, cps2_2p6b, cps_state, cps2, ROT0, "bootleg", "Marvel Super Heroes (US 951024 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1995, cybotsud, cybots, dead_cps2, cybots, cps_state, cps2, ROT0, "bootleg", "Cyberbots: Fullmetal Madness (USA 950424 Phoenix Edition) (bootleg)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/dolphunk.cpp b/src/mame/drivers/dolphunk.cpp index 329c14b446f..c670612a507 100644 --- a/src/mame/drivers/dolphunk.cpp +++ b/src/mame/drivers/dolphunk.cpp @@ -143,13 +143,13 @@ READ8_MEMBER( dauphin_state::port07_r ) keyin = ioport("X0")->read(); if (keyin != 0xff) for (i = 0; i < 8; i++) - if BIT(~keyin, i) + if (BIT(~keyin, i)) data = i | 0xc0; keyin = ioport("X1")->read(); if (keyin != 0xff) for (i = 0; i < 8; i++) - if BIT(~keyin, i) + if (BIT(~keyin, i)) data = i | 0xc8; if (data == m_last_key) diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp index 8e965534720..26a5b577101 100644 --- a/src/mame/drivers/ec184x.cpp +++ b/src/mame/drivers/ec184x.cpp @@ -144,17 +144,20 @@ DRIVER_INIT_MEMBER( ec184x_state, ec1841 ) if (m_memory.boards > 4) m_memory.boards = 4; + program.install_read_bank(0, EC1841_MEMBOARD_SIZE-1, "bank10"); + program.install_write_bank(0, EC1841_MEMBOARD_SIZE-1, "bank20"); + + membank( "bank10" )->set_base( m_ram->pointer() ); + membank( "bank20" )->set_base( m_ram->pointer() ); + // 640K configuration is special -- 512K board mapped at 0 + 128K board mapped at 512K // XXX verify this was actually the case if (m_ram->size() == 640*1024) { - program.install_read_bank(0, m_ram->size()-1, "bank10"); - program.install_write_bank(0, m_ram->size()-1, "bank20"); - } else { - program.install_read_bank(0, EC1841_MEMBOARD_SIZE-1, "bank10"); - program.install_write_bank(0, EC1841_MEMBOARD_SIZE-1, "bank20"); + program.install_read_bank(EC1841_MEMBOARD_SIZE, m_ram->size()-1, "bank11"); + program.install_write_bank(EC1841_MEMBOARD_SIZE, m_ram->size()-1, "bank21"); + membank( "bank11" )->set_base( m_ram->pointer() + EC1841_MEMBOARD_SIZE ); + membank( "bank21" )->set_base( m_ram->pointer() + EC1841_MEMBOARD_SIZE ); } - membank( "bank10" )->set_base( m_ram->pointer() ); - membank( "bank20" )->set_base( m_ram->pointer() ); } MACHINE_RESET_MEMBER( ec184x_state, ec1841 ) diff --git a/src/mame/drivers/esd16.cpp b/src/mame/drivers/esd16.cpp index 3b366429bc9..4911f1dfa3f 100644 --- a/src/mame/drivers/esd16.cpp +++ b/src/mame/drivers/esd16.cpp @@ -28,7 +28,8 @@ Year + Game PCB Notes 00 Deluxe 5 ESD (no date is marked on PCB) 00 Tang Tang ESD (no date is marked on PCB) 01 SWAT Police ESD (no date is marked on PCB) -01 Jumping Pop ESD 11-09-98 (also original version by Emag Soft) +01 Jumping Pop ESD 11-09-98 (version by Emag Soft) +01 Jumping Pop ESD 12-04-00 (ESD branded version) --------------------------------------------------------------------------- Other ESD games: @@ -1267,6 +1268,32 @@ ROM_START( deluxe5b ) /* Deluxe 5 */ ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) /* AT27C010 mask rom */ ROM_END + +ROM_START( deluxe4u ) /* Deluxe 4 U */ + ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "2.cu02", 0x000000, 0x040000, CRC(db213e1f) SHA1(bf9c49635f79b92a761715138528200106aa86ae) ) + ROM_LOAD16_BYTE( "1.cu03", 0x000001, 0x040000, CRC(fbf14d74) SHA1(5ff5bf4ff55609452d5b8a49d8658f878541ce60) ) + + ROM_REGION( 0x40000, "audiocpu", 0 ) /* Z80 Code */ + ROM_LOAD( "3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) + + ROM_REGION( 0x180000, "spr", 0 ) /* Sprites, 16x16x5 */ + ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) /* AM27C020 mask roms with no label */ + ROM_LOAD16_BYTE( "am27c020.ju05", 0x000001, 0x040000, CRC(bbe81779) SHA1(750387fb4aaa04b7f4f1d3985896f5e11219e3ea) ) + ROM_LOAD16_BYTE( "am27c020.ju04", 0x080000, 0x040000, CRC(40fa2c2f) SHA1(b9d9bfdc9343f00bad9749c76472f064c509cfce) ) + ROM_LOAD16_BYTE( "am27c020.ju03", 0x080001, 0x040000, CRC(aa130fd3) SHA1(46a55d8ca59a52e610600fdba76d9729528d2871) ) + ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) + + ROM_REGION( 0x400000, "bgs", 0 ) /* Layers, 16x16x8 */ + // could not get good reads of these, not the same as deluxe5 + ROM_LOAD16_BYTE( "fu35", 0x000000, 0x200000, BAD_DUMP CRC(6dc3b387) SHA1(9be25eb71db2387c83825e05c9129e7a911a1b5e) ) + ROM_LOAD16_BYTE( "fu34", 0x000001, 0x200000, BAD_DUMP CRC(e99b6668) SHA1(9c38c542153ccb8b97b7efd9a28390af2fe2dd7e) ) + + ROM_REGION( 0x40000, "oki", 0 ) /* Samples */ + ROM_LOAD( "su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) +ROM_END + + /* Tang Tang Tang Tang (ESD) @@ -1425,6 +1452,7 @@ ESD, 2001 PCB Layout ---------- +ESD 12-04-00 |------------------------------------------------------| | TDA1519A 62256 PAL | | SAMPLES.BIN YM3014 62256 BG0.BIN | @@ -1564,7 +1592,7 @@ GAME( 1999, multchmp, 0, esd16, multchmp, driver_device, 0, ROT0, "ESD GAME( 1998, multchmpk,multchmp, esd16, multchmp, driver_device, 0, ROT0, "ESD", "Multi Champ (Korea, older)", MACHINE_SUPPORTS_SAVE ) GAME( 1998, multchmpa,multchmp, esd16, multchmp, driver_device, 0, ROT0, "ESD", "Multi Champ (World, older)", MACHINE_SUPPORTS_SAVE ) -GAME( 2001, jumppop, 0, jumppop, jumppop, driver_device, 0, ROT0, "ESD", "Jumping Pop (set 1)", MACHINE_SUPPORTS_SAVE ) /* Redesigned(?) ESD 11-09-98 with no ID# */ +GAME( 2001, jumppop, 0, jumppop, jumppop, driver_device, 0, ROT0, "ESD", "Jumping Pop (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 2001, jumppope, jumppop, jumppop, jumppop, driver_device, 0, ROT0, "Emag Soft", "Jumping Pop (set 2)", MACHINE_SUPPORTS_SAVE ) /* ESD 05-28-99 */ @@ -1581,6 +1609,7 @@ GAME( 2000, hedpanicf,hedpanic, hedpanic, hedpanic, driver_device, 0, ROT0, "ESD GAME( 2000, deluxe5, 0, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Deluxe 5 (ver. 0107, 07/01/2000, set 1)", MACHINE_SUPPORTS_SAVE ) // all 3 sets report the same version number? GAME( 2000, deluxe5a, deluxe5, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Deluxe 5 (ver. 0107, 07/01/2000, set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 2000, deluxe5b, deluxe5, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Deluxe 5 (ver. 0107, 07/01/2000, set 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 2000, deluxe4u, deluxe5, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Deluxe 4 U (ver. 0107, 07/01/2000)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // bad dump of flash roms GAME( 2000, tangtang, 0, tangtang, hedpanic, driver_device, 0, ROT0, "ESD", "Tang Tang (ver. 0526, 26/05/2000)", MACHINE_SUPPORTS_SAVE ) GAME( 2001, swatpolc, 0, hedpanic, swatpolc, driver_device, 0, ROT0, "ESD", "SWAT Police", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/eti660.cpp b/src/mame/drivers/eti660.cpp index e84f149805c..c52f9e1f66f 100644 --- a/src/mame/drivers/eti660.cpp +++ b/src/mame/drivers/eti660.cpp @@ -221,7 +221,7 @@ READ8_MEMBER( eti660_state::pia_pa_r ) UINT8 i, data = 0xff; for (i = 0; i < 4; i++) - if BIT(m_keylatch, i) + if (BIT(m_keylatch, i)) return m_io_keyboard[i]->read(); return data; diff --git a/src/mame/drivers/excali64.cpp b/src/mame/drivers/excali64.cpp index 1e57d16ef40..d8b807c0384 100644 --- a/src/mame/drivers/excali64.cpp +++ b/src/mame/drivers/excali64.cpp @@ -360,9 +360,9 @@ WRITE8_MEMBER( excali64_state::port70_w ) { m_sys_status = data; m_crtc->set_unscaled_clock(BIT(data, 2) ? 2e6 : 1e6); - if BIT(data, 1) + if (BIT(data, 1)) { - // select 64k ram + // select 64k ram membank("bankr1")->set_entry(0); membank("bankr2")->set_entry(0); membank("bankr3")->set_entry(0); @@ -371,10 +371,9 @@ WRITE8_MEMBER( excali64_state::port70_w ) membank("bankw3")->set_entry(0); membank("bankw4")->set_entry(0); } - else - if BIT(data, 0) + else if (BIT(data, 0)) { - // select videoram and hiresram + // select videoram and hiresram membank("bankr1")->set_entry(1); membank("bankr2")->set_entry(2); membank("bankr3")->set_entry(2); @@ -385,7 +384,7 @@ WRITE8_MEMBER( excali64_state::port70_w ) } else { - // select rom, videoram, and main ram + // select rom, videoram, and main ram membank("bankr1")->set_entry(1); membank("bankr2")->set_entry(1); membank("bankr3")->set_entry(1); @@ -515,7 +514,7 @@ MC6845_UPDATE_ROW( excali64_state::update_row ) fg = col_base + (col >> 4); bg = 32 + ((col >> 1) & 7); - if BIT(col, 0) + if (BIT(col, 0)) { UINT8 h = m_p_videoram[mem+0x1000] - 4; if (h > 5) diff --git a/src/mame/drivers/fp1100.cpp b/src/mame/drivers/fp1100.cpp index 32705c7b923..3a8980a3f39 100644 --- a/src/mame/drivers/fp1100.cpp +++ b/src/mame/drivers/fp1100.cpp @@ -141,7 +141,7 @@ MC6845_UPDATE_ROW( fp1100_state::fp1100_update_row ) UINT16 mem,x; UINT32 *p = &bitmap.pix32(y); - if BIT(m_upd7801.porta, 4) + if (BIT(m_upd7801.porta, 4)) { // green screen for (x = 0; x < x_count; x++) { @@ -263,7 +263,7 @@ WRITE8_MEMBER( fp1100_state::colour_control_w ) m_col_border = data & 7; - if BIT(data, 7) + if (BIT(data, 7)) m_col_display = (data >> 4) & 7; else m_col_cursor = data >> 4; @@ -310,7 +310,7 @@ WRITE8_MEMBER( fp1100_state::porta_w ) { m_upd7801.porta = data; - if BIT(data, 5) + if (BIT(data, 5)) memset(m_p_videoram, 0, 0xc000); } @@ -340,7 +340,7 @@ d6 - Centronics strobe */ WRITE8_MEMBER( fp1100_state::portc_w ) { - if BIT(m_irq_mask, 4) + if (BIT(m_irq_mask, 4)) m_maincpu->set_input_line_and_vector(0, BIT(data, 3) ? CLEAR_LINE : HOLD_LINE, 0xf0); if (LOG) printf("%s: PortC:%X\n",machine().describe_context(),data); m_upd7801.portc = data; @@ -596,7 +596,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( fp1100_state::timer_c ) INTERRUPT_GEN_MEMBER(fp1100_state::fp1100_vblank_irq) { -// if BIT(m_irq_mask, 4) +// if (BIT(m_irq_mask, 4)) // m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xf8); } diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp index d1f46afc67d..ff49c4fe127 100644 --- a/src/mame/drivers/gba.cpp +++ b/src/mame/drivers/gba.cpp @@ -17,9 +17,103 @@ #include "sound/gb.h" #include "includes/gba.h" #include "bus/gba/rom.h" -#include "rendlay.h" #include "softlist.h" +/* Sound Registers */ +#define SOUNDCNT_L HWLO(0x080) /* 0x4000080 2 R/W Control Stereo/Volume/Enable */ +#define SOUNDCNT_H HWHI(0x080) /* 0x4000082 2 R/W Control Mixing/DMA Control */ +#define SOUNDCNT_X HWLO(0x084) /* 0x4000084 2 R/W Control Sound on/off */ + /* 0x4000086 2 - Unused */ +#define SOUNDBIAS HWLO(0x088) /* 0x4000088 2 BIOS Sound PWM Control */ + /* 0x400008A 2 - Unused */ + +/* DMA Registers (4 Transfer Channels) */ +#define DMASAD(c) WORD(0x0B0 + c * 0xC) /* 0x40000B0 4 W DMA 0 Source Address */ +#define DMADAD(c) WORD(0x0B4 + c * 0xC) /* 0x40000B4 4 W DMA 0 Destination Address */ +#define DMACNT_L(c) HWLO(0x0B8 + c * 0xC) /* 0x40000B8 2 W DMA 0 Word Count */ +#define DMACNT_H(c) HWHI(0x0B8 + c * 0xC) /* 0x40000BA 2 R/W DMA 0 Control */ + +/* Serial Communication (1) Registers */ +#define SIODATA32 WORD(0x120) /* 0x4000120 4 R/W SIO Data (Normal-32bit Mode; shared with below) */ +#define SIOMULTI0 HWLO(0x120) /* 0x4000120 2 R/W SIO Data 0 (Parent) (Multi-Player Mode) */ +#define SIOMULTI1 HWHI(0x120) /* 0x4000122 2 R/W SIO Data 1 (1st Child) (Multi-Player Mode) */ +#define SIOMULTI2 HWLO(0x124) /* 0x4000124 2 R/W SIO Data 2 (2nd Child) (Multi-Player Mode) */ +#define SIOMULTI3 HWHI(0x124) /* 0x4000126 2 R/W SIO Data 3 (3rd Child) (Multi-Player Mode) */ +#define SIOCNT HWLO(0x128) /* 0x4000128 2 R/W SIO Control Register */ +#define SIOMLT_SEND HWHI(0x128) /* 0x400012A 2 R/W SIO Data (Local of MultiPlayer; shared below) */ +#define SIODATA8 HWHI(0x128) /* 0x400012A 2 R/W SIO Data (Normal-8bit and UART Mode) */ + /* 0x400012C 2 - Unused */ + +/* Keypad Input Registers */ +#define KEYINPUT HWLO(0x130) /* 0x4000130 2 R Key Status */ +#define KEYCNT HWHI(0x130) /* 0x4000132 2 R/W Key Interrupt Control */ + +/* Serial Communication (2) Registers */ +#define RCNT HWLO(0x134) /* 0x4000134 2 R/W SIO Mode Select/General Purpose Data */ +#define IR HWHI(0x134) /* 0x4000136 2 R/W Ancient - Infrared Register (Prototypes only) */ + /* 0x4000138 8 - Unused */ +#define JOYCNT HWLO(0x140) /* 0x4000140 2 R/W SIO JOY Bus Control */ + /* 0x4000142 2 - Unused */ +#define JOY_RECV WORD(0x150) /* 0x4000150 4 R/W SIO JOY Bus Receive Data */ +#define JOY_TRANS WORD(0x154) /* 0x4000154 4 R/W SIO JOY Bus Transmit Data */ +#define JOYSTAT HWLO(0x158) /* 0x4000158 2 R/? SIO JOY Bus Receive Status */ + /* 0x400015A 2 - Unused */ + +/* Interrupt, Waitstate, and Power-Down Control Registers */ +#define IE HWLO(0x200) /* 0x4000200 2 R/W Interrupt Enable Register */ +#define IF HWHI(0x200) /* 0x4000202 2 R/W Interrupt Request Flags / IRQ Acknowledge */ +#define WAITCNT HWLO(0x204) /* 0x4000204 2 R/W Game Pak Waitstate Control */ + /* 0x4000206 - Unused */ +#define IME HWLO(0x208) /* 0x4000208 2 R/W Interrupt Master Enable Register */ + /* 0x400020A - Unused */ + /* 0x4000300 1 R/W Undocumented - Post Boot Flag */ + /* 0x4000301 1 W Undocumented - Power Down Control */ + /* 0x4000302 - Unused */ + /* 0x4000410 ? ? Undocumented - Purpose Unknown / Bug ??? 0FFh */ + /* 0x4000411 - Unused */ + /* 0x4000800 4 R/W Undocumented - Internal Memory Control (R/W) */ + /* 0x4000804 - Unused */ + /* 0x4xx0800 4 R/W Mirrors of 4000800h (repeated each 64K) */ + +#define SOUNDBIAS_SET(val) HWLO_SET(0x088, val) + +#define DMASAD_SET(c, val) WORD_SET(0x0B0 + (c * 0xC), val) +#define DMADAD_SET(c, val) WORD_SET(0x0B4 + (c * 0xC), val) +#define DMACNT_L_SET(c, val) HWLO_SET(0x0B8 + (c * 0xC), val) +#define DMACNT_H_SET(c, val) HWHI_SET(0x0B8 + (c * 0xC), val) +#define DMACNT_H_RESET(c, val) HWHI_RESET(0x0B8 + (c * 0xC), val) + +#define SIOMULTI0_SET(val) HWLO_SET(0x120, val) +#define SIOMULTI1_SET(val) HWHI_SET(0x120, val) +#define SIOMULTI2_SET(val) HWLO_SET(0x124, val) +#define SIOMULTI3_SET(val) HWHI_SET(0x124, val) + +#define SIOCNT_RESET(val) HWLO_RESET(0x128, val) + +#define KEYCNT_SET(val) HWHI_SET(0x130, val) + +#define RCNT_SET(val) HWLO_SET(0x134, val) + +#define JOYSTAT_SET(val) HWLO_SET(0x158, val) + +#define IF_SET(val) HWHI_SET(0x200, val) +#define IF_RESET(val) HWHI_RESET(0x200, val) + +#define INT_VBL 0x0001 +#define INT_HBL 0x0002 +#define INT_VCNT 0x0004 +#define INT_TM0_OVERFLOW 0x0008 +#define INT_TM1_OVERFLOW 0x0010 +#define INT_TM2_OVERFLOW 0x0020 +#define INT_TM3_OVERFLOW 0x0040 +#define INT_SIO 0x0080 +#define INT_DMA0 0x0100 +#define INT_DMA1 0x0200 +#define INT_DMA2 0x0400 +#define INT_DMA3 0x0800 +#define INT_KEYPAD 0x1000 +#define INT_GAMEPAK 0x2000 + #define VERBOSE_LEVEL (0) static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, const char *s_fmt, ...) @@ -31,39 +125,24 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, co va_start( v, s_fmt ); vsprintf( buf, s_fmt, v ); va_end( v ); - device.logerror( "%08x: %s", device.machine().driver_data()->m_maincpu->pc(), buf ); + device.logerror( "%08x: %s", device.machine().describe_context(), buf ); } } -static const UINT32 timer_clks[4] = { 16777216, 16777216/64, 16777216/256, 16777216/1024 }; +static const UINT32 timer_clks[4] = { XTAL_16_777216MHz, XTAL_16_777216MHz / 64, XTAL_16_777216MHz / 256, XTAL_16_777216MHz / 1024 }; -PALETTE_INIT_MEMBER(gba_state, gba) -{ - UINT8 r, g, b; - for( b = 0; b < 32; b++ ) - { - for( g = 0; g < 32; g++ ) - { - for( r = 0; r < 32; r++ ) - { - palette.set_pen_color( ( b << 10 ) | ( g << 5 ) | r, pal5bit(r), pal5bit(g), pal5bit(b) ); - } - } - } -} - void gba_state::request_irq(UINT32 int_type) { // set flag for later recovery - m_IF |= int_type; + IF_SET(int_type); // is this specific interrupt enabled? - int_type &= m_IE; + int_type &= IE; if (int_type != 0) { // master enable? - if (m_IME & 1) + if (IME & 1) { m_maincpu->set_input_line(ARM7_IRQ_LINE, ASSERT_LINE); m_maincpu->set_input_line(ARM7_IRQ_LINE, CLEAR_LINE); @@ -73,17 +152,15 @@ void gba_state::request_irq(UINT32 int_type) TIMER_CALLBACK_MEMBER(gba_state::dma_complete) { - int ctrl; - FPTR ch; static const UINT32 ch_int[4] = { INT_DMA0, INT_DMA1, INT_DMA2, INT_DMA3 }; - ch = param; + FPTR ch = param; // printf("dma complete: ch %d\n", ch); m_dma_timer[ch]->adjust(attotime::never); - ctrl = m_dma_regs[(ch*3)+2] >> 16; + int ctrl = DMACNT_H(ch); // IRQ if (ctrl & 0x4000) @@ -95,45 +172,40 @@ TIMER_CALLBACK_MEMBER(gba_state::dma_complete) // always clear active for immediate DMAs though if (!((ctrl>>9) & 1) || ((ctrl & 0x3000) == 0)) { -// printf("clear active for ch %d\n", ch); - m_dma_regs[(ch*3)+2] &= ~0x80000000; // clear "active" bit + DMACNT_H_RESET(ch, 0x8000); // clear "active" bit } else { // if repeat, reload the count if ((ctrl>>9) & 1) { - m_dma_cnt[ch] = m_dma_regs[(ch*3)+2]&0xffff; + m_dma_cnt[ch] = DMACNT_L(ch); // if increment & reload mode, reload the destination if (((ctrl>>5)&3) == 3) { - m_dma_dst[ch] = m_dma_regs[(ch*3)+1]; + m_dma_dst[ch] = DMADAD(ch); } } } } -void gba_state::dma_exec(FPTR ch) +void gba_state::dma_exec(int ch) { address_space &space = m_maincpu->space(AS_PROGRAM); UINT32 src = m_dma_src[ch]; UINT32 dst = m_dma_dst[ch]; - int ctrl = m_dma_regs[(ch*3)+2] >> 16; - int srcadd = m_dma_srcadd[ch]; - int dstadd = m_dma_dstadd[ch]; + UINT16 ctrl = DMACNT_H(ch); + int srcadd = (ctrl >> 7) & 3; + int dstadd = (ctrl >> 5) & 3; int cnt = m_dma_cnt[ch]; - if (!cnt) + if (cnt == 0) { if (ch == 3) - { cnt = 0x10000; - } else - { cnt = 0x4000; - } } // override special parameters @@ -243,10 +315,8 @@ void gba_state::dma_exec(FPTR ch) void gba_state::audio_tick(int ref) { - if (!(m_SOUNDCNT_X & 0x80)) - { + if (!(SOUNDCNT_X & 0x80)) return; - } if (!ref) { @@ -257,11 +327,11 @@ void gba_state::audio_tick(int ref) m_fifo_a_ptr = 0; } - if (m_SOUNDCNT_H & 0x200) + if (SOUNDCNT_H & 0x200) { m_ladac->write_signed8(m_fifo_a[m_fifo_a_ptr]^0x80); } - if (m_SOUNDCNT_H & 0x100) + if (SOUNDCNT_H & 0x100) { m_radac->write_signed8(m_fifo_a[m_fifo_a_ptr]^0x80); } @@ -272,12 +342,12 @@ void gba_state::audio_tick(int ref) if (m_fifo_a_ptr == m_fifo_a_in) { // is a DMA set up to feed us? - if ((m_dma_regs[(1*3)+1] == 0x40000a0) && ((m_dma_regs[(1*3)+2] & 0x30000000) == 0x30000000)) + if ((DMADAD(1) == 0x40000a0) && ((DMACNT_H(1) & 0x3000) == 0x3000)) { // channel 1 it is dma_exec(1); } - if ((m_dma_regs[(2*3)+1] == 0x40000a0) && ((m_dma_regs[(2*3)+2] & 0x30000000) == 0x30000000)) + if ((DMADAD(2) == 0x40000a0) && ((DMACNT_H(2) & 0x3000) == 0x3000)) { // channel 2 it is dma_exec(2); @@ -293,11 +363,11 @@ void gba_state::audio_tick(int ref) m_fifo_b_ptr = 0; } - if (m_SOUNDCNT_H & 0x2000) + if (SOUNDCNT_H & 0x2000) { m_lbdac->write_signed8(m_fifo_b[m_fifo_b_ptr]^0x80); } - if (m_SOUNDCNT_H & 0x1000) + if (SOUNDCNT_H & 0x1000) { m_rbdac->write_signed8(m_fifo_b[m_fifo_b_ptr]^0x80); } @@ -307,12 +377,12 @@ void gba_state::audio_tick(int ref) if (m_fifo_b_ptr == m_fifo_b_in) { // is a DMA set up to feed us? - if ((m_dma_regs[(1*3)+1] == 0x40000a4) && ((m_dma_regs[(1*3)+2] & 0x30000000) == 0x30000000)) + if ((DMADAD(1) == 0x40000a4) && ((DMACNT_H(1) & 0x3000) == 0x3000)) { // channel 1 it is dma_exec(1); } - if ((m_dma_regs[(2*3)+1] == 0x40000a4) && ((m_dma_regs[(2*3)+2] & 0x30000000) == 0x30000000)) + if ((DMADAD(2) == 0x40000a4) && ((DMACNT_H(2) & 0x3000) == 0x3000)) { // channel 2 it is dma_exec(2); @@ -326,8 +396,6 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) static const UINT32 tmr_ints[4] = { INT_TM0_OVERFLOW, INT_TM1_OVERFLOW, INT_TM2_OVERFLOW, INT_TM3_OVERFLOW }; FPTR tmr = (FPTR) param; -// printf("Timer %d expired, SOUNDCNT_H %04x\n", tmr, m_SOUNDCNT_H); - // "The reload value is copied into the counter only upon following two situations: Automatically upon timer overflows," // "or when the timer start bit becomes changed from 0 to 1." if (m_timer_recalc[tmr] != 0) @@ -347,28 +415,20 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) // check if timers 0 or 1 are feeding directsound if (tmr == 0) { - if ((m_SOUNDCNT_H & 0x400) == 0) - { + if (!(SOUNDCNT_H & 0x400)) audio_tick(0); - } - if ((m_SOUNDCNT_H & 0x4000) == 0) - { + if (!(SOUNDCNT_H & 0x4000)) audio_tick(1); - } } if (tmr == 1) { - if ((m_SOUNDCNT_H & 0x400) == 0x400) - { + if (SOUNDCNT_H & 0x400) audio_tick(0); - } - if ((m_SOUNDCNT_H & 0x4000) == 0x4000) - { + if (SOUNDCNT_H & 0x4000) audio_tick(1); - } } // Handle count-up timing @@ -381,7 +441,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) if( ( m_timer_regs[1] & 0x0000ffff ) == 0 ) { m_timer_regs[1] |= m_timer_reload[1]; - if( ( m_timer_regs[1] & 0x400000 ) && ( m_IME != 0 ) ) + if( ( m_timer_regs[1] & 0x400000 ) && ( IME != 0 ) ) { request_irq(tmr_ints[1]); } @@ -391,7 +451,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) if( ( m_timer_regs[2] & 0x0000ffff ) == 0 ) { m_timer_regs[2] |= m_timer_reload[2]; - if( ( m_timer_regs[2] & 0x400000 ) && ( m_IME != 0 ) ) + if( ( m_timer_regs[2] & 0x400000 ) && ( IME != 0 ) ) { request_irq(tmr_ints[2]); } @@ -401,7 +461,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) if( ( m_timer_regs[3] & 0x0000ffff ) == 0 ) { m_timer_regs[3] |= m_timer_reload[3]; - if( ( m_timer_regs[3] & 0x400000 ) && ( m_IME != 0 ) ) + if( ( m_timer_regs[3] & 0x400000 ) && ( IME != 0 ) ) { request_irq(tmr_ints[3]); } @@ -419,7 +479,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) if( ( m_timer_regs[2] & 0x0000ffff ) == 0 ) { m_timer_regs[2] |= m_timer_reload[2]; - if( ( m_timer_regs[2] & 0x400000 ) && ( m_IME != 0 ) ) + if( ( m_timer_regs[2] & 0x400000 ) && ( IME != 0 ) ) { request_irq(tmr_ints[2]); } @@ -429,7 +489,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) if( ( m_timer_regs[3] & 0x0000ffff ) == 0 ) { m_timer_regs[3] |= m_timer_reload[3]; - if( ( m_timer_regs[3] & 0x400000 ) && ( m_IME != 0 ) ) + if( ( m_timer_regs[3] & 0x400000 ) && ( IME != 0 ) ) { request_irq(tmr_ints[3]); } @@ -445,7 +505,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) if( ( m_timer_regs[3] & 0x0000ffff ) == 0 ) { m_timer_regs[3] |= m_timer_reload[3]; - if( ( m_timer_regs[3] & 0x400000 ) && ( m_IME != 0 ) ) + if( ( m_timer_regs[3] & 0x400000 ) && ( IME != 0 ) ) { request_irq(tmr_ints[3]); } @@ -455,7 +515,7 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) } // are we supposed to IRQ? - if ((m_timer_regs[tmr] & 0x400000) && (m_IME != 0)) + if ((m_timer_regs[tmr] & 0x400000) && (IME != 0)) { request_irq(tmr_ints[tmr]); } @@ -463,260 +523,32 @@ TIMER_CALLBACK_MEMBER(gba_state::timer_expire) TIMER_CALLBACK_MEMBER(gba_state::handle_irq) { - request_irq(m_IF); + request_irq(IF); m_irq_timer->adjust(attotime::never); } +static const char *reg_names[] = { + /* Sound Registers */ + "SOUND1CNT_L", "SOUND1CNT_H", "SOUND1CNT_X", "Unused", + "SOUND2CNT_L", "Unused", "SOUND2CNT_H", "Unused", + "SOUND3CNT_L", "SOUND3CNT_H", "SOUND3CNT_X", "Unused", + "SOUND4CNT_L", "Unused", "SOUND4CNT_H", "Unused", + "SOUNDCNT_L", "SOUNDCNT_H", "SOUNDCNT_X", "Unused", + "SOUNDBIAS", "Unused", "WAVE_RAM", "WAVE_RAM", + "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", + "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", + "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", "WAVE_RAM", + "WAVE_RAM", "WAVE_RAM", "FIFO_A_L", "FIFO_A_H", + "FIFO_B_L", "FIFO_B_H" +}; + READ32_MEMBER(gba_state::gba_io_r) { UINT32 retval = 0; - switch( offset ) + switch( offset + 0x60/4 ) { - case 0x0000/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: DISPCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_DISPCNT ); - retval |= m_DISPCNT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: Green Swap (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_GRNSWAP ); - retval |= m_GRNSWAP << 16; - } - break; - case 0x0004/4: - retval = (m_DISPSTAT & 0xffff) | (machine().first_screen()->vpos()<<16); - break; - case 0x0008/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG0CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BG0CNT ); - retval |= m_BG0CNT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG1CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BG1CNT ); - retval |= m_BG1CNT << 16; - } - break; - case 0x000c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BG2CNT ); - retval |= m_BG2CNT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BG3CNT ); - retval |= m_BG3CNT << 16; - } - break; - case 0x0010/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG0HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG0VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0014/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG1HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG1VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0018/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x001c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0020/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2PA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2PB (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0024/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2PC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2PD (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0028/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2X_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2X_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x002c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2Y_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG2Y_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0030/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3PA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3PB (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0034/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3PC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3PD (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0038/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3X_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3X_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x003c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3Y_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BG3Y_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0040/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: WIN0H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: WIN1H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0044/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: WIN0V (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: WIN1V (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0048/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: WININ (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_WININ ); - retval |= m_WININ; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: WINOUT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_WINOUT ); - retval |= m_WINOUT << 16; - } - break; - case 0x004c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: MOSAIC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0050/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BLDCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BLDCNT ); - retval |= m_BLDCNT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: BLDALPHA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BLDALPHA ); - retval |= m_BLDALPHA << 16; - } - break; - case 0x0054/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: BLDY (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0058/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x005c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; case 0x0060/4: retval = m_gbsound->sound_r(space, 0) | m_gbsound->sound_r(space, 1)<<16 | m_gbsound->sound_r(space, 2)<<24; break; @@ -745,24 +577,12 @@ READ32_MEMBER(gba_state::gba_io_r) retval = m_gbsound->sound_r(space, 0x14) | m_gbsound->sound_r(space, 0x15)<<8; if( ACCESSING_BITS_16_31 ) { - verboselog(*this, 2, "GBA IO Register Read: SOUNDCNT_H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SOUNDCNT_H ); - retval |= m_SOUNDCNT_H << 16; + retval |= SOUNDCNT_H << 16; } break; case 0x0084/4: retval = m_gbsound->sound_r(space, 0x16); break; - case 0x0088/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: SOUNDBIAS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SOUNDBIAS ); - retval |= m_SOUNDBIAS; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; case 0x0090/4: retval = m_gbsound->wave_r(space, 0) | m_gbsound->wave_r(space, 1)<<8 | m_gbsound->wave_r(space, 2)<<16 | m_gbsound->wave_r(space, 3)<<24; break; @@ -781,28 +601,60 @@ READ32_MEMBER(gba_state::gba_io_r) break; case 0x00b0/4: case 0x00b4/4: + // read only + break; case 0x00b8/4: + if (ACCESSING_BITS_0_15) + { + // read only + } + if (ACCESSING_BITS_16_31) + { + retval |= DMACNT_H(0) << 16; + } + break; case 0x00bc/4: case 0x00c0/4: + // read only + break; case 0x00c4/4: + if (ACCESSING_BITS_0_15) + { + // read only + } + if (ACCESSING_BITS_16_31) + { + retval |= DMACNT_H(1) << 16; + } + break; case 0x00c8/4: case 0x00cc/4: + // read only + break; case 0x00d0/4: + if (ACCESSING_BITS_0_15) + { + // read only + } + if (ACCESSING_BITS_16_31) + { + retval |= DMACNT_H(2) << 16; + } + break; case 0x00d4/4: case 0x00d8/4: + // read only + break; case 0x00dc/4: - { // no idea why here, but it matches VBA better // note: this suspicious piece of code crashes "Buffy The Vampire Slayer" (08008DB4) and "The Ant Bully", so disable it for now - #if 0 - if (((offset-0xb0/4) % 3) == 2) - { - retval = m_dma_regs[offset-(0xb0/4)] & 0xff000000; - } - else - #endif - - retval = m_dma_regs[offset-(0xb0/4)]; + if (ACCESSING_BITS_0_15) + { + // read only + } + if (ACCESSING_BITS_16_31) + { + retval |= DMACNT_H(3) << 16; } break; case 0x0100/4: @@ -812,7 +664,7 @@ READ32_MEMBER(gba_state::gba_io_r) { UINT32 elapsed; double time, ticks; - int timer = offset-(0x100/4); + int timer = offset + 0x60/4 - 0x100/4; // printf("Read timer reg %x (PC=%x)\n", timer, space.device().safe_pc()); @@ -825,17 +677,16 @@ READ32_MEMBER(gba_state::gba_io_r) } else { - time = m_tmr_timer[timer]->elapsed().as_double(); + time = m_tmr_timer[timer]->elapsed().as_double(); - ticks = (double)(0x10000 - (m_timer_regs[timer] & 0xffff)); + ticks = (double)(0x10000 - (m_timer_regs[timer] & 0xffff)); -// printf("time %f ticks %f 1/hz %f\n", time, ticks, 1.0 / m_timer_hz[timer]); + // printf("time %f ticks %f 1/hz %f\n", time, ticks, 1.0 / m_timer_hz[timer]); - time *= ticks; - time /= (1.0 / m_timer_hz[timer]); - - elapsed = (UINT32)time; + time *= ticks; + time /= (1.0 / m_timer_hz[timer]); + elapsed = (UINT32)time; } // printf("elapsed = %x\n", elapsed); @@ -849,42 +700,6 @@ READ32_MEMBER(gba_state::gba_io_r) retval = (m_timer_regs[timer] & 0xffff0000) | (elapsed & 0xffff); } break; - case 0x0120/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: SIOMULTI0 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOMULTI0 ); - retval |= m_SIOMULTI0; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: SIOMULTI1 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIOMULTI1 ); - retval |= m_SIOMULTI1 << 16; - } - break; - case 0x0124/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: SIOMULTI2 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOMULTI2 ); - retval |= m_SIOMULTI2; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: SIOMULTI3 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIOMULTI3 ); - retval |= m_SIOMULTI3 << 16; - } - break; - case 0x0128/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: SIOCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOCNT ); - retval |= m_SIOCNT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: SIODATA8 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIODATA8 ); - retval |= m_SIODATA8 << 16; - } - break; case 0x0130/4: if( ACCESSING_BITS_0_15 ) // KEYINPUT { @@ -892,404 +707,59 @@ READ32_MEMBER(gba_state::gba_io_r) } else if( ACCESSING_BITS_16_31 ) { - verboselog(*this, 2, "GBA IO Register Read: KEYCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_KEYCNT ); - retval |= m_KEYCNT << 16; - } - break; - case 0x0134/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: RCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_RCNT ); - retval |= m_RCNT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: IR (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0140/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: JOYCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOYCNT ); - retval |= m_JOYCNT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0150/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: JOY_RECV_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOY_RECV & 0x0000ffff ); - retval |= m_JOY_RECV & 0x0000ffff; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: JOY_RECV_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, ( m_JOY_RECV & 0xffff0000 ) >> 16 ); - retval |= m_JOY_RECV & 0xffff0000; - } - break; - case 0x0154/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: JOY_TRANS_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOY_TRANS & 0x0000ffff ); - retval |= m_JOY_TRANS & 0x0000ffff; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: JOY_TRANS_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, ( m_JOY_TRANS & 0xffff0000 ) >> 16 ); - retval |= m_JOY_TRANS & 0xffff0000; - } - break; - case 0x0158/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: JOYSTAT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOYSTAT ); - retval |= m_JOYSTAT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); + retval |= KEYCNT << 16; } break; case 0x0200/4: - if( ACCESSING_BITS_0_15 ) - { -// printf("Read: IE (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_IE ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: IF (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_IF ); - } - - retval = m_IE | (m_IF<<16); - break; - case 0x0204/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: WAITCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_WAITCNT ); - retval |= m_WAITCNT; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0208/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Read: IME (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_IME ); - retval |= m_IME; - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 ); - } - break; - case 0x0300/4: - retval = m_HALTCNT << 8; + retval = IE | (IF << 16); break; default: -// verboselog(*this, 0, "Unknown GBA I/O register Read: %08x (%08x)\n", 0x04000000 + ( offset << 2 ), ~mem_mask ); + if( ACCESSING_BITS_0_15 ) + { + retval |= m_regs[offset] & 0x0000ffff; + } + if( ACCESSING_BITS_16_31 ) + { + retval |= m_regs[offset] & 0xffff0000; + } break; } + +// assert_always(offset < ARRAY_LENGTH(reg_names) / 2, "Not enough register names in gba_state"); + + if (ACCESSING_BITS_0_15) + { + verboselog(*this, 2, "GBA I/O Read: %s = %04x\n", reg_names[offset * 2], retval & 0x0000ffff); + } + if (ACCESSING_BITS_16_31) + { + verboselog(*this, 2, "GBA I/O Read: %s = %04x\n", reg_names[offset * 2 + 1], (retval & 0xffff0000) >> 16); + } + return retval; } WRITE32_MEMBER(gba_state::gba_io_w) { - switch( offset ) + UINT8 soundcnt_x = SOUNDCNT_X; + UINT16 siocnt = SIOCNT; + UINT16 dmachcnt[4] = { DMACNT_H(0), DMACNT_H(1), DMACNT_H(2), DMACNT_H(3) }; + + COMBINE_DATA(&m_regs[offset]); + +// assert_always(offset < ARRAY_LENGTH(reg_names) / 2, "Not enough register names in gba_state"); + + if (ACCESSING_BITS_0_15) + { + verboselog(*this, 2, "GBA I/O Write: %s = %04x\n", reg_names[offset * 2], data & 0x0000ffff); + } + if (ACCESSING_BITS_16_31) + { + verboselog(*this, 2, "GBA I/O Write: %s = %04x\n", reg_names[offset * 2 + 1], (data & 0xffff0000) >> 16); + } + + switch( offset + 0x60/4 ) { - case 0x0000/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: DISPCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_DISPCNT); - if(m_DISPCNT & (DISPCNT_WIN0_EN | DISPCNT_WIN1_EN)) - { - m_windowOn = 1; - } - else - { - m_windowOn = 0; - } - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: Green Swap (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_GRNSWAP = ( m_GRNSWAP & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0004/4: - COMBINE_DATA(&m_DISPSTAT); - break; - case 0x0008/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG0CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG0CNT); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG1CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG1CNT = ( m_BG1CNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x000c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG2CNT); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG3CNT = ( m_BG3CNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0010/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG0HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG0HOFS); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG0VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG0VOFS = ( m_BG0VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0014/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG1HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG1HOFS); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG1VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG1VOFS = ( m_BG1VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0018/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG2HOFS); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG2VOFS = ( m_BG2VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x001c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG3HOFS); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG3VOFS = ( m_BG3VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0020/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2PA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG2PA); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2PB (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG2PB = ( m_BG2PB & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0024/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2PC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG2PC); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2PD (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG2PD = ( m_BG2PD & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0028/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2X_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2X_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - } - COMBINE_DATA(&m_BG2X); - m_gfxBG2Changed |= 1; - break; - case 0x002c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2Y_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG2Y_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - } - COMBINE_DATA(&m_BG2Y); - m_gfxBG2Changed |= 2; - break; - case 0x0030/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3PA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG3PA); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3PB (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG3PB = ( m_BG3PB & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0034/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3PC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BG3PC); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3PD (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BG3PD = ( m_BG3PD & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0038/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3X_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3X_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - } - COMBINE_DATA(&m_BG3X); - m_gfxBG3Changed |= 1; - break; - case 0x003c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3Y_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BG3Y_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - } - COMBINE_DATA(&m_BG3Y); - m_gfxBG3Changed |= 2; - break; - case 0x0040/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: WIN0H (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_WIN0H); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: WIN1H (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_WIN1H = ( m_WIN1H & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0044/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: WIN0V (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_WIN0V); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: WIN1V (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_WIN1V = ( m_WIN1V & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0048/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: WININ (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_WININ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: WINOUT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_WINOUT = ( m_WINOUT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x004c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: MOSAIC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_MOSAIC); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - } - break; - case 0x0050/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BLDCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BLDCNT); - if(m_BLDCNT & BLDCNT_SFX) - { - m_fxOn = 1; - } - else - { - m_fxOn = 0; - } - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: BLDALPHA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - m_BLDALPHA = ( m_BLDALPHA & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0054/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: BLDY (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_BLDY); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - } - break; - case 0x0058/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - } - break; - case 0x005c/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); - } - break; case 0x0060/4: if( ACCESSING_BITS_0_7 ) // SOUNDCNTL { @@ -1390,11 +860,8 @@ WRITE32_MEMBER(gba_state::gba_io_w) if (ACCESSING_BITS_16_31) { - data >>= 16; - m_SOUNDCNT_H = data; - // DAC A reset? - if (data & 0x0800) + if (data & 0x08000000) { m_fifo_a_ptr = 17; m_fifo_a_in = 17; @@ -1403,7 +870,7 @@ WRITE32_MEMBER(gba_state::gba_io_w) } // DAC B reset? - if (data & 0x8000) + if (data & 0x80000000) { m_fifo_b_ptr = 17; m_fifo_b_in = 17; @@ -1416,7 +883,7 @@ WRITE32_MEMBER(gba_state::gba_io_w) if( ACCESSING_BITS_0_7 ) { m_gbsound->sound_w(space, 0x16, data); - if ((data & 0x80) && !(m_SOUNDCNT_X & 0x80)) + if ((data & 0x80) && !(soundcnt_x & 0x80)) { m_fifo_a_ptr = m_fifo_a_in = 17; m_fifo_b_ptr = m_fifo_b_in = 17; @@ -1425,18 +892,6 @@ WRITE32_MEMBER(gba_state::gba_io_w) m_lbdac->write_signed8(0x80); m_rbdac->write_signed8(0x80); } - m_SOUNDCNT_X = data; - } - break; - case 0x0088/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: SOUNDBIAS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask ); - COMBINE_DATA(&m_SOUNDBIAS); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); } break; case 0x0090/4: @@ -1531,61 +986,36 @@ WRITE32_MEMBER(gba_state::gba_io_w) m_fifo_b_in %= 17; m_fifo_b[m_fifo_b_in++] = (data>>24)&0xff; break; - case 0x00b0/4: - case 0x00b4/4: case 0x00b8/4: - - case 0x00bc/4: - case 0x00c0/4: case 0x00c4/4: - - case 0x00c8/4: - case 0x00cc/4: case 0x00d0/4: - - case 0x00d4/4: - case 0x00d8/4: case 0x00dc/4: + if( ACCESSING_BITS_16_31 ) { - int ch; + int ch = (offset + 0x60/4 - 0xb0/4) / 3; - offset -= (0xb0/4); + int ctrl = data>>16; - ch = offset / 3; + // Note: Metroid Fusion fails if we enforce the "rising edge" requirement... (who wrote this note?) -// printf("%08x: DMA(%d): %x to reg %d (mask %08x)\n", space.device().safe_pc(), ch, data, offset%3, ~mem_mask); + // Note: Caesar's Palace Advance fails if we DO NOT enforce the "rising edge" requirement + // (value @ 0x3003F9C is accidentally incremented because DMA completion interrupt is accidentally triggered @ 08002F2A) - if (((offset % 3) == 2) && ((~mem_mask & 0xffff0000) == 0)) + // retrigger/restart on a rising edge. + // also reload internal regs + if ((ctrl & 0x8000) && !(dmachcnt[ch] & 0x8000)) { - int ctrl = data>>16; + m_dma_src[ch] = DMASAD(ch); + m_dma_dst[ch] = DMADAD(ch); + m_dma_cnt[ch] = DMACNT_L(ch); - // Note: Metroid Fusion fails if we enforce the "rising edge" requirement... (who wrote this note?) - - // Note: Caesar's Palace Advance fails if we DO NOT enforce the "rising edge" requirement - // (value @ 0x3003F9C is accidentally incremented because DMA completion interrupt is accidentally triggered @ 08002F2A) - - // retrigger/restart on a rising edge. - // also reload internal regs - if ((ctrl & 0x8000) && !(m_dma_regs[offset] & 0x80000000)) + // immediate start + if ((ctrl & 0x3000) == 0) { - m_dma_src[ch] = m_dma_regs[(ch*3)+0]; - m_dma_dst[ch] = m_dma_regs[(ch*3)+1]; - m_dma_srcadd[ch] = (ctrl>>7)&3; - m_dma_dstadd[ch] = (ctrl>>5)&3; - - COMBINE_DATA(&m_dma_regs[offset]); - m_dma_cnt[ch] = m_dma_regs[(ch*3)+2]&0xffff; - - // immediate start - if ((ctrl & 0x3000) == 0) - { - dma_exec(ch); - return; - } + dma_exec(ch); + return; } } - - COMBINE_DATA(&m_dma_regs[offset]); } break; case 0x0100/4: @@ -1596,18 +1026,18 @@ WRITE32_MEMBER(gba_state::gba_io_w) double rate, clocksel; UINT32 old_timer_regs; - offset -= (0x100/4); + int timer = offset + 0x60/4 - 0x100/4; - old_timer_regs = m_timer_regs[offset]; + old_timer_regs = m_timer_regs[timer]; - m_timer_regs[offset] = (m_timer_regs[offset] & ~(mem_mask & 0xFFFF0000)) | (data & (mem_mask & 0xFFFF0000)); + m_timer_regs[timer] = (m_timer_regs[timer] & ~(mem_mask & 0xFFFF0000)) | (data & (mem_mask & 0xFFFF0000)); -// printf("%x to timer %d (mask %x PC %x)\n", data, offset, ~mem_mask, space.device().safe_pc()); +// printf("%x to timer %d (mask %x PC %x)\n", data, timer, ~mem_mask, space.device().safe_pc()); if (ACCESSING_BITS_0_15) { - m_timer_reload[offset] = ((m_timer_reload[offset] & ~mem_mask) | (data & mem_mask)) & 0x0000FFFF; - m_timer_recalc[offset] = 1; + m_timer_reload[timer] = ((m_timer_reload[timer] & ~mem_mask) | (data & mem_mask)) & 0x0000FFFF; + m_timer_recalc[timer] = 1; } // enabling this timer? @@ -1617,65 +1047,40 @@ WRITE32_MEMBER(gba_state::gba_io_w) if ((old_timer_regs & 0x00800000) == 0) // start bit 0 -> 1 { - m_timer_regs[offset] = (m_timer_regs[offset] & 0xFFFF0000) | (m_timer_reload[offset] & 0x0000FFFF); + m_timer_regs[timer] = (m_timer_regs[timer] & 0xFFFF0000) | (m_timer_reload[timer] & 0x0000FFFF); } - rate = 0x10000 - (m_timer_regs[offset] & 0xffff); + rate = 0x10000 - (m_timer_regs[timer] & 0xffff); - clocksel = timer_clks[(m_timer_regs[offset] >> 16) & 3]; + clocksel = timer_clks[(m_timer_regs[timer] >> 16) & 3]; final = clocksel / rate; - m_timer_hz[offset] = final; + m_timer_hz[timer] = final; - m_timer_recalc[offset] = 0; + m_timer_recalc[timer] = 0; -// printf("Enabling timer %d @ %f Hz\n", offset, final); +// printf("Enabling timer %d @ %f Hz\n", timer, final); // enable the timer if( !(data & 0x40000) ) // if we're not in Count-Up mode { attotime time = attotime::from_hz(final); - m_tmr_timer[offset]->adjust(time, offset, time); + m_tmr_timer[timer]->adjust(time, timer, time); } } } break; - case 0x0120/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: SIOMULTI0 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_SIOMULTI0); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: SIOMULTI1 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - m_SIOMULTI1 = ( m_SIOMULTI1 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0124/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: SIOMULTI2 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_SIOMULTI2); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: SIOMULTI3 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - m_SIOMULTI3 = ( m_SIOMULTI3 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; case 0x0128/4: if( ACCESSING_BITS_0_15 ) { - verboselog(*this, 2, "GBA IO Register Write: SIOCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); // normal mode ? - if (((m_RCNT & 0x8000) == 0) && ((data & 0x2000) == 0)) + if (!(RCNT & 0x8000) && !(data & 0x2000)) { // start ? - if (((m_SIOCNT & 0x0080) == 0) && ((data & 0x0080) != 0)) + if (!(siocnt & 0x0080) && (data & 0x0080)) { - data &= ~0x0080; + SIOCNT_RESET(0x0080); // request interrupt ? if (data & 0x4000) { @@ -1683,199 +1088,48 @@ WRITE32_MEMBER(gba_state::gba_io_w) } } } - COMBINE_DATA(&m_SIOCNT); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: SIODATA8 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - m_SIODATA8 = ( m_SIODATA8 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0130/4: - if( ACCESSING_BITS_16_31 ) - { -// printf("KEYCNT = %04x\n", data>>16); - verboselog(*this, 2, "GBA IO Register Write: KEYCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - m_KEYCNT = ( m_KEYCNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0134/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: RCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_RCNT); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: IR (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - m_IR = ( m_IR & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0140/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: JOYCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_JOYCNT); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - } - break; - case 0x0150/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: JOY_RECV_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_JOY_RECV); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: JOY_RECV_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - m_JOY_RECV = ( m_JOY_RECV & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0154/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: JOY_TRANS_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_JOY_TRANS); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: JOY_TRANS_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - m_JOY_TRANS = ( m_JOY_TRANS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 ); - } - break; - case 0x0158/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: JOYSTAT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_JOYSTAT); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); } break; case 0x0200/4: if( ACCESSING_BITS_0_15 ) { -// printf("IE (%08x) = %04x raw %x (%08x) (scan %d PC %x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, data, ~mem_mask, machine.first_screen()->vpos(), space.device().safe_pc()); - COMBINE_DATA(&m_IE); #if 0 - if (m_IE & m_IF) + if (IE & IF) { - request_irq(m_IF); + request_irq(IF); } #endif } if( ACCESSING_BITS_16_31 ) { - verboselog(*this, 2, "GBA IO Register Write: IF (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ) + 2, ( data & mem_mask ) >> 16, ~mem_mask ); - m_IF &= ~( ( data & mem_mask ) >> 16 ); + IF_RESET(( data & mem_mask ) >> 16); // if we still have interrupts, yank the IRQ line again - if (m_IF) + if (IF) { m_irq_timer->adjust(m_maincpu->clocks_to_attotime(120)); } } break; - case 0x0204/4: - if( ACCESSING_BITS_0_15 ) - { - verboselog(*this, 2, "GBA IO Register Write: WAITCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_WAITCNT); - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - } - break; case 0x0208/4: if( ACCESSING_BITS_0_15 ) { - verboselog(*this, 3, "GBA IO Register Write: IME (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask ); - COMBINE_DATA(&m_IME); - if (m_IF) + if (IF) { m_irq_timer->adjust(attotime::zero); } } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 3, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask ); - } break; case 0x0300/4: - if( ACCESSING_BITS_0_15 ) + if( ACCESSING_BITS_8_15 ) { - if( ACCESSING_BITS_0_7 ) - { - verboselog(*this, 2, "GBA IO Register Write: POSTFLG (%08x) = %02x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x000000ff, ~mem_mask ); - m_POSTFLG = data & 0x000000ff; - } - else - { - m_HALTCNT = data & 0x000000ff; - - // either way, wait for an IRQ - m_maincpu->spin_until_interrupt(); - } - } - if( ACCESSING_BITS_16_31 ) - { - verboselog(*this, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask ); + // power down commanded, halt the CPU + m_maincpu->spin_until_interrupt(); } break; - default: -// verboselog(machine, 0, "Unknown GBA I/O register write: %08x = %08x (%08x)\n", 0x04000000 + ( offset << 2 ), data, ~mem_mask ); - break; } } -static inline UINT32 COMBINE_DATA32_16(UINT32 prev, UINT32 data, UINT32 mem_mask) -{ - COMBINE_DATA(&prev); - switch(mem_mask) - { - case 0x000000ff: - prev &= 0xffff00ff; - prev |= data << 8; - break; - case 0x0000ff00: - prev &= 0xffffff00; - prev |= data >> 8; - break; - case 0x00ff0000: - prev &= 0x00ffffff; - prev |= data << 8; - break; - case 0xff000000: - prev &= 0xff00ffff; - prev |= data >> 8; - break; - default: - break; - } - return prev; -} - -WRITE32_MEMBER(gba_state::gba_pram_w) -{ - m_gba_pram[offset] = COMBINE_DATA32_16(m_gba_pram[offset], data, mem_mask); -} - -WRITE32_MEMBER(gba_state::gba_vram_w) -{ - m_gba_vram[offset] = COMBINE_DATA32_16(m_gba_vram[offset], data, mem_mask); -} - -WRITE32_MEMBER(gba_state::gba_oam_w) -{ - m_gba_oam[offset] = COMBINE_DATA32_16(m_gba_oam[offset], data, mem_mask); -} - READ32_MEMBER(gba_state::gba_bios_r) { UINT32 *rom = m_region_maincpu; @@ -1911,15 +1165,55 @@ READ32_MEMBER(gba_state::gba_10000000_r) return data; } +WRITE_LINE_MEMBER(gba_state::int_hblank_callback) +{ + request_irq(INT_HBL); +} + +WRITE_LINE_MEMBER(gba_state::int_vblank_callback) +{ + request_irq(INT_VBL); +} + +WRITE_LINE_MEMBER(gba_state::int_vcount_callback) +{ + request_irq(INT_VCNT); +} + +WRITE_LINE_MEMBER(gba_state::dma_hblank_callback) +{ + for (int ch = 0; ch < 4; ch++) + { + int ctrl = DMACNT_H(ch); + + if ((ctrl & 0x8000) && ((ctrl & 0x3000) == 0x2000)) + dma_exec(ch); + } +} + +WRITE_LINE_MEMBER(gba_state::dma_vblank_callback) +{ + for (int ch = 0; ch < 4; ch++) + { + int ctrl = DMACNT_H(ch); + + if ((ctrl & 0x8000) && ((ctrl & 0x3000) == 0x1000)) + dma_exec(ch); + } +} + static ADDRESS_MAP_START( gba_map, AS_PROGRAM, 32, gba_state ) ADDRESS_MAP_UNMAP_HIGH // for "Fruit Mura no Doubutsu Tachi" and "Classic NES Series" AM_RANGE(0x00000000, 0x00003fff) AM_ROM AM_READ(gba_bios_r) AM_RANGE(0x02000000, 0x0203ffff) AM_RAM AM_MIRROR(0xfc0000) AM_RANGE(0x03000000, 0x03007fff) AM_RAM AM_MIRROR(0xff8000) - AM_RANGE(0x04000000, 0x040003ff) AM_READWRITE(gba_io_r, gba_io_w) - AM_RANGE(0x05000000, 0x050003ff) AM_RAM_WRITE(gba_pram_w) AM_SHARE("gba_pram") // Palette RAM - AM_RANGE(0x06000000, 0x06017fff) AM_RAM_WRITE(gba_vram_w) AM_SHARE("gba_vram") // VRAM - AM_RANGE(0x07000000, 0x070003ff) AM_RAM_WRITE(gba_oam_w) AM_SHARE("gba_oam") // OAM + AM_RANGE(0x04000000, 0x0400005f) AM_DEVREADWRITE("lcd", gba_lcd_device, video_r, video_w) + AM_RANGE(0x04000060, 0x040003ff) AM_READWRITE(gba_io_r, gba_io_w) + AM_RANGE(0x04000400, 0x04ffffff) AM_NOP // Not used + AM_RANGE(0x05000000, 0x050003ff) AM_DEVREADWRITE("lcd", gba_lcd_device, gba_pram_r, gba_pram_w) // Palette RAM + AM_RANGE(0x06000000, 0x06017fff) AM_DEVREADWRITE("lcd", gba_lcd_device, gba_vram_r, gba_vram_w) // VRAM + AM_RANGE(0x07000000, 0x070003ff) AM_DEVREADWRITE("lcd", gba_lcd_device, gba_oam_r, gba_oam_w) // OAM + AM_RANGE(0x07000400, 0x07ffffff) AM_NOP // Not used //AM_RANGE(0x08000000, 0x0cffffff) // cart ROM + mirrors, mapped here at machine_start if a cart is present AM_RANGE(0x10000000, 0xffffffff) AM_READ(gba_10000000_r) // for "Justice League Chronicles" (game bug) ADDRESS_MAP_END @@ -1945,118 +1239,21 @@ static INPUT_PORTS_START( gbadv ) INPUT_PORTS_END -TIMER_CALLBACK_MEMBER(gba_state::perform_hbl) -{ - int ch, ctrl; - int scanline = machine().first_screen()->vpos(); - - // draw only visible scanlines - if (scanline < 160) - { - draw_scanline(scanline); - - for (ch = 0; ch < 4; ch++) - { - ctrl = m_dma_regs[(ch*3)+2]>>16; - - // HBL-triggered DMA? - if ((ctrl & 0x8000) && ((ctrl & 0x3000) == 0x2000)) - { - dma_exec(ch); - } - } - } - - if ((m_DISPSTAT & DISPSTAT_HBL_IRQ_EN ) != 0) - { - request_irq(INT_HBL); - } - - m_DISPSTAT |= DISPSTAT_HBL; - - m_hbl_timer->adjust(attotime::never); -} - -TIMER_CALLBACK_MEMBER(gba_state::perform_scan) -{ - int scanline; - - // clear hblank and raster IRQ flags - m_DISPSTAT &= ~(DISPSTAT_HBL|DISPSTAT_VCNT); - - scanline = machine().first_screen()->vpos(); - - // VBL is set for scanlines 160 through 226 (but not 227, which is the last line) - if (scanline >= 160 && scanline < 227) - { - m_DISPSTAT |= DISPSTAT_VBL; - - // VBL IRQ and DMA on line 160 - if (scanline == 160) - { - int ch, ctrl; - - if (m_DISPSTAT & DISPSTAT_VBL_IRQ_EN) - { - request_irq(INT_VBL); - } - - for (ch = 0; ch < 4; ch++) - { - ctrl = m_dma_regs[(ch*3)+2]>>16; - - // VBL-triggered DMA? - if ((ctrl & 0x8000) && ((ctrl & 0x3000) == 0x1000)) - { - dma_exec(ch); - } - } - } - } - else - { - m_DISPSTAT &= ~DISPSTAT_VBL; - } - - // handle VCNT match interrupt/flag - if (scanline == ((m_DISPSTAT >> 8) & 0xff)) - { - m_DISPSTAT |= DISPSTAT_VCNT; - if (m_DISPSTAT & DISPSTAT_VCNT_IRQ_EN) - { - request_irq(INT_VCNT); - } - } - - m_hbl_timer->adjust(machine().first_screen()->time_until_pos(scanline, 240)); - m_scan_timer->adjust(machine().first_screen()->time_until_pos(( scanline + 1 ) % 228, 0)); -} - void gba_state::machine_reset() { - //memset(this, 0, sizeof(this)); - m_SOUNDBIAS = 0x0200; - m_SIOMULTI0 = 0xffff; - m_SIOMULTI1 = 0xffff; - m_SIOMULTI2 = 0xffff; - m_SIOMULTI3 = 0xffff; - m_KEYCNT = 0x03ff; - m_RCNT = 0x8000; - m_JOYSTAT = 0x0002; - m_gfxBG2Changed = 0; - m_gfxBG3Changed = 0; - m_gfxBG2X = 0; - m_gfxBG2Y = 0; - m_gfxBG3X = 0; - m_gfxBG3Y = 0; + memset(m_regs, 0, sizeof(m_regs)); - m_windowOn = 0; - m_fxOn = 0; + SOUNDBIAS_SET(0x0200); + SIOMULTI0_SET(0xffff); + SIOMULTI1_SET(0xffff); + SIOMULTI2_SET(0xffff); + SIOMULTI3_SET(0xffff); + KEYCNT_SET(0x03ff); + RCNT_SET(0x8000); + JOYSTAT_SET(0x0002); m_bios_protected = 0; - m_scan_timer->adjust(machine().first_screen()->time_until_pos(0, 0)); - m_hbl_timer->adjust(attotime::never); m_dma_timer[0]->adjust(attotime::never); m_dma_timer[1]->adjust(attotime::never, 1); m_dma_timer[2]->adjust(attotime::never, 2); @@ -2074,11 +1271,6 @@ void gba_state::machine_reset() void gba_state::machine_start() { - /* create a timer to fire scanline functions */ - m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::perform_scan),this)); - m_hbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::perform_hbl),this)); - m_scan_timer->adjust(machine().first_screen()->time_until_pos(0, 0)); - /* and one for each DMA channel */ m_dma_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::dma_complete),this)); m_dma_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::dma_complete),this)); @@ -2165,79 +1357,10 @@ void gba_state::machine_start() } - save_item(NAME(m_DISPSTAT)); - save_item(NAME(m_BG2X)); - save_item(NAME(m_BG2Y)); - save_item(NAME(m_BG3X)); - save_item(NAME(m_BG3Y)); - save_item(NAME(m_DISPCNT)); - save_item(NAME(m_GRNSWAP)); - save_item(NAME(m_BG0CNT)); - save_item(NAME(m_BG1CNT)); - save_item(NAME(m_BG2CNT)); - save_item(NAME(m_BG3CNT)); - save_item(NAME(m_BG0HOFS)); - save_item(NAME(m_BG0VOFS)); - save_item(NAME(m_BG1HOFS)); - save_item(NAME(m_BG1VOFS)); - save_item(NAME(m_BG2HOFS)); - save_item(NAME(m_BG2VOFS)); - save_item(NAME(m_BG3HOFS)); - save_item(NAME(m_BG3VOFS)); - save_item(NAME(m_BG2PA)); - save_item(NAME(m_BG2PB)); - save_item(NAME(m_BG2PC)); - save_item(NAME(m_BG2PD)); - save_item(NAME(m_BG3PA)); - save_item(NAME(m_BG3PB)); - save_item(NAME(m_BG3PC)); - save_item(NAME(m_BG3PD)); - save_item(NAME(m_WIN0H)); - save_item(NAME(m_WIN1H)); - save_item(NAME(m_WIN0V)); - save_item(NAME(m_WIN1V)); - save_item(NAME(m_WININ)); - save_item(NAME(m_WINOUT)); - save_item(NAME(m_MOSAIC)); - save_item(NAME(m_BLDCNT)); - save_item(NAME(m_BLDALPHA)); - save_item(NAME(m_BLDY)); - save_item(NAME(m_SOUNDCNT_X)); - save_item(NAME(m_SOUNDCNT_H)); - save_item(NAME(m_SOUNDBIAS)); - save_item(NAME(m_SIOMULTI0)); - save_item(NAME(m_SIOMULTI1)); - save_item(NAME(m_SIOMULTI2)); - save_item(NAME(m_SIOMULTI3)); - save_item(NAME(m_SIOCNT)); - save_item(NAME(m_SIODATA8)); - save_item(NAME(m_KEYCNT)); - save_item(NAME(m_RCNT)); - save_item(NAME(m_JOYCNT)); - save_item(NAME(m_JOY_RECV)); - save_item(NAME(m_JOY_TRANS)); - save_item(NAME(m_JOYSTAT)); - save_item(NAME(m_IR)); - save_item(NAME(m_IE)); - save_item(NAME(m_IF)); - save_item(NAME(m_IME)); - save_item(NAME(m_WAITCNT)); - save_item(NAME(m_POSTFLG)); - save_item(NAME(m_HALTCNT)); - save_item(NAME(m_windowOn)); - save_item(NAME(m_fxOn)); - save_item(NAME(m_gfxBG2Changed)); - save_item(NAME(m_gfxBG3Changed)); - save_item(NAME(m_gfxBG2X)); - save_item(NAME(m_gfxBG2Y)); - save_item(NAME(m_gfxBG3X)); - save_item(NAME(m_gfxBG3Y)); - save_item(NAME(m_dma_regs)); + save_pointer(NAME(m_regs), sizeof(m_regs)); save_item(NAME(m_dma_src)); save_item(NAME(m_dma_dst)); save_item(NAME(m_dma_cnt)); - save_item(NAME(m_dma_srcadd)); - save_item(NAME(m_dma_dstadd)); save_item(NAME(m_timer_regs)); save_item(NAME(m_timer_reload)); save_item(NAME(m_timer_recalc)); @@ -2248,13 +1371,11 @@ void gba_state::machine_start() save_item(NAME(m_fifo_b_in)); save_item(NAME(m_fifo_a)); save_item(NAME(m_fifo_b)); - save_item(NAME(m_xferscan)); save_item(NAME(m_bios_last_address)); save_item(NAME(m_bios_protected)); } - static SLOT_INTERFACE_START(gba_cart) SLOT_INTERFACE_INTERNAL("gba_rom", GBA_ROM_STD) SLOT_INTERFACE_INTERNAL("gba_sram", GBA_ROM_SRAM) @@ -2276,17 +1397,15 @@ SLOT_INTERFACE_END static MACHINE_CONFIG_START( gbadv, gba_state ) - MCFG_CPU_ADD("maincpu", ARM7, 16777216) + MCFG_CPU_ADD("maincpu", ARM7, XTAL_16_777216MHz) MCFG_CPU_PROGRAM_MAP(gba_map) - MCFG_SCREEN_ADD("gbalcd", RASTER) // htot hst vwid vtot vst vis - MCFG_SCREEN_RAW_PARAMS(16777216/4, 308, 0, 240, 228, 0, 160) - MCFG_SCREEN_UPDATE_DRIVER(gba_state, screen_update) - MCFG_SCREEN_PALETTE("palette") - - MCFG_DEFAULT_LAYOUT(layout_lcd) - MCFG_PALETTE_ADD("palette", 32768) - MCFG_PALETTE_INIT_OWNER(gba_state, gba) + MCFG_GBA_LCD_ADD("lcd") + MCFG_GBA_LCD_INT_HBLANK(WRITELINE(gba_state, int_hblank_callback)) + MCFG_GBA_LCD_INT_VBLANK(WRITELINE(gba_state, int_vblank_callback)) + MCFG_GBA_LCD_INT_VCOUNT(WRITELINE(gba_state, int_vcount_callback)) + MCFG_GBA_LCD_DMA_HBLANK(WRITELINE(gba_state, dma_hblank_callback)) + MCFG_GBA_LCD_DMA_VBLANK(WRITELINE(gba_state, dma_vblank_callback)) MCFG_SPEAKER_STANDARD_STEREO("spkleft", "spkright") MCFG_SOUND_ADD("custom", GAMEBOY, 0) @@ -2306,14 +1425,12 @@ static MACHINE_CONFIG_START( gbadv, gba_state ) MACHINE_CONFIG_END - ROM_START( gba ) ROM_REGION( 0x4000, "maincpu", 0 ) ROM_LOAD( "gba.bin", 0x000000, 0x004000, CRC(81977335) SHA1(300c20df6731a33952ded8c436f7f186d25d3492) ) ROM_END - // this emulates the GBA's hardware protection: the BIOS returns only zeros when the PC is not in it, // and some games verify that as a protection check (notably Metroid Fusion) DIRECT_UPDATE_MEMBER(gba_state::gba_direct) diff --git a/src/mame/drivers/gizmondo.cpp b/src/mame/drivers/gizmondo.cpp index ed39f36a293..a520c72fc7f 100644 --- a/src/mame/drivers/gizmondo.cpp +++ b/src/mame/drivers/gizmondo.cpp @@ -39,7 +39,6 @@ SYSINTR_GPS = INT_EINT3, INT_EINT8_23 (EINT18) #define VERBOSE_LEVEL ( 0 ) -#define BIT(x,n) (((x)>>(n))&1) #define BITS(x,m,n) (((x)>>(n))&(((UINT32)1<<((m)-(n)+1))-1)) class gizmondo_state : public driver_device diff --git a/src/mame/drivers/gp32.cpp b/src/mame/drivers/gp32.cpp index f7c4c1c2f4c..0addf2d91c2 100644 --- a/src/mame/drivers/gp32.cpp +++ b/src/mame/drivers/gp32.cpp @@ -43,7 +43,6 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t &device, int n_level, co #define MPLLCON 1 #define UPLLCON 2 -#define BIT(x,n) (((x)>>(n))&1) #define BITS(x,m,n) (((x)>>(n))&((1<<((m)-(n)+1))-1)) diff --git a/src/mame/drivers/gts3.cpp b/src/mame/drivers/gts3.cpp index e47488d3952..8c093ecc786 100644 --- a/src/mame/drivers/gts3.cpp +++ b/src/mame/drivers/gts3.cpp @@ -229,7 +229,7 @@ WRITE8_MEMBER( gts3_state::u4b_w ) bool clk_bit = BIT(data, 6); if ((!m_dispclk) && clk_bit) // 0->1 is valid { - if BIT(data, 5) + if (BIT(data, 5)) m_digit = 0; else m_digit++; @@ -239,7 +239,7 @@ WRITE8_MEMBER( gts3_state::u4b_w ) clk_bit = BIT(data, 1); if ((!m_lampclk) && clk_bit) // 0->1 is valid { - if BIT(data, 0) + if (BIT(data, 0)) m_row = 0; else m_row++; diff --git a/src/mame/drivers/gts3a.cpp b/src/mame/drivers/gts3a.cpp index dba72606856..ab0c5fbea0c 100644 --- a/src/mame/drivers/gts3a.cpp +++ b/src/mame/drivers/gts3a.cpp @@ -238,7 +238,7 @@ WRITE8_MEMBER( gts3a_state::u4b_w ) bool clk_bit = BIT(data, 6); if ((!m_dispclk) && clk_bit) // 0->1 is valid { - if BIT(data, 5) + if (BIT(data, 5)) m_digit = 0; else m_digit++; @@ -248,7 +248,7 @@ WRITE8_MEMBER( gts3a_state::u4b_w ) clk_bit = BIT(data, 1); if ((!m_lampclk) && clk_bit) // 0->1 is valid { - if BIT(data, 0) + if (BIT(data, 0)) m_row = 0; else m_row++; diff --git a/src/mame/drivers/gts80b.cpp b/src/mame/drivers/gts80b.cpp index 28914a300c4..2e3fe4b92f9 100644 --- a/src/mame/drivers/gts80b.cpp +++ b/src/mame/drivers/gts80b.cpp @@ -302,9 +302,9 @@ WRITE8_MEMBER( gts80b_state::port1b_w ) WRITE8_MEMBER( gts80b_state::port2a_w ) { m_port2a = data; - if BIT(data, 4) + if (BIT(data, 4)) m_dispcmd = (m_dispcmd & 0xf0) | m_port2b; - if BIT(data, 5) + if (BIT(data, 5)) m_dispcmd = (m_dispcmd & 0x0f) | (m_port2b << 4); } diff --git a/src/mame/drivers/hankin.cpp b/src/mame/drivers/hankin.cpp index 35c2f26a2a1..069a85c049c 100644 --- a/src/mame/drivers/hankin.cpp +++ b/src/mame/drivers/hankin.cpp @@ -255,22 +255,17 @@ WRITE8_MEMBER( hankin_state::ic10_a_w ) if (!m_ic11_ca2) { - if BIT(data, 2) + if (BIT(data, 2)) m_digit = 5; - else - if BIT(data, 3) + else if (BIT(data, 3)) m_digit = 4; - else - if BIT(data, 4) + else if (BIT(data, 4)) m_digit = 3; - else - if BIT(data, 5) + else if (BIT(data, 5)) m_digit = 2; - else - if BIT(data, 6) + else if (BIT(data, 6)) m_digit = 1; - else - if BIT(data, 7) + else if (BIT(data, 7)) m_digit = 0; // This machine has a 10-segment display, however the only diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp index 45e3f433897..45a5a79500b 100644 --- a/src/mame/drivers/hh_hmcs40.cpp +++ b/src/mame/drivers/hh_hmcs40.cpp @@ -19,9 +19,9 @@ @04 HD38800A 1980, Gakken Heiankyo Alien @25 HD38800A 1981, Coleco Alien Attack @27 HD38800A 1981, Bandai Packri Monster - *31 HD38800A 1981, Entex Select-a-Game cartridge: Space Invader 2 (have dump) - *37 HD38800A 1981, Entex Select-a-Game cartridge: Baseball 4 (have dump) - *38 HD38800A 1981, Entex Select-a-Game cartridge: Pinball (have dump) + @31 HD38800A 1981, Entex Select-a-Game cartridge: Space Invader 2 + @37 HD38800A 1981, Entex Select-a-Game cartridge: Baseball 4 + @38 HD38800A 1981, Entex Select-a-Game cartridge: Pinball *41 HD38800A 1982, Gakken Puck Monster *51 HD38800A 1981, Actronics(Hanzawa) Twinvader (larger white version) @70 HD38800A 1982, Coleco Galaxian @@ -92,6 +92,7 @@ // internal artwork #include "pairmtch.lh" +#include "sag.lh" #include "hh_hmcs40_test.lh" // common test-layout - no svg artwork(yet), use external artwork @@ -147,6 +148,7 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); void display_update(); void set_display_size(int maxx, int maxy); + void set_display_segmask(UINT32 digits, UINT32 mask); void display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety, bool update = true); protected: @@ -276,6 +278,17 @@ void hh_hmcs40_state::set_display_size(int maxx, int maxy) m_display_maxy = maxy; } +void hh_hmcs40_state::set_display_segmask(UINT32 digits, UINT32 mask) +{ + // set a segment mask per selected digit, but leave unselected ones alone + for (int i = 0; i < 0x20; i++) + { + if (digits & 1) + m_display_segmask[i] = mask; + digits >>= 1; + } +} + void hh_hmcs40_state::display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety, bool update) { set_display_size(maxx, maxy); @@ -2503,6 +2516,146 @@ MACHINE_CONFIG_END +/*************************************************************************** + + Entex Select-A-Game (HMCS40 MCU cartridges) + * see gamelist for cartridge info + * cyan/red VFD display Futaba DM-16Z + cyan VFD 9-digit panel Futaba 9-ST-11A 1F + + The console is the peripheral, the heart of the system is the cartridge. + Cartridges with a HMCS40 MCU are implemented in this driver. + + MAME external artwork is recommended, needed for per-game VFD overlays. + +***************************************************************************/ + +class sag_state : public hh_hmcs40_state +{ +public: + sag_state(const machine_config &mconfig, device_type type, const char *tag) + : hh_hmcs40_state(mconfig, type, tag) + { } + + void prepare_display(); + DECLARE_WRITE8_MEMBER(plate_w); + DECLARE_WRITE16_MEMBER(grid_w); + DECLARE_READ16_MEMBER(input_r); +}; + +// handlers + +void sag_state::prepare_display() +{ + // grid 0-7 are the 'pixels' + for (int y = 0; y < 8; y++) + m_display_state[y] = (m_grid >> y & 1) ? m_plate : 0; + + // grid 8-11 are 7segs + set_display_segmask(0xf00, 0x7f); + UINT8 seg = BITSWAP8(m_plate,3,4,5,6,7,8,9,10); + for (int y = 8; y < 12; y++) + m_display_state[y] = (m_grid >> y & 1) ? seg : 0; + + set_display_size(14, 12); + display_update(); +} + +WRITE8_MEMBER(sag_state::plate_w) +{ + // R0x-R3x: vfd matrix plate + int shift = offset * 4; + m_plate = (m_plate & ~(0xf << shift)) | (data << shift); + prepare_display(); +} + +WRITE16_MEMBER(sag_state::grid_w) +{ + // D0: speaker out + m_speaker->level_w(data & 1); + + // D2-D7: input mux + m_inp_mux = data >> 2 & 0x3f; + + // D1-D12: vfd matrix grid + m_grid = data >> 1 & 0xfff; + prepare_display(); +} + +READ16_MEMBER(sag_state::input_r) +{ + // D13-D15: multiplexed inputs + return read_inputs(6) << 13; +} + + +// config + +static INPUT_PORTS_START( sag ) + PORT_START("IN.0") // D2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY PORT_NAME("P1 Button 1") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 3") + PORT_CONFNAME( 0x04, 0x04, "Game" ) + PORT_CONFSETTING( 0x04, "1" ) + PORT_CONFSETTING( 0x00, "2" ) + + PORT_START("IN.1") // D3 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY PORT_NAME("P1 Button 2") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 4") + PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("DPLAYSW", 0x03, EQUALS, 0x01) // 1 player + + PORT_START("IN.2") // D4 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY PORT_NAME("P1 Button 3") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 1") + PORT_CONFNAME( 0x04, 0x00, "Skill Level" ) + PORT_CONFSETTING( 0x00, "1" ) + PORT_CONFSETTING( 0x04, "2" ) + + PORT_START("IN.3") // D5 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY PORT_NAME("P1 Button 4") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL PORT_16WAY PORT_NAME("P2 Button 2") + PORT_BIT( 0x04, 0x04, IPT_SPECIAL ) PORT_CONDITION("DPLAYSW", 0x03, EQUALS, 0x00) // demo + + PORT_START("IN.4") // D6 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Button 5") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL PORT_NAME("P2 Button 5") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Button 7") + + PORT_START("IN.5") // D7 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Button 6") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_NAME("P2 Button 6") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_NAME("P2 Button 7") + + PORT_START("DPLAYSW") // shared D3/D5 + PORT_CONFNAME( 0x03, 0x01, "Players" ) + PORT_CONFSETTING( 0x00, "Demo" ) + PORT_CONFSETTING( 0x01, "1" ) + PORT_CONFSETTING( 0x02, "2" ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( sag, sag_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", HD38800, 450000) // approximation + MCFG_HMCS40_WRITE_R_CB(0, WRITE8(sag_state, plate_w)) + MCFG_HMCS40_WRITE_R_CB(1, WRITE8(sag_state, plate_w)) + MCFG_HMCS40_WRITE_R_CB(2, WRITE8(sag_state, plate_w)) + MCFG_HMCS40_WRITE_R_CB(3, WRITE8(sag_state, plate_w)) + MCFG_HMCS40_WRITE_D_CB(WRITE16(sag_state, grid_w)) + MCFG_HMCS40_READ_D_CB(READ16(sag_state, input_r)) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_sag) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + + + /*************************************************************************** Entex Galaxian 2 (manufactured in Japan) @@ -4145,6 +4298,27 @@ ROM_START( cmspacmn ) ROM_END +ROM_START( sag_si2 ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "inv2_hd38800a31", 0x0000, 0x1000, BAD_DUMP CRC(29c8c100) SHA1(41cd413065659c6d7d5b2408de2ca6d51c49629a) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) +ROM_END + + +ROM_START( sag_bb4 ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "b-b5_hd38800a37", 0x0000, 0x1000, CRC(64852bd5) SHA1(fb1c24ca43934ceb6fc35ac7c35b71e6e843dbc5) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) +ROM_END + + +ROM_START( sag_pb ) + ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "pinb_hd38800a38", 0x0000, 0x1000, CRC(6e53a56b) SHA1(13f057eab2e4cfbb3ef1247a041abff15ae727c9) ) + ROM_CONTINUE( 0x1e80, 0x0100 ) +ROM_END + + ROM_START( egalaxn2 ) ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "hd38820a13", 0x0000, 0x1000, CRC(112b721b) SHA1(4a185bc57ea03fe64f61f7db4da37b16eeb0cb54) ) @@ -4304,6 +4478,9 @@ CONS( 1981, cpacman, 0, 0, cpacman, cpacman, driver_device, 0, "Colec CONS( 1981, cpacmanr1, cpacman, 0, cpacman, cpacman, driver_device, 0, "Coleco", "Pac-Man (Coleco, Rev. 28)", MACHINE_SUPPORTS_SAVE ) CONS( 1983, cmspacmn, 0, 0, cmspacmn, cmspacmn, driver_device, 0, "Coleco", "Ms. Pac-Man (Coleco)", MACHINE_SUPPORTS_SAVE ) +CONS( 1981, sag_si2, 0, 0, sag, sag, driver_device, 0, "Entex", "Select-A-Game: Space Invader 2", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING ) // suspect bad dump +CONS( 1981, sag_bb4, 0, 0, sag, sag, driver_device, 0, "Entex", "Select-A-Game: Baseball 4", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) +CONS( 1981, sag_pb, 0, 0, sag, sag, driver_device, 0, "Entex", "Select-A-Game: Pinball", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1981, egalaxn2, 0, 0, egalaxn2, egalaxn2, driver_device, 0, "Entex", "Galaxian 2 (Entex)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, epacman2, 0, 0, epacman2, epacman2, driver_device, 0, "Entex", "Pac Man 2 (Entex, cyan Pacman)", MACHINE_SUPPORTS_SAVE ) CONS( 1981, epacman2r, epacman2, 0, epacman2, epacman2, driver_device, 0, "Entex", "Pac Man 2 (Entex, red Pacman)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/hp9845.cpp b/src/mame/drivers/hp9845.cpp index c4f00df97b1..c3f25382182 100644 --- a/src/mame/drivers/hp9845.cpp +++ b/src/mame/drivers/hp9845.cpp @@ -21,11 +21,11 @@ // - T15 tape drive // - Software list to load optional ROMs // - Beeper +// - Correct character generator ROMs (a huge "thank you" to Ansgar Kueckes for the dumps!) // What's not yet in: // - Better naming of tape drive image (it's now "magt", should be "t15") // - Better documentation of this file // What's wrong: -// - I'm using character generator from HP64K (another driver of mine): no known dump of the original one // - Speed, as usual #include "emu.h" @@ -171,6 +171,9 @@ private: // Character generator const UINT8 *m_chargen; + // Optional character generator + const UINT8 *m_optional_chargen; + // Text mode video I/F typedef struct { UINT8 chars[ 80 ]; @@ -394,6 +397,8 @@ void hp9845b_state::machine_start() m_chargen = memregion("chargen")->base(); + m_optional_chargen = memregion("optional_chargen")->base(); + m_graphic_mem.resize(GVIDEO_MEM_SIZE); } @@ -517,21 +522,18 @@ void hp9845b_state::video_render_buff(unsigned video_scanline , unsigned line_in for (unsigned i = 0; i < 80; i++) { UINT8 charcode = m_video_buff[ buff_idx ].chars[ i ]; UINT8 attrs = m_video_buff[ buff_idx ].attrs[ i ]; - UINT8 chargen_byte = m_chargen[ line_in_row | ((unsigned)charcode << 4) ]; + UINT16 chrgen_addr = ((UINT16)(charcode ^ 0x7f) << 4) | line_in_row; UINT16 pixels; - // TODO: Check if order of bits in "pixels" is ok - if ((ul_line && BIT(attrs , 3)) || (cursor_line && cursor_blink && BIT(attrs , 0))) { pixels = ~0; } else if (char_blink && BIT(attrs , 2)) { pixels = 0; } else if (BIT(attrs , 4)) { - // Optional character generator ROM not installed, it reads as 1 everywhere - pixels = 0x7f << 1; + pixels = (UINT16)(m_optional_chargen[ chrgen_addr ] & 0x7f) << 1; } else { - pixels = (UINT16)(chargen_byte & 0x7f) << 1; + pixels = (UINT16)(m_chargen[ chrgen_addr ] & 0x7f) << 1; } if (BIT(attrs , 1)) { @@ -539,7 +541,7 @@ void hp9845b_state::video_render_buff(unsigned video_scanline , unsigned line_in } for (unsigned j = 0; j < 9; j++) { - bool pixel = (pixels & (1U << (8 - j))) != 0; + bool pixel = (pixels & (1U << j)) != 0; m_bitmap.pix32(video_scanline , i * 9 + j) = pen[ pixel ? 1 : 0 ]; } @@ -1220,8 +1222,10 @@ ROM_END ROM_START( hp9845b ) ROM_REGION(0x800 , "chargen" , 0) - // Don't have the real character generator from HP9845, use the one from HP64000 for now - ROM_LOAD("1818_2668.bin" , 0 , 0x800 , BAD_DUMP CRC(32a52664) SHA1(8b2a49a32510103ff424e8481d5ed9887f609f2f)) + ROM_LOAD("chrgen.bin" , 0 , 0x800 , CRC(fe9e844f) SHA1(0c45ae00766ceba94a19bd5e154bd6d23e208cca)) + + ROM_REGION(0x800 , "optional_chargen" , 0) + ROM_LOAD("optional_chrgen.bin" , 0 , 0x800 , CRC(0ecfa63b) SHA1(c295e6393d1503d903c1d2ce576fa597df9746bf)) ROM_REGION(0x10000, "lpu", ROMREGION_16BIT | ROMREGION_BE) ROM_LOAD("9845-LPU-Standard-Processor.bin", 0, 0x10000, CRC(dc266c1b) SHA1(1cf3267f13872fbbfc035b70f8b4ec6b5923f182)) diff --git a/src/mame/drivers/inder.cpp b/src/mame/drivers/inder.cpp index f0dea109f11..f09012c0fe8 100644 --- a/src/mame/drivers/inder.cpp +++ b/src/mame/drivers/inder.cpp @@ -1137,22 +1137,22 @@ WRITE8_MEMBER( inder_state::sol_brvteam_w ) { if ((data & 0xee) && BIT(data, 4)) // solenoid selected & activated { - if BIT(data, 1) + if (BIT(data, 1)) m_samples->start(0, 7); // left sling near bumpers "canon izq" - if BIT(data, 2) + if (BIT(data, 2)) m_samples->start(1, 7); // right sling near bumpers "canon der" - if BIT(data, 3) + if (BIT(data, 3)) m_samples->start(0, 5); // outhole - if BIT(data, 5) + if (BIT(data, 5)) m_samples->start(2, 0); // left bumper - if BIT(data, 6) + if (BIT(data, 6)) m_samples->start(3, 0); // right bumper - if BIT(data, 7) + if (BIT(data, 7)) m_samples->start(4, 0); // middle bumper } } @@ -1162,16 +1162,16 @@ WRITE8_MEMBER( inder_state::sol_canasta_w ) { if ((data & 0xee) && BIT(data, 4)) // solenoid selected & activated { - if BIT(data, 3) + if (BIT(data, 3)) m_samples->start(0, 5); // outhole - if BIT(data, 5) + if (BIT(data, 5)) m_samples->start(2, 0); // left bumper - if BIT(data, 6) + if (BIT(data, 6)) m_samples->start(3, 0); // right bumper - if BIT(data, 7) + if (BIT(data, 7)) m_samples->start(4, 0); // middle bumper } } @@ -1195,7 +1195,7 @@ WRITE8_MEMBER( inder_state::ppi60a_w ) { if (data) for (UINT8 i = 0; i < 8; i++) - if BIT(data, i) + if (BIT(data, i)) m_row = i; } @@ -1204,7 +1204,7 @@ WRITE8_MEMBER( inder_state::ppi60b_w ) { if (data & 7) for (UINT8 i = 0; i < 3; i++) - if BIT(data, i) + if (BIT(data, i)) m_row = i+8; } @@ -1212,7 +1212,7 @@ WRITE8_MEMBER( inder_state::ppi64c_w ) { UINT8 i; data &= 15; - if BIT(data, 3) // 8 to 15 + if (BIT(data, 3)) // 8 to 15) { data ^= 15; // now 7 to 0 for (i = 0; i < 5; i++) diff --git a/src/mame/drivers/instruct.cpp b/src/mame/drivers/instruct.cpp index e51774efaf5..f4183a91466 100644 --- a/src/mame/drivers/instruct.cpp +++ b/src/mame/drivers/instruct.cpp @@ -107,7 +107,7 @@ WRITE8_MEMBER( instruct_state::port_w ) // cassette port WRITE8_MEMBER( instruct_state::portf8_w ) { - if BIT(data, 4) + if (BIT(data, 4)) m_cass->output(BIT(data, 3) ? -1.0 : +1.0); else m_cass->output(0.0); @@ -179,14 +179,14 @@ INTERRUPT_GEN_MEMBER( instruct_state::t2l_int ) UINT8 hwkeys = ioport("HW")->read(); // check RST key - if BIT(hwkeys, 3) + if (BIT(hwkeys, 3)) { m_maincpu->set_state_int(S2650_PC, 0); return; } else // check MON key - if BIT(hwkeys, 2) + if (BIT(hwkeys, 2)) { m_maincpu->set_state_int(S2650_PC, 0x1800); return; @@ -199,7 +199,7 @@ INTERRUPT_GEN_MEMBER( instruct_state::t2l_int ) UINT8 vector = BIT(switches, 0) ? 0x87 : 0x07; // Check INT sw & key - if BIT(switches, 1) + if (BIT(switches, 1)) device.execute().set_input_line_and_vector(0, BIT(hwkeys, 1) ? ASSERT_LINE : CLEAR_LINE, vector); else // process ac input diff --git a/src/mame/drivers/irisha.cpp b/src/mame/drivers/irisha.cpp index 0f9f884fd4c..7e976357699 100644 --- a/src/mame/drivers/irisha.cpp +++ b/src/mame/drivers/irisha.cpp @@ -280,7 +280,7 @@ WRITE8_MEMBER(irisha_state::irisha_8255_portc_w) { //logerror("irisha_8255_portc_w %02x\n",data); - if BIT(data, 6) + if (BIT(data, 6)) m_pit->write_gate2((BIT(m_ppi_porta, 5) && !BIT(data, 5)) ? 1 : 0); m_ppi_portc = data; diff --git a/src/mame/drivers/jeutel.cpp b/src/mame/drivers/jeutel.cpp index c86dc4821e5..f8288b4ae03 100644 --- a/src/mame/drivers/jeutel.cpp +++ b/src/mame/drivers/jeutel.cpp @@ -117,7 +117,7 @@ WRITE8_MEMBER( jeutel_state::ppi0a_w ) UINT16 segment; bool blank = !BIT(data, 7); - if BIT(data, 6) + if (BIT(data, 6)) { output().set_digit_value(40+m_digit, 0x3f); //patterns[data&15]; return; @@ -142,12 +142,11 @@ WRITE8_MEMBER( jeutel_state::ppi0a_w ) default: segment = 0x3f; //patterns[data & 0x0f]; } - if BIT(data, 4) + if (BIT(data, 4)) { output().set_digit_value(m_digit, (blank) ? 0 : segment); } - else - if BIT(data, 5) + else if (BIT(data, 5)) { output().set_digit_value(20+m_digit, (blank) ? 0 : segment); } diff --git a/src/mame/drivers/jp.cpp b/src/mame/drivers/jp.cpp index 4e25800686a..c2312a27c96 100644 --- a/src/mame/drivers/jp.cpp +++ b/src/mame/drivers/jp.cpp @@ -12,7 +12,6 @@ ToDo: - Mechanical sounds - Extra sound board for some games - no schematic available - Even though nvram is fitted, all credits and scores are lost at reboot -- Lortium: a rom is missing - Pimbal: outhole not working - Petaco: different hardware - manual is very poor copy @@ -192,7 +191,7 @@ WRITE8_MEMBER( jp_state::disp_w ) m_disp_data = (m_disp_data << 1) | BIT(data, 0); } - if BIT(data, 2) + if (BIT(data, 2)) { UINT8 segment, t = (m_disp_data >> 24) & 15; if (t == 8) @@ -209,7 +208,7 @@ WRITE8_MEMBER( jp_state::disp_w ) segment = 1 << (6-t); for (i = 0; i < 32; i++) - if BIT(m_disp_data, i) + if (BIT(m_disp_data, i)) output().set_digit_value(i, (output().get_digit_value(i) & ~segment)); else output().set_digit_value(i, (output().get_digit_value(i) | segment)); @@ -403,7 +402,7 @@ ROM_END /-------------------------------------------------------------------*/ ROM_START(lortium) ROM_REGION(0x4000, "maincpu", 0) - ROM_LOAD("cpulort1.dat", 0x0000, 0x2000, NO_DUMP) + ROM_LOAD("cpulort1.dat", 0x0000, 0x2000, CRC(4943e31f) SHA1(2cbc0a1feb711b5540e9288b9b59527cc85361fc)) ROM_LOAD("cpulort2.dat", 0x2000, 0x2000, CRC(71eebb26) SHA1(9d49c1012555bda24ac7287499bcb93828cbb57f)) ROM_END @@ -428,7 +427,7 @@ ROM_START(olympus) ROM_REGION(0x40000, "sound1", 0) ROM_LOAD("c1.256", 0x0000, 0x8000, CRC(93ceefbf) SHA1(be50b3d4485d4e8291047a52ca60656b55729555)) - ROM_LOAD("c2.256", 0x8000, 0x8000, NO_DUMP) + ROM_LOAD("c2.256", 0x8000, 0x8000, CRC(8d404cf7) SHA1(e521ff1cf999496bada5348b7f845c468f053f0f)) ROM_LOAD("c3.256", 0x10000, 0x8000, CRC(266eb5dd) SHA1(0eb7c098ddb7f257daf625e5209a54c306d365bf)) ROM_LOAD("c4.256", 0x18000, 0x8000, CRC(082a052d) SHA1(f316fbe6ff63433861a8856e297c953ce29a8901)) ROM_LOAD("c5.256", 0x20000, 0x8000, CRC(402a3fb2) SHA1(1c078ca519271bf2bcbe0bc10e33078861085fcf)) @@ -446,7 +445,20 @@ ROM_START(petaco) ROM_END /*------------------------------------------------------------------- -/ Petaco 2 +/ Petaco (using the new hardware, probably #1102) +/-------------------------------------------------------------------*/ +ROM_START(petacon) + ROM_REGION(0x4000, "maincpu", 0) + ROM_LOAD("petaco-n.dat", 0x0000, 0x2000, CRC(9e4d6944) SHA1(54b39e28152d481bd485433b4a7bf46174a78dbb)) +ROM_END + +ROM_START(petacona) + ROM_REGION(0x4000, "maincpu", 0) + ROM_LOAD("petacona.bin", 0x0000, 0x2000, CRC(81502083) SHA1(c67a095fb5e868467577e7a86de5d51c59b3a68e)) +ROM_END + +/*------------------------------------------------------------------- +/ Petaco 2 #1106? /-------------------------------------------------------------------*/ ROM_START(petaco2) ROM_REGION(0x4000, "maincpu", 0) @@ -469,6 +481,8 @@ ROM_END GAME(1984, petaco, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Petaco", MACHINE_IS_SKELETON_MECHANICAL) // mostly ok +GAME(1985, petacon, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Petaco (new hardware)", MACHINE_MECHANICAL) +GAME(1985, petacona, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Petaco (new hardware, alternate set)", MACHINE_MECHANICAL) GAME(1985, petaco2, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Petaco 2", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND ) GAME(1985, faeton, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Faeton", MACHINE_MECHANICAL) GAME(1986, halley, 0, jp, jp, jp_state, jp, ROT0, "Juegos Populares", "Halley Comet", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/drivers/kissproto.cpp b/src/mame/drivers/kissproto.cpp index 3f0f801a4e4..d732fb116be 100644 --- a/src/mame/drivers/kissproto.cpp +++ b/src/mame/drivers/kissproto.cpp @@ -62,5 +62,15 @@ ROM_START(kissp) ROM_RELOAD( 0x4800, 0x0800) ROM_END +ROM_START(kissp2) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD( "8755u8.dat", 0x4000, 0x0800, CRC(d2d04100) SHA1(fe81f3667cb5802c9780761a359660bad83862c2)) + ROM_RELOAD( 0x0000, 0x0800) + ROM_LOAD( "kissprot.u5", 0x1000, 0x1000, CRC(38a2ef5a) SHA1(4ffdb2e9aa30417d506af3bc4b6835ba1dc80e4f)) + ROM_LOAD( "kissprot.u6", 0x2000, 0x1000, CRC(bcdfaf1d) SHA1(d21bebbf702b400eb71f8c88be50a180a5ac260a)) + ROM_LOAD( "u7.dat", 0x3000, 0x0800, CRC(e224a9b0) SHA1(2a0e3afad8c566432ebe690ff1ce6fa92b68816f)) + ROM_RELOAD( 0x4800, 0x0800) +ROM_END GAME( 1979, kissp, kiss, kissp, kissp, kissp_state, kissp, ROT0, "Bally", "Kiss (prototype)", MACHINE_IS_SKELETON_MECHANICAL ) +GAME( 1979, kissp2, kiss, kissp, kissp, kissp_state, kissp, ROT0, "Bally", "Kiss (prototype v.2)", MACHINE_IS_SKELETON_MECHANICAL ) diff --git a/src/mame/drivers/maygay1b.cpp b/src/mame/drivers/maygay1b.cpp index 0c4907e76a4..18d09701cc3 100644 --- a/src/mame/drivers/maygay1b.cpp +++ b/src/mame/drivers/maygay1b.cpp @@ -76,6 +76,9 @@ #include "maygay1b.lh" +// not yet working +//#define USE_MCU + /////////////////////////////////////////////////////////////////////////// // called if board is reset /////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// @@ -417,10 +420,17 @@ static ADDRESS_MAP_START( m1_memmap, AS_PROGRAM, 8, maygay1b_state ) AM_RANGE(0x2030, 0x2030) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w ) AM_RANGE(0x2031, 0x2031) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w) + +#ifdef USE_MCU + //8051 + AM_RANGE(0x2040, 0x2040) AM_WRITE( main_to_mcu_0_w ) + AM_RANGE(0x2041, 0x2041) AM_WRITE( main_to_mcu_1_w ) +#else //8051 AM_RANGE(0x2040, 0x2040) AM_DEVREADWRITE("i8279_2", i8279_device, data_r, data_w ) AM_RANGE(0x2041, 0x2041) AM_DEVREADWRITE("i8279_2", i8279_device, status_r, cmd_w) // AM_RANGE(0x2050, 0x2050)// SCAN on M1B +#endif AM_RANGE(0x2070, 0x207f) AM_DEVREADWRITE("duart68681", mc68681_device, read, write ) @@ -447,6 +457,8 @@ static ADDRESS_MAP_START( m1_memmap, AS_PROGRAM, 8, maygay1b_state ) ADDRESS_MAP_END + + /************************************************* * * NEC uPD7759 handling (used as OKI replacement) @@ -496,10 +508,16 @@ static ADDRESS_MAP_START( m1_nec_memmap, AS_PROGRAM, 8, maygay1b_state ) AM_RANGE(0x2030, 0x2030) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w ) AM_RANGE(0x2031, 0x2031) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w) +#ifdef USE_MCU + //8051 + AM_RANGE(0x2040, 0x2040) AM_WRITE( main_to_mcu_0_w ) + AM_RANGE(0x2041, 0x2041) AM_WRITE( main_to_mcu_1_w ) +#else //8051 AM_RANGE(0x2040, 0x2040) AM_DEVREADWRITE("i8279_2", i8279_device, data_r, data_w ) AM_RANGE(0x2041, 0x2041) AM_DEVREADWRITE("i8279_2", i8279_device, status_r, cmd_w) // AM_RANGE(0x2050, 0x2050)// SCAN on M1B +#endif AM_RANGE(0x2070, 0x207f) AM_DEVREADWRITE("duart68681", mc68681_device, read, write ) @@ -547,11 +565,20 @@ WRITE8_MEMBER( maygay1b_state::lamp_data_w ) // Because of the nature of the lamping circuit, there is an element of persistance // As a consequence, the lamp column data can change before the input strobe without // causing the relevant lamps to black out. - + int bit_offset; for (int i = 0; i < 8; i++) { - output().set_lamp_value((8*m_lamp_strobe)+i, ((data & (1 << i)) !=0)); + if(i < 4) + { + bit_offset = i + 4; + } + else + { + bit_offset = i - 4; + } + output().set_lamp_value((8*m_lamp_strobe)+i, ((data & (1 << bit_offset)) !=0)); } + m_old_lamp_strobe = m_lamp_strobe; } @@ -562,8 +589,15 @@ READ8_MEMBER( maygay1b_state::kbd_r ) return (m_kbd_ports[m_lamp_strobe&0x07])->read(); } +WRITE8_MEMBER( maygay1b_state::scanlines_2_w ) +{ + m_lamp_strobe2 = data; +} + WRITE8_MEMBER( maygay1b_state::lamp_data_2_w ) { + // TODO: THIS FUNCTION IS NEVER CALLED! So we are missing the second half of the lamp matrix + //The two A/B ports are merged back into one, to make one row of 8 lamps. if (m_old_lamp_strobe2 != m_lamp_strobe2) @@ -574,13 +608,121 @@ WRITE8_MEMBER( maygay1b_state::lamp_data_2_w ) for (int i = 0; i < 8; i++) { - output().set_lamp_value((8*m_lamp_strobe)+i+128, ((data & (1 << i)) !=0)); + output().set_lamp_value((8*m_lamp_strobe2)+i+128, ((data & (1 << i)) !=0)); } + m_old_lamp_strobe2 = m_lamp_strobe2; } } +// MCU hookup not yet working + +WRITE8_MEMBER(maygay1b_state::main_to_mcu_0_w) +{ + // we trigger the 2nd, more complex interrupt on writes here + + m_main_to_mcu = data; + m_mcu->set_input_line(1, HOLD_LINE); +} + + +WRITE8_MEMBER(maygay1b_state::main_to_mcu_1_w) +{ + // we trigger the 1st interrupt on writes here + // the 1st interrupt (03h) is a very simple one + // it stores the value written as long at bit 0x40 + // isn't set. + // + // this is used as an index, so is probably the + // row data written with + // [:maincpu] ':maincpu' (F2CF): unmapped program memory write to 2041 = 8x & FF ( m1glad ) + m_main_to_mcu = data; + m_mcu->set_input_line(0, HOLD_LINE); +} + + +WRITE8_MEMBER(maygay1b_state::mcu_port0_w) +{ +#ifdef USE_MCU +// only during startup +// logerror("%s: mcu_port0_w %02x\n",machine().describe_context(),data); +#endif +} + +WRITE8_MEMBER(maygay1b_state::mcu_port1_w) +{ +#ifdef USE_MCU + int bit_offset; + for (int i = 0; i < 8; i++) + { + if (i < 4) + { + bit_offset = i + 4; + } + else + { + bit_offset = i - 4; + } + output().set_lamp_value((8 * m_lamp_strobe) + i + 128, ((data & (1 << bit_offset)) != 0)); + } +#endif +} + +WRITE8_MEMBER(maygay1b_state::mcu_port2_w) +{ +#ifdef USE_MCU +// only during startup + logerror("%s: mcu_port2_w %02x\n",machine().describe_context(),data); +#endif +} + +WRITE8_MEMBER(maygay1b_state::mcu_port3_w) +{ +#ifdef USE_MCU +// only during startup + logerror("%s: mcu_port3_w %02x\n",machine().describe_context(),data); +#endif +} + +READ8_MEMBER(maygay1b_state::mcu_port0_r) +{ + UINT8 ret = m_lamp_strobe; +#ifdef USE_MCU + // the MCU code checks to see if the input from this port is stable in + // the main loop + // it looks like it needs to read the strobe +// logerror("%s: mcu_port0_r returning %02x\n", machine().describe_context(), ret); +#endif + return ret; + +} + + +READ8_MEMBER(maygay1b_state::mcu_port2_r) +{ + // this is read in BOTH the external interrupts + // it seems that both the writes from the main cpu go here + // and the MCU knows which is is based on the interrupt level + UINT8 ret = m_main_to_mcu; +#ifdef USE_MCU + logerror("%s: mcu_port2_r returning %02x\n", machine().describe_context(), ret); +#endif + return ret; +} + +static ADDRESS_MAP_START( maygay_mcu_map, AS_PROGRAM, 8, maygay1b_state ) + AM_RANGE(0x0000, 0x0fff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( maygay_mcu_io, AS_IO, 8, maygay1b_state ) + AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READWRITE( mcu_port0_r, mcu_port0_w ) + AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE( mcu_port1_w ) + AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_READWRITE( mcu_port2_r, mcu_port2_w ) + AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_WRITE( mcu_port3_w ) +ADDRESS_MAP_END + + // machine driver for maygay m1 board ///////////////////////////////// MACHINE_CONFIG_START( maygay_m1, maygay1b_state ) @@ -588,6 +730,11 @@ MACHINE_CONFIG_START( maygay_m1, maygay1b_state ) MCFG_CPU_ADD("maincpu", M6809, M1_MASTER_CLOCK/2) MCFG_CPU_PROGRAM_MAP(m1_memmap) + MCFG_CPU_ADD("mcu", I80C51, 2000000) // EP840034.A-P-80C51AVW + MCFG_CPU_PROGRAM_MAP(maygay_mcu_map) + MCFG_CPU_IO_MAP(maygay_mcu_io) + + MCFG_MC68681_ADD("duart68681", M1_DUART_CLOCK) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(maygay1b_state, duart_irq_handler)) MCFG_MC68681_INPORT_CALLBACK(READ8(maygay1b_state, m1_duart_r)) @@ -613,12 +760,18 @@ MACHINE_CONFIG_START( maygay_m1, maygay1b_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) MCFG_TIMER_DRIVER_ADD_PERIODIC("nmitimer", maygay1b_state, maygay1b_nmitimer_callback, attotime::from_hz(75)) // freq? + MCFG_DEVICE_ADD("i8279", I8279, M1_MASTER_CLOCK/4) // unknown clock MCFG_I8279_OUT_SL_CB(WRITE8(maygay1b_state, scanlines_w)) // scan SL lines MCFG_I8279_OUT_DISP_CB(WRITE8(maygay1b_state, lamp_data_w)) // display A&B MCFG_I8279_IN_RL_CB(READ8(maygay1b_state, kbd_r)) // kbd RL lines + +#ifndef USE_MCU + // there is no 2nd i8279, the 8051 handles this task! MCFG_DEVICE_ADD("i8279_2", I8279, M1_MASTER_CLOCK/4) // unknown clock + MCFG_I8279_OUT_SL_CB(WRITE8(maygay1b_state, scanlines_2_w)) // scan SL lines MCFG_I8279_OUT_DISP_CB(WRITE8(maygay1b_state, lamp_data_2_w)) // display A&B +#endif MCFG_STARPOINT_48STEP_ADD("reel0") MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel0_optic_cb)) diff --git a/src/mame/drivers/maygay1b.hxx b/src/mame/drivers/maygay1b.hxx index 7fede8ddd29..80f234dbc59 100644 --- a/src/mame/drivers/maygay1b.hxx +++ b/src/mame/drivers/maygay1b.hxx @@ -3334,8 +3334,8 @@ GAME( 1994, m1luxorc ,m1luxor ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "G /* missing or different sound system? */ -ROM_START( m1cashc ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cash classic sa1-082 5p.bin", 0x0000, 0x010000, CRC(42d68675) SHA1(ed191e03bc7b42ae1884657b4559588eeedbdf31) ) m1_cashc_sound ROM_END -ROM_START( m1cashca ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cash classic 2p sa1-083.bin", 0x0000, 0x010000, CRC(36a45c0d) SHA1(51eb91e42297894ae575502903833e219ac5add9) ) m1_cashc_sound ROM_END +ROM_START( m1cashc ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cash classic sa1-082 5p.bin", 0x0000, 0x010000, CRC(42d68675) SHA1(ed191e03bc7b42ae1884657b4559588eeedbdf31) ) m1_cashc_sound ROM_END_M1A_MCU +ROM_START( m1cashca ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "cash classic 2p sa1-083.bin", 0x0000, 0x010000, CRC(36a45c0d) SHA1(51eb91e42297894ae575502903833e219ac5add9) ) m1_cashc_sound ROM_END_M1A_MCU GAME( 1994, m1cashc ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Cash Classic (Maygay) (M1A/B) (set 1)",GAME_FLAGS ) GAME( 1994, m1cashca ,m1cashc ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Cash Classic (Maygay) (M1A/B) (set 2)",GAME_FLAGS ) @@ -3382,6 +3382,6 @@ ROM_START( m1atunk ) ROM_LOAD( "grm_pl_2.bin", 0x0000, 0x010000, CRC(a26a6345) SHA1(70ededa58b92d32e0968bb326d6579146c3bd6cb) ) ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) -ROM_END +ROM_END_M1A_MCU GAME( 19??, m1atunk ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Avantime?", "Random Runner (Avantime?)",GAME_FLAGS ) diff --git a/src/mame/drivers/merit.cpp b/src/mame/drivers/merit.cpp index 7db3a2c5ee2..143185ffef5 100644 --- a/src/mame/drivers/merit.cpp +++ b/src/mame/drivers/merit.cpp @@ -868,8 +868,8 @@ static INPUT_PORTS_START( mroundup ) // todo: Find were Player 2 "Play" is mappe PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x04, DEF_STR( On ) ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Points Per Coin" ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x10, "1 Point" ) PORT_DIPSETTING( 0x00, "5 Points" ) @@ -915,6 +915,22 @@ static INPUT_PORTS_START( pitbossb ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END +static INPUT_PORTS_START( mdchoice ) /* Does one of the dips (1 through 4) control number of Jokers? Currently there are 2 */ + PORT_INCLUDE( pitboss ) + + PORT_MODIFY("DSW") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown) ) PORT_DIPLOCATION("SW:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown) ) PORT_DIPLOCATION("SW:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, "Coin Lockout" ) PORT_DIPLOCATION("SW:5,6") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x30, "2 Coins" ) + PORT_DIPSETTING( 0x20, "10 Coins" ) +INPUT_PORTS_END + static INPUT_PORTS_START( mpchoice ) /* pitbossc games but dips like The Round Up */ PORT_INCLUDE( pitboss ) @@ -970,7 +986,7 @@ static INPUT_PORTS_START( casino5 ) PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) /* AKA Diagnostics - Shows simple Statistics */ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* 1 displays additional screens in attract mode - custom ads screen (requires optional Keyboard to set up) */ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_DIPNAME( 0xc0, 0xc0, "Percentage Out" ) /* Controls Percentage out, 75%, 80%, 85% & 90% as per manual's "Tab Positions" - Need to verify values */ + PORT_DIPNAME( 0xc0, 0xc0, "Percentage Out" ) PORT_DIPLOCATION("Special:1,2") /* Controls Percentage out, 75%, 80%, 85% & 90% as per manual's "Tab Positions" (pins #52 & #51??)- Need to verify values */ PORT_DIPSETTING( 0x00, "75%" ) PORT_DIPSETTING( 0x80, "80%" ) PORT_DIPSETTING( 0xc0, "85%" ) @@ -1002,14 +1018,15 @@ static INPUT_PORTS_START( casino5 ) PORT_DIPNAME( 0x10, 0x10, "Enable Acey Deucey" ) PORT_DIPLOCATION("SW1:5") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x10, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "2 Jokers in Deck" ) PORT_DIPLOCATION("SW1:6") /* Only used in "Points Replay" mode ? */ - PORT_DIPSETTING( 0x00, "Bet 4 Points" ) - PORT_DIPSETTING( 0x20, "Always" ) - PORT_DIPNAME( 0xc0, 0x00, "Maximum Bet" ) PORT_DIPLOCATION("SW1:7,8") /* Only used in "Points Replay" mode */ - PORT_DIPSETTING( 0x40, "1" ) - PORT_DIPSETTING( 0xc0, "10" ) - PORT_DIPSETTING( 0x80, "20" ) - PORT_DIPSETTING( 0x00, "50" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) INPUT_PORTS_END @@ -1468,12 +1485,12 @@ ROM_START( pitboss ) /* Program roms on a CTR-202 daughter card - Internal desig ROM_LOAD( "2214-04_u7-0.u7", 0x6000, 0x4000, CRC(c5cf7060) SHA1(4a3209ad24ae649348b0e0470fc446d37b667975) ) /* 27128 eprom */ ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */ - ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */ - ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) + ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */ + ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */ + ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "chr7.rom.u40", 0x0000, 0x2000, CRC(db62c5ec) SHA1(a9967eb51436f342902fa3ce9c43d4d1ec5e0f3c) ) + ROM_LOAD( "chr7_u40a.u40", 0x0000, 0x2000, CRC(db62c5ec) SHA1(a9967eb51436f342902fa3ce9c43d4d1ec5e0f3c) ) ROM_END ROM_START( pitbossa ) /* Roms also found labeled simply as "PBHD" U5 through U7 */ @@ -1483,12 +1500,12 @@ ROM_START( pitbossa ) /* Roms also found labeled simply as "PBHD" U5 through U7 ROM_LOAD( "2214-03_u7-0.u7", 0x4000, 0x2000, CRC(023e8cb8) SHA1(cdb180a94d801137466c13ddfaf65918cb608c5a) ) /* Joker Poker, Blackjack, Foto Finish & The Dice Game */ ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */ - ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */ - ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */ + ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */ + ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */ + ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */ ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "chr7.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) ) + ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) ) ROM_END ROM_START( pitbossa1 ) /* Specific build for localized region with no Free Hand Bonus */ @@ -1498,27 +1515,27 @@ ROM_START( pitbossa1 ) /* Specific build for localized region with no Free Hand ROM_LOAD( "2214-03_u7-0.u7", 0x4000, 0x2000, CRC(023e8cb8) SHA1(cdb180a94d801137466c13ddfaf65918cb608c5a) ) /* Joker Poker, Blackjack, Foto Finish & The Dice Game */ ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */ - ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */ - ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */ + ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */ + ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */ + ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */ ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "chr7.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) ) + ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) ) ROM_END -ROM_START( pitbossb ) /* Roms also found labeled simply as "PSB1" U5 through U7 */ +ROM_START( pitbossb ) /* Roms also found labeled as U5-0C, U6-0 & U7-0 */ ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "u5-0c.u5", 0x0000, 0x2000, CRC(d8902656) SHA1(06da829201f6141a6b23afa0e277a3c7a122c26e) ) /* Internal designation: PSB1REV0 */ - ROM_LOAD( "u6-0.u6", 0x2000, 0x2000, CRC(bf903b01) SHA1(1f5f69cfd3eb105bd9bad071016931a79defa16b) ) /* Games included in this set are: */ - ROM_LOAD( "u7-0.u7", 0x4000, 0x2000, CRC(306351b9) SHA1(32cd243aa65571ee7fc72971b6a16beeb4ed9d85) ) /* Joker Poker, Blackjack, Super Slots & The Dice Game */ + ROM_LOAD( "psb1_u5.u5", 0x0000, 0x2000, CRC(d8902656) SHA1(06da829201f6141a6b23afa0e277a3c7a122c26e) ) /* Internal designation: PSB1REV0 */ + ROM_LOAD( "psb1_u6.u6", 0x2000, 0x2000, CRC(bf903b01) SHA1(1f5f69cfd3eb105bd9bad071016931a79defa16b) ) /* Games included in this set are: */ + ROM_LOAD( "psb1_u7.u7", 0x4000, 0x2000, CRC(306351b9) SHA1(32cd243aa65571ee7fc72971b6a16beeb4ed9d85) ) /* Joker Poker, Blackjack, Super Slots & The Dice Game */ ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */ - ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */ - ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */ + ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) /* Shows: */ + ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) /* (c) 1983 Merit industries */ + ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) /* Cheltenham PA. 19012 */ ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "chr7.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) ) + ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) ) ROM_END /* Known to exist is Pit Boss version M4A2 (confirmed via manual) and likely a M4A3 as well (not confirmed, but M4A4 is dumped) */ @@ -1530,12 +1547,27 @@ ROM_START( pitbossc ) ROM_LOAD( "m4a1_u7.u7", 0x4000, 0x2000, CRC(5fa5d436) SHA1(9f3fd81eae7f378268f3b4af8fd299ffb97d7fb6) ) /* Draw Poker, Blackjack, Acey Deucey & The Dice Game */ ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "chr2.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */ - ROM_LOAD( "chr2.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* (c) 1983 Merit industries Phila. PA. */ - ROM_LOAD( "chr2.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* All Rights Reserverd */ + ROM_LOAD( "chr2_u39.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */ + ROM_LOAD( "chr2_u38.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* (c) 1983 Merit industries Phila. PA. */ + ROM_LOAD( "chr2_u37.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* All Rights Reserverd */ ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "chr2.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) ) + ROM_LOAD( "chr2_u40.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) ) +ROM_END + +ROM_START( mdchoice ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "e4a1_u5.u5", 0x0000, 0x2000, CRC(bd77f8dc) SHA1(c9c85e3180be30e7a1d37abb6d4e7c777acfda81) ) /* Internal designation: E4A1REV0 */ + ROM_LOAD( "e4a1_u6.u6", 0x2000, 0x2000, CRC(e5219c9a) SHA1(66511f5f9bcd64f3028bbf55a51a1b0db391567c) ) /* Games included in this set are: */ + ROM_LOAD( "e4a1_u7.u7", 0x4000, 0x2000, CRC(9451d8db) SHA1(c2431b25543218fd8bc5a4eb79e8a77690e26c5e) ) /* Draw Poker, Blackjack, Acey Deucey & The Dice Game */ + + ROM_REGION( 0x6000, "gfx1", 0 ) + ROM_LOAD( "chr2_u39.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */ + ROM_LOAD( "chr2_u38.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* MFG FOR: */ + ROM_LOAD( "chr2_u37.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* EEI-CVS International */ + + ROM_REGION( 0x2000, "gfx2", 0 ) + ROM_LOAD( "chr2_u40.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) ) ROM_END ROM_START( mpchoice ) /* Same games as pitbossc but different dips & can control the payout percentage (like The Round Up below) */ @@ -1545,27 +1577,42 @@ ROM_START( mpchoice ) /* Same games as pitbossc but different dips & can control ROM_LOAD( "m4c1_u7.u7", 0x4000, 0x2000, CRC(f2b6aff8) SHA1(c5c1a4ba808d9830604bc2399e66b60c56bd6f05) ) /* Draw Poker, Blackjack, Acey Deucey & The Dice Game */ ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "chr2.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */ - ROM_LOAD( "chr2.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* (c) 1983 Merit industries Philadelphia PA. */ - ROM_LOAD( "chr2.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* All Rights Reserverd */ + ROM_LOAD( "chr2_u39.u39", 0x0000, 0x2000, CRC(f9613e7b) SHA1(1e8cafe142a235d65b43c7e46a79ed4f6272b61c) ) /* Shows: */ + ROM_LOAD( "chr2_u38.u38", 0x2000, 0x2000, CRC(7af28902) SHA1(04f685389958d581aaf2c86940d1b8b8cec05d7a) ) /* (c) 1983 Merit industries Philadelphia PA. */ + ROM_LOAD( "chr2_u37.u37", 0x4000, 0x2000, CRC(ea6f0c59) SHA1(f2c0ff99518c2cec3eb1b4042fa3754a702c0e34) ) /* All Rights Reserverd */ ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "chr2.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) ) + ROM_LOAD( "chr2_u40.u40", 0x0000, 0x2000, CRC(40c94dce) SHA1(86611e3a1048b2a3fffcc0110811656a2d0fc4a5) ) ROM_END -ROM_START( casino5 ) /* Standard version, the rom set with 3315-02 U5-1 is the "Minnesota" version and is undumped */ - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "3315-02_u5-0.u5", 0x0000, 0x2000, CRC(abe240d8) SHA1(296eb3251dd51147d6984a8c08c3be22e5ed8e86) ) /* Program roms on a CTR-202A daughter card */ +ROM_START( casino5 ) + ROM_REGION( 0x10000, "maincpu", 0 ) /* Program roms on a CTR-202A daughter card */ + ROM_LOAD( "3315-02_u5-2b.u5", 0x0000, 0x2000, CRC(31640f41) SHA1(22d22ea1b1ae1ff189629ffd4963fabcc300fca8) ) /* Internal designation: PACASINO FIVE 331502 U5-0B */ + ROM_LOAD( "3315-02_u6-2b.u6", 0x2000, 0x4000, CRC(03851536) SHA1(904bf76567f965e70c0baf545e2f77d07f1c286b) ) + ROM_LOAD( "3315-02_u7-2b.u7", 0x6000, 0x4000, CRC(76acb03f) SHA1(87bfd82015dd704a732f4a03dd470980af1dee72) ) + + ROM_REGION( 0x6000, "gfx1", 0 ) + ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) + ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) + ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) + + ROM_REGION( 0x2000, "gfx2", 0 ) + ROM_LOAD( "chr8_u40a.u40", 0x0000, 0x2000, CRC(b13a3fb1) SHA1(25760aa27c88b8be248a87df724bf8797d179e7a) ) +ROM_END + +ROM_START( casino5a ) /* Standard version, the rom set with 3315-02 U5-1 is the "Minnesota" version and is undumped */ + ROM_REGION( 0x10000, "maincpu", 0 ) /* Program roms on a CTR-202A daughter card */ + ROM_LOAD( "3315-02_u5-0.u5", 0x0000, 0x2000, CRC(abe240d8) SHA1(296eb3251dd51147d6984a8c08c3be22e5ed8e86) ) /* Internal designation: PCFS1 331502-0 */ ROM_LOAD( "3315-02_u6-0.u6", 0x2000, 0x4000, CRC(4d9f0c57) SHA1(d19b4b4f42d329ea35907d17c15a55b954b07295) ) ROM_LOAD( "3315-02_u7-0.u7", 0x6000, 0x4000, CRC(d3bc510d) SHA1(6222badabf629dd6334591867596f811883aed52) ) /* There is known to be a 3315-02 U7-0-A version (not dumped) */ ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) - ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) - ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) + ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) + ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) + ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "u40", 0x0000, 0x2000, CRC(b13a3fb1) SHA1(25760aa27c88b8be248a87df724bf8797d179e7a) ) + ROM_LOAD( "chr8_u40a.u40", 0x0000, 0x2000, CRC(b13a3fb1) SHA1(25760aa27c88b8be248a87df724bf8797d179e7a) ) ROM_END ROM_START( mroundup ) @@ -1575,12 +1622,12 @@ ROM_START( mroundup ) ROM_LOAD( "kru1cd_u7.u7", 0x4000, 0x2000, CRC(72131230) SHA1(e7c08b537848a7c6e6e987c6d0644a031bb238d4) ) /* Draw Poker, Blackjack, Foto Finish */ ROM_REGION( 0x6000, "gfx1", 0 ) - ROM_LOAD( "chr7.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) - ROM_LOAD( "chr7.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) - ROM_LOAD( "chr7.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) + ROM_LOAD( "chr7_u39.u39", 0x0000, 0x2000, CRC(6662f607) SHA1(6b423f8de011d196700839af0be37effbf87383f) ) + ROM_LOAD( "chr7_u38.u38", 0x2000, 0x2000, CRC(a014b44f) SHA1(906d426b1de75f26030c19dcd599b6570909f510) ) + ROM_LOAD( "chr7_u37.u37", 0x4000, 0x2000, CRC(cb12e139) SHA1(06fe91281faae5d0c0ae4b3cd8ad103bd3995c38) ) ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "chr7.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) ) + ROM_LOAD( "chr7_u40.u40", 0x0000, 0x2000, CRC(52298162) SHA1(79aa6c4ab6bec6450d882615e64f61cfef934153) ) ROM_END ROM_START( chkndraw ) @@ -2378,9 +2425,11 @@ GAME( 1983, pitbossa, pitboss, pitboss, pitbossa, driver_device, 0, ROT0, " GAME( 1983, pitbossa1,pitboss, pitboss, pitbossa1,driver_device, 0, ROT0, "Merit", "The Pit Boss (2214-03, U5-1C)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1983, pitbossb, pitboss, pitboss, pitbossa, driver_device, 0, ROT0, "Merit", "The Pit Boss (PSB1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1983, pitbossc, pitboss, pitboss, pitbossb, driver_device, 0, ROT0, "Merit", "The Pit Boss (M4A1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1983, mpchoice, 0, pitboss, mpchoice, driver_device, 0, ROT0, "Merit", "Player's Choice (M4C1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1983, mdchoice, pitboss, pitboss, mdchoice, driver_device, 0, ROT0, "Merit", "Dealer's Choice (E4A1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) /* Copyright year based on other Pit Boss sets */ +GAME( 1983, mpchoice, pitboss, pitboss, mpchoice, driver_device, 0, ROT0, "Merit", "Player's Choice (M4C1)", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1984, casino5, 0, casino5, casino5, driver_device, 0, ROT0, "Merit", "Casino Five (3315-02, U5-0)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, casino5, 0, casino5, casino5, driver_device, 0, ROT0, "Merit", "Casino Five (3315-02, U5-2B)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, casino5a, casino5, casino5, casino5, driver_device, 0, ROT0, "Merit", "Casino Five (3315-02, U5-0)", MACHINE_SUPPORTS_SAVE ) GAME( 1984, mroundup, 0, pitboss, mroundup, driver_device, 0, ROT0, "Merit", "The Round Up", MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) diff --git a/src/mame/drivers/midyunit.cpp b/src/mame/drivers/midyunit.cpp index aa4ca3619d3..2307873f7be 100644 --- a/src/mame/drivers/midyunit.cpp +++ b/src/mame/drivers/midyunit.cpp @@ -2742,136 +2742,168 @@ ROM_START( mkyawdim4 ) ROM_END - ROM_START( term2 ) ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */ - ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) - ROM_RELOAD ( 0x30000, 0x20000 ) + ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) + ROM_RELOAD ( 0x30000, 0x20000 ) ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */ - ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) - ROM_RELOAD( 0x40000, 0x40000 ) - ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) - ROM_RELOAD( 0xc0000, 0x40000 ) + ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) + ROM_RELOAD( 0x40000, 0x40000 ) + ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) + ROM_RELOAD( 0xc0000, 0x40000 ) ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */ - ROM_LOAD16_BYTE( "t2-la4.105", 0x00000, 0x80000, CRC(d4d8d884) SHA1(3209e131b128f12af30b3c6056fd63df497f93eb) ) - ROM_LOAD16_BYTE( "t2-la4.89", 0x00001, 0x80000, CRC(25359415) SHA1(ca8b7e1b5a363b78499f92c979a11ace6f1dceab) ) + ROM_LOAD16_BYTE( "la4_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(d4d8d884) SHA1(3209e131b128f12af30b3c6056fd63df497f93eb) ) + ROM_LOAD16_BYTE( "la4_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(25359415) SHA1(ca8b7e1b5a363b78499f92c979a11ace6f1dceab) ) ROM_REGION( 0x800000, "gfx1", 0 ) - ROM_LOAD ( "t2.111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) - ROM_LOAD ( "t2.112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) - ROM_LOAD ( "t2.113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) - ROM_LOAD ( "t2.114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) ) - ROM_LOAD ( "t2.95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) - ROM_LOAD ( "t2.96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) - ROM_LOAD ( "t2.97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) - ROM_LOAD ( "t2.98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) ) - ROM_LOAD ( "t2.106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) - ROM_LOAD ( "t2.107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) - ROM_LOAD ( "t2.108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) - ROM_LOAD ( "t2.109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) ) ROM_END ROM_START( term2la3 ) ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */ - ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) - ROM_RELOAD ( 0x30000, 0x20000 ) + ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) + ROM_RELOAD ( 0x30000, 0x20000 ) ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */ - ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) - ROM_RELOAD( 0x40000, 0x40000 ) - ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) - ROM_RELOAD( 0xc0000, 0x40000 ) + ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) + ROM_RELOAD( 0x40000, 0x40000 ) + ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) + ROM_RELOAD( 0xc0000, 0x40000 ) ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */ - ROM_LOAD16_BYTE( "t2-la3.105", 0x00000, 0x80000, CRC(34142b28) SHA1(985fd169b3d62c4197fe4c6f11055a6c17872899) ) - ROM_LOAD16_BYTE( "t2-la3.89", 0x00001, 0x80000, CRC(5ffea427) SHA1(c6f65bc57b33ae1a123f610c635e0d65663e54da) ) + ROM_LOAD16_BYTE( "la3_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(34142b28) SHA1(985fd169b3d62c4197fe4c6f11055a6c17872899) ) + ROM_LOAD16_BYTE( "la3_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(5ffea427) SHA1(c6f65bc57b33ae1a123f610c635e0d65663e54da) ) ROM_REGION( 0x800000, "gfx1", 0 ) - ROM_LOAD ( "t2.111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) - ROM_LOAD ( "t2.112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) - ROM_LOAD ( "t2.113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) - ROM_LOAD ( "t2.114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) ) - ROM_LOAD ( "t2.95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) - ROM_LOAD ( "t2.96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) - ROM_LOAD ( "t2.97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) - ROM_LOAD ( "t2.98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) ) - ROM_LOAD ( "t2.106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) - ROM_LOAD ( "t2.107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) - ROM_LOAD ( "t2.108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) - ROM_LOAD ( "t2.109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) ) ROM_END ROM_START( term2la2 ) ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */ - ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) - ROM_RELOAD ( 0x30000, 0x20000 ) + ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) + ROM_RELOAD ( 0x30000, 0x20000 ) ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */ - ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) - ROM_RELOAD( 0x40000, 0x40000 ) - ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) - ROM_RELOAD( 0xc0000, 0x40000 ) + ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) + ROM_RELOAD( 0x40000, 0x40000 ) + ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) + ROM_RELOAD( 0xc0000, 0x40000 ) ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */ - ROM_LOAD16_BYTE( "t2-la2.105", 0x00000, 0x80000, CRC(7177de98) SHA1(0987be413d6cb5ded7059ad6ebbca49331b046b2) ) - ROM_LOAD16_BYTE( "t2-la2.89", 0x00001, 0x80000, CRC(14d7b9f5) SHA1(b8676d21d53fd3c8492d8911e749d74df1c66b1d) ) + ROM_LOAD16_BYTE( "la2_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(7177de98) SHA1(0987be413d6cb5ded7059ad6ebbca49331b046b2) ) + ROM_LOAD16_BYTE( "la2_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(14d7b9f5) SHA1(b8676d21d53fd3c8492d8911e749d74df1c66b1d) ) ROM_REGION( 0x800000, "gfx1", 0 ) - ROM_LOAD ( "t2.111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) - ROM_LOAD ( "t2.112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) - ROM_LOAD ( "t2.113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) - ROM_LOAD ( "t2.114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) ) - ROM_LOAD ( "t2.95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) - ROM_LOAD ( "t2.96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) - ROM_LOAD ( "t2.97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) - ROM_LOAD ( "t2.98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) ) - ROM_LOAD ( "t2.106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) - ROM_LOAD ( "t2.107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) - ROM_LOAD ( "t2.108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) - ROM_LOAD ( "t2.109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) ) ROM_END ROM_START( term2la1 ) - ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */ - ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) + ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */ + ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) ROM_RELOAD ( 0x30000, 0x20000 ) - ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */ - ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) - ROM_RELOAD( 0x40000, 0x40000 ) - ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) - ROM_RELOAD( 0xc0000, 0x40000 ) + ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */ + ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) + ROM_RELOAD( 0x40000, 0x40000 ) + ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) + ROM_RELOAD( 0xc0000, 0x40000 ) ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */ - ROM_LOAD16_BYTE( "t2-la1.105", 0x00000, 0x80000, CRC(ca52a8b0) SHA1(20b91bdd9fe8e7be6a3c3cb9684769733d66d401) ) - ROM_LOAD16_BYTE( "t2-la1.89", 0x00001, 0x80000, CRC(08535210) SHA1(a7986541bc504294bd6523ce691e19e496f8be7c) ) + ROM_LOAD16_BYTE( "la1_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(ca52a8b0) SHA1(20b91bdd9fe8e7be6a3c3cb9684769733d66d401) ) + ROM_LOAD16_BYTE( "la1_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(08535210) SHA1(a7986541bc504294bd6523ce691e19e496f8be7c) ) ROM_REGION( 0x800000, "gfx1", 0 ) - ROM_LOAD ( "t2.111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) - ROM_LOAD ( "t2.112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) - ROM_LOAD ( "t2.113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) - ROM_LOAD ( "t2.114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(53c516ec) SHA1(2a33639bc5bb4e7f7b3e341ddb59173260461d20) ) - ROM_LOAD ( "t2.95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) - ROM_LOAD ( "t2.96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) - ROM_LOAD ( "t2.97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) - ROM_LOAD ( "t2.98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(1a20ce29) SHA1(9089b7f77da5d67ad46ed249d72de8b8e0e5d807) ) - ROM_LOAD ( "t2.106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) - ROM_LOAD ( "t2.107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) - ROM_LOAD ( "t2.108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) - ROM_LOAD ( "t2.109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(306a9366) SHA1(b94c23c033221f7f7fddd2911b8cec9549929768) ) +ROM_END + + +ROM_START( term2lg1 ) /* All reported German versions use standard English sound roms */ + ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */ + ROM_LOAD ( "sl1_terminator_2_u3_sound_rom.u3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) ) + ROM_RELOAD ( 0x30000, 0x20000 ) + + ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */ + ROM_LOAD ( "sl1_terminator_2_u12_sound_rom.u12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) ) + ROM_RELOAD( 0x40000, 0x40000 ) + ROM_LOAD ( "sl1_terminator_2_u13_sound_rom.u13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) ) + ROM_RELOAD( 0xc0000, 0x40000 ) + + ROM_REGION16_LE( 0x100000, "user1", 0 ) /* 34010 code */ + ROM_LOAD16_BYTE( "lg1_terminator_2_game_rom_u105.u105", 0x00000, 0x80000, CRC(6aad6389) SHA1(912f4e1911e537ed17775dbff6be0ab28ac820a9) ) + ROM_LOAD16_BYTE( "lg1_terminator_2_game_rom_u89.u89", 0x00001, 0x80000, CRC(5a052766) SHA1(a746c18476000fb38107482e22c767a13dd580d2) ) + + ROM_REGION( 0x800000, "gfx1", 0 ) + ROM_LOAD ( "la1_terminator_2_game_rom_u111.u111", 0x000000, 0x80000, CRC(916d0197) SHA1(3b53d3770955b10cc6002e3d3bf0f71429667af0) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u112.u112", 0x080000, 0x80000, CRC(39ae1c87) SHA1(a9d332dffc77c1e0dc50549825f5b403cf19c41d) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u113.u113", 0x100000, 0x80000, CRC(cb5084e5) SHA1(58cab00d8ebc72792f6c29899013ae6a0d2278b9) ) + ROM_LOAD ( "lg1_terminator_2_game_rom_u114.u114", 0x180000, 0x80000, CRC(1f0c6d8f) SHA1(b8908a19e87a4fdeb6f06944eb496cc8766d51e7) ) + + ROM_LOAD ( "la1_terminator_2_game_rom_u95.u95", 0x200000, 0x80000, CRC(dd39cf73) SHA1(53bb54e66e4dfbe58385915004b0ad57583a7543) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u96.u96", 0x280000, 0x80000, CRC(31f4fd36) SHA1(766fca7d5e5043fc9e68bd3dc15e6a7830279d88) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u97.u97", 0x300000, 0x80000, CRC(7f72e775) SHA1(7e2369c6b4ed5d653700b041df58355a0960193a) ) + ROM_LOAD ( "lg1_terminator_2_game_rom_u98.u98", 0x380000, 0x80000, CRC(800c6205) SHA1(8f82a5e94505e33aa6c044040d7d002ea09045ef) ) + + ROM_LOAD ( "la1_terminator_2_game_rom_u106.u106", 0x400000, 0x80000, CRC(f08a9536) SHA1(fbac314bd52f23c7a704acd3c707e75cdf204c07) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u107.u107", 0x480000, 0x80000, CRC(268d4035) SHA1(89a310830be9fbc91794fcccc57053d0933c42a3) ) + ROM_LOAD ( "la1_terminator_2_game_rom_u108.u108", 0x500000, 0x80000, CRC(379fdaed) SHA1(408df6702c8ea8d3dce0b231955c6a60f3f5f22b) ) + ROM_LOAD ( "lg1_terminator_2_game_rom_u109.u109", 0x580000, 0x80000, CRC(70dc2ff3) SHA1(de756a3c1e3f5f916d0e5c463ec758814fdcd7f5) ) ROM_END @@ -2982,6 +3014,7 @@ GAME( 1991, term2, 0, yunit_adpcm_6bit_faster, term2, midyunit_state, GAME( 1991, term2la3, term2, yunit_adpcm_6bit_faster, term2, midyunit_state, term2la3, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LA3 03/27/92)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, term2la2, term2, yunit_adpcm_6bit_faster, term2, midyunit_state, term2la2, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LA2 12/09/91)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, term2la1, term2, yunit_adpcm_6bit_faster, term2, midyunit_state, term2la1, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LA1 11/01/91)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, term2lg1, term2, yunit_adpcm_6bit_faster, term2, midyunit_state, term2la1, ORIENTATION_FLIP_X, "Midway", "Terminator 2 - Judgment Day (rev LG1 11/04/91)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, mkla4, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_state, mkyunit, ROT0, "Midway", "Mortal Kombat (rev 4.0 09/28/92)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, mkla3, mk, yunit_adpcm_6bit_fast, mkla4, midyunit_state, mkyunit, ROT0, "Midway", "Mortal Kombat (rev 3.0 08/31/92)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/modellot.cpp b/src/mame/drivers/modellot.cpp index 0743a324e06..215d966e890 100644 --- a/src/mame/drivers/modellot.cpp +++ b/src/mame/drivers/modellot.cpp @@ -121,7 +121,7 @@ UINT32 modellot_state::screen_update_modellot(screen_device &screen, bitmap_ind1 chr = m_p_videoram[x+ma]; - if BIT(chr, 7) inv = 0xff; + if (BIT(chr, 7)) inv = 0xff; chr &= 0x7f; // cursor diff --git a/src/mame/drivers/mpu4.cpp b/src/mame/drivers/mpu4.cpp index 9240e476c81..3f437cfdb3c 100644 --- a/src/mame/drivers/mpu4.cpp +++ b/src/mame/drivers/mpu4.cpp @@ -2264,12 +2264,126 @@ static mpu4_chr_table blsbys_data[8] = { //request 36 42 27 42 09 42 27 42 42 09 //verify 00 04 04 0C 0C 1C 14 2C 5C 2C +DRIVER_INIT_MEMBER(mpu4_state,m4_low_volt_alt) +{ + //Some games can't use the 50Hz circuit to check voltage issues, handle it here + m_low_volt_detect_disable =1; +} DRIVER_INIT_MEMBER(mpu4_state,m4_small_extender) { m_lamp_extender=SMALL_CARD; } +DRIVER_INIT_MEMBER(mpu4_state,m4_large_extender_a) +{ + m_lamp_extender=LARGE_CARD_A; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_large_extender_b) +{ + m_lamp_extender=LARGE_CARD_B; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_large_extender_c) +{ + m_lamp_extender=LARGE_CARD_C; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_tubes) +{ + m_hopper = TUBES; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_duart_a) +{ + m_hopper = HOPPER_DUART_A; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_duart_b) +{ + m_hopper = HOPPER_DUART_B; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_duart_c) +{ + m_hopper = HOPPER_DUART_C; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_nonduart_a) +{ + m_hopper = HOPPER_NONDUART_A; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_hopper_nonduart_b) +{ + m_hopper = HOPPER_NONDUART_B; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_led_a) +{ + m_led_extender = CARD_A; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_led_b) +{ + m_led_extender = CARD_B; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_led_c) +{ + m_led_extender = CARD_C; +} + +//TODO: Replace with standard six reels once sets are sorted out - is really six_reel_std +DRIVER_INIT_MEMBER(mpu4_state,m4altreels) +{ + m_reel_mux=SIX_REEL_1TO8; + m_reels = 6; + DRIVER_INIT_CALL(m4default_banks); +} +DRIVER_INIT_MEMBER(mpu4_state,m4default_reels) +{ + m_reel_mux=STANDARD_REEL; + m_reels = 4; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_five_reel_std) +{ + m_reel_mux=FIVE_REEL_5TO8; + m_reels = 5; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_five_reel_rev) +{ + m_reel_mux=FIVE_REEL_8TO5; + m_reels = 5; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_five_reel_alt) +{ + m_reel_mux=FIVE_REEL_3TO6; + m_reels = 5; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_six_reel_std) +{ + m_reel_mux=SIX_REEL_1TO8; + m_reels = 6; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_six_reel_alt) +{ + m_reel_mux=SIX_REEL_5TO8; + m_reels = 6; +} + +DRIVER_INIT_MEMBER(mpu4_state,m4_seven_reel) +{ + m_reel_mux=SEVEN_REEL; + m_reels = 7; +} + DRIVER_INIT_MEMBER(mpu4_state,m4_andycp10c) { @@ -2280,23 +2394,12 @@ DRIVER_INIT_MEMBER(mpu4_state,m4_andycp10c) DRIVER_INIT_MEMBER(mpu4_state,m_oldtmr) { - m_reel_mux=SIX_REEL_1TO8; - m_reels = 6; - + DRIVER_INIT_CALL(m4_six_reel_std); DRIVER_INIT_CALL(m4default_banks); m_current_chr_table = oldtmr_data; } -DRIVER_INIT_MEMBER(mpu4_state,m4altreels) -{ - m_reel_mux=SIX_REEL_1TO8; - m_reels = 6; - - DRIVER_INIT_CALL(m4default_banks); -} - - DRIVER_INIT_MEMBER(mpu4_state,m_ccelbr) { DRIVER_INIT_CALL(m4default); @@ -2311,8 +2414,7 @@ DRIVER_INIT_MEMBER(mpu4_state,m4gambal) DRIVER_INIT_MEMBER(mpu4_state,m_grtecp) { - m_reel_mux=FIVE_REEL_5TO8; - m_reels = 5; + DRIVER_INIT_CALL(m4_five_reel_std); DRIVER_INIT_CALL(m4_small_extender); DRIVER_INIT_CALL(m4default_banks); @@ -2322,19 +2424,12 @@ DRIVER_INIT_MEMBER(mpu4_state,m_grtecp) DRIVER_INIT_MEMBER(mpu4_state,m_blsbys) { m_bwb_bank=1; - m_reel_mux=FIVE_REEL_5TO8; - m_reels = 5; + DRIVER_INIT_CALL(m4_five_reel_std); m_bwb_chr_table1 = blsbys_data1; m_current_chr_table = blsbys_data; DRIVER_INIT_CALL(m4default_big); } -DRIVER_INIT_MEMBER(mpu4_state,m4default_reels) -{ - m_reel_mux=STANDARD_REEL; - m_reels = 4; - m_bwb_bank=0; -} DRIVER_INIT_MEMBER(mpu4_state,m4default_banks) { @@ -2356,6 +2451,7 @@ DRIVER_INIT_MEMBER(mpu4_state,m4default_alt) DRIVER_INIT_MEMBER(mpu4_state,m4default) { DRIVER_INIT_CALL(m4default_reels); + m_bwb_bank=0; DRIVER_INIT_CALL(m4default_banks); } @@ -2369,6 +2465,7 @@ DRIVER_INIT_MEMBER(mpu4_state,m4default_big) { printf("Error: Extended banking selected on set <=0x10000 in size, ignoring\n"); DRIVER_INIT_CALL(m4default_reels); + m_bwb_bank=0; DRIVER_INIT_CALL(m4default_banks); } else @@ -2451,12 +2548,14 @@ DRIVER_INIT_MEMBER(mpu4_state,crystali) /* generate a 50 Hz signal (based on an RC time) */ TIMER_DEVICE_CALLBACK_MEMBER(mpu4_state::gen_50hz) { - /* Although reported as a '50Hz' signal, the fact that both rising and - falling edges of the pulse are used means the timer actually gives a 100Hz - oscillating signal.*/ - m_signal_50hz = m_signal_50hz?0:1; - m_pia4->ca1_w(m_signal_50hz); /* signal is connected to IC4 CA1 */ - + if (!m_low_volt_detect_disable) + { + /* Although reported as a '50Hz' signal, the fact that both rising and + falling edges of the pulse are used means the timer actually gives a 100Hz + oscillating signal.*/ + m_signal_50hz = m_signal_50hz?0:1; + m_pia4->ca1_w(m_signal_50hz); /* signal is connected to IC4 CA1 */ + } update_meters();//run at 100Hz to sync with PIAs } @@ -2499,6 +2598,14 @@ ADDRESS_MAP_END MCFG_STEPPER_INDEX_PATTERN(0x00)\ MCFG_STEPPER_INIT_PHASE(2) +#define MCFG_MPU4_TYPE4_REEL_ADD(_tag)\ + MCFG_STEPPER_ADD(_tag)\ + MCFG_STEPPER_REEL_TYPE(BARCREST_48STEP_REEL)\ + MCFG_STEPPER_START_INDEX(93)\ + MCFG_STEPPER_END_INDEX(2)\ + MCFG_STEPPER_INDEX_PATTERN(0x00)\ + MCFG_STEPPER_INIT_PHASE(2) + #define MCFG_MPU4_BWB_REEL_ADD(_tag)\ MCFG_STEPPER_ADD(_tag)\ MCFG_STEPPER_REEL_TYPE(BARCREST_48STEP_REEL)\ @@ -2507,6 +2614,50 @@ ADDRESS_MAP_END MCFG_STEPPER_INDEX_PATTERN(0x00)\ MCFG_STEPPER_INIT_PHASE(2) +MACHINE_CONFIG_FRAGMENT( mpu4_std_3reel ) + MCFG_MPU4_STD_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type2_3reel ) + MCFG_MPU4_TYPE2_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type3_3reel ) + MCFG_MPU4_TYPE3_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type4_3reel ) + MCFG_MPU4_TYPE4_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_bwb_3reel ) + MCFG_MPU4_BWB_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) +MACHINE_CONFIG_END MACHINE_CONFIG_FRAGMENT( mpu4_std_4reel ) MCFG_MPU4_STD_REEL_ADD("reel0") @@ -2519,6 +2670,50 @@ MACHINE_CONFIG_FRAGMENT( mpu4_std_4reel ) MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) MACHINE_CONFIG_END +MACHINE_CONFIG_FRAGMENT( mpu4_type2_4reel ) + MCFG_MPU4_TYPE2_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type3_4reel ) + MCFG_MPU4_TYPE3_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type4_4reel ) + MCFG_MPU4_TYPE4_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_bwb_4reel ) + MCFG_MPU4_BWB_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) +MACHINE_CONFIG_END + MACHINE_CONFIG_FRAGMENT( mpu4_std_5reel ) MCFG_MPU4_STD_REEL_ADD("reel0") MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) @@ -2532,6 +2727,58 @@ MACHINE_CONFIG_FRAGMENT( mpu4_std_5reel ) MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) MACHINE_CONFIG_END +MACHINE_CONFIG_FRAGMENT( mpu4_type2_5reel ) + MCFG_MPU4_TYPE2_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type3_5reel ) + MCFG_MPU4_TYPE3_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type4_5reel ) + MCFG_MPU4_TYPE4_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_bwb_5reel ) + MCFG_MPU4_BWB_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) +MACHINE_CONFIG_END + MACHINE_CONFIG_FRAGMENT( mpu4_std_6reel ) MCFG_MPU4_STD_REEL_ADD("reel0") MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) @@ -2562,8 +2809,37 @@ MACHINE_CONFIG_FRAGMENT( mpu4_type2_6reel ) MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) MACHINE_CONFIG_END +MACHINE_CONFIG_FRAGMENT( mpu4_type3_6reel ) + MCFG_MPU4_TYPE3_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_MPU4_TYPE3_REEL_ADD("reel5") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) +MACHINE_CONFIG_END -MACHINE_CONFIG_FRAGMENT( mpu4_bwb_5reel ) +MACHINE_CONFIG_FRAGMENT( mpu4_type4_6reel ) + MCFG_MPU4_TYPE4_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel5") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_bwb_6reel ) MCFG_MPU4_BWB_REEL_ADD("reel0") MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) MCFG_MPU4_BWB_REEL_ADD("reel1") @@ -2574,9 +2850,50 @@ MACHINE_CONFIG_FRAGMENT( mpu4_bwb_5reel ) MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) MCFG_MPU4_BWB_REEL_ADD("reel4") MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel5") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) MACHINE_CONFIG_END -MACHINE_CONFIG_FRAGMENT( mpu4_alt_7reel ) + +MACHINE_CONFIG_FRAGMENT( mpu4_std_7reel ) + MCFG_MPU4_STD_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel5") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel6") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_MPU4_STD_REEL_ADD("reel7") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type2_7reel ) + MCFG_MPU4_TYPE2_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel5") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel6") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_MPU4_TYPE2_REEL_ADD("reel7") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_type3_7reel ) MCFG_MPU4_TYPE3_REEL_ADD("reel0") MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) MCFG_MPU4_TYPE3_REEL_ADD("reel1") @@ -2595,6 +2912,44 @@ MACHINE_CONFIG_FRAGMENT( mpu4_alt_7reel ) MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) MACHINE_CONFIG_END +MACHINE_CONFIG_FRAGMENT( mpu4_type4_7reel ) + MCFG_MPU4_TYPE4_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel5") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel6") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_MPU4_TYPE4_REEL_ADD("reel7") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) +MACHINE_CONFIG_END + +MACHINE_CONFIG_FRAGMENT( mpu4_bwb_7reel ) + MCFG_MPU4_BWB_REEL_ADD("reel0") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel0_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel1") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel1_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel2") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel2_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel3") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel3_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel4") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel4_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel5") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel5_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel6") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel6_optic_cb)) + MCFG_MPU4_BWB_REEL_ADD("reel7") + MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu4_state, reel7_optic_cb)) +MACHINE_CONFIG_END + MACHINE_CONFIG_FRAGMENT( mpu4_common ) MCFG_TIMER_DRIVER_ADD_PERIODIC("50hz", mpu4_state, gen_50hz, attotime::from_hz(100)) diff --git a/src/mame/drivers/mpu4sw.hxx b/src/mame/drivers/mpu4sw.hxx index 29c750a7cf9..053d39615c4 100644 --- a/src/mame/drivers/mpu4sw.hxx +++ b/src/mame/drivers/mpu4sw.hxx @@ -649,7 +649,7 @@ GAME_CUSTOM( 199?, m4denmendnc, m4denmen, "denc.p1", 0 GAME_CUSTOM( 199?, m4denmendnk, m4denmen, "denk.p1", 0x0000, 0x010000, CRC(8983cbe0) SHA1(159dcbc3f5d24b6be03ae9c3c2af58993bebd38c), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DEN 1.2K)" ) GAME_CUSTOM( 199?, m4denmendny, m4denmen, "deny.p1", 0x0000, 0x010000, CRC(83ebd9f6) SHA1(f59e9d34295df8200f85a51d725437954acf9bdc), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DEN 1.2Y)" ) -GAME_CUSTOM( 199?, m4denmend5, m4denmen, "dm5s.p1", 0x0000, 0x010000, CRC(49672daa) SHA1(92e327b59b532e58b8c2a4e507f56c2ae069420c), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1))" ) +GAME_CUSTOM( 199?, m4denmend5, m4denmen, "dm5s.p1", 0x0000, 0x010000, CRC(49672daa) SHA1(92e327b59b532e58b8c2a4e507f56c2ae069420c), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1)" ) GAME_CUSTOM( 199?, m4denmend5d, m4denmen, "dm5d.p1", 0x0000, 0x010000, CRC(0c6250d5) SHA1(56b316df56d6448137332044bfe1081401eef3e8), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1D)" ) GAME_CUSTOM( 199?, m4denmend5ad, m4denmen, "dm5ad.p1", 0x0000, 0x010000, CRC(f01125cc) SHA1(faa80bfb107db127b2f9c4c7d23ec495775d2162), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1AD)" ) GAME_CUSTOM( 199?, m4denmend5b, m4denmen, "dm5b.p1", 0x0000, 0x010000, CRC(2c6dae4c) SHA1(281e4ba31a60fb5600790f21095e697db80736b7), "Barcrest","Dennis The Menace (Barcrest) (MPU4) (DM5 0.1B)" ) @@ -906,62 +906,62 @@ GAME_CUSTOM( 199?, m4topten__b, m4topten, "topt15t", 0x0000, 0x020000, // "(C)1993 BARCREST" and "TOC 0.3" GAME_CUSTOM( 199?, m4toot, 0, "toc03s.p1", 0x0000, 0x020000, CRC(30feff92) SHA1(14397768ebd7469b4d1cff22ca9727f63608a98a), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3)" ) -GAME_CUSTOM( 199?, m4toot__j, m4toot, "toc03c.p1", 0x0000, 0x020000, CRC(752ffa3f) SHA1(6cbe521ff85173159b6d34cc3e29a4192cd66394), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 1)" ) -GAME_CUSTOM( 199?, m4toot__a, m4toot, "toc03ad.p1", 0x0000, 0x020000, CRC(f67e53c1) SHA1(07a50fb649c5085a33f0a1a9b3d65b0b61a3f152), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 2)" ) -GAME_CUSTOM( 199?, m4toot__b, m4toot, "toc03b.p1", 0x0000, 0x020000, CRC(4265472d) SHA1(01d5eb4e0a30abd1efed45658dcd8455494aabc4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4toot__c, m4toot, "toc03bd.p1", 0x0000, 0x020000, CRC(7b64fd04) SHA1(377af32317d8356f06b19de553a13e8558993c34), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4toot__d, m4toot, "toc03d.p1", 0x0000, 0x020000, CRC(61f6b566) SHA1(2abd8092fe387c474ed10885a23ac242fa1462fa), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4toot__e, m4toot, "toc03dk.p1", 0x0000, 0x020000, CRC(31a35552) SHA1(3765fe6209d7b33afa1805ba56376e83e825165f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4toot__f, m4toot, "toc03dr.p1", 0x0000, 0x020000, CRC(82acee63) SHA1(5a95425d6175c6496d745011d0ca3d744a027579), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4toot__g, m4toot, "toc03dy.p1", 0x0000, 0x020000, CRC(b64075ac) SHA1(ffdf8e45c2eab593570e15efd5161b67de5e4ecf), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4toot__h, m4toot, "toc03k.p1", 0x0000, 0x020000, CRC(08a2ef7b) SHA1(a4181db6280c7cc37b54baaf9cce1e61f61f3274), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4toot__i, m4toot, "toc03r.p1", 0x0000, 0x020000, CRC(bbad544a) SHA1(5fb31e5641a9e85147f5b61c5aba5a1ee7470f9c), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4toot__k, m4toot, "toc03y.p1", 0x0000, 0x020000, CRC(8f41cf85) SHA1(315b359d6d1a9f6ad939be1fc5e4d8f21f998fb8), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 12)" ) +GAME_CUSTOM( 199?, m4toot__j, m4toot, "toc03c.p1", 0x0000, 0x020000, CRC(752ffa3f) SHA1(6cbe521ff85173159b6d34cc3e29a4192cd66394), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 C)" ) +GAME_CUSTOM( 199?, m4toot__a, m4toot, "toc03ad.p1", 0x0000, 0x020000, CRC(f67e53c1) SHA1(07a50fb649c5085a33f0a1a9b3d65b0b61a3f152), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 AD)" ) +GAME_CUSTOM( 199?, m4toot__b, m4toot, "toc03b.p1", 0x0000, 0x020000, CRC(4265472d) SHA1(01d5eb4e0a30abd1efed45658dcd8455494aabc4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 B)" ) +GAME_CUSTOM( 199?, m4toot__c, m4toot, "toc03bd.p1", 0x0000, 0x020000, CRC(7b64fd04) SHA1(377af32317d8356f06b19de553a13e8558993c34), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 BD)" ) +GAME_CUSTOM( 199?, m4toot__d, m4toot, "toc03d.p1", 0x0000, 0x020000, CRC(61f6b566) SHA1(2abd8092fe387c474ed10885a23ac242fa1462fa), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 D)" ) +GAME_CUSTOM( 199?, m4toot__e, m4toot, "toc03dk.p1", 0x0000, 0x020000, CRC(31a35552) SHA1(3765fe6209d7b33afa1805ba56376e83e825165f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 KD)" ) +GAME_CUSTOM( 199?, m4toot__f, m4toot, "toc03dr.p1", 0x0000, 0x020000, CRC(82acee63) SHA1(5a95425d6175c6496d745011d0ca3d744a027579), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 RD)" ) +GAME_CUSTOM( 199?, m4toot__g, m4toot, "toc03dy.p1", 0x0000, 0x020000, CRC(b64075ac) SHA1(ffdf8e45c2eab593570e15efd5161b67de5e4ecf), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 YD)" ) +GAME_CUSTOM( 199?, m4toot__h, m4toot, "toc03k.p1", 0x0000, 0x020000, CRC(08a2ef7b) SHA1(a4181db6280c7cc37b54baaf9cce1e61f61f3274), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 K)" ) +GAME_CUSTOM( 199?, m4toot__i, m4toot, "toc03r.p1", 0x0000, 0x020000, CRC(bbad544a) SHA1(5fb31e5641a9e85147f5b61c5aba5a1ee7470f9c), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 R)" ) +GAME_CUSTOM( 199?, m4toot__k, m4toot, "toc03y.p1", 0x0000, 0x020000, CRC(8f41cf85) SHA1(315b359d6d1a9f6ad939be1fc5e4d8f21f998fb8), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 Y)" ) // "(C)1993 BARCREST" and "TOC 0.4" GAME_CUSTOM( 199?, m4toot__v, m4toot, "toc04s.p1", 0x0000, 0x020000, CRC(295e6fff) SHA1(a21d991f00f144e12de60b891e3e2e5dd7d08d71), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4)" ) -GAME_CUSTOM( 199?, m4toot__l, m4toot, "toc04ad.p1", 0x0000, 0x020000, CRC(59075e2e) SHA1(a3ad5c642fb9cebcce2fb6c1e65514f2414948e0), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4toot__m, m4toot, "toc04b.p1", 0x0000, 0x020000, CRC(b2d54721) SHA1(4c72d434c0f4f37b9a3f08a760c7fe3851717059), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4toot__n, m4toot, "toc04bd.p1", 0x0000, 0x020000, CRC(d41df0eb) SHA1(e5a04c728a2893073ff8b5f6efd7cffd433a2985), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4toot__o, m4toot, "toc04c.p1", 0x0000, 0x020000, CRC(859ffa33) SHA1(05b7bd3b87a0ebcc78de751766cfcdc4276035ac), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4toot__p, m4toot, "toc04d.p1", 0x0000, 0x020000, CRC(9146b56a) SHA1(04bcd265d83e3554aef2de05aab9c3869bb966ea), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4toot__q, m4toot, "toc04dk.p1", 0x0000, 0x020000, CRC(9eda58bd) SHA1(5e38f87a162d1cb37e74850af6a00ae81619ecbe), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4toot__r, m4toot, "toc04dr.p1", 0x0000, 0x020000, CRC(2dd5e38c) SHA1(a1b0e8d48e164ab91b277a7efedf5b9fc73fc266), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4toot__s, m4toot, "toc04dy.p1", 0x0000, 0x020000, CRC(19397843) SHA1(e7e3299d8e46c79d3cd0ea7fd639a1d649a806df), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4toot__t, m4toot, "toc04k.p1", 0x0000, 0x020000, CRC(f812ef77) SHA1(d465b771efed27a9f616052d3fcabdbeb7c2d151), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4toot__u, m4toot, "toc04r.p1", 0x0000, 0x020000, CRC(4b1d5446) SHA1(f4bac0c8257add41295679b3541d2064d8c772c2), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 22)" ) -GAME_CUSTOM( 199?, m4toot__w, m4toot, "toc04y.p1", 0x0000, 0x020000, CRC(7ff1cf89) SHA1(d4ab56b2b5b05643cd077b8d596b6cddf8a25134), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 24)" ) +GAME_CUSTOM( 199?, m4toot__l, m4toot, "toc04ad.p1", 0x0000, 0x020000, CRC(59075e2e) SHA1(a3ad5c642fb9cebcce2fb6c1e65514f2414948e0), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 AD)" ) +GAME_CUSTOM( 199?, m4toot__m, m4toot, "toc04b.p1", 0x0000, 0x020000, CRC(b2d54721) SHA1(4c72d434c0f4f37b9a3f08a760c7fe3851717059), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 B)" ) +GAME_CUSTOM( 199?, m4toot__n, m4toot, "toc04bd.p1", 0x0000, 0x020000, CRC(d41df0eb) SHA1(e5a04c728a2893073ff8b5f6efd7cffd433a2985), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 BD)" ) +GAME_CUSTOM( 199?, m4toot__o, m4toot, "toc04c.p1", 0x0000, 0x020000, CRC(859ffa33) SHA1(05b7bd3b87a0ebcc78de751766cfcdc4276035ac), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 C)" ) +GAME_CUSTOM( 199?, m4toot__p, m4toot, "toc04d.p1", 0x0000, 0x020000, CRC(9146b56a) SHA1(04bcd265d83e3554aef2de05aab9c3869bb966ea), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 D)" ) +GAME_CUSTOM( 199?, m4toot__q, m4toot, "toc04dk.p1", 0x0000, 0x020000, CRC(9eda58bd) SHA1(5e38f87a162d1cb37e74850af6a00ae81619ecbe), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 KD)" ) +GAME_CUSTOM( 199?, m4toot__r, m4toot, "toc04dr.p1", 0x0000, 0x020000, CRC(2dd5e38c) SHA1(a1b0e8d48e164ab91b277a7efedf5b9fc73fc266), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 RD)" ) +GAME_CUSTOM( 199?, m4toot__s, m4toot, "toc04dy.p1", 0x0000, 0x020000, CRC(19397843) SHA1(e7e3299d8e46c79d3cd0ea7fd639a1d649a806df), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 YD)" ) +GAME_CUSTOM( 199?, m4toot__t, m4toot, "toc04k.p1", 0x0000, 0x020000, CRC(f812ef77) SHA1(d465b771efed27a9f616052d3fcabdbeb7c2d151), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 K)" ) +GAME_CUSTOM( 199?, m4toot__u, m4toot, "toc04r.p1", 0x0000, 0x020000, CRC(4b1d5446) SHA1(f4bac0c8257add41295679b3541d2064d8c772c2), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 R)" ) +GAME_CUSTOM( 199?, m4toot__w, m4toot, "toc04y.p1", 0x0000, 0x020000, CRC(7ff1cf89) SHA1(d4ab56b2b5b05643cd077b8d596b6cddf8a25134), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.4 Y)" ) // "(C)1993 BARCREST" and "TOT 0.5" GAME_CUSTOM( 199?, m4toot__7, m4toot, "tot05s.p1", 0x0000, 0x020000, CRC(7dd1cfa8) SHA1(3bd0eeb621cc81ac462a6981e081837985f6635b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5)" ) -GAME_CUSTOM( 199?, m4toot__x, m4toot, "tot05ad.p1", 0x0000, 0x020000, CRC(fce00fcc) SHA1(7d10c0b83d782a9e603522ed039089866d931474), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4toot__y, m4toot, "tot05b.p1", 0x0000, 0x020000, CRC(594d551c) SHA1(3fcec5f41cfbea497aa53af4570664265774d1aa), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4toot__z, m4toot, "tot05bd.p1", 0x0000, 0x020000, CRC(71faa109) SHA1(8bec4a03e2dc43656c910652cf10d1afdf0bab33), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4toot__0, m4toot, "tot05c.p1", 0x0000, 0x020000, CRC(6e07e80e) SHA1(087a51da5578c326d7d9716c61b454be5e091761), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 28)" ) -GAME_CUSTOM( 199?, m4toot__1, m4toot, "tot05d.p1", 0x0000, 0x020000, CRC(24565e6a) SHA1(0f2c19e54e5a78ae10e786d49ebcd7c16e41850c), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 29)" ) -GAME_CUSTOM( 199?, m4toot__2, m4toot, "tot05dk.p1", 0x0000, 0x020000, CRC(3b3d095f) SHA1(326574adaa285a479abb5ae7515ef7d6bdd64126), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 30)" ) -GAME_CUSTOM( 199?, m4toot__3, m4toot, "tot05dr.p1", 0x0000, 0x020000, CRC(8832b26e) SHA1(d5414560245bbb2c070f7a035e5e3416617c2cf3), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 31)" ) -GAME_CUSTOM( 199?, m4toot__4, m4toot, "tot05dy.p1", 0x0000, 0x020000, CRC(bcde29a1) SHA1(cf8af40faf81a2a3141d3addd6b28c917beeda49), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4toot__5, m4toot, "tot05k.p1", 0x0000, 0x020000, CRC(138afd4a) SHA1(bc53d71d926da7aca74c79f45c47610e62e347b6), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4toot__6, m4toot, "tot05r.p1", 0x0000, 0x020000, CRC(a085467b) SHA1(de2deda7635c9565db0f69aa6f375216ed36b7bb), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4toot__8, m4toot, "tot05y.p1", 0x0000, 0x020000, CRC(9469ddb4) SHA1(553812e3ece921d31c585b6a412c00ea5095b1b0), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 36)" ) +GAME_CUSTOM( 199?, m4toot__x, m4toot, "tot05ad.p1", 0x0000, 0x020000, CRC(fce00fcc) SHA1(7d10c0b83d782a9e603522ed039089866d931474), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 AD)" ) +GAME_CUSTOM( 199?, m4toot__y, m4toot, "tot05b.p1", 0x0000, 0x020000, CRC(594d551c) SHA1(3fcec5f41cfbea497aa53af4570664265774d1aa), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 B)" ) +GAME_CUSTOM( 199?, m4toot__z, m4toot, "tot05bd.p1", 0x0000, 0x020000, CRC(71faa109) SHA1(8bec4a03e2dc43656c910652cf10d1afdf0bab33), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 BD)" ) +GAME_CUSTOM( 199?, m4toot__0, m4toot, "tot05c.p1", 0x0000, 0x020000, CRC(6e07e80e) SHA1(087a51da5578c326d7d9716c61b454be5e091761), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 C)" ) +GAME_CUSTOM( 199?, m4toot__1, m4toot, "tot05d.p1", 0x0000, 0x020000, CRC(24565e6a) SHA1(0f2c19e54e5a78ae10e786d49ebcd7c16e41850c), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 D)" ) +GAME_CUSTOM( 199?, m4toot__2, m4toot, "tot05dk.p1", 0x0000, 0x020000, CRC(3b3d095f) SHA1(326574adaa285a479abb5ae7515ef7d6bdd64126), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 KD)" ) +GAME_CUSTOM( 199?, m4toot__3, m4toot, "tot05dr.p1", 0x0000, 0x020000, CRC(8832b26e) SHA1(d5414560245bbb2c070f7a035e5e3416617c2cf3), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 RD)" ) +GAME_CUSTOM( 199?, m4toot__4, m4toot, "tot05dy.p1", 0x0000, 0x020000, CRC(bcde29a1) SHA1(cf8af40faf81a2a3141d3addd6b28c917beeda49), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 YD)" ) +GAME_CUSTOM( 199?, m4toot__5, m4toot, "tot05k.p1", 0x0000, 0x020000, CRC(138afd4a) SHA1(bc53d71d926da7aca74c79f45c47610e62e347b6), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 K)" ) +GAME_CUSTOM( 199?, m4toot__6, m4toot, "tot05r.p1", 0x0000, 0x020000, CRC(a085467b) SHA1(de2deda7635c9565db0f69aa6f375216ed36b7bb), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 R)" ) +GAME_CUSTOM( 199?, m4toot__8, m4toot, "tot05y.p1", 0x0000, 0x020000, CRC(9469ddb4) SHA1(553812e3ece921d31c585b6a412c00ea5095b1b0), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.5 Y)" ) // "(C)1993 BARCREST" and "TOT 0.6" GAME_CUSTOM( 199?, m4toot__aj, m4toot, "tot06s.p1", 0x0000, 0x020000, CRC(c6140fea) SHA1(c2257dd84bf97b71580e8b873fc745dfa456ddd9), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6)" ) -GAME_CUSTOM( 199?, m4toot__9, m4toot, "tot06ad.p1", 0x0000, 0x020000, CRC(ebe50569) SHA1(1906f1a8d47cc9ee3fa703ad57b180f8a4cdcf89), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4toot__aa, m4toot, "tot06b.p1", 0x0000, 0x020000, CRC(4d5a8ebe) SHA1(d30da9ce729fed7ad42b30d522b2b6d65a462b84), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4toot__ab, m4toot, "tot06bd.p1", 0x0000, 0x020000, CRC(66ffabac) SHA1(25822e42a58173b8f51dcbbd98d041b261e675e4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4toot__ac, m4toot, "tot06c.p1", 0x0000, 0x020000, CRC(7a1033ac) SHA1(9d3c2f521574f405e1da81b605581bc4b6f011a4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4toot__ad, m4toot, "tot06d.p1", 0x0000, 0x020000, CRC(304185c8) SHA1(f7ef4fce3ce9a455f39766ae97ebfbf93418e019), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4toot__ae, m4toot, "tot06dk.p1", 0x0000, 0x020000, CRC(2c3803fa) SHA1(68c83ccdd1f776376608918d9a1257fe64ce3a9b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 42)" ) -GAME_CUSTOM( 199?, m4toot__af, m4toot, "tot06dr.p1", 0x0000, 0x020000, CRC(9f37b8cb) SHA1(3eb2f843dc4f87b7bfe16da1d133750ad7075a71), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 43)" ) -GAME_CUSTOM( 199?, m4toot__ag, m4toot, "tot06dy.p1", 0x0000, 0x020000, CRC(abdb2304) SHA1(1c29f4176306f472323388f8c34b102930fb9f5f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4toot__ah, m4toot, "tot06k.p1", 0x0000, 0x020000, CRC(079d26e8) SHA1(60e3d02d62f6fde6bdf4b9e77702549d493ccf09), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 45)" ) -GAME_CUSTOM( 199?, m4toot__ai, m4toot, "tot06r.p1", 0x0000, 0x020000, CRC(b4929dd9) SHA1(fa3d99b8f6344c9511ecc864d4fff4629b105b5f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 46)" ) -GAME_CUSTOM( 199?, m4toot__ak, m4toot, "tot06y.p1", 0x0000, 0x020000, CRC(807e0616) SHA1(2a3f89239a7fa43dfde90dd7ad929747e888074b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (set 48)" ) +GAME_CUSTOM( 199?, m4toot__9, m4toot, "tot06ad.p1", 0x0000, 0x020000, CRC(ebe50569) SHA1(1906f1a8d47cc9ee3fa703ad57b180f8a4cdcf89), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 AD)" ) +GAME_CUSTOM( 199?, m4toot__aa, m4toot, "tot06b.p1", 0x0000, 0x020000, CRC(4d5a8ebe) SHA1(d30da9ce729fed7ad42b30d522b2b6d65a462b84), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 B)" ) +GAME_CUSTOM( 199?, m4toot__ab, m4toot, "tot06bd.p1", 0x0000, 0x020000, CRC(66ffabac) SHA1(25822e42a58173b8f51dcbbd98d041b261e675e4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 BD)" ) +GAME_CUSTOM( 199?, m4toot__ac, m4toot, "tot06c.p1", 0x0000, 0x020000, CRC(7a1033ac) SHA1(9d3c2f521574f405e1da81b605581bc4b6f011a4), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 C)" ) +GAME_CUSTOM( 199?, m4toot__ad, m4toot, "tot06d.p1", 0x0000, 0x020000, CRC(304185c8) SHA1(f7ef4fce3ce9a455f39766ae97ebfbf93418e019), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 D)" ) +GAME_CUSTOM( 199?, m4toot__ae, m4toot, "tot06dk.p1", 0x0000, 0x020000, CRC(2c3803fa) SHA1(68c83ccdd1f776376608918d9a1257fe64ce3a9b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 KD)" ) +GAME_CUSTOM( 199?, m4toot__af, m4toot, "tot06dr.p1", 0x0000, 0x020000, CRC(9f37b8cb) SHA1(3eb2f843dc4f87b7bfe16da1d133750ad7075a71), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 RD)" ) +GAME_CUSTOM( 199?, m4toot__ag, m4toot, "tot06dy.p1", 0x0000, 0x020000, CRC(abdb2304) SHA1(1c29f4176306f472323388f8c34b102930fb9f5f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 YD)" ) +GAME_CUSTOM( 199?, m4toot__ah, m4toot, "tot06k.p1", 0x0000, 0x020000, CRC(079d26e8) SHA1(60e3d02d62f6fde6bdf4b9e77702549d493ccf09), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 K)" ) +GAME_CUSTOM( 199?, m4toot__ai, m4toot, "tot06r.p1", 0x0000, 0x020000, CRC(b4929dd9) SHA1(fa3d99b8f6344c9511ecc864d4fff4629b105b5f), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 R)" ) +GAME_CUSTOM( 199?, m4toot__ak, m4toot, "tot06y.p1", 0x0000, 0x020000, CRC(807e0616) SHA1(2a3f89239a7fa43dfde90dd7ad929747e888074b), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.6 Y)" ) // "(C)1993 BARCREST" and "TOC 0.1" GAME_CUSTOM( 199?, m4toot__al, m4toot, "tten2010", 0x0000, 0x020000, CRC(28373e9a) SHA1(496df7b511b950b5affe9d65c80037f3ecddc5f8), "Barcrest","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.1)" ) // no copyright string and "TOC 0.3" -GAME_CUSTOM( 199?, m4toot__za, m4toot, "tot15g", 0x0000, 0x020000, CRC(1f9508ad) SHA1(33089ea05f6adecf8f4004aa1e4d626969b6ac3a), "hack?","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3, hack?)" ) +GAME_CUSTOM( 199?, m4toot__za, m4toot, "tot15g", 0x0000, 0x020000, CRC(1f9508ad) SHA1(33089ea05f6adecf8f4004aa1e4d626969b6ac3a), "hack?","Ten Out Of Ten (Barcrest) (MPU4) (TOC 0.3 Y, hack?)" ) // no copyright string and "TOT 0.4" -GAME_CUSTOM( 199?, m4toot__zb, m4toot, "tot15t", 0x0000, 0x020000, CRC(1ce7f467) SHA1(cf47a126500680107a2f31743c3fff8290b595b8), "hack?","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4, hack?)" ) +GAME_CUSTOM( 199?, m4toot__zb, m4toot, "tot15t", 0x0000, 0x020000, CRC(1ce7f467) SHA1(cf47a126500680107a2f31743c3fff8290b595b8), "hack?","Ten Out Of Ten (Barcrest) (MPU4) (TOT 0.4 Y, hack?)" ) #define M4EAW_EXTRA_ROMS \ ROM_REGION( 0x48, "fakechr", 0 ) \ @@ -980,110 +980,110 @@ GAME_CUSTOM( 199?, m4toot__zb, m4toot, "tot15t", 0x0000, 0x020000, CRC(1 // "(C)1991 BARCREST" and "ER4 0.2" GAME_CUSTOM( 199?, m4eaw, 0, "er4s.p1", 0x0000, 0x010000, CRC(163fc987) SHA1(8e1768ed2fbddbd5e00652ff40614de3978c9567), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2)" ) -GAME_CUSTOM( 199?, m4eaw__av, m4eaw, "er4ad.p1", 0x0000, 0x010000, CRC(93fff89d) SHA1(3f90168efa5ecaf7707ef357616638a9d5ab746f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 59)" ) -GAME_CUSTOM( 199?, m4eaw__aw, m4eaw, "er4b.p1", 0x0000, 0x010000, CRC(cb39fda7) SHA1(4a31d2ff53942a658992a5e13c2b617da5fb03ce), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 60)" ) -GAME_CUSTOM( 199?, m4eaw__ax, m4eaw, "er4bd.p1", 0x0000, 0x010000, CRC(a5e395d7) SHA1(3f134a2ce3788ac84a6de096306c651e6b2d6a4a), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 61)" ) -GAME_CUSTOM( 199?, m4eaw__ay, m4eaw, "er4d.p1", 0x0000, 0x010000, CRC(33612923) SHA1(1129ced207aaf46045f20a1ef1a37af8ec537bb0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 62)" ) -GAME_CUSTOM( 199?, m4eaw__az, m4eaw, "er4dk.p1", 0x0000, 0x010000, CRC(df41d570) SHA1(4a2db04ee51bb811ac3aee5b2c3c1f1a2201f7ec), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 63)" ) -GAME_CUSTOM( 199?, m4eaw__a0, m4eaw, "er4dy.p1", 0x0000, 0x010000, CRC(7df882e6) SHA1(1246220a5ac8a4454a7f3a359a5a00319395095d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 64)" ) -GAME_CUSTOM( 199?, m4eaw__a1, m4eaw, "er4k.p1", 0x0000, 0x010000, CRC(9803cc0d) SHA1(1516c3836919a7a2cc32711a9bf2d3bf3d6b82c0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 65)" ) -GAME_CUSTOM( 199?, m4eaw__a2, m4eaw, "er4y.p1", 0x0000, 0x010000, CRC(d8dece2d) SHA1(8482092434e1e94e6648e402c8b518c2f0fcc28e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 66)" ) +GAME_CUSTOM( 199?, m4eaw__av, m4eaw, "er4ad.p1", 0x0000, 0x010000, CRC(93fff89d) SHA1(3f90168efa5ecaf7707ef357616638a9d5ab746f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 AD)" ) +GAME_CUSTOM( 199?, m4eaw__aw, m4eaw, "er4b.p1", 0x0000, 0x010000, CRC(cb39fda7) SHA1(4a31d2ff53942a658992a5e13c2b617da5fb03ce), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 B)" ) +GAME_CUSTOM( 199?, m4eaw__ax, m4eaw, "er4bd.p1", 0x0000, 0x010000, CRC(a5e395d7) SHA1(3f134a2ce3788ac84a6de096306c651e6b2d6a4a), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 BD)" ) +GAME_CUSTOM( 199?, m4eaw__ay, m4eaw, "er4d.p1", 0x0000, 0x010000, CRC(33612923) SHA1(1129ced207aaf46045f20a1ef1a37af8ec537bb0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 D)" ) +GAME_CUSTOM( 199?, m4eaw__az, m4eaw, "er4dk.p1", 0x0000, 0x010000, CRC(df41d570) SHA1(4a2db04ee51bb811ac3aee5b2c3c1f1a2201f7ec), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 KD)" ) +GAME_CUSTOM( 199?, m4eaw__a0, m4eaw, "er4dy.p1", 0x0000, 0x010000, CRC(7df882e6) SHA1(1246220a5ac8a4454a7f3a359a5a00319395095d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 YD)" ) +GAME_CUSTOM( 199?, m4eaw__a1, m4eaw, "er4k.p1", 0x0000, 0x010000, CRC(9803cc0d) SHA1(1516c3836919a7a2cc32711a9bf2d3bf3d6b82c0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 K)" ) +GAME_CUSTOM( 199?, m4eaw__a2, m4eaw, "er4y.p1", 0x0000, 0x010000, CRC(d8dece2d) SHA1(8482092434e1e94e6648e402c8b518c2f0fcc28e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER4 0.2 Y)" ) // "(C)1991 BARCREST" and "ER4 0.3" (startup is CET 0.3) -GAME_CUSTOM( 199?, m4eaw__j, m4eaw, "cet03s.p1", 0x0000, 0x010000, CRC(bec3ea51) SHA1(740a73da105d8329dc9ceaa5e8c25b305124e2dd), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET0.3 / ER4 0.3)" ) -GAME_CUSTOM( 199?, m4eaw__a, m4eaw, "cet03ad.p1", 0x0000, 0x010000, CRC(33afe7a5) SHA1(5d3bdb74c6babd49e88915282ad81c184bd7aa68), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 2)" ) -GAME_CUSTOM( 199?, m4eaw__b, m4eaw, "cet03b.p1", 0x0000, 0x010000, CRC(7674e2a5) SHA1(188e683eac91f64fe563b0f09f2b934e709c47fb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4eaw__c, m4eaw, "cet03bd.p1", 0x0000, 0x010000, CRC(406843a2) SHA1(7d4bf6cd3c5be0f6df687b0ba97b3b88fd377170), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4eaw__d, m4eaw, "cet03d.p1", 0x0000, 0x010000, CRC(2c03d5b6) SHA1(e79fd15b6a05168eb08dcd2b5f7e00d015618a22), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4eaw__e, m4eaw, "cet03dk.p1", 0x0000, 0x010000, CRC(7a81b524) SHA1(71856b90379af946fbc9263f596a16e1701f3564), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4eaw__f, m4eaw, "cet03dr.p1", 0x0000, 0x010000, CRC(63a5622a) SHA1(1e3cf5487623b850598d21c0bb5ef8a0b9dffd4f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4eaw__g, m4eaw, "cet03dy.p1", 0x0000, 0x010000, CRC(fece4ac4) SHA1(badf4f94d565958fc9f42a443f53ec9624925ee1), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4eaw__h, m4eaw, "cet03k.p1", 0x0000, 0x010000, CRC(f6531a43) SHA1(75ec5c8fc0012fee144daab7761f3717c17fa22d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4eaw__i, m4eaw, "cet03r.p1", 0x0000, 0x010000, CRC(fec4a6c0) SHA1(89fac7e4df77f526d0e357f1874b73be932548ce), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4eaw__k, m4eaw, "cet03y.p1", 0x0000, 0x010000, CRC(63af8e2e) SHA1(97b9dd02bf8a72ca0be7c1a9cb753fbd55644497), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 12)" ) +GAME_CUSTOM( 199?, m4eaw__j, m4eaw, "cet03s.p1", 0x0000, 0x010000, CRC(bec3ea51) SHA1(740a73da105d8329dc9ceaa5e8c25b305124e2dd), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__a, m4eaw, "cet03ad.p1", 0x0000, 0x010000, CRC(33afe7a5) SHA1(5d3bdb74c6babd49e88915282ad81c184bd7aa68), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 AD / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__b, m4eaw, "cet03b.p1", 0x0000, 0x010000, CRC(7674e2a5) SHA1(188e683eac91f64fe563b0f09f2b934e709c47fb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 B / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__c, m4eaw, "cet03bd.p1", 0x0000, 0x010000, CRC(406843a2) SHA1(7d4bf6cd3c5be0f6df687b0ba97b3b88fd377170), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 BD / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__d, m4eaw, "cet03d.p1", 0x0000, 0x010000, CRC(2c03d5b6) SHA1(e79fd15b6a05168eb08dcd2b5f7e00d015618a22), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 D / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__e, m4eaw, "cet03dk.p1", 0x0000, 0x010000, CRC(7a81b524) SHA1(71856b90379af946fbc9263f596a16e1701f3564), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 KD / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__f, m4eaw, "cet03dr.p1", 0x0000, 0x010000, CRC(63a5622a) SHA1(1e3cf5487623b850598d21c0bb5ef8a0b9dffd4f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 RD / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__g, m4eaw, "cet03dy.p1", 0x0000, 0x010000, CRC(fece4ac4) SHA1(badf4f94d565958fc9f42a443f53ec9624925ee1), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 YD / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__h, m4eaw, "cet03k.p1", 0x0000, 0x010000, CRC(f6531a43) SHA1(75ec5c8fc0012fee144daab7761f3717c17fa22d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 K / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__i, m4eaw, "cet03r.p1", 0x0000, 0x010000, CRC(fec4a6c0) SHA1(89fac7e4df77f526d0e357f1874b73be932548ce), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 R / ER4 0.3)" ) +GAME_CUSTOM( 199?, m4eaw__k, m4eaw, "cet03y.p1", 0x0000, 0x010000, CRC(63af8e2e) SHA1(97b9dd02bf8a72ca0be7c1a9cb753fbd55644497), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CET 0.3 Y / ER4 0.3)" ) // "(C)1991 BARCREST" and "ER4 0.2" (startup is CEU 0.2) -GAME_CUSTOM( 199?, m4eaw__u, m4eaw, "ceu02s.p1", 0x0000, 0x010000, CRC(d52099e6) SHA1(10f1acb948fa7c4b547f801ddb5e15111992ca91), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU0.2 / ER4 0.2)" ) -GAME_CUSTOM( 199?, m4eaw__l, m4eaw, "ceu02ad.p1", 0x0000, 0x010000, CRC(5805182c) SHA1(c15ef2e05061fd89944b039f007d92bc4bdf66d5), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4eaw__m, m4eaw, "ceu02b.p1", 0x0000, 0x010000, CRC(cbf62a02) SHA1(20fb16ac4602d4e386e5dc01e1b7e83c459f614d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4eaw__n, m4eaw, "ceu02bd.p1", 0x0000, 0x010000, CRC(6e197566) SHA1(16f44ca77bc02c7eb186c3684b4e837da0d73553), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4eaw__o, m4eaw, "ceu02d.p1", 0x0000, 0x010000, CRC(470cab31) SHA1(f42045f25022cc5e4b07a687f55f7698435b550e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4eaw__p, m4eaw, "ceu02dk.p1", 0x0000, 0x010000, CRC(bea24ff7) SHA1(1bf8464136732ee8433c73747e854be3c991a2fe), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4eaw__q, m4eaw, "ceu02dr.p1", 0x0000, 0x010000, CRC(3e2e4183) SHA1(e52bca2913509f26af9ca4a93ab2a2bbf74d1ac9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4eaw__r, m4eaw, "ceu02dy.p1", 0x0000, 0x010000, CRC(a345696d) SHA1(a189eb6a6a6a83fe0d490f4a7c8e9c4c52aa91f7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4eaw__s, m4eaw, "ceu02k.p1", 0x0000, 0x010000, CRC(0e0a1ba9) SHA1(e1ee2595a3fd4fe874f50dc027f6c931636aadcc), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4eaw__t, m4eaw, "ceu02r.p1", 0x0000, 0x010000, CRC(1a882a6a) SHA1(c966be957e7a78c33a28afd79ba60c69a6de42b8), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4eaw__v, m4eaw, "ceu02y.p1", 0x0000, 0x010000, CRC(87e30284) SHA1(4c598a33b73cfe6338c0f51408f2a6c1abfa978b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 23)" ) +GAME_CUSTOM( 199?, m4eaw__u, m4eaw, "ceu02s.p1", 0x0000, 0x010000, CRC(d52099e6) SHA1(10f1acb948fa7c4b547f801ddb5e15111992ca91), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__l, m4eaw, "ceu02ad.p1", 0x0000, 0x010000, CRC(5805182c) SHA1(c15ef2e05061fd89944b039f007d92bc4bdf66d5), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 AD / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__m, m4eaw, "ceu02b.p1", 0x0000, 0x010000, CRC(cbf62a02) SHA1(20fb16ac4602d4e386e5dc01e1b7e83c459f614d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 B / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__n, m4eaw, "ceu02bd.p1", 0x0000, 0x010000, CRC(6e197566) SHA1(16f44ca77bc02c7eb186c3684b4e837da0d73553), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 BD / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__o, m4eaw, "ceu02d.p1", 0x0000, 0x010000, CRC(470cab31) SHA1(f42045f25022cc5e4b07a687f55f7698435b550e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 D / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__p, m4eaw, "ceu02dk.p1", 0x0000, 0x010000, CRC(bea24ff7) SHA1(1bf8464136732ee8433c73747e854be3c991a2fe), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 KD / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__q, m4eaw, "ceu02dr.p1", 0x0000, 0x010000, CRC(3e2e4183) SHA1(e52bca2913509f26af9ca4a93ab2a2bbf74d1ac9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 RD / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__r, m4eaw, "ceu02dy.p1", 0x0000, 0x010000, CRC(a345696d) SHA1(a189eb6a6a6a83fe0d490f4a7c8e9c4c52aa91f7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 YD / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__s, m4eaw, "ceu02k.p1", 0x0000, 0x010000, CRC(0e0a1ba9) SHA1(e1ee2595a3fd4fe874f50dc027f6c931636aadcc), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 K / ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__t, m4eaw, "ceu02r.p1", 0x0000, 0x010000, CRC(1a882a6a) SHA1(c966be957e7a78c33a28afd79ba60c69a6de42b8), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 R/ ER4 0.2)" ) +GAME_CUSTOM( 199?, m4eaw__v, m4eaw, "ceu02y.p1", 0x0000, 0x010000, CRC(87e30284) SHA1(4c598a33b73cfe6338c0f51408f2a6c1abfa978b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (CEU 0.2 Y / ER4 0.2)" ) // "(C)1991 BARCREST" and "ER4 0.1" (startup is ENN 0.1) GAME_CUSTOM( 199?, m4eaw__6, m4eaw, "enn01s.p1", 0x0000, 0x010000, CRC(d0ba447d) SHA1(744d5448c5318287e58994b684e116ac1a236f05), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 / ER4 0.1)" ) -GAME_CUSTOM( 199?, m4eaw__w, m4eaw, "enn01ad.p1", 0x0000, 0x010000, CRC(913ba1d6) SHA1(1167ccce2f0b528ec8eba140b1f9c8358fa19f54), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4eaw__x, m4eaw, "enn01b.p1", 0x0000, 0x010000, CRC(76cf750c) SHA1(7f3ede643c5b92d9e313c4450a0d4ef3bd9eefd3), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4eaw__y, m4eaw, "enn01bd.p1", 0x0000, 0x010000, CRC(c6c29211) SHA1(a49759c4c00633405a338eeb89fcb00f7503990c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4eaw__z, m4eaw, "enn01c.p1", 0x0000, 0x010000, CRC(1ea8f766) SHA1(3f08da014727b50e0375b8470a37c75042b089c6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4eaw__0, m4eaw, "enn01d.p1", 0x0000, 0x010000, CRC(3691905e) SHA1(131b3384c2399b214fb70670c9945be4afdb470e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 28)" ) -GAME_CUSTOM( 199?, m4eaw__1, m4eaw, "enn01dk.p1", 0x0000, 0x010000, CRC(1abb5196) SHA1(952451f637d890a51a2567b5b02826f7647e5deb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 29)" ) -GAME_CUSTOM( 199?, m4eaw__2, m4eaw, "enn01dr.p1", 0x0000, 0x010000, CRC(e50fb399) SHA1(5d4d5a933efe7e122e4d0cecab9b7e6f01398a8f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 30)" ) -GAME_CUSTOM( 199?, m4eaw__3, m4eaw, "enn01dy.p1", 0x0000, 0x010000, CRC(be3e5901) SHA1(ea3f366724135682da7cddad3c82e5f4c434f4a9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 31)" ) -GAME_CUSTOM( 199?, m4eaw__4, m4eaw, "enn01k.p1", 0x0000, 0x010000, CRC(273d7b10) SHA1(5577355c918407e548266a16b225e8a4f58c921c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4eaw__5, m4eaw, "enn01r.p1", 0x0000, 0x010000, CRC(aee3f31e) SHA1(72676bc6b3bc287bf3bd3e7719848b40aa1b3627), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4eaw__7, m4eaw, "enn01y.p1", 0x0000, 0x010000, CRC(91a73867) SHA1(5197fcd5bf3dc036095b8291d7b23776995d84d1), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 35)" ) +GAME_CUSTOM( 199?, m4eaw__w, m4eaw, "enn01ad.p1", 0x0000, 0x010000, CRC(913ba1d6) SHA1(1167ccce2f0b528ec8eba140b1f9c8358fa19f54), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 AD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__x, m4eaw, "enn01b.p1", 0x0000, 0x010000, CRC(76cf750c) SHA1(7f3ede643c5b92d9e313c4450a0d4ef3bd9eefd3), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 B / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__y, m4eaw, "enn01bd.p1", 0x0000, 0x010000, CRC(c6c29211) SHA1(a49759c4c00633405a338eeb89fcb00f7503990c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 BD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__z, m4eaw, "enn01c.p1", 0x0000, 0x010000, CRC(1ea8f766) SHA1(3f08da014727b50e0375b8470a37c75042b089c6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 C / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__0, m4eaw, "enn01d.p1", 0x0000, 0x010000, CRC(3691905e) SHA1(131b3384c2399b214fb70670c9945be4afdb470e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 D / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__1, m4eaw, "enn01dk.p1", 0x0000, 0x010000, CRC(1abb5196) SHA1(952451f637d890a51a2567b5b02826f7647e5deb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 KD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__2, m4eaw, "enn01dr.p1", 0x0000, 0x010000, CRC(e50fb399) SHA1(5d4d5a933efe7e122e4d0cecab9b7e6f01398a8f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 RD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__3, m4eaw, "enn01dy.p1", 0x0000, 0x010000, CRC(be3e5901) SHA1(ea3f366724135682da7cddad3c82e5f4c434f4a9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 YD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__4, m4eaw, "enn01k.p1", 0x0000, 0x010000, CRC(273d7b10) SHA1(5577355c918407e548266a16b225e8a4f58c921c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 K / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__5, m4eaw, "enn01r.p1", 0x0000, 0x010000, CRC(aee3f31e) SHA1(72676bc6b3bc287bf3bd3e7719848b40aa1b3627), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 R / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__7, m4eaw, "enn01y.p1", 0x0000, 0x010000, CRC(91a73867) SHA1(5197fcd5bf3dc036095b8291d7b23776995d84d1), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ENN 0.1 Y / ER4 0.1)" ) // "(C)1991 BARCREST" and "ER4 0.1" (startup is EON 0.1) GAME_CUSTOM( 199?, m4eaw__ai, m4eaw, "eon01s.p1", 0x0000, 0x010000, CRC(e2e9ce10) SHA1(41a08b17285d6591b4a5cb6b1b6cc40ee7d35f01), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 / ER4 0.1)" ) -GAME_CUSTOM( 199?, m4eaw__8, m4eaw, "eon01ad.p1", 0x0000, 0x010000, CRC(998b0e8d) SHA1(f2d0c43073d76d662c3a997b1fd081016e4c7a7d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 36)" ) -GAME_CUSTOM( 199?, m4eaw__9, m4eaw, "eon01b.p1", 0x0000, 0x010000, CRC(66f281db) SHA1(b9bd37c53ab7c8838ec87062c8b9da39779b9fa9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4eaw__aa, m4eaw, "eon01bd.p1", 0x0000, 0x010000, CRC(66a378ca) SHA1(6639f36df67af8bdd381ad3e16e0adc78a4552f4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4eaw__ab, m4eaw, "eon01c.p1", 0x0000, 0x010000, CRC(d02e2c30) SHA1(34f1be5f49d50f468bffc425fa2e9d0f8afcf70b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4eaw__ac, m4eaw, "eon01d.p1", 0x0000, 0x010000, CRC(a2752f68) SHA1(3a47ced5259c6f690b03c3a884f1d25bd68e0d3f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4eaw__ad, m4eaw, "eon01dk.p1", 0x0000, 0x010000, CRC(efd60656) SHA1(9383a7b183266f75edd3ae519e8dfff858f015c4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4eaw__ae, m4eaw, "eon01dr.p1", 0x0000, 0x010000, CRC(1062e459) SHA1(de334cdecde0dd414e016e11a54720dee903393c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 42)" ) -GAME_CUSTOM( 199?, m4eaw__af, m4eaw, "eon01dy.p1", 0x0000, 0x010000, CRC(d5a39761) SHA1(9b69f9e45d87f53196e5d4fd595300beb573ff49), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 43)" ) -GAME_CUSTOM( 199?, m4eaw__ag, m4eaw, "eon01k.p1", 0x0000, 0x010000, CRC(1d34dea7) SHA1(546db8247d0c78501fe4ec818d614e8f451b0076), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4eaw__ah, m4eaw, "eon01r.p1", 0x0000, 0x010000, CRC(7c70a508) SHA1(2c5835f36ef4c215ff9f6f6cc350f0916b397b7b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 45)" ) -GAME_CUSTOM( 199?, m4eaw__aj, m4eaw, "eon01y.p1", 0x0000, 0x010000, CRC(ddc4f7d1) SHA1(bbc21ba153541df1507e01d4a25a1a669c8eab62), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 47)" ) +GAME_CUSTOM( 199?, m4eaw__8, m4eaw, "eon01ad.p1", 0x0000, 0x010000, CRC(998b0e8d) SHA1(f2d0c43073d76d662c3a997b1fd081016e4c7a7d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 AD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__9, m4eaw, "eon01b.p1", 0x0000, 0x010000, CRC(66f281db) SHA1(b9bd37c53ab7c8838ec87062c8b9da39779b9fa9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 B / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__aa, m4eaw, "eon01bd.p1", 0x0000, 0x010000, CRC(66a378ca) SHA1(6639f36df67af8bdd381ad3e16e0adc78a4552f4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 BD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__ab, m4eaw, "eon01c.p1", 0x0000, 0x010000, CRC(d02e2c30) SHA1(34f1be5f49d50f468bffc425fa2e9d0f8afcf70b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 C / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__ac, m4eaw, "eon01d.p1", 0x0000, 0x010000, CRC(a2752f68) SHA1(3a47ced5259c6f690b03c3a884f1d25bd68e0d3f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 D / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__ad, m4eaw, "eon01dk.p1", 0x0000, 0x010000, CRC(efd60656) SHA1(9383a7b183266f75edd3ae519e8dfff858f015c4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 KD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__ae, m4eaw, "eon01dr.p1", 0x0000, 0x010000, CRC(1062e459) SHA1(de334cdecde0dd414e016e11a54720dee903393c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 RD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__af, m4eaw, "eon01dy.p1", 0x0000, 0x010000, CRC(d5a39761) SHA1(9b69f9e45d87f53196e5d4fd595300beb573ff49), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 YD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__ag, m4eaw, "eon01k.p1", 0x0000, 0x010000, CRC(1d34dea7) SHA1(546db8247d0c78501fe4ec818d614e8f451b0076), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 K / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__ah, m4eaw, "eon01r.p1", 0x0000, 0x010000, CRC(7c70a508) SHA1(2c5835f36ef4c215ff9f6f6cc350f0916b397b7b), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 R / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__aj, m4eaw, "eon01y.p1", 0x0000, 0x010000, CRC(ddc4f7d1) SHA1(bbc21ba153541df1507e01d4a25a1a669c8eab62), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EON 0.1 Y / ER4 0.1)" ) // "(C)1991 BARCREST" and "ER2 0.1" GAME_CUSTOM( 199?, m4eaw__at, m4eaw, "er2s.p1", 0x0000, 0x010000, CRC(bfee8157) SHA1(3ce5a2ec16f06c753a054a9f645efbcd26f411ab), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1)" ) -GAME_CUSTOM( 199?, m4eaw__ak, m4eaw, "er2ad.p1", 0x0000, 0x010000, CRC(4e5fcc8b) SHA1(8176ca01ad49f39e1337a085cf3a1fd33803c517), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 48)" ) -GAME_CUSTOM( 199?, m4eaw__al, m4eaw, "er2b.p1", 0x0000, 0x010000, CRC(999c6510) SHA1(bc70b88183df84ea0e18e1017ab9d74545ce7588), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 49)" ) -GAME_CUSTOM( 199?, m4eaw__am, m4eaw, "er2bd.p1", 0x0000, 0x010000, CRC(3f50573a) SHA1(46527b08d751372df09d61fd67054600b6e933f3), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 50)" ) -GAME_CUSTOM( 199?, m4eaw__an, m4eaw, "er2d.p1", 0x0000, 0x010000, CRC(6c625759) SHA1(65de484632317b7bd1372f20e7cbdedc85a90ea4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 51)" ) -GAME_CUSTOM( 199?, m4eaw__ao, m4eaw, "er2dk.p1", 0x0000, 0x010000, CRC(e1e1ab0b) SHA1(353863e2ef1e778b7fce035ae725053fb95c300e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 52)" ) -GAME_CUSTOM( 199?, m4eaw__ap, m4eaw, "er2dr.p1", 0x0000, 0x010000, CRC(0d2e1d3f) SHA1(f75f6cf9e0ce6ccf36df83e18f03fc1485242c88), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 53)" ) -GAME_CUSTOM( 199?, m4eaw__aq, m4eaw, "er2dy.p1", 0x0000, 0x010000, CRC(f20c4b31) SHA1(744ce6065b3bea3a0c128a4848282cbca2bc8056), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 54)" ) -GAME_CUSTOM( 199?, m4eaw__ar, m4eaw, "er2k.p1", 0x0000, 0x010000, CRC(2c3661bb) SHA1(5f5a6b47dacdb2184d3ac9646da616283743fcbf), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 55)" ) -GAME_CUSTOM( 199?, m4eaw__as, m4eaw, "er2r.p1", 0x0000, 0x010000, CRC(cb636e43) SHA1(44df3adc1d5af4c1930596f34f41884e7731be62), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 56)" ) -GAME_CUSTOM( 199?, m4eaw__au, m4eaw, "er2y.p1", 0x0000, 0x010000, CRC(91369b00) SHA1(7427fcf9e350bc9a3883577de5ee4a4ab5ff63b0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 58)" ) +GAME_CUSTOM( 199?, m4eaw__ak, m4eaw, "er2ad.p1", 0x0000, 0x010000, CRC(4e5fcc8b) SHA1(8176ca01ad49f39e1337a085cf3a1fd33803c517), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 AD)" ) +GAME_CUSTOM( 199?, m4eaw__al, m4eaw, "er2b.p1", 0x0000, 0x010000, CRC(999c6510) SHA1(bc70b88183df84ea0e18e1017ab9d74545ce7588), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 B)" ) +GAME_CUSTOM( 199?, m4eaw__am, m4eaw, "er2bd.p1", 0x0000, 0x010000, CRC(3f50573a) SHA1(46527b08d751372df09d61fd67054600b6e933f3), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 BD)" ) +GAME_CUSTOM( 199?, m4eaw__an, m4eaw, "er2d.p1", 0x0000, 0x010000, CRC(6c625759) SHA1(65de484632317b7bd1372f20e7cbdedc85a90ea4), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 D)" ) +GAME_CUSTOM( 199?, m4eaw__ao, m4eaw, "er2dk.p1", 0x0000, 0x010000, CRC(e1e1ab0b) SHA1(353863e2ef1e778b7fce035ae725053fb95c300e), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 KD)" ) +GAME_CUSTOM( 199?, m4eaw__ap, m4eaw, "er2dr.p1", 0x0000, 0x010000, CRC(0d2e1d3f) SHA1(f75f6cf9e0ce6ccf36df83e18f03fc1485242c88), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 RD)" ) +GAME_CUSTOM( 199?, m4eaw__aq, m4eaw, "er2dy.p1", 0x0000, 0x010000, CRC(f20c4b31) SHA1(744ce6065b3bea3a0c128a4848282cbca2bc8056), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 YD)" ) +GAME_CUSTOM( 199?, m4eaw__ar, m4eaw, "er2k.p1", 0x0000, 0x010000, CRC(2c3661bb) SHA1(5f5a6b47dacdb2184d3ac9646da616283743fcbf), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 K)" ) +GAME_CUSTOM( 199?, m4eaw__as, m4eaw, "er2r.p1", 0x0000, 0x010000, CRC(cb636e43) SHA1(44df3adc1d5af4c1930596f34f41884e7731be62), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 R)" ) +GAME_CUSTOM( 199?, m4eaw__au, m4eaw, "er2y.p1", 0x0000, 0x010000, CRC(91369b00) SHA1(7427fcf9e350bc9a3883577de5ee4a4ab5ff63b0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER2 0.1 Y)" ) // "(C)1991 BARCREST" and "ER8 0.1" GAME_CUSTOM( 199?, m4eaw__a9, m4eaw, "er8s.p1", 0x0000, 0x010000, CRC(5d36bbc6) SHA1(4d0cd8e939f22d919671dc97c3d97bf6191e738f), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1)" ) -GAME_CUSTOM( 199?, m4eaw__a3, m4eaw, "er8ad.p1", 0x0000, 0x010000, CRC(ba059e06) SHA1(f6bb9092c9d18bccde111f8e20e79b8b4e6d8593), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 67)" ) -GAME_CUSTOM( 199?, m4eaw__a4, m4eaw, "er8b.p1", 0x0000, 0x010000, CRC(27c7f954) SHA1(93305d1d4a5781de56f1e54801e25b29b6713ef0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 68)" ) -GAME_CUSTOM( 199?, m4eaw__a5, m4eaw, "er8c.p1", 0x0000, 0x010000, CRC(cee94fb3) SHA1(01ec098016b6946c3fbf96b2071076316bbd5795), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 69)" ) -GAME_CUSTOM( 199?, m4eaw__a6, m4eaw, "er8dk.p1", 0x0000, 0x010000, CRC(789c5e1d) SHA1(5f5b686a770f4ab0cfa8e8ae21b3805ef6102516), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 70)" ) -GAME_CUSTOM( 199?, m4eaw__a7, m4eaw, "er8dy.p1", 0x0000, 0x010000, CRC(4adf568b) SHA1(dd21b547211566ad5cb018a0205d887b7f860bc9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 71)" ) -GAME_CUSTOM( 199?, m4eaw__a8, m4eaw, "er8k.p1", 0x0000, 0x010000, CRC(c76140e4) SHA1(6c097fdd018eb594a84ceb7712a45201490ca370), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 72)" ) -GAME_CUSTOM( 199?, m4eaw__ba, m4eaw, "er8y.p1", 0x0000, 0x010000, CRC(8a1aa409) SHA1(a7ae62e1038e52a111de3004e2160838e0d102d0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 74)" ) +GAME_CUSTOM( 199?, m4eaw__a3, m4eaw, "er8ad.p1", 0x0000, 0x010000, CRC(ba059e06) SHA1(f6bb9092c9d18bccde111f8e20e79b8b4e6d8593), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 AD)" ) +GAME_CUSTOM( 199?, m4eaw__a4, m4eaw, "er8b.p1", 0x0000, 0x010000, CRC(27c7f954) SHA1(93305d1d4a5781de56f1e54801e25b29b6713ef0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 B)" ) +GAME_CUSTOM( 199?, m4eaw__a5, m4eaw, "er8c.p1", 0x0000, 0x010000, CRC(cee94fb3) SHA1(01ec098016b6946c3fbf96b2071076316bbd5795), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 C)" ) +GAME_CUSTOM( 199?, m4eaw__a6, m4eaw, "er8dk.p1", 0x0000, 0x010000, CRC(789c5e1d) SHA1(5f5b686a770f4ab0cfa8e8ae21b3805ef6102516), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 KD)" ) +GAME_CUSTOM( 199?, m4eaw__a7, m4eaw, "er8dy.p1", 0x0000, 0x010000, CRC(4adf568b) SHA1(dd21b547211566ad5cb018a0205d887b7f860bc9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 YD)" ) +GAME_CUSTOM( 199?, m4eaw__a8, m4eaw, "er8k.p1", 0x0000, 0x010000, CRC(c76140e4) SHA1(6c097fdd018eb594a84ceb7712a45201490ca370), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 K)" ) +GAME_CUSTOM( 199?, m4eaw__ba, m4eaw, "er8y.p1", 0x0000, 0x010000, CRC(8a1aa409) SHA1(a7ae62e1038e52a111de3004e2160838e0d102d0), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ER8 0.1 Y)" ) // "(C)1991 BARCREST" and "ERT 0.2" GAME_CUSTOM( 199?, m4eaw__bk, m4eaw, "erts.p1", 0x0000, 0x010000, CRC(185b47bb) SHA1(377cb42878572a3e94dd6be6fb106ecacb3c5059), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2)" ) -GAME_CUSTOM( 199?, m4eaw__bb, m4eaw, "ertad.p1", 0x0000, 0x010000, CRC(75798f2d) SHA1(68939c187d841aa046a4f7dd8f39e8387969460c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 75)" ) -GAME_CUSTOM( 199?, m4eaw__bc, m4eaw, "ertb.p1", 0x0000, 0x010000, CRC(c6407839) SHA1(79d73d79b389682586fdf7c9c25d8e2ea5943bb6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 76)" ) -GAME_CUSTOM( 199?, m4eaw__bd, m4eaw, "ertbd.p1", 0x0000, 0x010000, CRC(4365e267) SHA1(b1853c3ddb707cb114e6bb2d780b142b80f099b6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 77)" ) -GAME_CUSTOM( 199?, m4eaw__be, m4eaw, "ertd.p1", 0x0000, 0x010000, CRC(2fabc730) SHA1(8a43afd6048006e906892d35bb0cfaa127fc0415), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 78)" ) -GAME_CUSTOM( 199?, m4eaw__bf, m4eaw, "ertdk.p1", 0x0000, 0x010000, CRC(21264f37) SHA1(9819cf120e81525f18096152a555859a4f48f8ad), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 79)" ) -GAME_CUSTOM( 199?, m4eaw__bg, m4eaw, "ertdr.p1", 0x0000, 0x010000, CRC(1b644f23) SHA1(94c5a307126cada90eeb45439aaab82a30228ffa), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 80)" ) -GAME_CUSTOM( 199?, m4eaw__bh, m4eaw, "ertdy.p1", 0x0000, 0x010000, CRC(5a7c77fa) SHA1(37c212db131b682fd8d293a8cf8efad2e80a8a18), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 81)" ) -GAME_CUSTOM( 199?, m4eaw__bi, m4eaw, "ertk.p1", 0x0000, 0x010000, CRC(19959bd3) SHA1(617f7079b39b0ef41ebb0b5f89053d723a28824d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 82)" ) -GAME_CUSTOM( 199?, m4eaw__bj, m4eaw, "ertr.p1", 0x0000, 0x010000, CRC(3264f04a) SHA1(88d1f6857f3a0acd89db1563fd5f24582b578765), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 83)" ) -GAME_CUSTOM( 199?, m4eaw__bl, m4eaw, "erty.p1", 0x0000, 0x010000, CRC(38adc77e) SHA1(7a925e2aa946fdcf38df454ec733da1ce9bdc495), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 85)" ) +GAME_CUSTOM( 199?, m4eaw__bb, m4eaw, "ertad.p1", 0x0000, 0x010000, CRC(75798f2d) SHA1(68939c187d841aa046a4f7dd8f39e8387969460c), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 AD)" ) +GAME_CUSTOM( 199?, m4eaw__bc, m4eaw, "ertb.p1", 0x0000, 0x010000, CRC(c6407839) SHA1(79d73d79b389682586fdf7c9c25d8e2ea5943bb6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 B)" ) +GAME_CUSTOM( 199?, m4eaw__bd, m4eaw, "ertbd.p1", 0x0000, 0x010000, CRC(4365e267) SHA1(b1853c3ddb707cb114e6bb2d780b142b80f099b6), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 BD)" ) +GAME_CUSTOM( 199?, m4eaw__be, m4eaw, "ertd.p1", 0x0000, 0x010000, CRC(2fabc730) SHA1(8a43afd6048006e906892d35bb0cfaa127fc0415), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 D)" ) +GAME_CUSTOM( 199?, m4eaw__bf, m4eaw, "ertdk.p1", 0x0000, 0x010000, CRC(21264f37) SHA1(9819cf120e81525f18096152a555859a4f48f8ad), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 KD)" ) +GAME_CUSTOM( 199?, m4eaw__bg, m4eaw, "ertdr.p1", 0x0000, 0x010000, CRC(1b644f23) SHA1(94c5a307126cada90eeb45439aaab82a30228ffa), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 RD)" ) +GAME_CUSTOM( 199?, m4eaw__bh, m4eaw, "ertdy.p1", 0x0000, 0x010000, CRC(5a7c77fa) SHA1(37c212db131b682fd8d293a8cf8efad2e80a8a18), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 YD)" ) +GAME_CUSTOM( 199?, m4eaw__bi, m4eaw, "ertk.p1", 0x0000, 0x010000, CRC(19959bd3) SHA1(617f7079b39b0ef41ebb0b5f89053d723a28824d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 K)" ) +GAME_CUSTOM( 199?, m4eaw__bj, m4eaw, "ertr.p1", 0x0000, 0x010000, CRC(3264f04a) SHA1(88d1f6857f3a0acd89db1563fd5f24582b578765), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 R)" ) +GAME_CUSTOM( 199?, m4eaw__bl, m4eaw, "erty.p1", 0x0000, 0x010000, CRC(38adc77e) SHA1(7a925e2aa946fdcf38df454ec733da1ce9bdc495), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (ERT 0.2 Y)" ) // "(C)1991 BARCREST" and "ER4 0.1" (startup is EUN 0.1) GAME_CUSTOM( 199?, m4eaw__bw, m4eaw, "eun01s.p1", 0x0000, 0x010000, CRC(d0b49fc6) SHA1(4062d9763010d42666660e383e52818d572b61b9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 / ER4 0.1)" ) -GAME_CUSTOM( 199?, m4eaw__bm, m4eaw, "eun01ad.p1", 0x0000, 0x010000, CRC(0148eb57) SHA1(7ebf73402ffe68cfb045a906ed039407bd173b88), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 86)" ) -GAME_CUSTOM( 199?, m4eaw__bn, m4eaw, "eun01b.p1", 0x0000, 0x010000, CRC(ad152cda) SHA1(ca5c72a54e14f8b44fddfbc5c38c4e149432f593), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 87)" ) -GAME_CUSTOM( 199?, m4eaw__bo, m4eaw, "eun01bd.p1", 0x0000, 0x010000, CRC(6b0abd7c) SHA1(a6f74096bfffa082a441c094b5acadd5929ac36a), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 88)" ) -GAME_CUSTOM( 199?, m4eaw__bp, m4eaw, "eun01c.p1", 0x0000, 0x010000, CRC(a65fcf8b) SHA1(13a5bc1f2918a4f3590a1cdc34b439a874934ee7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 89)" ) -GAME_CUSTOM( 199?, m4eaw__bq, m4eaw, "eun01d.p1", 0x0000, 0x010000, CRC(400af364) SHA1(ca67e98624d50717763e9965c45f0beecb07d2f9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 90)" ) -GAME_CUSTOM( 199?, m4eaw__br, m4eaw, "eun01dk.p1", 0x0000, 0x010000, CRC(c11914fa) SHA1(884fee07227f46dde056eb8e082bb821eeab99cb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 91)" ) -GAME_CUSTOM( 199?, m4eaw__bs, m4eaw, "eun01dr.p1", 0x0000, 0x010000, CRC(0eb075d4) SHA1(3977f03f6aac765c556618616919a5e10660b35d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 92)" ) -GAME_CUSTOM( 199?, m4eaw__bt, m4eaw, "eun01dy.p1", 0x0000, 0x010000, CRC(93db5d3a) SHA1(ddd209b22ed396d3329b9522649db6dda64958b7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 93)" ) -GAME_CUSTOM( 199?, m4eaw__bu, m4eaw, "eun01k.p1", 0x0000, 0x010000, CRC(9fca43fd) SHA1(f7626f122dedb217002888971100d8a34910b48d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 94)" ) -GAME_CUSTOM( 199?, m4eaw__bv, m4eaw, "eun01r.p1", 0x0000, 0x010000, CRC(15b8eb9e) SHA1(e4babaf526e6dd45bb4b7f7441a08cfbec12c661), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 95)" ) -GAME_CUSTOM( 199?, m4eaw__bx, m4eaw, "eun01y.p1", 0x0000, 0x010000, CRC(88d3c370) SHA1(6c3839a9c89ae67f80ab932ec70ebaf1240de9bb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (set 97)" ) +GAME_CUSTOM( 199?, m4eaw__bm, m4eaw, "eun01ad.p1", 0x0000, 0x010000, CRC(0148eb57) SHA1(7ebf73402ffe68cfb045a906ed039407bd173b88), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 AD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bn, m4eaw, "eun01b.p1", 0x0000, 0x010000, CRC(ad152cda) SHA1(ca5c72a54e14f8b44fddfbc5c38c4e149432f593), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 B / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bo, m4eaw, "eun01bd.p1", 0x0000, 0x010000, CRC(6b0abd7c) SHA1(a6f74096bfffa082a441c094b5acadd5929ac36a), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 BD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bp, m4eaw, "eun01c.p1", 0x0000, 0x010000, CRC(a65fcf8b) SHA1(13a5bc1f2918a4f3590a1cdc34b439a874934ee7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 C / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bq, m4eaw, "eun01d.p1", 0x0000, 0x010000, CRC(400af364) SHA1(ca67e98624d50717763e9965c45f0beecb07d2f9), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 D / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__br, m4eaw, "eun01dk.p1", 0x0000, 0x010000, CRC(c11914fa) SHA1(884fee07227f46dde056eb8e082bb821eeab99cb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 KD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bs, m4eaw, "eun01dr.p1", 0x0000, 0x010000, CRC(0eb075d4) SHA1(3977f03f6aac765c556618616919a5e10660b35d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 RD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bt, m4eaw, "eun01dy.p1", 0x0000, 0x010000, CRC(93db5d3a) SHA1(ddd209b22ed396d3329b9522649db6dda64958b7), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 YD / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bu, m4eaw, "eun01k.p1", 0x0000, 0x010000, CRC(9fca43fd) SHA1(f7626f122dedb217002888971100d8a34910b48d), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 K / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bv, m4eaw, "eun01r.p1", 0x0000, 0x010000, CRC(15b8eb9e) SHA1(e4babaf526e6dd45bb4b7f7441a08cfbec12c661), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 R / ER4 0.1)" ) +GAME_CUSTOM( 199?, m4eaw__bx, m4eaw, "eun01y.p1", 0x0000, 0x010000, CRC(88d3c370) SHA1(6c3839a9c89ae67f80ab932ec70ebaf1240de9bb), "Barcrest","Everyone's A Winner (Barcrest) (MPU4) (EUN 0.1 Y / ER4 0.1)" ) // bad dump? wrong size ROM_START( m4eaw__bz ) \ @@ -1111,52 +1111,52 @@ GAME(199?, m4eaw__bz, m4eaw ,mod4oki ,mpu4 , mpu4_state,m4_showstring ,ROT0,"Bar // (C)1993 BARCREST and "WIN 0.6" GAME_CUSTOM( 199?, m4wta, 0, "wins.p1", 0x0000, 0x010000, CRC(d79d1e5b) SHA1(722657423a605d6d272d61e4e00b4055ed05f98d), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6)" ) -GAME_CUSTOM( 199?, m4wta__b, m4wta, "windy.p1", 0x0000, 0x010000, CRC(d8b78c2d) SHA1(d8c2a2ac30a9b876acfbe99e3c540ba0e82cde33), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6YD)" ) -GAME_CUSTOM( 199?, m4wta__e, m4wta, "winy.p1", 0x0000, 0x010000, CRC(5ff8ed08) SHA1(9567db64e8ebf25ecb22236598cc88a3106f0e36), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6Y)" ) -GAME_CUSTOM( 199?, m4wta__aa, m4wta, "wtall20a", 0x0000, 0x010000, CRC(b53c951e) SHA1(24f96d16852a4fbaf49fbdf29a26d15877f07b18), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6K)" ) +GAME_CUSTOM( 199?, m4wta__b, m4wta, "windy.p1", 0x0000, 0x010000, CRC(d8b78c2d) SHA1(d8c2a2ac30a9b876acfbe99e3c540ba0e82cde33), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6 YD)" ) +GAME_CUSTOM( 199?, m4wta__e, m4wta, "winy.p1", 0x0000, 0x010000, CRC(5ff8ed08) SHA1(9567db64e8ebf25ecb22236598cc88a3106f0e36), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6 Y)" ) +GAME_CUSTOM( 199?, m4wta__aa, m4wta, "wtall20a", 0x0000, 0x010000, CRC(b53c951e) SHA1(24f96d16852a4fbaf49fbdf29a26d15877f07b18), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WIN 0.6 K)" ) // (C)1993 BARCREST and "WN5 0.1" -GAME_CUSTOM( 199?, m4wta__f, m4wta, "wn5ad.p1", 0x0000, 0x010000, CRC(0eb0845d) SHA1(57a2ca27672119e71af3b990cedcf52dd89e24cc), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1AD)" ) -GAME_CUSTOM( 199?, m4wta__g, m4wta, "wn5b.p1", 0x0000, 0x010000, CRC(82cefba2) SHA1(07753a5f0d455422f33495a6f050c8e16a92e087), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1B)" ) -GAME_CUSTOM( 199?, m4wta__h, m4wta, "wn5bd.p1", 0x0000, 0x010000, CRC(19d25b26) SHA1(91459c87e95d9800c5f77fd0c7f72f8a1488dc37), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1BD)" ) -GAME_CUSTOM( 199?, m4wta__i, m4wta, "wn5d.p1", 0x0000, 0x010000, CRC(8a3d6bed) SHA1(a20f24cd5216976913c0405f54883d6080986867), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1D)" ) -GAME_CUSTOM( 199?, m4wta__j, m4wta, "wn5dk.p1", 0x0000, 0x010000, CRC(1dfcb2bc) SHA1(b1a73a7758c3126f7b13156835c91a4900cbe6e0), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1KD)" ) -GAME_CUSTOM( 199?, m4wta__k, m4wta, "wn5dy.p1", 0x0000, 0x010000, CRC(d45e1db0) SHA1(2524c4b60a89ea0ca15cf999fbd1f8d9029dfbb6), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1YD)" ) -GAME_CUSTOM( 199?, m4wta__l, m4wta, "wn5k.p1", 0x0000, 0x010000, CRC(71c34cb4) SHA1(e1b96dd30d8ab680128d76886691d06fcd2d48c0), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1K)" ) GAME_CUSTOM( 199?, m4wta__m, m4wta, "wn5s.p1", 0x0000, 0x010000, CRC(f6e925c1) SHA1(963f06462c73300757aad2371df4ebe28afca521), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1)" ) -GAME_CUSTOM( 199?, m4wta__n, m4wta, "wn5y.p1", 0x0000, 0x010000, CRC(7155f8b5) SHA1(f55f88fd7b0144cb7b64640d529b179dd056f5ec), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1Y)" ) +GAME_CUSTOM( 199?, m4wta__f, m4wta, "wn5ad.p1", 0x0000, 0x010000, CRC(0eb0845d) SHA1(57a2ca27672119e71af3b990cedcf52dd89e24cc), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 AD)" ) +GAME_CUSTOM( 199?, m4wta__g, m4wta, "wn5b.p1", 0x0000, 0x010000, CRC(82cefba2) SHA1(07753a5f0d455422f33495a6f050c8e16a92e087), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 B)" ) +GAME_CUSTOM( 199?, m4wta__h, m4wta, "wn5bd.p1", 0x0000, 0x010000, CRC(19d25b26) SHA1(91459c87e95d9800c5f77fd0c7f72f8a1488dc37), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 BD)" ) +GAME_CUSTOM( 199?, m4wta__i, m4wta, "wn5d.p1", 0x0000, 0x010000, CRC(8a3d6bed) SHA1(a20f24cd5216976913c0405f54883d6080986867), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 D)" ) +GAME_CUSTOM( 199?, m4wta__j, m4wta, "wn5dk.p1", 0x0000, 0x010000, CRC(1dfcb2bc) SHA1(b1a73a7758c3126f7b13156835c91a4900cbe6e0), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 KD)" ) +GAME_CUSTOM( 199?, m4wta__k, m4wta, "wn5dy.p1", 0x0000, 0x010000, CRC(d45e1db0) SHA1(2524c4b60a89ea0ca15cf999fbd1f8d9029dfbb6), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 YD)" ) +GAME_CUSTOM( 199?, m4wta__l, m4wta, "wn5k.p1", 0x0000, 0x010000, CRC(71c34cb4) SHA1(e1b96dd30d8ab680128d76886691d06fcd2d48c0), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 K)" ) +GAME_CUSTOM( 199?, m4wta__n, m4wta, "wn5y.p1", 0x0000, 0x010000, CRC(7155f8b5) SHA1(f55f88fd7b0144cb7b64640d529b179dd056f5ec), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN5 0.1 Y)" ) // (C)1993 BARCREST and "WN8 0.1" -GAME_CUSTOM( 199?, m4wta__o, m4wta, "wn8b.p1", 0x0000, 0x010000, CRC(7e84f99c) SHA1(bef41b3e7906bdaadfa5741e9ae40028f4fd360f), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1B)" ) -GAME_CUSTOM( 199?, m4wta__p, m4wta, "wn8c.p1", 0x0000, 0x010000, CRC(471ba65a) SHA1(6ede860bcf323ee75dd7f75a51e5d1166ee72abc), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1C)" ) -GAME_CUSTOM( 199?, m4wta__q, m4wta, "wn8d.p1", 0x0000, 0x010000, CRC(eb2bd01e) SHA1(df74f8eb8fa411bab20ab522fd7c511a1370fe90), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1D)" ) -GAME_CUSTOM( 199?, m4wta__r, m4wta, "wn8dk.p1", 0x0000, 0x010000, CRC(ec20a0bc) SHA1(61b615165a6e77cd85e1fa6aeb955307ec48d1b6), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1KD)" ) -GAME_CUSTOM( 199?, m4wta__s, m4wta, "wn8dy.p1", 0x0000, 0x010000, CRC(d2a1513c) SHA1(e4d2ad88846cbb6b393d3615bf10e1dea01de219), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1YD)" ) -GAME_CUSTOM( 199?, m4wta__t, m4wta, "wn8k.p1", 0x0000, 0x010000, CRC(3e15c690) SHA1(2fc1cca91ac5cc9abeac112e4d60e8fd57b07b94), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1K)" ) GAME_CUSTOM( 199?, m4wta__u, m4wta, "wn8s.p1", 0x0000, 0x010000, CRC(5c5a0f31) SHA1(301e595141dd6eb9250d71e591780e15a7d36423), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1)" ) -GAME_CUSTOM( 199?, m4wta__v, m4wta, "wn8y.p1", 0x0000, 0x010000, CRC(993cee6a) SHA1(26b2d5d3aa3465f90fe74960f183b8580ea2fbb1), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1Y)" ) +GAME_CUSTOM( 199?, m4wta__o, m4wta, "wn8b.p1", 0x0000, 0x010000, CRC(7e84f99c) SHA1(bef41b3e7906bdaadfa5741e9ae40028f4fd360f), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 B)" ) +GAME_CUSTOM( 199?, m4wta__p, m4wta, "wn8c.p1", 0x0000, 0x010000, CRC(471ba65a) SHA1(6ede860bcf323ee75dd7f75a51e5d1166ee72abc), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 C)" ) +GAME_CUSTOM( 199?, m4wta__q, m4wta, "wn8d.p1", 0x0000, 0x010000, CRC(eb2bd01e) SHA1(df74f8eb8fa411bab20ab522fd7c511a1370fe90), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 D)" ) +GAME_CUSTOM( 199?, m4wta__r, m4wta, "wn8dk.p1", 0x0000, 0x010000, CRC(ec20a0bc) SHA1(61b615165a6e77cd85e1fa6aeb955307ec48d1b6), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 KD)" ) +GAME_CUSTOM( 199?, m4wta__s, m4wta, "wn8dy.p1", 0x0000, 0x010000, CRC(d2a1513c) SHA1(e4d2ad88846cbb6b393d3615bf10e1dea01de219), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 YD)" ) +GAME_CUSTOM( 199?, m4wta__t, m4wta, "wn8k.p1", 0x0000, 0x010000, CRC(3e15c690) SHA1(2fc1cca91ac5cc9abeac112e4d60e8fd57b07b94), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 K)" ) +GAME_CUSTOM( 199?, m4wta__v, m4wta, "wn8y.p1", 0x0000, 0x010000, CRC(993cee6a) SHA1(26b2d5d3aa3465f90fe74960f183b8580ea2fbb1), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WN8 0.1 Y)" ) // "(C)1993 BARCREST" and "WNT 0.1" // bad char alarm, hack? -GAME_CUSTOM( 199?, m4wta__w, m4wta, "wnta2010", 0x0000, 0x010000, CRC(5b08faf8) SHA1(f4657041562044e17febfe77ad1f849545dcdaec), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1, hack?)" ) +GAME_CUSTOM( 199?, m4wta__w, m4wta, "wnta2010", 0x0000, 0x010000, CRC(5b08faf8) SHA1(f4657041562044e17febfe77ad1f849545dcdaec), "hack","Winner Takes All (Barcrest) (MPU4) (WNT 0.1, hack)" ) // "(C)1993 BARCREST" and "WNT 0.1" -GAME_CUSTOM( 199?, m4wta__x, m4wta, "wntad.p1", 0x0000, 0x010000, CRC(8502766e) SHA1(2a47c8f8ce8711b30962c5e8ef9093bdd3543551), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1AD)" ) -GAME_CUSTOM( 199?, m4wta__y, m4wta, "wntb.p1", 0x0000, 0x010000, CRC(1e3159f0) SHA1(ab9d0e9e6731b40c66c358d98c6481f31d9a0b0c), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1B)" ) -GAME_CUSTOM( 199?, m4wta__z, m4wta, "wntbd.p1", 0x0000, 0x010000, CRC(91cc8978) SHA1(570ad4092bb148106fb2600f1e22b6cb6f57002a), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1BD)" ) -GAME_CUSTOM( 199?, m4wta__0, m4wta, "wntd.p1", 0x0000, 0x010000, CRC(ad68d804) SHA1(f301d0d267dd0020903f06b67ee6494b71258c68), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1D)" ) -GAME_CUSTOM( 199?, m4wta__1, m4wta, "wntdk.p1", 0x0000, 0x010000, CRC(3a6b65b8) SHA1(1da0448e53a45fa249c14b5655cd0dc957ebb646), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1KD)" ) -GAME_CUSTOM( 199?, m4wta__2, m4wta, "wntdy.p1", 0x0000, 0x010000, CRC(2420634f) SHA1(5c6e891c34a6e2b3a6acb3856c1554145bb24d0d), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1YD)" ) -GAME_CUSTOM( 199?, m4wta__3, m4wta, "wntk.p1", 0x0000, 0x010000, CRC(3d8d07c7) SHA1(4659e2459d956bbcf5ef2a605527317ccdafcccb), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1K)" ) GAME_CUSTOM( 199?, m4wta__4, m4wta, "wnts.p1", 0x0000, 0x010000, CRC(3a9b0878) SHA1(85e86cca1a3a079746cd4401767ba1d9fc31a938), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1)" ) -GAME_CUSTOM( 199?, m4wta__5, m4wta, "wnty.p1", 0x0000, 0x010000, CRC(edaa5ae7) SHA1(d24b9f37d75f13f16718374e48e6c003b0b3333f), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1Y)" ) +GAME_CUSTOM( 199?, m4wta__x, m4wta, "wntad.p1", 0x0000, 0x010000, CRC(8502766e) SHA1(2a47c8f8ce8711b30962c5e8ef9093bdd3543551), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 AD)" ) +GAME_CUSTOM( 199?, m4wta__y, m4wta, "wntb.p1", 0x0000, 0x010000, CRC(1e3159f0) SHA1(ab9d0e9e6731b40c66c358d98c6481f31d9a0b0c), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 B)" ) +GAME_CUSTOM( 199?, m4wta__z, m4wta, "wntbd.p1", 0x0000, 0x010000, CRC(91cc8978) SHA1(570ad4092bb148106fb2600f1e22b6cb6f57002a), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 BD)" ) +GAME_CUSTOM( 199?, m4wta__0, m4wta, "wntd.p1", 0x0000, 0x010000, CRC(ad68d804) SHA1(f301d0d267dd0020903f06b67ee6494b71258c68), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 D)" ) +GAME_CUSTOM( 199?, m4wta__1, m4wta, "wntdk.p1", 0x0000, 0x010000, CRC(3a6b65b8) SHA1(1da0448e53a45fa249c14b5655cd0dc957ebb646), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 KD)" ) +GAME_CUSTOM( 199?, m4wta__2, m4wta, "wntdy.p1", 0x0000, 0x010000, CRC(2420634f) SHA1(5c6e891c34a6e2b3a6acb3856c1554145bb24d0d), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 YD)" ) +GAME_CUSTOM( 199?, m4wta__3, m4wta, "wntk.p1", 0x0000, 0x010000, CRC(3d8d07c7) SHA1(4659e2459d956bbcf5ef2a605527317ccdafcccb), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 K)" ) +GAME_CUSTOM( 199?, m4wta__5, m4wta, "wnty.p1", 0x0000, 0x010000, CRC(edaa5ae7) SHA1(d24b9f37d75f13f16718374e48e6c003b0b3333f), "Barcrest","Winner Takes All (Barcrest) (MPU4) (WNT 0.1 Y)" ) // "(C)1996 B.W.B." and "WNC 1.3" // bad char alarm -GAME_CUSTOM( 199?, m4wta__7, m4wta, "wta510l", 0x0000, 0x010000, CRC(9ce140ae) SHA1(01d53a5da0161ac4ecc861309f645d6eb47b4af5), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WNC 1.3, set 1)" ) -GAME_CUSTOM( 199?, m4wta__ad, m4wta, "wta5.10", 0x0000, 0x010000, CRC(c1ae8e9a) SHA1(66c0b200202386a10b96b7141517a52921266950), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WNC 1.3, set 2)" ) +GAME_CUSTOM( 199?, m4wta__7, m4wta, "wta510l", 0x0000, 0x010000, CRC(9ce140ae) SHA1(01d53a5da0161ac4ecc861309f645d6eb47b4af5), "hack","Winner Takes All (Barcrest) (MPU4) (WNC 1.3 5, hack, set 1)" ) +GAME_CUSTOM( 199?, m4wta__ad, m4wta, "wta5.10", 0x0000, 0x010000, CRC(c1ae8e9a) SHA1(66c0b200202386a10b96b7141517a52921266950), "hack","Winner Takes All (Barcrest) (MPU4) (WNC 1.3 5, hack, set 2)" ) // "(C)1996 B.W.B." and "WN8 2.2" // bad char alarm -GAME_CUSTOM( 199?, m4wta__8, m4wta, "wta58tl", 0x0000, 0x010000, CRC(7275e865) SHA1(d5550646a062609cfc052fab81c533ca69171875), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN8 2.2, set 1)" ) -GAME_CUSTOM( 199?, m4wta__ag, m4wta, "wta5.8t", 0x0000, 0x010000, CRC(548122ab) SHA1(c611084e8a08d5556e458daf9cc721c0e5ba1948), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN8 2.2, set 2)" ) +GAME_CUSTOM( 199?, m4wta__8, m4wta, "wta58tl", 0x0000, 0x010000, CRC(7275e865) SHA1(d5550646a062609cfc052fab81c533ca69171875), "hack","Winner Takes All (Barcrest) (MPU4) (WN8 2.2 5, hack, set 1)" ) +GAME_CUSTOM( 199?, m4wta__ag, m4wta, "wta5.8t", 0x0000, 0x010000, CRC(548122ab) SHA1(c611084e8a08d5556e458daf9cc721c0e5ba1948), "hack","Winner Takes All (Barcrest) (MPU4) (WN8 2.2 5, hack, set 2)" ) // "(C)1996 B.W.B." and "WN4 1.1" -GAME_CUSTOM( 199?, m4wta__9, m4wta, "wta_5p_4c.bin", 0x0000, 0x010000, CRC(54c51976) SHA1(70cae1f931615b993ac6a9e7ce2e529ad6d27da8), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 K5)" ) -GAME_CUSTOM( 199?, m4wta__ab, m4wta, "wt_05__4.1_1", 0x0000, 0x010000, CRC(5e05485e) SHA1(062f16ca92518f746f5410a2b9b551542e1a68e3), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 5)" ) -GAME_CUSTOM( 199?, m4wta__ae, m4wta, "wta5.4", 0x0000, 0x010000, CRC(00c64637) SHA1(54214edb107b28852a1bd3e095787bf9241e4fe3), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN4 1.1, hack?)" ) // bad char alarm +GAME_CUSTOM( 199?, m4wta__9, m4wta, "wta_5p_4c.bin", 0x0000, 0x010000, CRC(54c51976) SHA1(70cae1f931615b993ac6a9e7ce2e529ad6d27da8), "Bwb","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 K5)" ) +GAME_CUSTOM( 199?, m4wta__ab, m4wta, "wt_05__4.1_1", 0x0000, 0x010000, CRC(5e05485e) SHA1(062f16ca92518f746f5410a2b9b551542e1a68e3), "Bwb","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 5)" ) +GAME_CUSTOM( 199?, m4wta__ae, m4wta, "wta5.4", 0x0000, 0x010000, CRC(00c64637) SHA1(54214edb107b28852a1bd3e095787bf9241e4fe3), "hack","Winner Takes All (Barcrest) (MPU4) (WN4 1.1 K5, hack?)" ) // bad char alarm // "(C)1996 B.W.B." and "WN5 3.0" -GAME_CUSTOM( 199?, m4wta__ac, m4wta, "wt_05__5.3_1", 0x0000, 0x010000, CRC(8a289bbd) SHA1(8ae0858716ed6aa02f6b4f93fd367c7cee85d13a), "Bwb / hack?","Winner Takes All (Barcrest) (MPU4) (WN5 3.0 5)" ) +GAME_CUSTOM( 199?, m4wta__ac, m4wta, "wt_05__5.3_1", 0x0000, 0x010000, CRC(8a289bbd) SHA1(8ae0858716ed6aa02f6b4f93fd367c7cee85d13a), "Bwb","Winner Takes All (Barcrest) (MPU4) (WN5 3.0 5)" ) // "BILLY WHIZZ" and "V1 0.1" GAME_CUSTOM( 199?, m4wta__6, m4wta, "wta20p10.bin", 0x0000, 0x010000, CRC(c7f235b8) SHA1(a25f6f755140d70b0392985839b1729640cf5d5d), "hack","Winner Takes All (Barcrest) (MPU4) (V1 0.1, hack)" ) // "197 COCO" and "WN4 1.1" (hack) @@ -1179,78 +1179,78 @@ GAME_CUSTOM( 199?, m4wta__af, m4wta, "wta5.5n", // "(C)1993 BARCREST" and "GTR 2.0" GAME_CUSTOM( 199?, m4goodtm, 0, "gtr20s.p1", 0x0000, 0x020000, CRC(91d2632d) SHA1(b8a7ef106a16e0526626cd69e82d07616d5c07d9), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0)" ) -GAME_CUSTOM( 199?, m4goodtm__ae, m4goodtm, "gtr20d.p1", 0x0000, 0x020000, CRC(a19eaef1) SHA1(5e9f9cffd841b9d4f21175e3dcec7436d016bb19), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 1)" ) -GAME_CUSTOM( 199?, m4goodtm__4, m4goodtm, "gtr20ad.p1", 0x0000, 0x020000, CRC(38cf724f) SHA1(e58c02e5ca4ff0ecab41fe4597aa652ff8cc604f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4goodtm__5, m4goodtm, "gtr20b.p1", 0x0000, 0x020000, CRC(820d5cba) SHA1(d297500c3a5388d7c9203fcb15778079e8671329), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4goodtm__6, m4goodtm, "gtr20bd.p1", 0x0000, 0x020000, CRC(7208da19) SHA1(c28b50eb91204a7494664b082ce57a910fdb29fd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4goodtm__7, m4goodtm, "gtr20dh.p1", 0x0000, 0x020000, CRC(0f13d16f) SHA1(3a159982a3c5231d577848ca1cde17e8d84660a1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 35)" ) -GAME_CUSTOM( 199?, m4goodtm__8, m4goodtm, "gtr20dk.p1", 0x0000, 0x020000, CRC(8bc0c97e) SHA1(3b3eb7e44aa3f9ce19f6f612ea6bd24cc78630ff), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 36)" ) -GAME_CUSTOM( 199?, m4goodtm__9, m4goodtm, "gtr20dr.p1", 0x0000, 0x020000, CRC(112e17c7) SHA1(519a62d61a0aa8dc2433369bd74f62f61a85994c), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4goodtm__aa, m4goodtm, "gtr20dy.p1", 0x0000, 0x020000, CRC(bf2c52b1) SHA1(c8f97b56e9782b23c0ca8795ae2663c89660225e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4goodtm__ab, m4goodtm, "gtr20h.p1", 0x0000, 0x020000, CRC(ff1657cc) SHA1(07dfbc8c2b2d8fb7001ef51d80ef46562111d3ac), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4goodtm__ac, m4goodtm, "gtr20k.p1", 0x0000, 0x020000, CRC(7bc54fdd) SHA1(287c1a403429bae1cc3a4ba9dfe9b510777a64b1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4goodtm__ad, m4goodtm, "gtr20r.p1", 0x0000, 0x020000, CRC(e12b9164) SHA1(a54993c4f9ffc08c03905e6f50e499eba13db0d6), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4goodtm__af, m4goodtm, "gtr20y.p1", 0x0000, 0x020000, CRC(4f29d412) SHA1(c6a72e6fa7daaa6d8622936d10ae745814f4a8b7), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 43)" ) +GAME_CUSTOM( 199?, m4goodtm__ae, m4goodtm, "gtr20d.p1", 0x0000, 0x020000, CRC(a19eaef1) SHA1(5e9f9cffd841b9d4f21175e3dcec7436d016bb19), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 D)" ) +GAME_CUSTOM( 199?, m4goodtm__4, m4goodtm, "gtr20ad.p1", 0x0000, 0x020000, CRC(38cf724f) SHA1(e58c02e5ca4ff0ecab41fe4597aa652ff8cc604f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 AD)" ) +GAME_CUSTOM( 199?, m4goodtm__5, m4goodtm, "gtr20b.p1", 0x0000, 0x020000, CRC(820d5cba) SHA1(d297500c3a5388d7c9203fcb15778079e8671329), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 B)" ) +GAME_CUSTOM( 199?, m4goodtm__6, m4goodtm, "gtr20bd.p1", 0x0000, 0x020000, CRC(7208da19) SHA1(c28b50eb91204a7494664b082ce57a910fdb29fd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 BD)" ) +GAME_CUSTOM( 199?, m4goodtm__7, m4goodtm, "gtr20dh.p1", 0x0000, 0x020000, CRC(0f13d16f) SHA1(3a159982a3c5231d577848ca1cde17e8d84660a1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 DH)" ) +GAME_CUSTOM( 199?, m4goodtm__8, m4goodtm, "gtr20dk.p1", 0x0000, 0x020000, CRC(8bc0c97e) SHA1(3b3eb7e44aa3f9ce19f6f612ea6bd24cc78630ff), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 KD)" ) +GAME_CUSTOM( 199?, m4goodtm__9, m4goodtm, "gtr20dr.p1", 0x0000, 0x020000, CRC(112e17c7) SHA1(519a62d61a0aa8dc2433369bd74f62f61a85994c), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 RD)" ) +GAME_CUSTOM( 199?, m4goodtm__aa, m4goodtm, "gtr20dy.p1", 0x0000, 0x020000, CRC(bf2c52b1) SHA1(c8f97b56e9782b23c0ca8795ae2663c89660225e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 YD)" ) +GAME_CUSTOM( 199?, m4goodtm__ab, m4goodtm, "gtr20h.p1", 0x0000, 0x020000, CRC(ff1657cc) SHA1(07dfbc8c2b2d8fb7001ef51d80ef46562111d3ac), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 H)" ) +GAME_CUSTOM( 199?, m4goodtm__ac, m4goodtm, "gtr20k.p1", 0x0000, 0x020000, CRC(7bc54fdd) SHA1(287c1a403429bae1cc3a4ba9dfe9b510777a64b1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 K)" ) +GAME_CUSTOM( 199?, m4goodtm__ad, m4goodtm, "gtr20r.p1", 0x0000, 0x020000, CRC(e12b9164) SHA1(a54993c4f9ffc08c03905e6f50e499eba13db0d6), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 R)" ) +GAME_CUSTOM( 199?, m4goodtm__af, m4goodtm, "gtr20y.p1", 0x0000, 0x020000, CRC(4f29d412) SHA1(c6a72e6fa7daaa6d8622936d10ae745814f4a8b7), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 2.0 Y)" ) // "(C)1993 BARCREST" and "GTA 0.1" GAME_CUSTOM( 199?, m4goodtm__l, m4goodtm, "gta01s.p1", 0x0000, 0x020000, CRC(4340d9f6) SHA1(e9ccd419318bc3a3aba35a0104a98d1756b41731), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1)" ) -GAME_CUSTOM( 199?, m4goodtm__a, m4goodtm, "gta01ad.p1", 0x0000, 0x020000, CRC(2b556e66) SHA1(50a042fdb53294f74ab23a41a8a850dd14ad580d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 2)" ) -GAME_CUSTOM( 199?, m4goodtm__b, m4goodtm, "gta01b.p1", 0x0000, 0x020000, CRC(67dc4342) SHA1(bade42f329b4ab19e5802d8ac8b139486b05ac5a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4goodtm__c, m4goodtm, "gta01bd.p1", 0x0000, 0x020000, CRC(6192c630) SHA1(f18c5042dc45add52b3bd0c28ad1574a85a9f3c4), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4goodtm__d, m4goodtm, "gta01d.p1", 0x0000, 0x020000, CRC(eac6ed87) SHA1(14e424b6a3232d751e5b800395b2962f997afb74), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4goodtm__e, m4goodtm, "gta01dh.p1", 0x0000, 0x020000, CRC(4201347b) SHA1(f0c086f15baa0f458f64a6d4ff7da297d9b53c8f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4goodtm__f, m4goodtm, "gta01dk.p1", 0x0000, 0x020000, CRC(985ad557) SHA1(404a42f03d733ca6d89ec558ba6b5d815e8ce339), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4goodtm__g, m4goodtm, "gta01dr.p1", 0x0000, 0x020000, CRC(02b40bee) SHA1(a5bc063b0eac1689b13e9b523844aee105086c6b), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4goodtm__h, m4goodtm, "gta01dy.p1", 0x0000, 0x020000, CRC(acb64e98) SHA1(93d7252fe15e6a3db760b0218b4610cb5acbaca3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4goodtm__i, m4goodtm, "gta01h.p1", 0x0000, 0x020000, CRC(444fb109) SHA1(ad04dbc67dade0012ce61718854f7656abd9d342), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4goodtm__j, m4goodtm, "gta01k.p1", 0x0000, 0x020000, CRC(9e145025) SHA1(d26b4aaee4d08d7470e862dc0e5a80c914025991), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4goodtm__k, m4goodtm, "gta01r.p1", 0x0000, 0x020000, CRC(04fa8e9c) SHA1(9ac94b59dcf8e4e123dd0f1f422d23698f1c8c38), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4goodtm__m, m4goodtm, "gta01y.p1", 0x0000, 0x020000, CRC(aaf8cbea) SHA1(a027a0a243538a6b417b3859db90adc64eeb4d31), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 14)" ) +GAME_CUSTOM( 199?, m4goodtm__a, m4goodtm, "gta01ad.p1", 0x0000, 0x020000, CRC(2b556e66) SHA1(50a042fdb53294f74ab23a41a8a850dd14ad580d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 AD)" ) +GAME_CUSTOM( 199?, m4goodtm__b, m4goodtm, "gta01b.p1", 0x0000, 0x020000, CRC(67dc4342) SHA1(bade42f329b4ab19e5802d8ac8b139486b05ac5a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 B)" ) +GAME_CUSTOM( 199?, m4goodtm__c, m4goodtm, "gta01bd.p1", 0x0000, 0x020000, CRC(6192c630) SHA1(f18c5042dc45add52b3bd0c28ad1574a85a9f3c4), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 BD)" ) +GAME_CUSTOM( 199?, m4goodtm__d, m4goodtm, "gta01d.p1", 0x0000, 0x020000, CRC(eac6ed87) SHA1(14e424b6a3232d751e5b800395b2962f997afb74), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 D)" ) +GAME_CUSTOM( 199?, m4goodtm__e, m4goodtm, "gta01dh.p1", 0x0000, 0x020000, CRC(4201347b) SHA1(f0c086f15baa0f458f64a6d4ff7da297d9b53c8f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 DH)" ) +GAME_CUSTOM( 199?, m4goodtm__f, m4goodtm, "gta01dk.p1", 0x0000, 0x020000, CRC(985ad557) SHA1(404a42f03d733ca6d89ec558ba6b5d815e8ce339), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 KD)" ) +GAME_CUSTOM( 199?, m4goodtm__g, m4goodtm, "gta01dr.p1", 0x0000, 0x020000, CRC(02b40bee) SHA1(a5bc063b0eac1689b13e9b523844aee105086c6b), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 RD)" ) +GAME_CUSTOM( 199?, m4goodtm__h, m4goodtm, "gta01dy.p1", 0x0000, 0x020000, CRC(acb64e98) SHA1(93d7252fe15e6a3db760b0218b4610cb5acbaca3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 YD)" ) +GAME_CUSTOM( 199?, m4goodtm__i, m4goodtm, "gta01h.p1", 0x0000, 0x020000, CRC(444fb109) SHA1(ad04dbc67dade0012ce61718854f7656abd9d342), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 H)" ) +GAME_CUSTOM( 199?, m4goodtm__j, m4goodtm, "gta01k.p1", 0x0000, 0x020000, CRC(9e145025) SHA1(d26b4aaee4d08d7470e862dc0e5a80c914025991), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 K)" ) +GAME_CUSTOM( 199?, m4goodtm__k, m4goodtm, "gta01r.p1", 0x0000, 0x020000, CRC(04fa8e9c) SHA1(9ac94b59dcf8e4e123dd0f1f422d23698f1c8c38), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 R)" ) +GAME_CUSTOM( 199?, m4goodtm__m, m4goodtm, "gta01y.p1", 0x0000, 0x020000, CRC(aaf8cbea) SHA1(a027a0a243538a6b417b3859db90adc64eeb4d31), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTA 0.1 Y)" ) // "(C)1993 BARCREST" and "GTR 1.0" GAME_CUSTOM( 199?, m4goodtm__z, m4goodtm, "gtr10s.p1", 0x0000, 0x020000, CRC(f43fd459) SHA1(7247048088bd39cf8b20d96b1c08be48b005ac86), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0)" ) -GAME_CUSTOM( 199?, m4goodtm__o, m4goodtm, "gtr10ad.p1", 0x0000, 0x020000, CRC(b776f5dd) SHA1(9b6bf6b4d02e432ef411a9d2501c0dc7c5b551b1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4goodtm__p, m4goodtm, "gtr10b.p1", 0x0000, 0x020000, CRC(3a0aee1d) SHA1(d7adf7118943ac946082b6c3687e10773f25608e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4goodtm__q, m4goodtm, "gtr10bd.p1", 0x0000, 0x020000, CRC(fdb15d8b) SHA1(2542765c382cd84be1a1e7d6654e4668b1fc7fea), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4goodtm__r, m4goodtm, "gtr10d.p1", 0x0000, 0x020000, CRC(19991c56) SHA1(bed33027d8bc5dacc88d940ff3505be8186f5324), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4goodtm__s, m4goodtm, "gtr10dh.p1", 0x0000, 0x020000, CRC(80aa56fd) SHA1(f01edf442eee7dd78fbc934deb361d7e90c2025a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4goodtm__t, m4goodtm, "gtr10dk.p1", 0x0000, 0x020000, CRC(04794eec) SHA1(3e2b95ed2092ad1c0242f8a6cb540de0c6f995a3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4goodtm__u, m4goodtm, "gtr10dr.p1", 0x0000, 0x020000, CRC(9e979055) SHA1(b95111c4c986c4e9ceca9771ccb97fdeb67ffb02), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 22)" ) -GAME_CUSTOM( 199?, m4goodtm__v, m4goodtm, "gtr10dy.p1", 0x0000, 0x020000, CRC(3095d523) SHA1(eed9cf874f13fe9576e8ba0da8296546311fff01), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 23)" ) -GAME_CUSTOM( 199?, m4goodtm__w, m4goodtm, "gtr10h.p1", 0x0000, 0x020000, CRC(4711e56b) SHA1(3717b418758039286174594563281c21e4752eb5), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4goodtm__x, m4goodtm, "gtr10k.p1", 0x0000, 0x020000, CRC(c3c2fd7a) SHA1(d6e91fed1276c660cfe8e92c6902951803947a56), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4goodtm__y, m4goodtm, "gtr10r.p1", 0x0000, 0x020000, CRC(592c23c3) SHA1(17e7a22c9b80e8669cb46f691d56251bbf0717d0), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4goodtm__0, m4goodtm, "gtr10y.p1", 0x0000, 0x020000, CRC(f72e66b5) SHA1(14e09a94e1cde77e87573ad7e0f438485f637dfc), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 28)" ) +GAME_CUSTOM( 199?, m4goodtm__o, m4goodtm, "gtr10ad.p1", 0x0000, 0x020000, CRC(b776f5dd) SHA1(9b6bf6b4d02e432ef411a9d2501c0dc7c5b551b1), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 AD)" ) +GAME_CUSTOM( 199?, m4goodtm__p, m4goodtm, "gtr10b.p1", 0x0000, 0x020000, CRC(3a0aee1d) SHA1(d7adf7118943ac946082b6c3687e10773f25608e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 B)" ) +GAME_CUSTOM( 199?, m4goodtm__q, m4goodtm, "gtr10bd.p1", 0x0000, 0x020000, CRC(fdb15d8b) SHA1(2542765c382cd84be1a1e7d6654e4668b1fc7fea), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 BD)" ) +GAME_CUSTOM( 199?, m4goodtm__r, m4goodtm, "gtr10d.p1", 0x0000, 0x020000, CRC(19991c56) SHA1(bed33027d8bc5dacc88d940ff3505be8186f5324), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 D)" ) +GAME_CUSTOM( 199?, m4goodtm__s, m4goodtm, "gtr10dh.p1", 0x0000, 0x020000, CRC(80aa56fd) SHA1(f01edf442eee7dd78fbc934deb361d7e90c2025a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 DH)" ) +GAME_CUSTOM( 199?, m4goodtm__t, m4goodtm, "gtr10dk.p1", 0x0000, 0x020000, CRC(04794eec) SHA1(3e2b95ed2092ad1c0242f8a6cb540de0c6f995a3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 KD)" ) +GAME_CUSTOM( 199?, m4goodtm__u, m4goodtm, "gtr10dr.p1", 0x0000, 0x020000, CRC(9e979055) SHA1(b95111c4c986c4e9ceca9771ccb97fdeb67ffb02), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 RD)" ) +GAME_CUSTOM( 199?, m4goodtm__v, m4goodtm, "gtr10dy.p1", 0x0000, 0x020000, CRC(3095d523) SHA1(eed9cf874f13fe9576e8ba0da8296546311fff01), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 YD)" ) +GAME_CUSTOM( 199?, m4goodtm__w, m4goodtm, "gtr10h.p1", 0x0000, 0x020000, CRC(4711e56b) SHA1(3717b418758039286174594563281c21e4752eb5), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 H)" ) +GAME_CUSTOM( 199?, m4goodtm__x, m4goodtm, "gtr10k.p1", 0x0000, 0x020000, CRC(c3c2fd7a) SHA1(d6e91fed1276c660cfe8e92c6902951803947a56), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 K)" ) +GAME_CUSTOM( 199?, m4goodtm__y, m4goodtm, "gtr10r.p1", 0x0000, 0x020000, CRC(592c23c3) SHA1(17e7a22c9b80e8669cb46f691d56251bbf0717d0), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 R)" ) +GAME_CUSTOM( 199?, m4goodtm__0, m4goodtm, "gtr10y.p1", 0x0000, 0x020000, CRC(f72e66b5) SHA1(14e09a94e1cde77e87573ad7e0f438485f637dfc), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.0 Y)" ) // "(C)1993 BARCREST" and "GTS 0.1" GAME_CUSTOM( 199?, m4goodtm__ar, m4goodtm, "gts01s.p1", 0x0000, 0x020000, CRC(b3819e1f) SHA1(fb44500e06b8a6b09e6b707ee8c0cfe7844870a2), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1)" ) -GAME_CUSTOM( 199?, m4goodtm__ag, m4goodtm, "gts01ad.p1", 0x0000, 0x020000, CRC(b415d3f3) SHA1(a22d4cbce9b66049c000806b565c86cd3d91fd82), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4goodtm__ah, m4goodtm, "gts01b.p1", 0x0000, 0x020000, CRC(a05ea188) SHA1(5b6acadaf8b0d18b9c9daaf4aea45202cad13355), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 45)" ) -GAME_CUSTOM( 199?, m4goodtm__ai, m4goodtm, "gts01bd.p1", 0x0000, 0x020000, CRC(fed27ba5) SHA1(14f6fd7c3e964c3e6547a4bf5fa5d7cd802f715d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 46)" ) -GAME_CUSTOM( 199?, m4goodtm__aj, m4goodtm, "gts01d.p1", 0x0000, 0x020000, CRC(2d440f4d) SHA1(09881d8aede3a2011010022ee0e03ba8f02ea907), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 47)" ) -GAME_CUSTOM( 199?, m4goodtm__ak, m4goodtm, "gts01dh.p1", 0x0000, 0x020000, CRC(dd4189ee) SHA1(f68da5f688ffa08625c92fd139bef263c43f674a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 48)" ) -GAME_CUSTOM( 199?, m4goodtm__al, m4goodtm, "gts01dk.p1", 0x0000, 0x020000, CRC(071a68c2) SHA1(ea2052a389df09e0d5614106cc20ee0eccd339dd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 49)" ) -GAME_CUSTOM( 199?, m4goodtm__am, m4goodtm, "gts01dr.p1", 0x0000, 0x020000, CRC(9df4b67b) SHA1(608de0bb5280ac20c8c47eb22f8a575ad87a4fdd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 50)" ) -GAME_CUSTOM( 199?, m4goodtm__an, m4goodtm, "gts01dy.p1", 0x0000, 0x020000, CRC(33f6f30d) SHA1(aae905d0d278c38497513eb131a7cdaab4d22a85), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 51)" ) -GAME_CUSTOM( 199?, m4goodtm__ao, m4goodtm, "gts01h.p1", 0x0000, 0x020000, CRC(83cd53c3) SHA1(a4233e22d0bf53b3ddc4c951894a653e7951f5ad), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 52)" ) -GAME_CUSTOM( 199?, m4goodtm__ap, m4goodtm, "gts01k.p1", 0x0000, 0x020000, CRC(5996b2ef) SHA1(874d69a4adc31667ea177b3a0350b77bb735ea8d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 53)" ) -GAME_CUSTOM( 199?, m4goodtm__aq, m4goodtm, "gts01r.p1", 0x0000, 0x020000, CRC(c3786c56) SHA1(c9659df6302046c466e6447b8b427628c88b773d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 54)" ) -GAME_CUSTOM( 199?, m4goodtm__as, m4goodtm, "gts01y.p1", 0x0000, 0x020000, CRC(6d7a2920) SHA1(7d31087e3645e05baf6b0100966d4773a6d023cd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 56)" ) +GAME_CUSTOM( 199?, m4goodtm__ag, m4goodtm, "gts01ad.p1", 0x0000, 0x020000, CRC(b415d3f3) SHA1(a22d4cbce9b66049c000806b565c86cd3d91fd82), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 AD)" ) +GAME_CUSTOM( 199?, m4goodtm__ah, m4goodtm, "gts01b.p1", 0x0000, 0x020000, CRC(a05ea188) SHA1(5b6acadaf8b0d18b9c9daaf4aea45202cad13355), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 B)" ) +GAME_CUSTOM( 199?, m4goodtm__ai, m4goodtm, "gts01bd.p1", 0x0000, 0x020000, CRC(fed27ba5) SHA1(14f6fd7c3e964c3e6547a4bf5fa5d7cd802f715d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 BD)" ) +GAME_CUSTOM( 199?, m4goodtm__aj, m4goodtm, "gts01d.p1", 0x0000, 0x020000, CRC(2d440f4d) SHA1(09881d8aede3a2011010022ee0e03ba8f02ea907), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 D)" ) +GAME_CUSTOM( 199?, m4goodtm__ak, m4goodtm, "gts01dh.p1", 0x0000, 0x020000, CRC(dd4189ee) SHA1(f68da5f688ffa08625c92fd139bef263c43f674a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 DH)" ) +GAME_CUSTOM( 199?, m4goodtm__al, m4goodtm, "gts01dk.p1", 0x0000, 0x020000, CRC(071a68c2) SHA1(ea2052a389df09e0d5614106cc20ee0eccd339dd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 KD)" ) +GAME_CUSTOM( 199?, m4goodtm__am, m4goodtm, "gts01dr.p1", 0x0000, 0x020000, CRC(9df4b67b) SHA1(608de0bb5280ac20c8c47eb22f8a575ad87a4fdd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 RD)" ) +GAME_CUSTOM( 199?, m4goodtm__an, m4goodtm, "gts01dy.p1", 0x0000, 0x020000, CRC(33f6f30d) SHA1(aae905d0d278c38497513eb131a7cdaab4d22a85), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 YD)" ) +GAME_CUSTOM( 199?, m4goodtm__ao, m4goodtm, "gts01h.p1", 0x0000, 0x020000, CRC(83cd53c3) SHA1(a4233e22d0bf53b3ddc4c951894a653e7951f5ad), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 H)" ) +GAME_CUSTOM( 199?, m4goodtm__ap, m4goodtm, "gts01k.p1", 0x0000, 0x020000, CRC(5996b2ef) SHA1(874d69a4adc31667ea177b3a0350b77bb735ea8d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 K)" ) +GAME_CUSTOM( 199?, m4goodtm__aq, m4goodtm, "gts01r.p1", 0x0000, 0x020000, CRC(c3786c56) SHA1(c9659df6302046c466e6447b8b427628c88b773d), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 R)" ) +GAME_CUSTOM( 199?, m4goodtm__as, m4goodtm, "gts01y.p1", 0x0000, 0x020000, CRC(6d7a2920) SHA1(7d31087e3645e05baf6b0100966d4773a6d023cd), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.1 Y)" ) // "(C)1993 BARCREST" and "GTS 1.0" GAME_CUSTOM( 199?, m4goodtm__a5, m4goodtm, "gts10s.p1", 0x0000, 0x020000, CRC(2851ba23) SHA1(7597a2df22aa0e2670be2d5bb2407ea1feace3a0), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0)" ) -GAME_CUSTOM( 199?, m4goodtm__au, m4goodtm, "gts10ad.p1", 0x0000, 0x020000, CRC(b754490c) SHA1(26811ae53b3ee8ae0a381604109f0f77f096e2c6), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 58)" ) -GAME_CUSTOM( 199?, m4goodtm__av, m4goodtm, "gts10b.p1", 0x0000, 0x020000, CRC(21410553) SHA1(2060269ab6dc9375b6e7101b3944305fcd4b6d12), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 59)" ) -GAME_CUSTOM( 199?, m4goodtm__aw, m4goodtm, "gts10bd.p1", 0x0000, 0x020000, CRC(fd93e15a) SHA1(b9574f34f1e7a92cc75d6aed8914f94ad661bba3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 60)" ) -GAME_CUSTOM( 199?, m4goodtm__ax, m4goodtm, "gts10d.p1", 0x0000, 0x020000, CRC(ac5bab96) SHA1(2b4ab1f096a5d63d5688228debb25b392b94a297), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 61)" ) -GAME_CUSTOM( 199?, m4goodtm__ay, m4goodtm, "gts10dh.p1", 0x0000, 0x020000, CRC(de001311) SHA1(a096937e1f2fd2f9046c0ea2363805112da76c95), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 62)" ) -GAME_CUSTOM( 199?, m4goodtm__az, m4goodtm, "gts10dk.p1", 0x0000, 0x020000, CRC(045bf23d) SHA1(dd5567d4c07fba7ff1cc257db287e1a82d9b930a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 63)" ) -GAME_CUSTOM( 199?, m4goodtm__a0, m4goodtm, "gts10dr.p1", 0x0000, 0x020000, CRC(9eb52c84) SHA1(385b09e424863f3778605c6e768c9b1068eae66e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 64)" ) -GAME_CUSTOM( 199?, m4goodtm__a1, m4goodtm, "gts10dy.p1", 0x0000, 0x020000, CRC(30b769f2) SHA1(7cf1e66b992faf48b1fed39a005469e51d471a0b), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 65)" ) -GAME_CUSTOM( 199?, m4goodtm__a2, m4goodtm, "gts10h.p1", 0x0000, 0x020000, CRC(02d2f718) SHA1(9f46ef4cc7d08c42cf617b471e599ca21b4cd72f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 66)" ) -GAME_CUSTOM( 199?, m4goodtm__a3, m4goodtm, "gts10k.p1", 0x0000, 0x020000, CRC(d8891634) SHA1(0019d2b3dd1c59d37d9c13e912907a55f2a9ca5f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 67)" ) -GAME_CUSTOM( 199?, m4goodtm__a4, m4goodtm, "gts10r.p1", 0x0000, 0x020000, CRC(4267c88d) SHA1(22047782c384caeb9cf2de69dcdd05f42ee137ad), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 68)" ) -GAME_CUSTOM( 199?, m4goodtm__a6, m4goodtm, "gts10y.p1", 0x0000, 0x020000, CRC(ec658dfb) SHA1(a9d8ba1b66811ccd336892160d47e5d42eb83a23), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (set 70)" ) +GAME_CUSTOM( 199?, m4goodtm__au, m4goodtm, "gts10ad.p1", 0x0000, 0x020000, CRC(b754490c) SHA1(26811ae53b3ee8ae0a381604109f0f77f096e2c6), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 AD)" ) +GAME_CUSTOM( 199?, m4goodtm__av, m4goodtm, "gts10b.p1", 0x0000, 0x020000, CRC(21410553) SHA1(2060269ab6dc9375b6e7101b3944305fcd4b6d12), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 B)" ) +GAME_CUSTOM( 199?, m4goodtm__aw, m4goodtm, "gts10bd.p1", 0x0000, 0x020000, CRC(fd93e15a) SHA1(b9574f34f1e7a92cc75d6aed8914f94ad661bba3), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 BD)" ) +GAME_CUSTOM( 199?, m4goodtm__ax, m4goodtm, "gts10d.p1", 0x0000, 0x020000, CRC(ac5bab96) SHA1(2b4ab1f096a5d63d5688228debb25b392b94a297), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 D)" ) +GAME_CUSTOM( 199?, m4goodtm__ay, m4goodtm, "gts10dh.p1", 0x0000, 0x020000, CRC(de001311) SHA1(a096937e1f2fd2f9046c0ea2363805112da76c95), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 DH)" ) +GAME_CUSTOM( 199?, m4goodtm__az, m4goodtm, "gts10dk.p1", 0x0000, 0x020000, CRC(045bf23d) SHA1(dd5567d4c07fba7ff1cc257db287e1a82d9b930a), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 KD)" ) +GAME_CUSTOM( 199?, m4goodtm__a0, m4goodtm, "gts10dr.p1", 0x0000, 0x020000, CRC(9eb52c84) SHA1(385b09e424863f3778605c6e768c9b1068eae66e), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 RD)" ) +GAME_CUSTOM( 199?, m4goodtm__a1, m4goodtm, "gts10dy.p1", 0x0000, 0x020000, CRC(30b769f2) SHA1(7cf1e66b992faf48b1fed39a005469e51d471a0b), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 YD)" ) +GAME_CUSTOM( 199?, m4goodtm__a2, m4goodtm, "gts10h.p1", 0x0000, 0x020000, CRC(02d2f718) SHA1(9f46ef4cc7d08c42cf617b471e599ca21b4cd72f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 H)" ) +GAME_CUSTOM( 199?, m4goodtm__a3, m4goodtm, "gts10k.p1", 0x0000, 0x020000, CRC(d8891634) SHA1(0019d2b3dd1c59d37d9c13e912907a55f2a9ca5f), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 K)" ) +GAME_CUSTOM( 199?, m4goodtm__a4, m4goodtm, "gts10r.p1", 0x0000, 0x020000, CRC(4267c88d) SHA1(22047782c384caeb9cf2de69dcdd05f42ee137ad), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 R)" ) +GAME_CUSTOM( 199?, m4goodtm__a6, m4goodtm, "gts10y.p1", 0x0000, 0x020000, CRC(ec658dfb) SHA1(a9d8ba1b66811ccd336892160d47e5d42eb83a23), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 1.0 Y)" ) // "(C)1993 BARCREST" and "GTS 0.2" GAME_CUSTOM( 199?, m4goodtm__at, m4goodtm, "gts02s.t", 0x0000, 0x020000, CRC(e4f5ebcc) SHA1(3e070628375db980583c3b38e2676d73fbeaae68), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTS 0.2)" ) // "(C)1993 BARCREST" and "GTK 0.2" -GAME_CUSTOM( 199?, m4goodtm__n, m4goodtm, "gtk02k.p1", 0x0000, 0x020000, CRC(a1665c5d) SHA1(056dcd9370df56129a65267fb70bbfac498f5a97), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTK 0.2)" ) +GAME_CUSTOM( 199?, m4goodtm__n, m4goodtm, "gtk02k.p1", 0x0000, 0x020000, CRC(a1665c5d) SHA1(056dcd9370df56129a65267fb70bbfac498f5a97), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTK 0.2 K)" ) // "(C)1993 BARCREST" and "GTR 1.1" GAME_CUSTOM( 199?, m4goodtm__1, m4goodtm, "gtr11s", 0x0000, 0x020000, CRC(ff4bd1fb) SHA1(959a7975209e2d17c5b3e4adc72bd52bd3005035), "Barcrest","Let The Good Times Roll (Barcrest) (MPU4) (GTR 1.1)" ) // no copyright string and "GTR 1.0" @@ -1279,104 +1279,104 @@ GAME_CUSTOM( 199?, m4goodtm__3, m4goodtm, "gtr15t", 0x0000, 0x020000, // sets below give a hopper sense error (casino / club sets?) // "(C)1991 BARCREST" and "CG4 0.7" GAME_CUSTOM( 199?, m4jpgem, 0, "cg4s.p1", 0x0000, 0x010000, CRC(f25eba0b) SHA1(250189b7fb8aa82a8696c3a0099eb13ec74eeb10), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7)" ) -GAME_CUSTOM( 199?, m4jpgem__g, m4jpgem, "cg4ad.p1", 0x0000, 0x010000, CRC(417c98c1) SHA1(2ce23e27742c418d5ebaa0f4f0597e29955ea57d), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7AD)" ) -GAME_CUSTOM( 199?, m4jpgem__a, m4jpgem, "cg4b.p1", 0x0000, 0x010000, CRC(c57cca63) SHA1(80a440912362d55cac6bc77b6ff6d6672af378c6), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 2)" ) -GAME_CUSTOM( 199?, m4jpgem__b, m4jpgem, "cg4bd.p1", 0x0000, 0x010000, CRC(7604ea50) SHA1(3d6eee763bd21119ab52a2388229da076caf78a4), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4jpgem__c, m4jpgem, "cg4d.p1", 0x0000, 0x010000, CRC(87ea1087) SHA1(47f7c17fa3611745c881669ff50559e4b4386fd9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4jpgem__d, m4jpgem, "cg4dk.p1", 0x0000, 0x010000, CRC(230284fb) SHA1(39ab2abdd8d3af4818e4e3738529f020055ba659), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4jpgem__e, m4jpgem, "cg4dy.p1", 0x0000, 0x010000, CRC(7d02342d) SHA1(097c9c9dc84bd00f1ddd64b1f9564f0cf7a9023f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4jpgem__f, m4jpgem, "cg4k.p1", 0x0000, 0x010000, CRC(ba4ef5a8) SHA1(1673985aee634aa5c8129cc1239ce08fb9f5da2c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4jpgem__h, m4jpgem, "cg4y.p1", 0x0000, 0x010000, CRC(237098d3) SHA1(9f54ed0d9ce37f3b4e6dca136fe4a12ba79c89f9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 9)" ) +GAME_CUSTOM( 199?, m4jpgem__g, m4jpgem, "cg4ad.p1", 0x0000, 0x010000, CRC(417c98c1) SHA1(2ce23e27742c418d5ebaa0f4f0597e29955ea57d), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 AD)" ) +GAME_CUSTOM( 199?, m4jpgem__a, m4jpgem, "cg4b.p1", 0x0000, 0x010000, CRC(c57cca63) SHA1(80a440912362d55cac6bc77b6ff6d6672af378c6), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 B)" ) +GAME_CUSTOM( 199?, m4jpgem__b, m4jpgem, "cg4bd.p1", 0x0000, 0x010000, CRC(7604ea50) SHA1(3d6eee763bd21119ab52a2388229da076caf78a4), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 BD)" ) +GAME_CUSTOM( 199?, m4jpgem__c, m4jpgem, "cg4d.p1", 0x0000, 0x010000, CRC(87ea1087) SHA1(47f7c17fa3611745c881669ff50559e4b4386fd9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 D)" ) +GAME_CUSTOM( 199?, m4jpgem__d, m4jpgem, "cg4dk.p1", 0x0000, 0x010000, CRC(230284fb) SHA1(39ab2abdd8d3af4818e4e3738529f020055ba659), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 KD)" ) +GAME_CUSTOM( 199?, m4jpgem__e, m4jpgem, "cg4dy.p1", 0x0000, 0x010000, CRC(7d02342d) SHA1(097c9c9dc84bd00f1ddd64b1f9564f0cf7a9023f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 YD)" ) +GAME_CUSTOM( 199?, m4jpgem__f, m4jpgem, "cg4k.p1", 0x0000, 0x010000, CRC(ba4ef5a8) SHA1(1673985aee634aa5c8129cc1239ce08fb9f5da2c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 K)" ) +GAME_CUSTOM( 199?, m4jpgem__h, m4jpgem, "cg4y.p1", 0x0000, 0x010000, CRC(237098d3) SHA1(9f54ed0d9ce37f3b4e6dca136fe4a12ba79c89f9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CG4 0.7 Y)" ) // "(C)1991 BARCREST" and "CG4 0.3" (startup shows CGT 0.3) -GAME_CUSTOM( 199?, m4jpgem__i, m4jpgem, "cgt03ad.p1", 0x0000, 0x010000, CRC(88842c4a) SHA1(c86987b44f04cf28a6f68300e4345f635455d4bf), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3AD / CG4 0.3)" ) -GAME_CUSTOM( 199?, m4jpgem__j, m4jpgem, "cgt03b.p1", 0x0000, 0x010000, CRC(99634ce1) SHA1(9fe867b0619070f563fb72b4415e4a9263c808e7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4jpgem__k, m4jpgem, "cgt03bd.p1", 0x0000, 0x010000, CRC(be984100) SHA1(dfa7d97f02dc988b7743a1f57ab08c406f712559), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4jpgem__l, m4jpgem, "cgt03d.p1", 0x0000, 0x010000, CRC(aba3a305) SHA1(9a0203f830a0a8c6013eb5824bd48373c589dcb5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4jpgem__m, m4jpgem, "cgt03dk.p1", 0x0000, 0x010000, CRC(be9292b0) SHA1(0d7944ac647c8fd92530389d61f5c1eec0d2c8d1), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4jpgem__n, m4jpgem, "cgt03dr.p1", 0x0000, 0x010000, CRC(935fa628) SHA1(5dd93fd27d2e15606ba22bada1ecff85c4f4a8c3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4jpgem__o, m4jpgem, "cgt03dy.p1", 0x0000, 0x010000, CRC(b83879b0) SHA1(b0664e1bd97b76b73c96a9e0d20d1a15707863ff), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4jpgem__p, m4jpgem, "cgt03k.p1", 0x0000, 0x010000, CRC(451a8f66) SHA1(e218db61fdaca6824abebe59ec7f8d0f595e2cfa), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4jpgem__q, m4jpgem, "cgt03r.p1", 0x0000, 0x010000, CRC(85dd3733) SHA1(10b8c4d147d4b534ce31394d5ba69806b83a297e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4jpgem__r, m4jpgem, "cgt03s.p1", 0x0000, 0x010000, CRC(b516cbcd) SHA1(c04d32818f9f8772b2a945cf40075ce7844b936e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4jpgem__s, m4jpgem, "cgt03y.p1", 0x0000, 0x010000, CRC(57937087) SHA1(489bcbe5598020c24357f4c7b4e9096bc6332aa3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 20)" ) +GAME_CUSTOM( 199?, m4jpgem__r, m4jpgem, "cgt03s.p1", 0x0000, 0x010000, CRC(b516cbcd) SHA1(c04d32818f9f8772b2a945cf40075ce7844b936e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__i, m4jpgem, "cgt03ad.p1", 0x0000, 0x010000, CRC(88842c4a) SHA1(c86987b44f04cf28a6f68300e4345f635455d4bf), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 AD / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__j, m4jpgem, "cgt03b.p1", 0x0000, 0x010000, CRC(99634ce1) SHA1(9fe867b0619070f563fb72b4415e4a9263c808e7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 B / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__k, m4jpgem, "cgt03bd.p1", 0x0000, 0x010000, CRC(be984100) SHA1(dfa7d97f02dc988b7743a1f57ab08c406f712559), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 BD / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__l, m4jpgem, "cgt03d.p1", 0x0000, 0x010000, CRC(aba3a305) SHA1(9a0203f830a0a8c6013eb5824bd48373c589dcb5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 D / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__m, m4jpgem, "cgt03dk.p1", 0x0000, 0x010000, CRC(be9292b0) SHA1(0d7944ac647c8fd92530389d61f5c1eec0d2c8d1), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 KD / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__n, m4jpgem, "cgt03dr.p1", 0x0000, 0x010000, CRC(935fa628) SHA1(5dd93fd27d2e15606ba22bada1ecff85c4f4a8c3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 RD / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__o, m4jpgem, "cgt03dy.p1", 0x0000, 0x010000, CRC(b83879b0) SHA1(b0664e1bd97b76b73c96a9e0d20d1a15707863ff), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 YD / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__p, m4jpgem, "cgt03k.p1", 0x0000, 0x010000, CRC(451a8f66) SHA1(e218db61fdaca6824abebe59ec7f8d0f595e2cfa), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 K / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__q, m4jpgem, "cgt03r.p1", 0x0000, 0x010000, CRC(85dd3733) SHA1(10b8c4d147d4b534ce31394d5ba69806b83a297e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 R / CG4 0.3)" ) +GAME_CUSTOM( 199?, m4jpgem__s, m4jpgem, "cgt03y.p1", 0x0000, 0x010000, CRC(57937087) SHA1(489bcbe5598020c24357f4c7b4e9096bc6332aa3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.3 Y / CG4 0.3)" ) // "(C)1991 BARCREST" and "CG4 0.1" (startup shows CGT 0.1) GAME_CUSTOM( 199?, m4jpgem__t, m4jpgem, "cgts.p1", 0x0000, 0x010000, CRC(2a6f4489) SHA1(e410dd49cca50b3c051815a1b4be4bf2dc55f1af), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGT 0.1 / CG4 0.1)" ) // "(C)1991 BARCREST" and "CG4 0.2" (startup shows CGU 0.2) GAME_CUSTOM( 199?, m4jpgem__3, m4jpgem, "cgu02s.p1", 0x0000, 0x010000, CRC(1cff0517) SHA1(162651a1af6273ea49490d0809a30ee9b13c728e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 / CG4 0.2)" ) -GAME_CUSTOM( 199?, m4jpgem__u, m4jpgem, "cgu02ad.p1", 0x0000, 0x010000, CRC(eee268a6) SHA1(ebc0d1e14ff27c5497b7c4e90e6fafa58916c83b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2AD / CG4 0.2)" ) -GAME_CUSTOM( 199?, m4jpgem__v, m4jpgem, "cgu02b.p1", 0x0000, 0x010000, CRC(7d05d069) SHA1(2a94b121528bf39939f5a8b36318c0073171997d), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 23)" ) -GAME_CUSTOM( 199?, m4jpgem__w, m4jpgem, "cgu02bd.p1", 0x0000, 0x010000, CRC(d8fe05ec) SHA1(7e2de5c6ece6779d09daf23f3ab4b61817fad103), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4jpgem__x, m4jpgem, "cgu02d.p1", 0x0000, 0x010000, CRC(daaf1fe1) SHA1(f2606c454e191166d217c5f5c82e91794977384b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4jpgem__y, m4jpgem, "cgu02dk.p1", 0x0000, 0x010000, CRC(0487c66b) SHA1(3be30181590e5f5d2181bc76da5fd49fe9796006), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4jpgem__z, m4jpgem, "cgu02dr.p1", 0x0000, 0x010000, CRC(68655b09) SHA1(df40c058172d960f4f9393343cf9271fc52c58c8), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4jpgem__0, m4jpgem, "cgu02dy.p1", 0x0000, 0x010000, CRC(5f1709d1) SHA1(36ae3cd57e5db956b8ef362043d5c63aea0da06a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 28)" ) -GAME_CUSTOM( 199?, m4jpgem__1, m4jpgem, "cgu02k.p1", 0x0000, 0x010000, CRC(90058f14) SHA1(0e73410253e422ff2d4182b034624ab8dd996cb8), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 29)" ) -GAME_CUSTOM( 199?, m4jpgem__2, m4jpgem, "cgu02r.p1", 0x0000, 0x010000, CRC(8f1d071b) SHA1(caa05465a12ca7ab6df0dce458caefb40dad818a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 30)" ) -GAME_CUSTOM( 199?, m4jpgem__4, m4jpgem, "cgu02y.p1", 0x0000, 0x010000, CRC(a2468782) SHA1(5f9161cffc6d9ffe8c30c41434ab012c16a48dfd), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 32)" ) +GAME_CUSTOM( 199?, m4jpgem__u, m4jpgem, "cgu02ad.p1", 0x0000, 0x010000, CRC(eee268a6) SHA1(ebc0d1e14ff27c5497b7c4e90e6fafa58916c83b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 AD / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__v, m4jpgem, "cgu02b.p1", 0x0000, 0x010000, CRC(7d05d069) SHA1(2a94b121528bf39939f5a8b36318c0073171997d), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 B / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__w, m4jpgem, "cgu02bd.p1", 0x0000, 0x010000, CRC(d8fe05ec) SHA1(7e2de5c6ece6779d09daf23f3ab4b61817fad103), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 BD / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__x, m4jpgem, "cgu02d.p1", 0x0000, 0x010000, CRC(daaf1fe1) SHA1(f2606c454e191166d217c5f5c82e91794977384b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 D / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__y, m4jpgem, "cgu02dk.p1", 0x0000, 0x010000, CRC(0487c66b) SHA1(3be30181590e5f5d2181bc76da5fd49fe9796006), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 KD / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__z, m4jpgem, "cgu02dr.p1", 0x0000, 0x010000, CRC(68655b09) SHA1(df40c058172d960f4f9393343cf9271fc52c58c8), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 RD / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__0, m4jpgem, "cgu02dy.p1", 0x0000, 0x010000, CRC(5f1709d1) SHA1(36ae3cd57e5db956b8ef362043d5c63aea0da06a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 YD / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__1, m4jpgem, "cgu02k.p1", 0x0000, 0x010000, CRC(90058f14) SHA1(0e73410253e422ff2d4182b034624ab8dd996cb8), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 K / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__2, m4jpgem, "cgu02r.p1", 0x0000, 0x010000, CRC(8f1d071b) SHA1(caa05465a12ca7ab6df0dce458caefb40dad818a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 R / CG4 0.2)" ) +GAME_CUSTOM( 199?, m4jpgem__4, m4jpgem, "cgu02y.p1", 0x0000, 0x010000, CRC(a2468782) SHA1(5f9161cffc6d9ffe8c30c41434ab012c16a48dfd), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (CGU 0.2 Y / CG4 0.2)" ) // "(C)1991 BARCREST" and "CG4 0.1" (startup shows RRH 0.1) GAME_CUSTOM( 199?, m4jpgem__bo, m4jpgem, "rrh01s.p1", 0x0000, 0x010000, CRC(dea2f376) SHA1(92f43c75950553d9b76af8179192d106de95fc03), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 / CG4 0.1)" ) -GAME_CUSTOM( 199?, m4jpgem__be, m4jpgem, "rrh01ad.p1", 0x0000, 0x010000, CRC(d4f21930) SHA1(cba034b42a3587c0e173bc06d80142d7e494c849), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1AD / CG4 0.1)" ) -GAME_CUSTOM( 199?, m4jpgem__bf, m4jpgem, "rrh01b.p1", 0x0000, 0x010000, CRC(c85f9099) SHA1(f3c8f79c2e0cc58024202564761f4935f5d241b1), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 79)" ) -GAME_CUSTOM( 199?, m4jpgem__bg, m4jpgem, "rrh01bd.p1", 0x0000, 0x010000, CRC(e2ee747a) SHA1(7f6cb93e3cbe4a2dd97d1ad15d17fa4f2f0a4b12), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 80)" ) -GAME_CUSTOM( 199?, m4jpgem__bh, m4jpgem, "rrh01c.p1", 0x0000, 0x010000, CRC(00dfced2) SHA1(c497cb9835dca0d67f5ec6b6b1321a7b92612c9a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 81)" ) -GAME_CUSTOM( 199?, m4jpgem__bi, m4jpgem, "rrh01d.p1", 0x0000, 0x010000, CRC(aef7ddbd) SHA1(8db2f1dbc11af7ef4357a90a77838c01588f8108), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 82)" ) -GAME_CUSTOM( 199?, m4jpgem__bj, m4jpgem, "rrh01dk.p1", 0x0000, 0x010000, CRC(56206f0a) SHA1(3bdb5824ab6d748eb83b56f08cf2d1074a94b38a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 83)" ) -GAME_CUSTOM( 199?, m4jpgem__bk, m4jpgem, "rrh01dr.p1", 0x0000, 0x010000, CRC(8f622573) SHA1(9bbfcb2f3cf5f6edd2c6222b25c4971a59d2c235), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 84)" ) -GAME_CUSTOM( 199?, m4jpgem__bl, m4jpgem, "rrh01dy.p1", 0x0000, 0x010000, CRC(d89136fd) SHA1(40fd0978bc76d81bfb5dc2f1e4a0c1c95b7c4e00), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 85)" ) -GAME_CUSTOM( 199?, m4jpgem__bm, m4jpgem, "rrh01k.p1", 0x0000, 0x010000, CRC(da4a08c9) SHA1(3a86c0a543a7192680663b465ddfd1fa338cfec5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 86)" ) -GAME_CUSTOM( 199?, m4jpgem__bn, m4jpgem, "rrh01r.p1", 0x0000, 0x010000, CRC(fb45c547) SHA1(8d9c35c47c0f03c9dc6727fc5f952d64e25336f7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 87)" ) -GAME_CUSTOM( 199?, m4jpgem__bp, m4jpgem, "rrh01y.p1", 0x0000, 0x010000, CRC(27014453) SHA1(febc118fcb8f048806237b38958c02d02b9f2874), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 89)" ) +GAME_CUSTOM( 199?, m4jpgem__be, m4jpgem, "rrh01ad.p1", 0x0000, 0x010000, CRC(d4f21930) SHA1(cba034b42a3587c0e173bc06d80142d7e494c849), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 AD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bf, m4jpgem, "rrh01b.p1", 0x0000, 0x010000, CRC(c85f9099) SHA1(f3c8f79c2e0cc58024202564761f4935f5d241b1), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 B / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bg, m4jpgem, "rrh01bd.p1", 0x0000, 0x010000, CRC(e2ee747a) SHA1(7f6cb93e3cbe4a2dd97d1ad15d17fa4f2f0a4b12), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 BD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bh, m4jpgem, "rrh01c.p1", 0x0000, 0x010000, CRC(00dfced2) SHA1(c497cb9835dca0d67f5ec6b6b1321a7b92612c9a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 C / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bi, m4jpgem, "rrh01d.p1", 0x0000, 0x010000, CRC(aef7ddbd) SHA1(8db2f1dbc11af7ef4357a90a77838c01588f8108), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 D / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bj, m4jpgem, "rrh01dk.p1", 0x0000, 0x010000, CRC(56206f0a) SHA1(3bdb5824ab6d748eb83b56f08cf2d1074a94b38a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 KD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bk, m4jpgem, "rrh01dr.p1", 0x0000, 0x010000, CRC(8f622573) SHA1(9bbfcb2f3cf5f6edd2c6222b25c4971a59d2c235), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 RD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bl, m4jpgem, "rrh01dy.p1", 0x0000, 0x010000, CRC(d89136fd) SHA1(40fd0978bc76d81bfb5dc2f1e4a0c1c95b7c4e00), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 YD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bm, m4jpgem, "rrh01k.p1", 0x0000, 0x010000, CRC(da4a08c9) SHA1(3a86c0a543a7192680663b465ddfd1fa338cfec5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 K / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bn, m4jpgem, "rrh01r.p1", 0x0000, 0x010000, CRC(fb45c547) SHA1(8d9c35c47c0f03c9dc6727fc5f952d64e25336f7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 R / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgem__bp, m4jpgem, "rrh01y.p1", 0x0000, 0x010000, CRC(27014453) SHA1(febc118fcb8f048806237b38958c02d02b9f2874), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (RRH 0.1 Y / CG4 0.1)" ) // sets below boot (regular arcade sets?) // "(C)1991 BARCREST" and "JAG 0.4" GAME_CUSTOM( 199?, m4jpgem__9, m4jpgem, "jags.p1", 0x0000, 0x010000, CRC(dd93f084) SHA1(5cb25b3beb6d7a7b83227a6bb8382cfbcc285887), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4)" ) -GAME_CUSTOM( 199?, m4jpgem__5, m4jpgem, "jagb.p1", 0x0000, 0x010000, CRC(75b9a4b6) SHA1(ecade0921cd535ee7f1b67767fa7d5ab3cd45b2c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4B)" ) -GAME_CUSTOM( 199?, m4jpgem__6, m4jpgem, "jagd.p1", 0x0000, 0x010000, CRC(c7546004) SHA1(31bdbd6b681a3a2b13f380f2807691c0b0fec83e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4jpgem__7, m4jpgem, "jagdk.p1", 0x0000, 0x010000, CRC(313f7a1f) SHA1(358a33878ca70f2bcdb1d5d79c39e357586ebe8b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 35)" ) -GAME_CUSTOM( 199?, m4jpgem__8, m4jpgem, "jagdy.p1", 0x0000, 0x010000, CRC(d105a41e) SHA1(365e382683362c815461801753fb03e2f084de65), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 36)" ) -GAME_CUSTOM( 199?, m4jpgem__aa, m4jpgem, "jagy.p1", 0x0000, 0x010000, CRC(08d510ca) SHA1(b79c9fe8dc17152f3e8c601c27515beff1d67219), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 38)" ) +GAME_CUSTOM( 199?, m4jpgem__5, m4jpgem, "jagb.p1", 0x0000, 0x010000, CRC(75b9a4b6) SHA1(ecade0921cd535ee7f1b67767fa7d5ab3cd45b2c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 B)" ) +GAME_CUSTOM( 199?, m4jpgem__6, m4jpgem, "jagd.p1", 0x0000, 0x010000, CRC(c7546004) SHA1(31bdbd6b681a3a2b13f380f2807691c0b0fec83e), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 D)" ) +GAME_CUSTOM( 199?, m4jpgem__7, m4jpgem, "jagdk.p1", 0x0000, 0x010000, CRC(313f7a1f) SHA1(358a33878ca70f2bcdb1d5d79c39e357586ebe8b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 KD)" ) +GAME_CUSTOM( 199?, m4jpgem__8, m4jpgem, "jagdy.p1", 0x0000, 0x010000, CRC(d105a41e) SHA1(365e382683362c815461801753fb03e2f084de65), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 YD)" ) +GAME_CUSTOM( 199?, m4jpgem__aa, m4jpgem, "jagy.p1", 0x0000, 0x010000, CRC(08d510ca) SHA1(b79c9fe8dc17152f3e8c601c27515beff1d67219), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JAG 0.4 Y)" ) // "(C)1991 BARCREST" and "JG3 0.1" GAME_CUSTOM( 199?, m4jpgem__ai, m4jpgem, "jg3s.p1", 0x0000, 0x010000, CRC(91945adc) SHA1(d80321fc4c2e67461d69df2164e3e290caa905bc), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1)" ) -GAME_CUSTOM( 199?, m4jpgem__ab, m4jpgem, "jg3ad.p1", 0x0000, 0x010000, CRC(501bb879) SHA1(a97519042b4a4ed03efbcad9f11f279184dec847), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1AD)" ) -GAME_CUSTOM( 199?, m4jpgem__ac, m4jpgem, "jg3b.p1", 0x0000, 0x010000, CRC(e568ae84) SHA1(9126f9b45633e7eb44626aa0ab40784c62870c8a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4jpgem__ad, m4jpgem, "jg3bd.p1", 0x0000, 0x010000, CRC(435d5d28) SHA1(1ea48323f48edc20ce1c28e4e7080e0824e73d3c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4jpgem__ae, m4jpgem, "jg3d.p1", 0x0000, 0x010000, CRC(774f9d41) SHA1(c99e9a46b1216f430007b5ebbf942899b5e691f9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 42)" ) -GAME_CUSTOM( 199?, m4jpgem__af, m4jpgem, "jg3dk.p1", 0x0000, 0x010000, CRC(c422e514) SHA1(172b25bf75a529b555e328cef77a3340609d818b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 43)" ) -GAME_CUSTOM( 199?, m4jpgem__ag, m4jpgem, "jg3dy.p1", 0x0000, 0x010000, CRC(5d1c886f) SHA1(b49ab97ba6cdc810e7baa520ffad25f54c0d8412), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4jpgem__ah, m4jpgem, "jg3k.p1", 0x0000, 0x010000, CRC(8e7985ae) SHA1(8c8de22aab2508b2317d5edde779d54ebe67ac92), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 45)" ) -GAME_CUSTOM( 199?, m4jpgem__aj, m4jpgem, "jg3y.p1", 0x0000, 0x010000, CRC(bf96ad55) SHA1(48d828398f32c3ddfafeb84cfd777f8e668df1b3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 47)" ) +GAME_CUSTOM( 199?, m4jpgem__ab, m4jpgem, "jg3ad.p1", 0x0000, 0x010000, CRC(501bb879) SHA1(a97519042b4a4ed03efbcad9f11f279184dec847), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 AD)" ) +GAME_CUSTOM( 199?, m4jpgem__ac, m4jpgem, "jg3b.p1", 0x0000, 0x010000, CRC(e568ae84) SHA1(9126f9b45633e7eb44626aa0ab40784c62870c8a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 B)" ) +GAME_CUSTOM( 199?, m4jpgem__ad, m4jpgem, "jg3bd.p1", 0x0000, 0x010000, CRC(435d5d28) SHA1(1ea48323f48edc20ce1c28e4e7080e0824e73d3c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 BD)" ) +GAME_CUSTOM( 199?, m4jpgem__ae, m4jpgem, "jg3d.p1", 0x0000, 0x010000, CRC(774f9d41) SHA1(c99e9a46b1216f430007b5ebbf942899b5e691f9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 D)" ) +GAME_CUSTOM( 199?, m4jpgem__af, m4jpgem, "jg3dk.p1", 0x0000, 0x010000, CRC(c422e514) SHA1(172b25bf75a529b555e328cef77a3340609d818b), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 KD)" ) +GAME_CUSTOM( 199?, m4jpgem__ag, m4jpgem, "jg3dy.p1", 0x0000, 0x010000, CRC(5d1c886f) SHA1(b49ab97ba6cdc810e7baa520ffad25f54c0d8412), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 YD)" ) +GAME_CUSTOM( 199?, m4jpgem__ah, m4jpgem, "jg3k.p1", 0x0000, 0x010000, CRC(8e7985ae) SHA1(8c8de22aab2508b2317d5edde779d54ebe67ac92), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 K)" ) +GAME_CUSTOM( 199?, m4jpgem__aj, m4jpgem, "jg3y.p1", 0x0000, 0x010000, CRC(bf96ad55) SHA1(48d828398f32c3ddfafeb84cfd777f8e668df1b3), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG3 0.1 Y)" ) // "(C)1991 BARCREST" and "JG8 0.1" GAME_CUSTOM( 199?, m4jpgem__ar, m4jpgem, "jg8s.p1", 0x0000, 0x010000, CRC(8cdd650a) SHA1(c4cb87513f0d7986e158b3c5ab1f034c8ba933a9), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1)" ) -GAME_CUSTOM( 199?, m4jpgem__ak, m4jpgem, "jg8b.p1", 0x0000, 0x010000, CRC(f2e3d009) SHA1(90c85f9a300d157d560b08ccabfe79f826780d74), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1B)" ) -GAME_CUSTOM( 199?, m4jpgem__al, m4jpgem, "jg8c.p1", 0x0000, 0x010000, CRC(cc24cf15) SHA1(0c4c28633f33c78570f5da17c64c2e90bf3d5cd0), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 49)" ) -GAME_CUSTOM( 199?, m4jpgem__am, m4jpgem, "jg8d.p1", 0x0000, 0x010000, CRC(58eff94c) SHA1(9acde535ad808789233876dd8076c03a8d56a9e7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 50)" ) -GAME_CUSTOM( 199?, m4jpgem__an, m4jpgem, "jg8db.p1", 0x0000, 0x010000, CRC(3006a36a) SHA1(37297cae02c1fd5308ba9935537b35c565374a07), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 51)" ) -GAME_CUSTOM( 199?, m4jpgem__ao, m4jpgem, "jg8dk.p1", 0x0000, 0x010000, CRC(199401d7) SHA1(33eef070e437386c7ad0d834b40353047f1a6a6f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 52)" ) -GAME_CUSTOM( 199?, m4jpgem__ap, m4jpgem, "jg8dy.p1", 0x0000, 0x010000, CRC(ead58bed) SHA1(cd0e151c843f5268edddb2f82555201deccac65a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 53)" ) -GAME_CUSTOM( 199?, m4jpgem__aq, m4jpgem, "jg8k.p1", 0x0000, 0x010000, CRC(f5b14363) SHA1(f0ace838cc0d0c262006bb514eff75903d92d679), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 54)" ) +GAME_CUSTOM( 199?, m4jpgem__ak, m4jpgem, "jg8b.p1", 0x0000, 0x010000, CRC(f2e3d009) SHA1(90c85f9a300d157d560b08ccabfe79f826780d74), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 B)" ) +GAME_CUSTOM( 199?, m4jpgem__al, m4jpgem, "jg8c.p1", 0x0000, 0x010000, CRC(cc24cf15) SHA1(0c4c28633f33c78570f5da17c64c2e90bf3d5cd0), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 C)" ) +GAME_CUSTOM( 199?, m4jpgem__am, m4jpgem, "jg8d.p1", 0x0000, 0x010000, CRC(58eff94c) SHA1(9acde535ad808789233876dd8076c03a8d56a9e7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 D)" ) +GAME_CUSTOM( 199?, m4jpgem__an, m4jpgem, "jg8db.p1", 0x0000, 0x010000, CRC(3006a36a) SHA1(37297cae02c1fd5308ba9935537b35c565374a07), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 BD)" ) +GAME_CUSTOM( 199?, m4jpgem__ao, m4jpgem, "jg8dk.p1", 0x0000, 0x010000, CRC(199401d7) SHA1(33eef070e437386c7ad0d834b40353047f1a6a6f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 KD)" ) +GAME_CUSTOM( 199?, m4jpgem__ap, m4jpgem, "jg8dy.p1", 0x0000, 0x010000, CRC(ead58bed) SHA1(cd0e151c843f5268edddb2f82555201deccac65a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 YD)" ) +GAME_CUSTOM( 199?, m4jpgem__aq, m4jpgem, "jg8k.p1", 0x0000, 0x010000, CRC(f5b14363) SHA1(f0ace838cc0d0c262006bb514eff75903d92d679), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JG8 0.1 K)" ) // "(C)1991 BARCREST" and "JGT 0.3" GAME_CUSTOM( 199?, m4jpgem__a1, m4jpgem, "jgts.p1", 0x0000, 0x010000, CRC(0e3810a7) SHA1(cf840bd84eba65d9dec2d6821a48112b6f2f9bca), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3)" ) -GAME_CUSTOM( 199?, m4jpgem__as, m4jpgem, "jgtad.p1", 0x0000, 0x010000, CRC(90e10b6c) SHA1(548c7537829ca9395cac460ccf76e0d566898e44), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3AD)" ) -GAME_CUSTOM( 199?, m4jpgem__at, m4jpgem, "jgtb.p1", 0x0000, 0x010000, CRC(5f343a43) SHA1(033824e93b1fcd2f7c5f27a573a728747ef7b21a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 57)" ) -GAME_CUSTOM( 199?, m4jpgem__au, m4jpgem, "jgtbd.p1", 0x0000, 0x010000, CRC(50ba2771) SHA1(f487ed2eeff0369e3fa718de68e3ba4912fd7576), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 58)" ) -GAME_CUSTOM( 199?, m4jpgem__av, m4jpgem, "jgtd.p1", 0x0000, 0x010000, CRC(2625da4a) SHA1(b1f9d22a46bf20283c5735fce5768d9cef299f59), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 59)" ) -GAME_CUSTOM( 199?, m4jpgem__aw, m4jpgem, "jgtdk.p1", 0x0000, 0x010000, CRC(94220901) SHA1(f62c9a59bb419e98f7de358f7fee072b08aab3f5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 60)" ) -GAME_CUSTOM( 199?, m4jpgem__ax, m4jpgem, "jgtdr.p1", 0x0000, 0x010000, CRC(5011d1e3) SHA1(85e5d28d26449a951704698a4419cd2c0f7dd9c4), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 61)" ) -GAME_CUSTOM( 199?, m4jpgem__ay, m4jpgem, "jgtdy.p1", 0x0000, 0x010000, CRC(6397e38c) SHA1(ed0c165a5ab27524374c540fd9bdcfd41ce8096c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 62)" ) -GAME_CUSTOM( 199?, m4jpgem__az, m4jpgem, "jgtk.p1", 0x0000, 0x010000, CRC(cb30d644) SHA1(751fc5c7ae07e64c07a3e89e74ace09dd2b99a02), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 63)" ) -GAME_CUSTOM( 199?, m4jpgem__a0, m4jpgem, "jgtr.p1", 0x0000, 0x010000, CRC(6224a93d) SHA1(6d36b64c2eaddf122a6a7e798b5efb44ec2e5b45), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 64)" ) -GAME_CUSTOM( 199?, m4jpgem__a2, m4jpgem, "jgty.p1", 0x0000, 0x010000, CRC(84830d1f) SHA1(a4184a5bd08393c35f22bc05315377bff74f666c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 66)" ) +GAME_CUSTOM( 199?, m4jpgem__as, m4jpgem, "jgtad.p1", 0x0000, 0x010000, CRC(90e10b6c) SHA1(548c7537829ca9395cac460ccf76e0d566898e44), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 AD)" ) +GAME_CUSTOM( 199?, m4jpgem__at, m4jpgem, "jgtb.p1", 0x0000, 0x010000, CRC(5f343a43) SHA1(033824e93b1fcd2f7c5f27a573a728747ef7b21a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 B)" ) +GAME_CUSTOM( 199?, m4jpgem__au, m4jpgem, "jgtbd.p1", 0x0000, 0x010000, CRC(50ba2771) SHA1(f487ed2eeff0369e3fa718de68e3ba4912fd7576), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 BD)" ) +GAME_CUSTOM( 199?, m4jpgem__av, m4jpgem, "jgtd.p1", 0x0000, 0x010000, CRC(2625da4a) SHA1(b1f9d22a46bf20283c5735fce5768d9cef299f59), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 D)" ) +GAME_CUSTOM( 199?, m4jpgem__aw, m4jpgem, "jgtdk.p1", 0x0000, 0x010000, CRC(94220901) SHA1(f62c9a59bb419e98f7de358f7fee072b08aab3f5), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 KD)" ) +GAME_CUSTOM( 199?, m4jpgem__ax, m4jpgem, "jgtdr.p1", 0x0000, 0x010000, CRC(5011d1e3) SHA1(85e5d28d26449a951704698a4419cd2c0f7dd9c4), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 RD)" ) +GAME_CUSTOM( 199?, m4jpgem__ay, m4jpgem, "jgtdy.p1", 0x0000, 0x010000, CRC(6397e38c) SHA1(ed0c165a5ab27524374c540fd9bdcfd41ce8096c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 YD)" ) +GAME_CUSTOM( 199?, m4jpgem__az, m4jpgem, "jgtk.p1", 0x0000, 0x010000, CRC(cb30d644) SHA1(751fc5c7ae07e64c07a3e89e74ace09dd2b99a02), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 K)" ) +GAME_CUSTOM( 199?, m4jpgem__a0, m4jpgem, "jgtr.p1", 0x0000, 0x010000, CRC(6224a93d) SHA1(6d36b64c2eaddf122a6a7e798b5efb44ec2e5b45), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 R)" ) +GAME_CUSTOM( 199?, m4jpgem__a2, m4jpgem, "jgty.p1", 0x0000, 0x010000, CRC(84830d1f) SHA1(a4184a5bd08393c35f22bc05315377bff74f666c), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGT 0.3 Y)" ) // "(C)1991 BARCREST" and "JGU 0.2" GAME_CUSTOM( 199?, m4jpgem__bc, m4jpgem, "jgu02s.p1", 0x0000, 0x010000, CRC(f8abd287) SHA1(906d2817f73ea21cf830b0bd9a1938d344cc0341), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2)" ) -GAME_CUSTOM( 199?, m4jpgem__a3, m4jpgem, "jgu02ad.p1", 0x0000, 0x010000, CRC(ccec7d40) SHA1(75cc1a0dfda9592e35c24c030e04a768871a9e41), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2AD)" ) -GAME_CUSTOM( 199?, m4jpgem__a4, m4jpgem, "jgu02b.p1", 0x0000, 0x010000, CRC(daf0ebe3) SHA1(2e73f7b8171c0be7d06bf6da22e0395d5241b043), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 68)" ) -GAME_CUSTOM( 199?, m4jpgem__a5, m4jpgem, "jgu02bd.p1", 0x0000, 0x010000, CRC(faf0100a) SHA1(c97b8eadfd473650ec497c7caa98e8efc59ecb6f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 69)" ) -GAME_CUSTOM( 199?, m4jpgem__a6, m4jpgem, "jgu02d.p1", 0x0000, 0x010000, CRC(b46e3f66) SHA1(1ede9d794effbc8cc9f097a06b7df4023d3d47ba), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 70)" ) -GAME_CUSTOM( 199?, m4jpgem__a7, m4jpgem, "jgu02dk.p1", 0x0000, 0x010000, CRC(cdbf0041) SHA1(fb90d4f8112e169dab16f78fdea9d1b5306e05d6), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 71)" ) -GAME_CUSTOM( 199?, m4jpgem__a8, m4jpgem, "jgu02dr.p1", 0x0000, 0x010000, CRC(41f1f723) SHA1(96623358e6dc450dbdc769d176703917f67e767a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 72)" ) -GAME_CUSTOM( 199?, m4jpgem__a9, m4jpgem, "jgu02dy.p1", 0x0000, 0x010000, CRC(2023388d) SHA1(c9f1abaa12c78ac61304966b46044b82ea2ea3ff), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 73)" ) -GAME_CUSTOM( 199?, m4jpgem__ba, m4jpgem, "jgu02k.p1", 0x0000, 0x010000, CRC(615029e8) SHA1(aecba0fad8c74fef9a4d04e95df961432ac999b7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 74)" ) -GAME_CUSTOM( 199?, m4jpgem__bb, m4jpgem, "jgu02r.p1", 0x0000, 0x010000, CRC(4bc55daa) SHA1(996f23bd66a4ef6ad8f77a28dc6ee67d9a293248), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 75)" ) -GAME_CUSTOM( 199?, m4jpgem__bd, m4jpgem, "jgu02y.p1", 0x0000, 0x010000, CRC(9b4325a8) SHA1(3d7c54691ed4d596acacec97e452a66b324957db), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (set 77)" ) +GAME_CUSTOM( 199?, m4jpgem__a3, m4jpgem, "jgu02ad.p1", 0x0000, 0x010000, CRC(ccec7d40) SHA1(75cc1a0dfda9592e35c24c030e04a768871a9e41), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 AD)" ) +GAME_CUSTOM( 199?, m4jpgem__a4, m4jpgem, "jgu02b.p1", 0x0000, 0x010000, CRC(daf0ebe3) SHA1(2e73f7b8171c0be7d06bf6da22e0395d5241b043), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 B)" ) +GAME_CUSTOM( 199?, m4jpgem__a5, m4jpgem, "jgu02bd.p1", 0x0000, 0x010000, CRC(faf0100a) SHA1(c97b8eadfd473650ec497c7caa98e8efc59ecb6f), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 BD)" ) +GAME_CUSTOM( 199?, m4jpgem__a6, m4jpgem, "jgu02d.p1", 0x0000, 0x010000, CRC(b46e3f66) SHA1(1ede9d794effbc8cc9f097a06b7df4023d3d47ba), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 D)" ) +GAME_CUSTOM( 199?, m4jpgem__a7, m4jpgem, "jgu02dk.p1", 0x0000, 0x010000, CRC(cdbf0041) SHA1(fb90d4f8112e169dab16f78fdea9d1b5306e05d6), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 KD)" ) +GAME_CUSTOM( 199?, m4jpgem__a8, m4jpgem, "jgu02dr.p1", 0x0000, 0x010000, CRC(41f1f723) SHA1(96623358e6dc450dbdc769d176703917f67e767a), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 RD)" ) +GAME_CUSTOM( 199?, m4jpgem__a9, m4jpgem, "jgu02dy.p1", 0x0000, 0x010000, CRC(2023388d) SHA1(c9f1abaa12c78ac61304966b46044b82ea2ea3ff), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 YD)" ) +GAME_CUSTOM( 199?, m4jpgem__ba, m4jpgem, "jgu02k.p1", 0x0000, 0x010000, CRC(615029e8) SHA1(aecba0fad8c74fef9a4d04e95df961432ac999b7), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 K)" ) +GAME_CUSTOM( 199?, m4jpgem__bb, m4jpgem, "jgu02r.p1", 0x0000, 0x010000, CRC(4bc55daa) SHA1(996f23bd66a4ef6ad8f77a28dc6ee67d9a293248), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 R)" ) +GAME_CUSTOM( 199?, m4jpgem__bd, m4jpgem, "jgu02y.p1", 0x0000, 0x010000, CRC(9b4325a8) SHA1(3d7c54691ed4d596acacec97e452a66b324957db), "Barcrest","Jackpot Gems (Barcrest) (MPU4) (JGU 0.2 Y)" ) #define M4JPGEMC_EXTRA_ROMS \ ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \ @@ -1393,30 +1393,30 @@ GAME_CUSTOM( 199?, m4jpgem__bd, m4jpgem, "jgu02y.p1", 0x0000, 0x010000, CR // "(C)1991 BARCREST" and "CG4 0.1" (startup shows GTC) GAME_CUSTOM( 199?, m4jpgemc, 0, "gtc01s.p1", 0x0000, 0x010000, CRC(af33337b) SHA1(97d28e224b73baa9d6d7b0c309385f57b6dd5d9b), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 / CG4 0.1)" ) -GAME_CUSTOM( 199?, m4jpgemc__j, m4jpgemc, "gtc01ad.p1", 0x0000, 0x010000, CRC(e4f61afd) SHA1(36e007275cce0565c50b150dba4c8df272cd4c2e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1AD / CG4 0.1)" ) -GAME_CUSTOM( 199?, m4jpgemc__a, m4jpgemc, "gtc01b.p1", 0x0000, 0x010000, CRC(e4e27c71) SHA1(b46da3f00134d3a2f17ceb35529adb598c75ee4e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 2)" ) -GAME_CUSTOM( 199?, m4jpgemc__b, m4jpgemc, "gtc01bd.p1", 0x0000, 0x010000, CRC(d2ea77b7) SHA1(4f66fa8d692f26ffa92ae3aff4f43257fc573e93), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4jpgemc__c, m4jpgemc, "gtc01c.p1", 0x0000, 0x010000, CRC(21c4c4f7) SHA1(f8a2de8453c095db80ff19018a72b15b949bace9), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4jpgemc__d, m4jpgemc, "gtc01d.p1", 0x0000, 0x010000, CRC(b6a3d2c3) SHA1(48cbd3cf14b8f8e9ecbee1f351e781506ca6c17f), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4jpgemc__e, m4jpgemc, "gtc01dk.p1", 0x0000, 0x010000, CRC(70cf4790) SHA1(b6aac10fd9ad3aafa277e6de58db3f1a28501529), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4jpgemc__f, m4jpgemc, "gtc01dr.p1", 0x0000, 0x010000, CRC(4cb11885) SHA1(288da6617868f7d082fc72f50c13671fdaf9442a), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4jpgemc__g, m4jpgemc, "gtc01dy.p1", 0x0000, 0x010000, CRC(713dec4a) SHA1(3cb1e3f5299a5145addaa677022e7d9a164072d9), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4jpgemc__h, m4jpgemc, "gtc01k.p1", 0x0000, 0x010000, CRC(fb5102ec) SHA1(36c9c50c8266707542b00cfc55f57ec454401f70), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4jpgemc__i, m4jpgemc, "gtc01r.p1", 0x0000, 0x010000, CRC(e311ca39) SHA1(602aee41400793f46f47ac9c8a9e6ce7f2d5f203), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4jpgemc__k, m4jpgemc, "gtc01y.p1", 0x0000, 0x010000, CRC(59e8557a) SHA1(8493b160427c21bbb2834c01b39f8a6a8b221bb3), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 12)" ) +GAME_CUSTOM( 199?, m4jpgemc__j, m4jpgemc, "gtc01ad.p1", 0x0000, 0x010000, CRC(e4f61afd) SHA1(36e007275cce0565c50b150dba4c8df272cd4c2e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 AD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__a, m4jpgemc, "gtc01b.p1", 0x0000, 0x010000, CRC(e4e27c71) SHA1(b46da3f00134d3a2f17ceb35529adb598c75ee4e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 B / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__b, m4jpgemc, "gtc01bd.p1", 0x0000, 0x010000, CRC(d2ea77b7) SHA1(4f66fa8d692f26ffa92ae3aff4f43257fc573e93), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 BD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__c, m4jpgemc, "gtc01c.p1", 0x0000, 0x010000, CRC(21c4c4f7) SHA1(f8a2de8453c095db80ff19018a72b15b949bace9), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 C / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__d, m4jpgemc, "gtc01d.p1", 0x0000, 0x010000, CRC(b6a3d2c3) SHA1(48cbd3cf14b8f8e9ecbee1f351e781506ca6c17f), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 D / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__e, m4jpgemc, "gtc01dk.p1", 0x0000, 0x010000, CRC(70cf4790) SHA1(b6aac10fd9ad3aafa277e6de58db3f1a28501529), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 KD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__f, m4jpgemc, "gtc01dr.p1", 0x0000, 0x010000, CRC(4cb11885) SHA1(288da6617868f7d082fc72f50c13671fdaf9442a), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 RD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__g, m4jpgemc, "gtc01dy.p1", 0x0000, 0x010000, CRC(713dec4a) SHA1(3cb1e3f5299a5145addaa677022e7d9a164072d9), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 YD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__h, m4jpgemc, "gtc01k.p1", 0x0000, 0x010000, CRC(fb5102ec) SHA1(36c9c50c8266707542b00cfc55f57ec454401f70), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 K / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__i, m4jpgemc, "gtc01r.p1", 0x0000, 0x010000, CRC(e311ca39) SHA1(602aee41400793f46f47ac9c8a9e6ce7f2d5f203), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 R / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__k, m4jpgemc, "gtc01y.p1", 0x0000, 0x010000, CRC(59e8557a) SHA1(8493b160427c21bbb2834c01b39f8a6a8b221bb3), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (GTC 0.1 Y / CG4 0.1)" ) // "(C)1991 BARCREST" and "CG4 0.1" (startup shows HGE) GAME_CUSTOM( 199?, m4jpgemc__v, m4jpgemc, "hge01s.p1", 0x0000, 0x010000, CRC(b79f8c42) SHA1(7d8b3352fbd9a80b86f5a8b22833d6f5c4b9854b), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 / CG4 0.1)" ) -GAME_CUSTOM( 199?, m4jpgemc__l, m4jpgemc, "hge01ad.p1", 0x0000, 0x010000, CRC(bb201074) SHA1(eb954d165c2d96f952439277d255e3ec3326ada3), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1AD / CG4 0.1)" ) -GAME_CUSTOM( 199?, m4jpgemc__m, m4jpgemc, "hge01b.p1", 0x0000, 0x010000, CRC(d7ad2482) SHA1(ed90c4531608e66b14eb1079e85ea59573adf451), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4jpgemc__n, m4jpgemc, "hge01bd.p1", 0x0000, 0x010000, CRC(3ea0f524) SHA1(1967e5ec14c41c4140c7c39b07085f740c2d1f01), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4jpgemc__o, m4jpgemc, "hge01c.p1", 0x0000, 0x010000, CRC(498de7bf) SHA1(32dc31852fa69f7d2dd47bbcef695fcf5337f01f), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4jpgemc__p, m4jpgemc, "hge01d.p1", 0x0000, 0x010000, CRC(be6bb0dd) SHA1(3a0550608c8738b92b48b7a12fb43fb82f52cdd7), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4jpgemc__q, m4jpgemc, "hge01dk.p1", 0x0000, 0x010000, CRC(80904843) SHA1(8030def4c0e80ac8f28452662487dbfc21a761ee), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4jpgemc__r, m4jpgemc, "hge01dr.p1", 0x0000, 0x010000, CRC(d89b36b7) SHA1(22c334f1aa314ff288c65eb01ad0415db8e05b15), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4jpgemc__s, m4jpgemc, "hge01dy.p1", 0x0000, 0x010000, CRC(18ca3ae3) SHA1(ebb434a060564d3a1bc51876257729650e2903a6), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4jpgemc__t, m4jpgemc, "hge01k.p1", 0x0000, 0x010000, CRC(4161f733) SHA1(b551bb278666790f0c293c76d5c3fabf8f4d368e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4jpgemc__u, m4jpgemc, "hge01r.p1", 0x0000, 0x010000, CRC(6dc8dc70) SHA1(e96fc4284ece65f76d5e9bd06c4a002de65bf4da), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 22)" ) -GAME_CUSTOM( 199?, m4jpgemc__w, m4jpgemc, "hge01y.p1", 0x0000, 0x010000, CRC(a96db093) SHA1(17520306112cee6f082829811e1f8c432c6aa354), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (set 24)" ) +GAME_CUSTOM( 199?, m4jpgemc__l, m4jpgemc, "hge01ad.p1", 0x0000, 0x010000, CRC(bb201074) SHA1(eb954d165c2d96f952439277d255e3ec3326ada3), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 AD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__m, m4jpgemc, "hge01b.p1", 0x0000, 0x010000, CRC(d7ad2482) SHA1(ed90c4531608e66b14eb1079e85ea59573adf451), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 B / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__n, m4jpgemc, "hge01bd.p1", 0x0000, 0x010000, CRC(3ea0f524) SHA1(1967e5ec14c41c4140c7c39b07085f740c2d1f01), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 BD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__o, m4jpgemc, "hge01c.p1", 0x0000, 0x010000, CRC(498de7bf) SHA1(32dc31852fa69f7d2dd47bbcef695fcf5337f01f), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 C / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__p, m4jpgemc, "hge01d.p1", 0x0000, 0x010000, CRC(be6bb0dd) SHA1(3a0550608c8738b92b48b7a12fb43fb82f52cdd7), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 D / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__q, m4jpgemc, "hge01dk.p1", 0x0000, 0x010000, CRC(80904843) SHA1(8030def4c0e80ac8f28452662487dbfc21a761ee), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 KD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__r, m4jpgemc, "hge01dr.p1", 0x0000, 0x010000, CRC(d89b36b7) SHA1(22c334f1aa314ff288c65eb01ad0415db8e05b15), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 RD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__s, m4jpgemc, "hge01dy.p1", 0x0000, 0x010000, CRC(18ca3ae3) SHA1(ebb434a060564d3a1bc51876257729650e2903a6), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 YD / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__t, m4jpgemc, "hge01k.p1", 0x0000, 0x010000, CRC(4161f733) SHA1(b551bb278666790f0c293c76d5c3fabf8f4d368e), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 K / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__u, m4jpgemc, "hge01r.p1", 0x0000, 0x010000, CRC(6dc8dc70) SHA1(e96fc4284ece65f76d5e9bd06c4a002de65bf4da), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 R / CG4 0.1)" ) +GAME_CUSTOM( 199?, m4jpgemc__w, m4jpgemc, "hge01y.p1", 0x0000, 0x010000, CRC(a96db093) SHA1(17520306112cee6f082829811e1f8c432c6aa354), "Barcrest","Jackpot Gems Classic (Barcrest) (MPU4) (HGE 0.1 Y / CG4 0.1)" ) #define M4JOLGEM_EXTRA_ROMS \ @@ -1436,64 +1436,64 @@ GAME_CUSTOM( 199?, m4jpgemc__w, m4jpgemc, "hge01y.p1", 0x0000, 0x010000, GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring_big ,ROT0,company,title,GAME_FLAGS ) -// "(C)1993 BARCREST" and "GEM 0.7" +// "(C)1993 BARCREST" and "GEM 0.7" // yes, the 'type' bytes are in a different order here, with D coming before the others GAME_CUSTOM( 199?, m4jolgem, 0, "gem07s.p1", 0x0000, 0x020000, CRC(945ad0d2) SHA1(d636bc41a4f887d24affc0f5b644c5d5351cf0df), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7)" ) -GAME_CUSTOM( 199?, m4jolgem__m, m4jolgem, "gem07ad.p1", 0x0000, 0x020000, CRC(21496739) SHA1(05771636542275ecae1cd45bc248ed104a422f03), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4jolgem__n, m4jolgem, "gem07b.p1", 0x0000, 0x020000, CRC(70ca3435) SHA1(ff631f9adea268c1160646bacca976c069751ba8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4jolgem__o, m4jolgem, "gem07bd.p1", 0x0000, 0x020000, CRC(cf750422) SHA1(01c275c90f33afe4cd54c1b9c4963b6c5e66596b), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4jolgem__p, m4jolgem, "gem07d.p1", 0x0000, 0x020000, CRC(dec87143) SHA1(080483f5500bedac6dfbd252d2ac42e23c1b5ac5), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4jolgem__q, m4jolgem, "gem07dh.p1", 0x0000, 0x020000, CRC(8fc03bb7) SHA1(dc240714d59f9055ce9c098f7cd60f06a92a0a28), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4jolgem__r, m4jolgem, "gem07dr.p1", 0x0000, 0x020000, CRC(559bda9b) SHA1(91ec97aab73717eb401672ca4e4b58a87a71f099), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4jolgem__s, m4jolgem, "gem07dy.p1", 0x0000, 0x020000, CRC(9b1974ee) SHA1(7d6b7ee79ac4401d7e65aa2240ea01cad26eb881), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4jolgem__t, m4jolgem, "gem07h.p1", 0x0000, 0x020000, CRC(307f0ba0) SHA1(518acd033599b188e972e51753ac610623038aca), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4jolgem__u, m4jolgem, "gem07r.p1", 0x0000, 0x020000, CRC(ea24ea8c) SHA1(8d3598e44d219f1d66b63bf3ca4062eb84ecbe60), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 22)" ) -GAME_CUSTOM( 199?, m4jolgem__v, m4jolgem, "gem07y.p1", 0x0000, 0x020000, CRC(24a644f9) SHA1(b97b83ce0ebf315529efe6d5be051ad71f2e648a), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 23)" ) +GAME_CUSTOM( 199?, m4jolgem__m, m4jolgem, "gem07ad.p1", 0x0000, 0x020000, CRC(21496739) SHA1(05771636542275ecae1cd45bc248ed104a422f03), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DA)" ) +GAME_CUSTOM( 199?, m4jolgem__n, m4jolgem, "gem07b.p1", 0x0000, 0x020000, CRC(70ca3435) SHA1(ff631f9adea268c1160646bacca976c069751ba8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 B)" ) +GAME_CUSTOM( 199?, m4jolgem__o, m4jolgem, "gem07bd.p1", 0x0000, 0x020000, CRC(cf750422) SHA1(01c275c90f33afe4cd54c1b9c4963b6c5e66596b), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DB)" ) +GAME_CUSTOM( 199?, m4jolgem__p, m4jolgem, "gem07d.p1", 0x0000, 0x020000, CRC(dec87143) SHA1(080483f5500bedac6dfbd252d2ac42e23c1b5ac5), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 D)" ) +GAME_CUSTOM( 199?, m4jolgem__q, m4jolgem, "gem07dh.p1", 0x0000, 0x020000, CRC(8fc03bb7) SHA1(dc240714d59f9055ce9c098f7cd60f06a92a0a28), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DH)" ) +GAME_CUSTOM( 199?, m4jolgem__r, m4jolgem, "gem07dr.p1", 0x0000, 0x020000, CRC(559bda9b) SHA1(91ec97aab73717eb401672ca4e4b58a87a71f099), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DR)" ) +GAME_CUSTOM( 199?, m4jolgem__s, m4jolgem, "gem07dy.p1", 0x0000, 0x020000, CRC(9b1974ee) SHA1(7d6b7ee79ac4401d7e65aa2240ea01cad26eb881), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 DY)" ) +GAME_CUSTOM( 199?, m4jolgem__t, m4jolgem, "gem07h.p1", 0x0000, 0x020000, CRC(307f0ba0) SHA1(518acd033599b188e972e51753ac610623038aca), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 H)" ) +GAME_CUSTOM( 199?, m4jolgem__u, m4jolgem, "gem07r.p1", 0x0000, 0x020000, CRC(ea24ea8c) SHA1(8d3598e44d219f1d66b63bf3ca4062eb84ecbe60), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 R)" ) +GAME_CUSTOM( 199?, m4jolgem__v, m4jolgem, "gem07y.p1", 0x0000, 0x020000, CRC(24a644f9) SHA1(b97b83ce0ebf315529efe6d5be051ad71f2e648a), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.7 Y)" ) // "(C)1993 BARCREST" and "GEM 0.5" GAME_CUSTOM( 199?, m4jolgem__a, m4jolgem, "gem05s", 0x0000, 0x020000, CRC(b7ceafc2) SHA1(b66d846da5ff20df912d31695eaef146dbbe759e), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.5)" ) // "(C)1993 BARCREST" and "GEM 0.6" GAME_CUSTOM( 199?, m4jolgem__k, m4jolgem, "gem06s.p1", 0x0000, 0x020000, CRC(e0d82632) SHA1(35a51394a68311d03800db671fbd634bae087e86), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6)" ) -GAME_CUSTOM( 199?, m4jolgem__b, m4jolgem, "gem06ad.p1", 0x0000, 0x020000, CRC(a3270974) SHA1(59992779415ff20b8589843510099b77c9b157fd), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4jolgem__c, m4jolgem, "gem06b.p1", 0x0000, 0x020000, CRC(188ea295) SHA1(b8a2bdede4478a582f041fd3ff84b5563feaedd3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4jolgem__d, m4jolgem, "gem06bd.p1", 0x0000, 0x020000, CRC(4d1b6a6f) SHA1(6cb733b3f8e011e1d12a9aee25577e2bee7deb1a), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4jolgem__e, m4jolgem, "gem06d.p1", 0x0000, 0x020000, CRC(b68ce7e3) SHA1(ec4400f7c2bb79204fdec1d061801afdd4de70f2), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4jolgem__f, m4jolgem, "gem06dh.p1", 0x0000, 0x020000, CRC(0dae55fa) SHA1(3f8a23e4efc0c059852801882865baa6654a4eb3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4jolgem__g, m4jolgem, "gem06dr.p1", 0x0000, 0x020000, CRC(d7f5b4d6) SHA1(18ff01d9f56d772863698bc72d8e9ec61a9ac9d8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4jolgem__h, m4jolgem, "gem06dy.p1", 0x0000, 0x020000, CRC(19771aa3) SHA1(e785196e55353952000d805d23502bc220b2c747), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4jolgem__i, m4jolgem, "gem06h.p1", 0x0000, 0x020000, CRC(583b9d00) SHA1(6cd43f74c9d4d9d9a4b995277313049a353e6d80), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4jolgem__j, m4jolgem, "gem06r.p1", 0x0000, 0x020000, CRC(82607c2c) SHA1(a30366773305aacbba96f0c211a67448dd8a2702), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4jolgem__l, m4jolgem, "gem06y.p1", 0x0000, 0x020000, CRC(4ce2d259) SHA1(bca3e5f79048965bc5c0e80565bbb5ebeefeac87), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 13)" ) +GAME_CUSTOM( 199?, m4jolgem__b, m4jolgem, "gem06ad.p1", 0x0000, 0x020000, CRC(a3270974) SHA1(59992779415ff20b8589843510099b77c9b157fd), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DA)" ) +GAME_CUSTOM( 199?, m4jolgem__c, m4jolgem, "gem06b.p1", 0x0000, 0x020000, CRC(188ea295) SHA1(b8a2bdede4478a582f041fd3ff84b5563feaedd3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 B)" ) +GAME_CUSTOM( 199?, m4jolgem__d, m4jolgem, "gem06bd.p1", 0x0000, 0x020000, CRC(4d1b6a6f) SHA1(6cb733b3f8e011e1d12a9aee25577e2bee7deb1a), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DB)" ) +GAME_CUSTOM( 199?, m4jolgem__e, m4jolgem, "gem06d.p1", 0x0000, 0x020000, CRC(b68ce7e3) SHA1(ec4400f7c2bb79204fdec1d061801afdd4de70f2), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 D)" ) +GAME_CUSTOM( 199?, m4jolgem__f, m4jolgem, "gem06dh.p1", 0x0000, 0x020000, CRC(0dae55fa) SHA1(3f8a23e4efc0c059852801882865baa6654a4eb3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DH)" ) +GAME_CUSTOM( 199?, m4jolgem__g, m4jolgem, "gem06dr.p1", 0x0000, 0x020000, CRC(d7f5b4d6) SHA1(18ff01d9f56d772863698bc72d8e9ec61a9ac9d8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DR)" ) +GAME_CUSTOM( 199?, m4jolgem__h, m4jolgem, "gem06dy.p1", 0x0000, 0x020000, CRC(19771aa3) SHA1(e785196e55353952000d805d23502bc220b2c747), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 DY)" ) +GAME_CUSTOM( 199?, m4jolgem__i, m4jolgem, "gem06h.p1", 0x0000, 0x020000, CRC(583b9d00) SHA1(6cd43f74c9d4d9d9a4b995277313049a353e6d80), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 H)" ) +GAME_CUSTOM( 199?, m4jolgem__j, m4jolgem, "gem06r.p1", 0x0000, 0x020000, CRC(82607c2c) SHA1(a30366773305aacbba96f0c211a67448dd8a2702), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 R)" ) +GAME_CUSTOM( 199?, m4jolgem__l, m4jolgem, "gem06y.p1", 0x0000, 0x020000, CRC(4ce2d259) SHA1(bca3e5f79048965bc5c0e80565bbb5ebeefeac87), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GEM 0.6 Y)" ) // "(C)1993 BARCREST" and "GMS 0.4" GAME_CUSTOM( 199?, m4jolgem__7, m4jolgem, "gms04s.p1", 0x0000, 0x020000, CRC(93f25eef) SHA1(d4bfb2787df10dd09281d33341fbf666850ac23d), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4)" ) -GAME_CUSTOM( 199?, m4jolgem__w, m4jolgem, "gms04ad.p1", 0x0000, 0x020000, CRC(afd91cf8) SHA1(43f2549d81d9a414c5e2e049fe62a6939ba48943), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4jolgem__x, m4jolgem, "gms04b.p1", 0x0000, 0x020000, CRC(a11cd9fd) SHA1(16b23c8091da2ada9823f204e7cd5f02b68d37c3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4jolgem__y, m4jolgem, "gms04bd.p1", 0x0000, 0x020000, CRC(41e57fe3) SHA1(77322a0988422df6feb5f6871758fbdcf410dae5), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4jolgem__z, m4jolgem, "gms04d.p1", 0x0000, 0x020000, CRC(0f1e9c8b) SHA1(39661143619230ae64c70ee6d6e6f553e47691a1), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4jolgem__0, m4jolgem, "gms04dh.p1", 0x0000, 0x020000, CRC(01504076) SHA1(93e44465d74abdbdf5f651e0e8b96ea5b05c1597), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 28)" ) -GAME_CUSTOM( 199?, m4jolgem__1, m4jolgem, "gms04dk.p1", 0x0000, 0x020000, CRC(68041a6b) SHA1(03a246ff17001fd937d5556ff8da7165cb95b67c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 29)" ) -GAME_CUSTOM( 199?, m4jolgem__2, m4jolgem, "gms04dr.p1", 0x0000, 0x020000, CRC(db0ba15a) SHA1(85880bf152309b4e81b066a62ace827b899236cd), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 30)" ) -GAME_CUSTOM( 199?, m4jolgem__3, m4jolgem, "gms04dy.p1", 0x0000, 0x020000, CRC(15890f2f) SHA1(760806e506d1ff406fab2e50f75428c9b9762804), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 31)" ) -GAME_CUSTOM( 199?, m4jolgem__4, m4jolgem, "gms04h.p1", 0x0000, 0x020000, CRC(e1a9e668) SHA1(8b732c52dc221934f57a369e8a20ac2df1aa562c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4jolgem__5, m4jolgem, "gms04k.p1", 0x0000, 0x020000, CRC(88fdbc75) SHA1(b1842e2f29e2f3d81c6679a407827601955f02f4), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4jolgem__6, m4jolgem, "gms04r.p1", 0x0000, 0x020000, CRC(3bf20744) SHA1(9b8d1273545abbf5a7e8e0735e4f23ce024505b9), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4jolgem__8, m4jolgem, "gms04y.p1", 0x0000, 0x020000, CRC(f570a931) SHA1(dd50e4626feb9a3e6f0868fa9030204c737f1567), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 36)" ) +GAME_CUSTOM( 199?, m4jolgem__w, m4jolgem, "gms04ad.p1", 0x0000, 0x020000, CRC(afd91cf8) SHA1(43f2549d81d9a414c5e2e049fe62a6939ba48943), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DA)" ) +GAME_CUSTOM( 199?, m4jolgem__x, m4jolgem, "gms04b.p1", 0x0000, 0x020000, CRC(a11cd9fd) SHA1(16b23c8091da2ada9823f204e7cd5f02b68d37c3), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 B)" ) +GAME_CUSTOM( 199?, m4jolgem__y, m4jolgem, "gms04bd.p1", 0x0000, 0x020000, CRC(41e57fe3) SHA1(77322a0988422df6feb5f6871758fbdcf410dae5), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DB)" ) +GAME_CUSTOM( 199?, m4jolgem__z, m4jolgem, "gms04d.p1", 0x0000, 0x020000, CRC(0f1e9c8b) SHA1(39661143619230ae64c70ee6d6e6f553e47691a1), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 D)" ) +GAME_CUSTOM( 199?, m4jolgem__0, m4jolgem, "gms04dh.p1", 0x0000, 0x020000, CRC(01504076) SHA1(93e44465d74abdbdf5f651e0e8b96ea5b05c1597), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DH)" ) +GAME_CUSTOM( 199?, m4jolgem__1, m4jolgem, "gms04dk.p1", 0x0000, 0x020000, CRC(68041a6b) SHA1(03a246ff17001fd937d5556ff8da7165cb95b67c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DK)" ) +GAME_CUSTOM( 199?, m4jolgem__2, m4jolgem, "gms04dr.p1", 0x0000, 0x020000, CRC(db0ba15a) SHA1(85880bf152309b4e81b066a62ace827b899236cd), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DR)" ) +GAME_CUSTOM( 199?, m4jolgem__3, m4jolgem, "gms04dy.p1", 0x0000, 0x020000, CRC(15890f2f) SHA1(760806e506d1ff406fab2e50f75428c9b9762804), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 DY)" ) +GAME_CUSTOM( 199?, m4jolgem__4, m4jolgem, "gms04h.p1", 0x0000, 0x020000, CRC(e1a9e668) SHA1(8b732c52dc221934f57a369e8a20ac2df1aa562c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 H)" ) +GAME_CUSTOM( 199?, m4jolgem__5, m4jolgem, "gms04k.p1", 0x0000, 0x020000, CRC(88fdbc75) SHA1(b1842e2f29e2f3d81c6679a407827601955f02f4), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 K)" ) +GAME_CUSTOM( 199?, m4jolgem__6, m4jolgem, "gms04r.p1", 0x0000, 0x020000, CRC(3bf20744) SHA1(9b8d1273545abbf5a7e8e0735e4f23ce024505b9), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 R)" ) +GAME_CUSTOM( 199?, m4jolgem__8, m4jolgem, "gms04y.p1", 0x0000, 0x020000, CRC(f570a931) SHA1(dd50e4626feb9a3e6f0868fa9030204c737f1567), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.4 Y)" ) // "(C)1993 BARCREST" and "GMS 0.5" GAME_CUSTOM( 199?, m4jolgem__ak, m4jolgem, "gms05s.p1", 0x0000, 0x020000, CRC(1b830e70) SHA1(eb053a629bd7854759d14acd9793f7eb545fc008), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5)" ) -GAME_CUSTOM( 199?, m4jolgem__9, m4jolgem, "gms05ad.p1", 0x0000, 0x020000, CRC(77d4829c) SHA1(45a240cc2aa3829160854274c928d20655966087), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4jolgem__aa, m4jolgem, "gms05b.p1", 0x0000, 0x020000, CRC(b929f905) SHA1(028d74687f5c6443d84e84a03666278b9df8e657), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4jolgem__ab, m4jolgem, "gms05bd.p1", 0x0000, 0x020000, CRC(99e8e187) SHA1(cbb8d3403e6d21fce45b05d1889d17d0355857b4), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4jolgem__ac, m4jolgem, "gms05d.p1", 0x0000, 0x020000, CRC(172bbc73) SHA1(932907d70b18d25fa912fe895602b0adc52b8e6c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4jolgem__ad, m4jolgem, "gms05dh.p1", 0x0000, 0x020000, CRC(d95dde12) SHA1(e509f65b8f0575193002dd0906b1751cae9352f7), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4jolgem__ae, m4jolgem, "gms05dk.p1", 0x0000, 0x020000, CRC(b009840f) SHA1(5c8f7c081e577642fc7738f7d6fc816155ffc99b), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 42)" ) -GAME_CUSTOM( 199?, m4jolgem__af, m4jolgem, "gms05dr.p1", 0x0000, 0x020000, CRC(03063f3e) SHA1(83995208d6c392eacee794c75075296d87e07b13), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 43)" ) -GAME_CUSTOM( 199?, m4jolgem__ag, m4jolgem, "gms05dy.p1", 0x0000, 0x020000, CRC(cd84914b) SHA1(8470ba93c518893771ee45190bce5f6f93df7b68), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4jolgem__ah, m4jolgem, "gms05h.p1", 0x0000, 0x020000, CRC(f99cc690) SHA1(c3cf8aaf8376e9d4eff37afdd818802f9ec4fe64), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 45)" ) -GAME_CUSTOM( 199?, m4jolgem__ai, m4jolgem, "gms05k.p1", 0x0000, 0x020000, CRC(90c89c8d) SHA1(4b8e23c9a6bd85563be041d8e95175dc4c39b8e7), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 46)" ) -GAME_CUSTOM( 199?, m4jolgem__aj, m4jolgem, "gms05r.p1", 0x0000, 0x020000, CRC(23c727bc) SHA1(0187a14a789f018e6161f2ae160f82c87d03b6a8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 47)" ) -GAME_CUSTOM( 199?, m4jolgem__al, m4jolgem, "gms05y.p1", 0x0000, 0x020000, CRC(ed4589c9) SHA1(899622c22d29c0ef05bf562176943c9749e236a2), "Barcrest","Jolly Gems (Barcrest) (MPU4) (set 49)" ) +GAME_CUSTOM( 199?, m4jolgem__9, m4jolgem, "gms05ad.p1", 0x0000, 0x020000, CRC(77d4829c) SHA1(45a240cc2aa3829160854274c928d20655966087), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DA)" ) +GAME_CUSTOM( 199?, m4jolgem__aa, m4jolgem, "gms05b.p1", 0x0000, 0x020000, CRC(b929f905) SHA1(028d74687f5c6443d84e84a03666278b9df8e657), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 B)" ) +GAME_CUSTOM( 199?, m4jolgem__ab, m4jolgem, "gms05bd.p1", 0x0000, 0x020000, CRC(99e8e187) SHA1(cbb8d3403e6d21fce45b05d1889d17d0355857b4), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DB)" ) +GAME_CUSTOM( 199?, m4jolgem__ac, m4jolgem, "gms05d.p1", 0x0000, 0x020000, CRC(172bbc73) SHA1(932907d70b18d25fa912fe895602b0adc52b8e6c), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 D)" ) +GAME_CUSTOM( 199?, m4jolgem__ad, m4jolgem, "gms05dh.p1", 0x0000, 0x020000, CRC(d95dde12) SHA1(e509f65b8f0575193002dd0906b1751cae9352f7), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DH)" ) +GAME_CUSTOM( 199?, m4jolgem__ae, m4jolgem, "gms05dk.p1", 0x0000, 0x020000, CRC(b009840f) SHA1(5c8f7c081e577642fc7738f7d6fc816155ffc99b), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DK)" ) +GAME_CUSTOM( 199?, m4jolgem__af, m4jolgem, "gms05dr.p1", 0x0000, 0x020000, CRC(03063f3e) SHA1(83995208d6c392eacee794c75075296d87e07b13), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DR)" ) +GAME_CUSTOM( 199?, m4jolgem__ag, m4jolgem, "gms05dy.p1", 0x0000, 0x020000, CRC(cd84914b) SHA1(8470ba93c518893771ee45190bce5f6f93df7b68), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 DY)" ) +GAME_CUSTOM( 199?, m4jolgem__ah, m4jolgem, "gms05h.p1", 0x0000, 0x020000, CRC(f99cc690) SHA1(c3cf8aaf8376e9d4eff37afdd818802f9ec4fe64), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 H)" ) +GAME_CUSTOM( 199?, m4jolgem__ai, m4jolgem, "gms05k.p1", 0x0000, 0x020000, CRC(90c89c8d) SHA1(4b8e23c9a6bd85563be041d8e95175dc4c39b8e7), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 K)" ) +GAME_CUSTOM( 199?, m4jolgem__aj, m4jolgem, "gms05r.p1", 0x0000, 0x020000, CRC(23c727bc) SHA1(0187a14a789f018e6161f2ae160f82c87d03b6a8), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 R)" ) +GAME_CUSTOM( 199?, m4jolgem__al, m4jolgem, "gms05y.p1", 0x0000, 0x020000, CRC(ed4589c9) SHA1(899622c22d29c0ef05bf562176943c9749e236a2), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.5 Y)" ) // "(C)1993 BARCREST" and "GMS 0.3" GAME_CUSTOM( 199?, m4jolgem__ao, m4jolgem, "jjem0", 0x0000, 0x020000, CRC(9b54a881) SHA1(3b1bfacf8fe295c771c558154fe2fca70f049df0), "Barcrest","Jolly Gems (Barcrest) (MPU4) (GMS 0.3 K)" ) // "(C)1999 BWB" and "JGS 1.0" -GAME_CUSTOM( 199?, m4jolgem__ap, m4jolgem, "jgs_xa_x.1_0", 0x0000, 0x020000, CRC(7ac16252) SHA1(b01b2333e1e99f9404a7e0ac80e5e8ee834ec39d), "Bwb","Jolly Gems (Barcrest) (MPU4) (JGS 1.0)" ) +GAME_CUSTOM( 199?, m4jolgem__ap, m4jolgem, "jgs_xa_x.1_0", 0x0000, 0x020000, CRC(7ac16252) SHA1(b01b2333e1e99f9404a7e0ac80e5e8ee834ec39d), "Bwb","Jolly Gems (Barcrest) (MPU4) (JGS 1.0 CK)" ) // no copyright string and "GEM 0.6" GAME_CUSTOM( 199?, m4jolgem__am, m4jolgem, "jgem15g", 0x0000, 0x020000, CRC(8288eb80) SHA1(bfb1004b49914b6ae1b0608c9e5c61efe4635ba3), "hack","Jolly Gems (Barcrest) (MPU4) (GEM 0.6, hack)" ) // no copyright string and "GMS 0.4" @@ -1518,71 +1518,71 @@ GAME_CUSTOM( 199?, m4jolgem__an, m4jolgem, "jgem15t", 0x0000, 0x020000, // "(C)1991 BARCREST" and "HI4 0.3" GAME_CUSTOM( 199?, m4hittop, 0, "hi4s.p1", 0x0000, 0x010000, CRC(3a04ee7a) SHA1(d23e9da2c22f6983a855bc519597ea9cea84f2dd), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3)" ) -GAME_CUSTOM( 199?, m4hittop__k, m4hittop, "hi4ad.p1", 0x0000, 0x010000, CRC(eeb958f3) SHA1(ee7f7615df2141ad5183288101949b74c4543de9), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4hittop__l, m4hittop, "hi4b.p1", 0x0000, 0x010000, CRC(68af264b) SHA1(e7f75b5294cc7541f9397c492c171c79b7a21a36), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4hittop__m, m4hittop, "hi4bd.p1", 0x0000, 0x010000, CRC(d72cd485) SHA1(d0d38cbb518c824d4a8107e1711f85120c39bc4c), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4hittop__n, m4hittop, "hi4d.p1", 0x0000, 0x010000, CRC(59d7364c) SHA1(1e665b178b8bf7314ca5b5ea97dc185491fc2930), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4hittop__o, m4hittop, "hi4dk.p1", 0x0000, 0x010000, CRC(76d4bb70) SHA1(7365f072a7e3e8141e15fbf56c3355bc6310895f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4hittop__p, m4hittop, "hi4dy.p1", 0x0000, 0x010000, CRC(b1ddf7fe) SHA1(a334619b5dfc7a44e9082cc37cb5187413adb29f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4hittop__q, m4hittop, "hi4k.p1", 0x0000, 0x010000, CRC(99cb8bc9) SHA1(106bf6e327643c49024f9422d6b87f5b157b452f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4hittop__r, m4hittop, "hi4y.p1", 0x0000, 0x010000, CRC(c60e01e6) SHA1(c4a7ea44c36c78401cab3ef87d7e02add0b48ab5), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 19)" ) +GAME_CUSTOM( 199?, m4hittop__k, m4hittop, "hi4ad.p1", 0x0000, 0x010000, CRC(eeb958f3) SHA1(ee7f7615df2141ad5183288101949b74c4543de9), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 AD)" ) +GAME_CUSTOM( 199?, m4hittop__l, m4hittop, "hi4b.p1", 0x0000, 0x010000, CRC(68af264b) SHA1(e7f75b5294cc7541f9397c492c171c79b7a21a36), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 AB" ) +GAME_CUSTOM( 199?, m4hittop__m, m4hittop, "hi4bd.p1", 0x0000, 0x010000, CRC(d72cd485) SHA1(d0d38cbb518c824d4a8107e1711f85120c39bc4c), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 BD)" ) +GAME_CUSTOM( 199?, m4hittop__n, m4hittop, "hi4d.p1", 0x0000, 0x010000, CRC(59d7364c) SHA1(1e665b178b8bf7314ca5b5ea97dc185491fc2930), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 D)" ) +GAME_CUSTOM( 199?, m4hittop__o, m4hittop, "hi4dk.p1", 0x0000, 0x010000, CRC(76d4bb70) SHA1(7365f072a7e3e8141e15fbf56c3355bc6310895f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 KD)" ) +GAME_CUSTOM( 199?, m4hittop__p, m4hittop, "hi4dy.p1", 0x0000, 0x010000, CRC(b1ddf7fe) SHA1(a334619b5dfc7a44e9082cc37cb5187413adb29f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 YD)" ) +GAME_CUSTOM( 199?, m4hittop__q, m4hittop, "hi4k.p1", 0x0000, 0x010000, CRC(99cb8bc9) SHA1(106bf6e327643c49024f9422d6b87f5b157b452f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 K)" ) +GAME_CUSTOM( 199?, m4hittop__r, m4hittop, "hi4y.p1", 0x0000, 0x010000, CRC(c60e01e6) SHA1(c4a7ea44c36c78401cab3ef87d7e02add0b48ab5), "Barcrest","Hit The Top (Barcrest) (MPU4) (HI4 0.3 Y)" ) // "(C)1991 BARCREST" and "CHU 0.1" GAME_CUSTOM( 199?, m4hittop__i, m4hittop, "chus.p1", 0x0000, 0x010000, CRC(8a39816e) SHA1(3869f7ae0c9b681cfb07e2f6c1a94fc81fa13fe3), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1)" ) -GAME_CUSTOM( 199?, m4hittop__a, m4hittop, "chuad.p1", 0x0000, 0x010000, CRC(01d3b86c) SHA1(27af0e76661495d5b91ee6a53507f9a5d4e5ab85), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1AD)" ) -GAME_CUSTOM( 199?, m4hittop__b, m4hittop, "chub.p1", 0x0000, 0x010000, CRC(17ff4ed4) SHA1(f193a00a46c82d4989af18055f9f69d93df79ec6), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4hittop__c, m4hittop, "chubd.p1", 0x0000, 0x010000, CRC(3e7a6b1b) SHA1(8939a0cac8578ff5e1d1ab2b3a64b3809793c44a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4hittop__d, m4hittop, "chud.p1", 0x0000, 0x010000, CRC(26875ed3) SHA1(06dbf594e2c5202ee624f4202f634281a89a3870), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4hittop__e, m4hittop, "chudk.p1", 0x0000, 0x010000, CRC(10c1f6c3) SHA1(e6ff6ea40f35cfd9ed7643e69eca62775f20b3a2), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4hittop__f, m4hittop, "chudy.p1", 0x0000, 0x010000, CRC(65302d8c) SHA1(de340cc182212b576cae46669492d0d760d2f288), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4hittop__g, m4hittop, "chuk.p1", 0x0000, 0x010000, CRC(7f333a2c) SHA1(73719997c200ec5291ceaa12f8667979a731212e), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4hittop__h, m4hittop, "chur.p1", 0x0000, 0x010000, CRC(dbb89a00) SHA1(70b2f2c78011b8b470aa58153d524f920d553b28), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4hittop__j, m4hittop, "chuy.p1", 0x0000, 0x010000, CRC(e0902d74) SHA1(a34db63f1354853ad5a1026e4402ccd2e564c7d7), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 11)" ) +GAME_CUSTOM( 199?, m4hittop__a, m4hittop, "chuad.p1", 0x0000, 0x010000, CRC(01d3b86c) SHA1(27af0e76661495d5b91ee6a53507f9a5d4e5ab85), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 AD)" ) +GAME_CUSTOM( 199?, m4hittop__b, m4hittop, "chub.p1", 0x0000, 0x010000, CRC(17ff4ed4) SHA1(f193a00a46c82d4989af18055f9f69d93df79ec6), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 B)" ) +GAME_CUSTOM( 199?, m4hittop__c, m4hittop, "chubd.p1", 0x0000, 0x010000, CRC(3e7a6b1b) SHA1(8939a0cac8578ff5e1d1ab2b3a64b3809793c44a), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 BD)" ) +GAME_CUSTOM( 199?, m4hittop__d, m4hittop, "chud.p1", 0x0000, 0x010000, CRC(26875ed3) SHA1(06dbf594e2c5202ee624f4202f634281a89a3870), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 D)" ) +GAME_CUSTOM( 199?, m4hittop__e, m4hittop, "chudk.p1", 0x0000, 0x010000, CRC(10c1f6c3) SHA1(e6ff6ea40f35cfd9ed7643e69eca62775f20b3a2), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 KD)" ) +GAME_CUSTOM( 199?, m4hittop__f, m4hittop, "chudy.p1", 0x0000, 0x010000, CRC(65302d8c) SHA1(de340cc182212b576cae46669492d0d760d2f288), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 YD)" ) +GAME_CUSTOM( 199?, m4hittop__g, m4hittop, "chuk.p1", 0x0000, 0x010000, CRC(7f333a2c) SHA1(73719997c200ec5291ceaa12f8667979a731212e), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 K)" ) +GAME_CUSTOM( 199?, m4hittop__h, m4hittop, "chur.p1", 0x0000, 0x010000, CRC(dbb89a00) SHA1(70b2f2c78011b8b470aa58153d524f920d553b28), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 R)" ) +GAME_CUSTOM( 199?, m4hittop__j, m4hittop, "chuy.p1", 0x0000, 0x010000, CRC(e0902d74) SHA1(a34db63f1354853ad5a1026e4402ccd2e564c7d7), "Barcrest","Hit The Top (Barcrest) (MPU4) (CHU 0.1 Y)" ) // "(C)1991 BARCREST" and "HIT 0.4" GAME_CUSTOM( 199?, m4hittop__1, m4hittop, "hit04s.p1", 0x0000, 0x010000, CRC(05376f9f) SHA1(e59bdd6541669b150bb68eb97ea316c3fe451778), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4)" ) -GAME_CUSTOM( 199?, m4hittop__s, m4hittop, "hit04ad.p1", 0x0000, 0x010000, CRC(cc9d10fa) SHA1(b7ce14fecfd8142fa7127c23f152c749dae74701), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4AD)" ) -GAME_CUSTOM( 199?, m4hittop__t, m4hittop, "hit04b.p1", 0x0000, 0x010000, CRC(da511063) SHA1(3f4fb8518cb2057ec4c2bb13fd3e61ee73bfa457), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4hittop__u, m4hittop, "hit04bd.p1", 0x0000, 0x010000, CRC(40a84b97) SHA1(416f78c19e08f405a3b36f886f69e7b88e5aa90a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 22)" ) -GAME_CUSTOM( 199?, m4hittop__v, m4hittop, "hit04d.p1", 0x0000, 0x010000, CRC(89607e84) SHA1(280209ca3030383547cc91eee2f71a810768353f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 23)" ) -GAME_CUSTOM( 199?, m4hittop__w, m4hittop, "hit04dk.p1", 0x0000, 0x010000, CRC(b89e606f) SHA1(9096126b719ecd92185d9c1d50d13c9339d09583), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4hittop__x, m4hittop, "hit04dr.p1", 0x0000, 0x010000, CRC(1b4d8099) SHA1(505e0948a78b5d57f0986896ab900d25a20d7877), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4hittop__y, m4hittop, "hit04dy.p1", 0x0000, 0x010000, CRC(25f54881) SHA1(9f4ae52295df5810cbe6c18cae66877bec006a28), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4hittop__z, m4hittop, "hit04k.p1", 0x0000, 0x010000, CRC(5ef3f78d) SHA1(e72727b3dc7793c36f182b3e7d363741254c0be7), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4hittop__0, m4hittop, "hit04r.p1", 0x0000, 0x010000, CRC(d87a9f60) SHA1(614224b80afaa6e407f9b40b45b8aecdf999e13a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 28)" ) -GAME_CUSTOM( 199?, m4hittop__2, m4hittop, "hit04y.p1", 0x0000, 0x010000, CRC(c398df63) SHA1(5e93cb95da37b1593d030e99e97996252ad6cda1), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 30)" ) +GAME_CUSTOM( 199?, m4hittop__s, m4hittop, "hit04ad.p1", 0x0000, 0x010000, CRC(cc9d10fa) SHA1(b7ce14fecfd8142fa7127c23f152c749dae74701), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 AD)" ) +GAME_CUSTOM( 199?, m4hittop__t, m4hittop, "hit04b.p1", 0x0000, 0x010000, CRC(da511063) SHA1(3f4fb8518cb2057ec4c2bb13fd3e61ee73bfa457), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 B)" ) +GAME_CUSTOM( 199?, m4hittop__u, m4hittop, "hit04bd.p1", 0x0000, 0x010000, CRC(40a84b97) SHA1(416f78c19e08f405a3b36f886f69e7b88e5aa90a), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 BD)" ) +GAME_CUSTOM( 199?, m4hittop__v, m4hittop, "hit04d.p1", 0x0000, 0x010000, CRC(89607e84) SHA1(280209ca3030383547cc91eee2f71a810768353f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 D)" ) +GAME_CUSTOM( 199?, m4hittop__w, m4hittop, "hit04dk.p1", 0x0000, 0x010000, CRC(b89e606f) SHA1(9096126b719ecd92185d9c1d50d13c9339d09583), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 KD)" ) +GAME_CUSTOM( 199?, m4hittop__x, m4hittop, "hit04dr.p1", 0x0000, 0x010000, CRC(1b4d8099) SHA1(505e0948a78b5d57f0986896ab900d25a20d7877), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 RD)" ) +GAME_CUSTOM( 199?, m4hittop__y, m4hittop, "hit04dy.p1", 0x0000, 0x010000, CRC(25f54881) SHA1(9f4ae52295df5810cbe6c18cae66877bec006a28), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 YD)" ) +GAME_CUSTOM( 199?, m4hittop__z, m4hittop, "hit04k.p1", 0x0000, 0x010000, CRC(5ef3f78d) SHA1(e72727b3dc7793c36f182b3e7d363741254c0be7), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 K)" ) +GAME_CUSTOM( 199?, m4hittop__0, m4hittop, "hit04r.p1", 0x0000, 0x010000, CRC(d87a9f60) SHA1(614224b80afaa6e407f9b40b45b8aecdf999e13a), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 R)" ) +GAME_CUSTOM( 199?, m4hittop__2, m4hittop, "hit04y.p1", 0x0000, 0x010000, CRC(c398df63) SHA1(5e93cb95da37b1593d030e99e97996252ad6cda1), "Barcrest","Hit The Top (Barcrest) (MPU4) (HIT 0.4 Y)" ) // "(C)1991 BARCREST" and "HT2 0.1" GAME_CUSTOM( 199?, m4hittop__ac, m4hittop, "ht201s.p1", 0x0000, 0x010000, CRC(37b20464) SHA1(e87b0a2023416fa7b63201e19850319723eb6c10), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1)" ) -GAME_CUSTOM( 199?, m4hittop__3, m4hittop, "ht201ad.p1", 0x0000, 0x010000, CRC(b0f3873b) SHA1(6e7d1b20dff4b81ebd171d6d92c95e46817bdf90), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1AD)" ) -GAME_CUSTOM( 199?, m4hittop__4, m4hittop, "ht201b.p1", 0x0000, 0x010000, CRC(9dbe41fc) SHA1(ce5ed2707ab63057a2f66a1098e3752acaa72dac), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4hittop__5, m4hittop, "ht201bd.p1", 0x0000, 0x010000, CRC(be23c8b6) SHA1(0d4ab2d3c7ac063ec1ce10b2af28c8770d8bd818), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4hittop__6, m4hittop, "ht201d.p1", 0x0000, 0x010000, CRC(25b9fcd7) SHA1(8bebbf0b621a704ed9811e67eab003f4ddebcde2), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4hittop__7, m4hittop, "ht201dk.p1", 0x0000, 0x010000, CRC(1c77872e) SHA1(a728811efee6f40779b01a6d60f2d0167e204a09), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 35)" ) -GAME_CUSTOM( 199?, m4hittop__8, m4hittop, "ht201dr.p1", 0x0000, 0x010000, CRC(9836d075) SHA1(b015e9706c5ec7b03133eda70fe0322c24969d7e), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 36)" ) -GAME_CUSTOM( 199?, m4hittop__9, m4hittop, "ht201dy.p1", 0x0000, 0x010000, CRC(811cafc0) SHA1(e31ad353ee8ce4ea059d6a469baaa14357b738c9), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4hittop__aa, m4hittop, "ht201k.p1", 0x0000, 0x010000, CRC(191ca612) SHA1(a2a80b64cc04aa590046413f1474340cd3a5b03a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4hittop__ab, m4hittop, "ht201r.p1", 0x0000, 0x010000, CRC(154643be) SHA1(280ae761c434bbed84317d85aef2ad4a78c61d1d), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4hittop__ad, m4hittop, "ht201y.p1", 0x0000, 0x010000, CRC(84778efc) SHA1(bdc43973913d0e8be0e16ee89da01b1bcdc2da6f), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 41)" ) +GAME_CUSTOM( 199?, m4hittop__3, m4hittop, "ht201ad.p1", 0x0000, 0x010000, CRC(b0f3873b) SHA1(6e7d1b20dff4b81ebd171d6d92c95e46817bdf90), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 AD)" ) +GAME_CUSTOM( 199?, m4hittop__4, m4hittop, "ht201b.p1", 0x0000, 0x010000, CRC(9dbe41fc) SHA1(ce5ed2707ab63057a2f66a1098e3752acaa72dac), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 B)" ) +GAME_CUSTOM( 199?, m4hittop__5, m4hittop, "ht201bd.p1", 0x0000, 0x010000, CRC(be23c8b6) SHA1(0d4ab2d3c7ac063ec1ce10b2af28c8770d8bd818), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 BD)" ) +GAME_CUSTOM( 199?, m4hittop__6, m4hittop, "ht201d.p1", 0x0000, 0x010000, CRC(25b9fcd7) SHA1(8bebbf0b621a704ed9811e67eab003f4ddebcde2), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 D)" ) +GAME_CUSTOM( 199?, m4hittop__7, m4hittop, "ht201dk.p1", 0x0000, 0x010000, CRC(1c77872e) SHA1(a728811efee6f40779b01a6d60f2d0167e204a09), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 KD)" ) +GAME_CUSTOM( 199?, m4hittop__8, m4hittop, "ht201dr.p1", 0x0000, 0x010000, CRC(9836d075) SHA1(b015e9706c5ec7b03133eda70fe0322c24969d7e), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 RD)" ) +GAME_CUSTOM( 199?, m4hittop__9, m4hittop, "ht201dy.p1", 0x0000, 0x010000, CRC(811cafc0) SHA1(e31ad353ee8ce4ea059d6a469baaa14357b738c9), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 YD)" ) +GAME_CUSTOM( 199?, m4hittop__aa, m4hittop, "ht201k.p1", 0x0000, 0x010000, CRC(191ca612) SHA1(a2a80b64cc04aa590046413f1474340cd3a5b03a), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 K)" ) +GAME_CUSTOM( 199?, m4hittop__ab, m4hittop, "ht201r.p1", 0x0000, 0x010000, CRC(154643be) SHA1(280ae761c434bbed84317d85aef2ad4a78c61d1d), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 R)" ) +GAME_CUSTOM( 199?, m4hittop__ad, m4hittop, "ht201y.p1", 0x0000, 0x010000, CRC(84778efc) SHA1(bdc43973913d0e8be0e16ee89da01b1bcdc2da6f), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT2 0.1 Y)" ) // "(C)1991 BARCREST" and "HT5 0.1" GAME_CUSTOM( 199?, m4hittop__an, m4hittop, "ht501s.p1", 0x0000, 0x010000, CRC(ac440a2b) SHA1(f3f3d0c9c8dcb41509307c970f0776ebcfffdeb0), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1)" ) -GAME_CUSTOM( 199?, m4hittop__ae, m4hittop, "ht501ad.p1", 0x0000, 0x010000, CRC(7bf00848) SHA1(700d90218d0bd31860dc905c00d0afbf3a1e8704), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1AD)" ) -GAME_CUSTOM( 199?, m4hittop__af, m4hittop, "ht501b.p1", 0x0000, 0x010000, CRC(c06dd046) SHA1(a47c62fc299842e66694f34844b43a55d6f20c3d), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 43)" ) -GAME_CUSTOM( 199?, m4hittop__ag, m4hittop, "ht501bd.p1", 0x0000, 0x010000, CRC(d4a3843f) SHA1(cc66ebaa334bab86b9bcb1623316c31318e84d2a), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4hittop__ah, m4hittop, "ht501d.p1", 0x0000, 0x010000, CRC(67d3c040) SHA1(beec134c53715544080327319b5d6231b625fbb4), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 45)" ) -GAME_CUSTOM( 199?, m4hittop__ai, m4hittop, "ht501dk.p1", 0x0000, 0x010000, CRC(feec7950) SHA1(7bcd8d0166847f72871a78e4b287c72e1a06d26e), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 46)" ) -GAME_CUSTOM( 199?, m4hittop__aj, m4hittop, "ht501dr.p1", 0x0000, 0x010000, CRC(c73b60b1) SHA1(9f14957eb0eec7e833b6bb5b162286d94c8f03c4), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 47)" ) -GAME_CUSTOM( 199?, m4hittop__ak, m4hittop, "ht501dy.p1", 0x0000, 0x010000, CRC(756c7ae9) SHA1(42a731e472f073845b98d7fcc47fe70f57181ce6), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 48)" ) -GAME_CUSTOM( 199?, m4hittop__al, m4hittop, "ht501k.p1", 0x0000, 0x010000, CRC(93269e53) SHA1(7e40ac4e9f4b26755867353fdccadf0f976402b4), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 49)" ) -GAME_CUSTOM( 199?, m4hittop__am, m4hittop, "ht501r.p1", 0x0000, 0x010000, CRC(9aec0493) SHA1(6b0b7e5f4a988ff4d2bc123978adc09195eb4232), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 50)" ) -GAME_CUSTOM( 199?, m4hittop__ao, m4hittop, "ht501y.p1", 0x0000, 0x010000, CRC(a7f8ece6) SHA1(f4472c040c9255eaef5b1109c3bec44f4978b600), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 52)" ) +GAME_CUSTOM( 199?, m4hittop__ae, m4hittop, "ht501ad.p1", 0x0000, 0x010000, CRC(7bf00848) SHA1(700d90218d0bd31860dc905c00d0afbf3a1e8704), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 AD)" ) +GAME_CUSTOM( 199?, m4hittop__af, m4hittop, "ht501b.p1", 0x0000, 0x010000, CRC(c06dd046) SHA1(a47c62fc299842e66694f34844b43a55d6f20c3d), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 B)" ) +GAME_CUSTOM( 199?, m4hittop__ag, m4hittop, "ht501bd.p1", 0x0000, 0x010000, CRC(d4a3843f) SHA1(cc66ebaa334bab86b9bcb1623316c31318e84d2a), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 BD)" ) +GAME_CUSTOM( 199?, m4hittop__ah, m4hittop, "ht501d.p1", 0x0000, 0x010000, CRC(67d3c040) SHA1(beec134c53715544080327319b5d6231b625fbb4), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 D)" ) +GAME_CUSTOM( 199?, m4hittop__ai, m4hittop, "ht501dk.p1", 0x0000, 0x010000, CRC(feec7950) SHA1(7bcd8d0166847f72871a78e4b287c72e1a06d26e), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 KD)" ) +GAME_CUSTOM( 199?, m4hittop__aj, m4hittop, "ht501dr.p1", 0x0000, 0x010000, CRC(c73b60b1) SHA1(9f14957eb0eec7e833b6bb5b162286d94c8f03c4), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 RD)" ) +GAME_CUSTOM( 199?, m4hittop__ak, m4hittop, "ht501dy.p1", 0x0000, 0x010000, CRC(756c7ae9) SHA1(42a731e472f073845b98d7fcc47fe70f57181ce6), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 YD)" ) +GAME_CUSTOM( 199?, m4hittop__al, m4hittop, "ht501k.p1", 0x0000, 0x010000, CRC(93269e53) SHA1(7e40ac4e9f4b26755867353fdccadf0f976402b4), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 K)" ) +GAME_CUSTOM( 199?, m4hittop__am, m4hittop, "ht501r.p1", 0x0000, 0x010000, CRC(9aec0493) SHA1(6b0b7e5f4a988ff4d2bc123978adc09195eb4232), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 R)" ) +GAME_CUSTOM( 199?, m4hittop__ao, m4hittop, "ht501y.p1", 0x0000, 0x010000, CRC(a7f8ece6) SHA1(f4472c040c9255eaef5b1109c3bec44f4978b600), "Barcrest","Hit The Top (Barcrest) (MPU4) (HT5 0.1 Y)" ) // "(C)1991 BARCREST" and "HTT 0.5" GAME_CUSTOM( 199?, m4hittop__aw, m4hittop, "htts.p1", 0x0000, 0x010000, CRC(6c794eb2) SHA1(347a7c74b1fd7631fbcd398bf5e7c36af088109e), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5)" ) -GAME_CUSTOM( 199?, m4hittop__ap, m4hittop, "httad.p1", 0x0000, 0x010000, CRC(e5a3df45) SHA1(70bebb33cbe466c379f278347d0b47862b1d01a8), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5AD)" ) -GAME_CUSTOM( 199?, m4hittop__aq, m4hittop, "httb.p1", 0x0000, 0x010000, CRC(5c921ff2) SHA1(a9184e4e3916c1ab92761d0e33b42cce4a58e7b1), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 54)" ) -GAME_CUSTOM( 199?, m4hittop__ar, m4hittop, "httbd.p1", 0x0000, 0x010000, CRC(9d19fac9) SHA1(17072ac5b49cd947bf397dfbe9b6b0bd269dd1b4), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 55)" ) -GAME_CUSTOM( 199?, m4hittop__as, m4hittop, "httd.p1", 0x0000, 0x010000, CRC(5e5bacb9) SHA1(d673010cdf2fb9352fc510409deade42b5508b29), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 56)" ) -GAME_CUSTOM( 199?, m4hittop__at, m4hittop, "httdk.p1", 0x0000, 0x010000, CRC(17b1db87) SHA1(196163f68c82c4600ecacee52ee8044739568fbf), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 57)" ) -GAME_CUSTOM( 199?, m4hittop__au, m4hittop, "httdy.p1", 0x0000, 0x010000, CRC(428af7bf) SHA1(954a512105d1a5998d4ffcbf21be0c9d9a65bbeb), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 58)" ) -GAME_CUSTOM( 199?, m4hittop__av, m4hittop, "httk.p1", 0x0000, 0x010000, CRC(581dd34a) SHA1(00cad1860f5edf056b8f9397ca46165593be4755), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 59)" ) -GAME_CUSTOM( 199?, m4hittop__ax, m4hittop, "htty.p1", 0x0000, 0x010000, CRC(c9b402b2) SHA1(2165c1892fc1f0b9b0c39127f322f15c9e1912b1), "Barcrest","Hit The Top (Barcrest) (MPU4) (set 61)" ) +GAME_CUSTOM( 199?, m4hittop__ap, m4hittop, "httad.p1", 0x0000, 0x010000, CRC(e5a3df45) SHA1(70bebb33cbe466c379f278347d0b47862b1d01a8), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 AD)" ) +GAME_CUSTOM( 199?, m4hittop__aq, m4hittop, "httb.p1", 0x0000, 0x010000, CRC(5c921ff2) SHA1(a9184e4e3916c1ab92761d0e33b42cce4a58e7b1), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 B)" ) +GAME_CUSTOM( 199?, m4hittop__ar, m4hittop, "httbd.p1", 0x0000, 0x010000, CRC(9d19fac9) SHA1(17072ac5b49cd947bf397dfbe9b6b0bd269dd1b4), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 BD)" ) +GAME_CUSTOM( 199?, m4hittop__as, m4hittop, "httd.p1", 0x0000, 0x010000, CRC(5e5bacb9) SHA1(d673010cdf2fb9352fc510409deade42b5508b29), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 D)" ) +GAME_CUSTOM( 199?, m4hittop__at, m4hittop, "httdk.p1", 0x0000, 0x010000, CRC(17b1db87) SHA1(196163f68c82c4600ecacee52ee8044739568fbf), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 KD)" ) +GAME_CUSTOM( 199?, m4hittop__au, m4hittop, "httdy.p1", 0x0000, 0x010000, CRC(428af7bf) SHA1(954a512105d1a5998d4ffcbf21be0c9d9a65bbeb), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 YD)" ) +GAME_CUSTOM( 199?, m4hittop__av, m4hittop, "httk.p1", 0x0000, 0x010000, CRC(581dd34a) SHA1(00cad1860f5edf056b8f9397ca46165593be4755), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 K)" ) +GAME_CUSTOM( 199?, m4hittop__ax, m4hittop, "htty.p1", 0x0000, 0x010000, CRC(c9b402b2) SHA1(2165c1892fc1f0b9b0c39127f322f15c9e1912b1), "Barcrest","Hit The Top (Barcrest) (MPU4) (HTT 0.5 Y)" ) #define M4NNWW_EXTRA_ROMS \ @@ -1603,72 +1603,72 @@ GAME_CUSTOM( 199?, m4hittop__ax, m4hittop, "htty.p1", 0x0000, 0x010000, // I think the code in the header was just not updated properly. // "(C)1991 BARCREST" and "NN4 0.2" GAME_CUSTOM( 199?, m4nnww, 0, "nn5s.p1", 0x0000, 0x010000, CRC(459e5663) SHA1(66ae821e5202d6d3ba05be44d0c1f26da60a3a32), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 / NN4 0.2)" ) -GAME_CUSTOM( 199?, m4nnww__aq, m4nnww, "nn5bd.p1", 0x0000, 0x010000, CRC(56cc9559) SHA1(53e109a579e422932dd25c52cf2beca51d3a53e3), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2BD / NN4 0.2)" ) -GAME_CUSTOM( 199?, m4nnww__ai, m4nnww, "nn5ad.p1", 0x0000, 0x010000, CRC(22537184) SHA1(aef542a34e2b14a5db624e42d1cd2682de237b52), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 46)" ) -GAME_CUSTOM( 199?, m4nnww__aj, m4nnww, "nn5b.p1", 0x0000, 0x010000, CRC(e2a99408) SHA1(a0868a38c290a84926089c60d1b5555706485bff), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 47)" ) -GAME_CUSTOM( 199?, m4nnww__ak, m4nnww, "nn5d.p1", 0x0000, 0x010000, CRC(ef1a21b6) SHA1(ba763b06583af1273e384b878fbacc68f88714dc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 48)" ) -GAME_CUSTOM( 199?, m4nnww__al, m4nnww, "nn5dk.p1", 0x0000, 0x010000, CRC(74c48e28) SHA1(db6be2275b6122845c662dd5f12266b66e888221), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 49)" ) -GAME_CUSTOM( 199?, m4nnww__am, m4nnww, "nn5dr.p1", 0x0000, 0x010000, CRC(f52c9f87) SHA1(e8b1037c9ed5d9452abccb6b07bae46b45c4705e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 50)" ) -GAME_CUSTOM( 199?, m4nnww__an, m4nnww, "nn5dy.p1", 0x0000, 0x010000, CRC(6847b769) SHA1(1b4d42774c72a3c7b40551c7181413ea1fca0b88), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 51)" ) -GAME_CUSTOM( 199?, m4nnww__ao, m4nnww, "nn5k.p1", 0x0000, 0x010000, CRC(ceab49d9) SHA1(633e7bab6a30176dbcea2bd3e7bab0f7833409ba), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 52)" ) -GAME_CUSTOM( 199?, m4nnww__ap, m4nnww, "nn5r.p1", 0x0000, 0x010000, CRC(144523cd) SHA1(d12586ccea659ecb75af944d87ddd480da917eaf), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 53)" ) -GAME_CUSTOM( 199?, m4nnww__ar, m4nnww, "nn5y.p1", 0x0000, 0x010000, CRC(892e0b23) SHA1(ff3f550e20e71e868d52b60740f743a7d2d6c645), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 55)" ) +GAME_CUSTOM( 199?, m4nnww__aq, m4nnww, "nn5bd.p1", 0x0000, 0x010000, CRC(56cc9559) SHA1(53e109a579e422932dd25c52cf2beca51d3a53e3), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 BD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__ai, m4nnww, "nn5ad.p1", 0x0000, 0x010000, CRC(22537184) SHA1(aef542a34e2b14a5db624e42d1cd2682de237b52), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 AD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__aj, m4nnww, "nn5b.p1", 0x0000, 0x010000, CRC(e2a99408) SHA1(a0868a38c290a84926089c60d1b5555706485bff), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 B / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__ak, m4nnww, "nn5d.p1", 0x0000, 0x010000, CRC(ef1a21b6) SHA1(ba763b06583af1273e384b878fbacc68f88714dc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 D / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__al, m4nnww, "nn5dk.p1", 0x0000, 0x010000, CRC(74c48e28) SHA1(db6be2275b6122845c662dd5f12266b66e888221), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 KD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__am, m4nnww, "nn5dr.p1", 0x0000, 0x010000, CRC(f52c9f87) SHA1(e8b1037c9ed5d9452abccb6b07bae46b45c4705e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 RD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__an, m4nnww, "nn5dy.p1", 0x0000, 0x010000, CRC(6847b769) SHA1(1b4d42774c72a3c7b40551c7181413ea1fca0b88), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 YD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__ao, m4nnww, "nn5k.p1", 0x0000, 0x010000, CRC(ceab49d9) SHA1(633e7bab6a30176dbcea2bd3e7bab0f7833409ba), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 K / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__ap, m4nnww, "nn5r.p1", 0x0000, 0x010000, CRC(144523cd) SHA1(d12586ccea659ecb75af944d87ddd480da917eaf), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 R / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__ar, m4nnww, "nn5y.p1", 0x0000, 0x010000, CRC(892e0b23) SHA1(ff3f550e20e71e868d52b60740f743a7d2d6c645), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN5 0.2 Y / NN4 0.2)" ) // "(C)1991 BARCREST" and "NN4 0.1" (startup CN1 0.1) -GAME_CUSTOM( 199?, m4nnww__b, m4nnww, "cni01ad.p1", 0x0000, 0x010000, CRC(788e47b1) SHA1(6d07500a38b54e1a9038e35d82fdb4a0f22d23ba), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 / NN4 0.1)" ) -GAME_CUSTOM( 199?, m4nnww__c, m4nnww, "cni01b.p1", 0x0000, 0x010000, CRC(33512643) SHA1(865ed3b68fe3b737833734513b5045c5db97791e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4nnww__d, m4nnww, "cni01bd.p1", 0x0000, 0x010000, CRC(8a00d73b) SHA1(702579ea1bc586aacd5cba889919f3e86ea05771), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4nnww__e, m4nnww, "cni01c.p1", 0x0000, 0x010000, CRC(b836ee44) SHA1(832914461492f120894ec7e63f6aa1ad00b89b41), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4nnww__f, m4nnww, "cni01d.p1", 0x0000, 0x010000, CRC(94fbe9cb) SHA1(7daabf1cd315f8d18796ba34f8c2ec271cc1e396), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4nnww__g, m4nnww, "cni01dk.p1", 0x0000, 0x010000, CRC(708fbcca) SHA1(7e97d8adf660099873a94d1915c79f110614cb11), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4nnww__h, m4nnww, "cni01dr.p1", 0x0000, 0x010000, CRC(5b7ed753) SHA1(8072ac849dc61e50963ae6730fa32823bd038c77), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4nnww__i, m4nnww, "cni01dy.p1", 0x0000, 0x010000, CRC(fcf6da8b) SHA1(95d86af30035884211ed26ccb5db9aae12ac7bf2), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4nnww__j, m4nnww, "cni01k.p1", 0x0000, 0x010000, CRC(f7c90833) SHA1(3b3b44e61f24e9fb45f465fd9c381fe81b6851a0), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4nnww__k, m4nnww, "cni01r.p1", 0x0000, 0x010000, CRC(c611b1eb) SHA1(524ee18da8a086d15277d9fb0ea383ee3d49d47a), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4nnww__l, m4nnww, "cni01s.p1", 0x0000, 0x010000, CRC(5ed6a396) SHA1(299767467b56d1aa93602f98cc387e7ff18bda9d), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4nnww__m, m4nnww, "cni01y.p1", 0x0000, 0x010000, CRC(d3612bf2) SHA1(40a8ff08a38c4411946a67f380891945d166d199), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 14)" ) +GAME_CUSTOM( 199?, m4nnww__l, m4nnww, "cni01s.p1", 0x0000, 0x010000, CRC(5ed6a396) SHA1(299767467b56d1aa93602f98cc387e7ff18bda9d), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__b, m4nnww, "cni01ad.p1", 0x0000, 0x010000, CRC(788e47b1) SHA1(6d07500a38b54e1a9038e35d82fdb4a0f22d23ba), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 AD / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__c, m4nnww, "cni01b.p1", 0x0000, 0x010000, CRC(33512643) SHA1(865ed3b68fe3b737833734513b5045c5db97791e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 B / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__d, m4nnww, "cni01bd.p1", 0x0000, 0x010000, CRC(8a00d73b) SHA1(702579ea1bc586aacd5cba889919f3e86ea05771), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 BD / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__e, m4nnww, "cni01c.p1", 0x0000, 0x010000, CRC(b836ee44) SHA1(832914461492f120894ec7e63f6aa1ad00b89b41), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 C / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__f, m4nnww, "cni01d.p1", 0x0000, 0x010000, CRC(94fbe9cb) SHA1(7daabf1cd315f8d18796ba34f8c2ec271cc1e396), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 D / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__g, m4nnww, "cni01dk.p1", 0x0000, 0x010000, CRC(708fbcca) SHA1(7e97d8adf660099873a94d1915c79f110614cb11), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 KD / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__h, m4nnww, "cni01dr.p1", 0x0000, 0x010000, CRC(5b7ed753) SHA1(8072ac849dc61e50963ae6730fa32823bd038c77), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 RD / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__i, m4nnww, "cni01dy.p1", 0x0000, 0x010000, CRC(fcf6da8b) SHA1(95d86af30035884211ed26ccb5db9aae12ac7bf2), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 YD / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__j, m4nnww, "cni01k.p1", 0x0000, 0x010000, CRC(f7c90833) SHA1(3b3b44e61f24e9fb45f465fd9c381fe81b6851a0), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 AK / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__k, m4nnww, "cni01r.p1", 0x0000, 0x010000, CRC(c611b1eb) SHA1(524ee18da8a086d15277d9fb0ea383ee3d49d47a), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 R / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__m, m4nnww, "cni01y.p1", 0x0000, 0x010000, CRC(d3612bf2) SHA1(40a8ff08a38c4411946a67f380891945d166d199), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CN1 0.1 Y / NN4 0.1)" ) // "(C)1991 BARCREST" and "NN4 0.2" (startup CNU 0.2) -GAME_CUSTOM( 199?, m4nnww__n, m4nnww, "cnuad.p1", 0x0000, 0x010000, CRC(f4b28628) SHA1(7323525a44477e2a3f89562f6094ed7bb47a16cc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2AD / NN4 0.2)" ) -GAME_CUSTOM( 199?, m4nnww__o, m4nnww, "cnub.p1", 0x0000, 0x010000, CRC(735260a3) SHA1(e08fff6314d7cb4e396107366fdc16dcbf7f5d67), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4nnww__p, m4nnww, "cnubd.p1", 0x0000, 0x010000, CRC(fbe1ee39) SHA1(21bdaa6f9af686b4e44958ee09a131d0e12c2c53), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4nnww__q, m4nnww, "cnud.p1", 0x0000, 0x010000, CRC(d3a0eff1) SHA1(2b18c3e14a43d072ae5702bc77fcac65dbd8305c), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4nnww__r, m4nnww, "cnudk.p1", 0x0000, 0x010000, CRC(a7b506e8) SHA1(40d712076b434a339dfa60b937eec91038568312), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4nnww__s, m4nnww, "cnudr.p1", 0x0000, 0x010000, CRC(e163caea) SHA1(273a13567e5cb7fd071dfc9c8a9bc923e25d7679), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4nnww__t, m4nnww, "cnudy.p1", 0x0000, 0x010000, CRC(7c08e204) SHA1(34c906f3a284fde0c997232738a51b709a0dca93), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4nnww__u, m4nnww, "cnuk.p1", 0x0000, 0x010000, CRC(b9c08873) SHA1(9c5a754a7b57c8ab4334afdcbe30884a7181ac48), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 22)" ) -GAME_CUSTOM( 199?, m4nnww__v, m4nnww, "cnur.p1", 0x0000, 0x010000, CRC(729d89ea) SHA1(c98a89dd8f85dde7ab005bcb7eba1fcc31162e08), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 23)" ) -GAME_CUSTOM( 199?, m4nnww__w, m4nnww, "cnus.p1", 0x0000, 0x010000, CRC(6afee8e1) SHA1(35464eef29a5a66b8efea890987ff120ca5b7409), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4nnww__x, m4nnww, "cnuy.p1", 0x0000, 0x010000, CRC(eff6a104) SHA1(021baf5fe88defca05627a85501622d86e846233), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 25)" ) +GAME_CUSTOM( 199?, m4nnww__w, m4nnww, "cnus.p1", 0x0000, 0x010000, CRC(6afee8e1) SHA1(35464eef29a5a66b8efea890987ff120ca5b7409), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__n, m4nnww, "cnuad.p1", 0x0000, 0x010000, CRC(f4b28628) SHA1(7323525a44477e2a3f89562f6094ed7bb47a16cc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 AD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__o, m4nnww, "cnub.p1", 0x0000, 0x010000, CRC(735260a3) SHA1(e08fff6314d7cb4e396107366fdc16dcbf7f5d67), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 B / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__p, m4nnww, "cnubd.p1", 0x0000, 0x010000, CRC(fbe1ee39) SHA1(21bdaa6f9af686b4e44958ee09a131d0e12c2c53), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 BD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__q, m4nnww, "cnud.p1", 0x0000, 0x010000, CRC(d3a0eff1) SHA1(2b18c3e14a43d072ae5702bc77fcac65dbd8305c), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 D / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__r, m4nnww, "cnudk.p1", 0x0000, 0x010000, CRC(a7b506e8) SHA1(40d712076b434a339dfa60b937eec91038568312), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 KD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__s, m4nnww, "cnudr.p1", 0x0000, 0x010000, CRC(e163caea) SHA1(273a13567e5cb7fd071dfc9c8a9bc923e25d7679), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 RD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__t, m4nnww, "cnudy.p1", 0x0000, 0x010000, CRC(7c08e204) SHA1(34c906f3a284fde0c997232738a51b709a0dca93), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 YD / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__u, m4nnww, "cnuk.p1", 0x0000, 0x010000, CRC(b9c08873) SHA1(9c5a754a7b57c8ab4334afdcbe30884a7181ac48), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 K / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__v, m4nnww, "cnur.p1", 0x0000, 0x010000, CRC(729d89ea) SHA1(c98a89dd8f85dde7ab005bcb7eba1fcc31162e08), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 R / NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__x, m4nnww, "cnuy.p1", 0x0000, 0x010000, CRC(eff6a104) SHA1(021baf5fe88defca05627a85501622d86e846233), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CNU 0.2 Y / NN4 0.2)" ) // "(C)1991 BARCREST" and "NN3 0.1" -GAME_CUSTOM( 199?, m4nnww__y, m4nnww, "nn3xad.p1", 0x0000, 0x010000, CRC(8ccfceb8) SHA1(762ab26826d3d2a4dd7999a71724389344e9dafb), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1XAD)" ) -GAME_CUSTOM( 199?, m4nnww__z, m4nnww, "nn3xb.p1", 0x0000, 0x010000, CRC(9b0dd473) SHA1(9975dafea8c7d6ccfc9f826adb1a0d3d0ed9740a), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4nnww__0, m4nnww, "nn3xbd.p1", 0x0000, 0x010000, CRC(21bf4a89) SHA1(200c9ccc4bc2a93fcd0f68bb00ad4391bdeecda1), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 28)" ) -GAME_CUSTOM( 199?, m4nnww__1, m4nnww, "nn3xd.p1", 0x0000, 0x010000, CRC(11e22c45) SHA1(6da31eea7b25612d99cc79f6f9579622f105c862), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 29)" ) -GAME_CUSTOM( 199?, m4nnww__2, m4nnww, "nn3xdk.p1", 0x0000, 0x010000, CRC(0f4642c6) SHA1(53a0b8bc102c2b1c0db71887470b70852b09a4e9), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 30)" ) -GAME_CUSTOM( 199?, m4nnww__3, m4nnww, "nn3xdy.p1", 0x0000, 0x010000, CRC(ba3c1cf0) SHA1(ab94227018c3f9173e6a648749d455afd1ed36ce), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 31)" ) -GAME_CUSTOM( 199?, m4nnww__4, m4nnww, "nn3xk.p1", 0x0000, 0x010000, CRC(ec3a9831) SHA1(0b3ba86faf39cf3a1e42cb1c31fd2c50c24d65dc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4nnww__5, m4nnww, "nn3xr.p1", 0x0000, 0x010000, CRC(6416481c) SHA1(b06ed4964d9cbf403905504ac68abdab53131476), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4nnww__6, m4nnww, "nn3xrd.p1", 0x0000, 0x010000, CRC(0fd3f9b9) SHA1(99115b217cfc54b52469ffc77e7a7592907c53ea), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4nnww__7, m4nnww, "nn3xs.p1", 0x0000, 0x010000, CRC(13d02d21) SHA1(8e4dac8e60538884d3f3a92fc1bb9f41276be4c8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 35)" ) -GAME_CUSTOM( 199?, m4nnww__8, m4nnww, "nn3xy.p1", 0x0000, 0x010000, CRC(8a5d0f4b) SHA1(ef727e7ee8bb20d1b201927186a1a4f83e1e7497), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 36)" ) +GAME_CUSTOM( 199?, m4nnww__7, m4nnww, "nn3xs.p1", 0x0000, 0x010000, CRC(13d02d21) SHA1(8e4dac8e60538884d3f3a92fc1bb9f41276be4c8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 X)" ) +GAME_CUSTOM( 199?, m4nnww__y, m4nnww, "nn3xad.p1", 0x0000, 0x010000, CRC(8ccfceb8) SHA1(762ab26826d3d2a4dd7999a71724389344e9dafb), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 XAD)" ) +GAME_CUSTOM( 199?, m4nnww__z, m4nnww, "nn3xb.p1", 0x0000, 0x010000, CRC(9b0dd473) SHA1(9975dafea8c7d6ccfc9f826adb1a0d3d0ed9740a), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 BX)" ) +GAME_CUSTOM( 199?, m4nnww__0, m4nnww, "nn3xbd.p1", 0x0000, 0x010000, CRC(21bf4a89) SHA1(200c9ccc4bc2a93fcd0f68bb00ad4391bdeecda1), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 BXD)" ) +GAME_CUSTOM( 199?, m4nnww__1, m4nnww, "nn3xd.p1", 0x0000, 0x010000, CRC(11e22c45) SHA1(6da31eea7b25612d99cc79f6f9579622f105c862), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 XD)" ) +GAME_CUSTOM( 199?, m4nnww__2, m4nnww, "nn3xdk.p1", 0x0000, 0x010000, CRC(0f4642c6) SHA1(53a0b8bc102c2b1c0db71887470b70852b09a4e9), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 KXD)" ) +GAME_CUSTOM( 199?, m4nnww__3, m4nnww, "nn3xdy.p1", 0x0000, 0x010000, CRC(ba3c1cf0) SHA1(ab94227018c3f9173e6a648749d455afd1ed36ce), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 YXD)" ) +GAME_CUSTOM( 199?, m4nnww__4, m4nnww, "nn3xk.p1", 0x0000, 0x010000, CRC(ec3a9831) SHA1(0b3ba86faf39cf3a1e42cb1c31fd2c50c24d65dc), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 KX)" ) +GAME_CUSTOM( 199?, m4nnww__5, m4nnww, "nn3xr.p1", 0x0000, 0x010000, CRC(6416481c) SHA1(b06ed4964d9cbf403905504ac68abdab53131476), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 RX)" ) +GAME_CUSTOM( 199?, m4nnww__6, m4nnww, "nn3xrd.p1", 0x0000, 0x010000, CRC(0fd3f9b9) SHA1(99115b217cfc54b52469ffc77e7a7592907c53ea), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 RD)" ) // X not set here +GAME_CUSTOM( 199?, m4nnww__8, m4nnww, "nn3xy.p1", 0x0000, 0x010000, CRC(8a5d0f4b) SHA1(ef727e7ee8bb20d1b201927186a1a4f83e1e7497), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN3 0.1 YX)" ) // "(C)1991 BARCREST" and "NN4 0.2" -GAME_CUSTOM( 199?, m4nnww__9, m4nnww, "nn4ad.p1", 0x0000, 0x010000, CRC(827b832f) SHA1(4448ccb03282b9d39c6a00d02cea4d8ce2225b0e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2AD)" ) -GAME_CUSTOM( 199?, m4nnww__aa, m4nnww, "nn4b.p1", 0x0000, 0x010000, CRC(65e16330) SHA1(cfd18693155b4b7c5692064a2f693eb198d02749), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4nnww__ab, m4nnww, "nn4bd.p1", 0x0000, 0x010000, CRC(b467ee65) SHA1(79030aa06ca8fd9c8becff62d56628939e9b5075), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4nnww__ac, m4nnww, "nn4d.p1", 0x0000, 0x010000, CRC(548dacb9) SHA1(55949910374fae419ba015b70780e3e9e269caa0), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4nnww__ad, m4nnww, "nn4dk.p1", 0x0000, 0x010000, CRC(9053aa15) SHA1(99d1e6d8776434a4ec69a565d673b45402467b8d), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4nnww__ae, m4nnww, "nn4dy.p1", 0x0000, 0x010000, CRC(5fcd5a18) SHA1(b1b3283a303114ca1daab89cea44211ece7188ef), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 42)" ) -GAME_CUSTOM( 199?, m4nnww__af, m4nnww, "nn4k.p1", 0x0000, 0x010000, CRC(09a808c0) SHA1(c74c3acb2c1f52fd1e83003fb1a022f80f55e0b8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 43)" ) -GAME_CUSTOM( 199?, m4nnww__ag, m4nnww, "nn4s.p1", 0x0000, 0x010000, CRC(ec4f01ee) SHA1(443da7ed359a3e208417f7bca0dc52a09594a927), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4nnww__ah, m4nnww, "nn4y.p1", 0x0000, 0x010000, CRC(a1eff941) SHA1(369ec89b82f97c3d8266d41e5eb27be7770bdca4), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 45)" ) +GAME_CUSTOM( 199?, m4nnww__ag, m4nnww, "nn4s.p1", 0x0000, 0x010000, CRC(ec4f01ee) SHA1(443da7ed359a3e208417f7bca0dc52a09594a927), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2)" ) +GAME_CUSTOM( 199?, m4nnww__9, m4nnww, "nn4ad.p1", 0x0000, 0x010000, CRC(827b832f) SHA1(4448ccb03282b9d39c6a00d02cea4d8ce2225b0e), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 AD)" ) +GAME_CUSTOM( 199?, m4nnww__aa, m4nnww, "nn4b.p1", 0x0000, 0x010000, CRC(65e16330) SHA1(cfd18693155b4b7c5692064a2f693eb198d02749), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 B)" ) +GAME_CUSTOM( 199?, m4nnww__ab, m4nnww, "nn4bd.p1", 0x0000, 0x010000, CRC(b467ee65) SHA1(79030aa06ca8fd9c8becff62d56628939e9b5075), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 BD)" ) +GAME_CUSTOM( 199?, m4nnww__ac, m4nnww, "nn4d.p1", 0x0000, 0x010000, CRC(548dacb9) SHA1(55949910374fae419ba015b70780e3e9e269caa0), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 D)" ) +GAME_CUSTOM( 199?, m4nnww__ad, m4nnww, "nn4dk.p1", 0x0000, 0x010000, CRC(9053aa15) SHA1(99d1e6d8776434a4ec69a565d673b45402467b8d), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 KD)" ) +GAME_CUSTOM( 199?, m4nnww__ae, m4nnww, "nn4dy.p1", 0x0000, 0x010000, CRC(5fcd5a18) SHA1(b1b3283a303114ca1daab89cea44211ece7188ef), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 YD)" ) +GAME_CUSTOM( 199?, m4nnww__af, m4nnww, "nn4k.p1", 0x0000, 0x010000, CRC(09a808c0) SHA1(c74c3acb2c1f52fd1e83003fb1a022f80f55e0b8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 K)" ) +GAME_CUSTOM( 199?, m4nnww__ah, m4nnww, "nn4y.p1", 0x0000, 0x010000, CRC(a1eff941) SHA1(369ec89b82f97c3d8266d41e5eb27be7770bdca4), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NN4 0.2 Y)" ) // "(C)1991 BARCREST" and "NNU 5.2" -GAME_CUSTOM( 199?, m4nnww__at, m4nnww, "nnus.p1", 0x0000, 0x010000, CRC(3e3a829e) SHA1(5aa3a56e007bad4dacdc3c993c87569e4250eecd), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 57)" ) -GAME_CUSTOM( 199?, m4nnww__au, m4nnww, "nnux.p1", 0x0000, 0x010000, CRC(38806ebf) SHA1(a897a33e3260de1b284b01a65d1da7cbe05d51f8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 58)" ) -GAME_CUSTOM( 199?, m4nnww__av, m4nnww, "nnuxb.p1", 0x0000, 0x010000, CRC(c4dba8df) SHA1(0f8516cc9b2f0be9d1c936667974cd8116018dad), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 59)" ) -GAME_CUSTOM( 199?, m4nnww__aw, m4nnww, "nnuxc.p1", 0x0000, 0x010000, CRC(797e0c4d) SHA1(211b0a804643731275d0075461f8d94985fde1db), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (set 60)" ) +GAME_CUSTOM( 199?, m4nnww__at, m4nnww, "nnus.p1", 0x0000, 0x010000, CRC(3e3a829e) SHA1(5aa3a56e007bad4dacdc3c993c87569e4250eecd), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2)" ) +GAME_CUSTOM( 199?, m4nnww__au, m4nnww, "nnux.p1", 0x0000, 0x010000, CRC(38806ebf) SHA1(a897a33e3260de1b284b01a65d1da7cbe05d51f8), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 X)" ) +GAME_CUSTOM( 199?, m4nnww__av, m4nnww, "nnuxb.p1", 0x0000, 0x010000, CRC(c4dba8df) SHA1(0f8516cc9b2f0be9d1c936667974cd8116018dad), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 BX)" ) +GAME_CUSTOM( 199?, m4nnww__aw, m4nnww, "nnuxc.p1", 0x0000, 0x010000, CRC(797e0c4d) SHA1(211b0a804643731275d0075461f8d94985fde1db), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 5.2 CX)" ) // "(C)1991 BARCREST" and "NNU 4.0" -GAME_CUSTOM( 199?, m4nnww__as, m4nnww, "nnu40x.bin", 0x0000, 0x010000, CRC(63e3d7df) SHA1(1a5a00185ec5150f5b05765f06297d7884540aaf), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 4.0X)" ) +GAME_CUSTOM( 199?, m4nnww__as, m4nnww, "nnu40x.bin", 0x0000, 0x010000, CRC(63e3d7df) SHA1(1a5a00185ec5150f5b05765f06297d7884540aaf), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (NNU 4.0 X)" ) // "(C)1991 BARCREST" and "NN4 0.1" (startup CH3 0.1) -GAME_CUSTOM( 199?, m4nnww__ax, m4nnww, "nnwink.hex", 0x0000, 0x010000, CRC(f77bd6c4) SHA1(1631040fbfe3fc37c2cbd3145857c31d16b92bde), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CH3 0.1B / NN4 0.1)" ) +GAME_CUSTOM( 199?, m4nnww__ax, m4nnww, "nnwink.hex", 0x0000, 0x010000, CRC(f77bd6c4) SHA1(1631040fbfe3fc37c2cbd3145857c31d16b92bde), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CH3 0.1 B / NN4 0.1)" ) // "(C)1991 BARCREST" and "NN4 0.1" (startup CF3 0.1) GAME_CUSTOM( 199?, m4nnww__a, m4nnww, "cf301s", 0x0000, 0x010000, CRC(1d8abf59) SHA1(81e47797baddd777fbbb1b1e044df1bfe3d49cb2), "Barcrest","Nudge Nudge Wink Wink (Barcrest) (MPU4) (CF3 0.1 / NN4 0.1)" ) // no copyright string and "NNU 3.4" @@ -1693,85 +1693,85 @@ GAME_CUSTOM( 199?, m4nnww__az, m4nnww, "wink2010", 0x0000, 0x010000, CRC(0 // "(C)1993 BARCREST" and "RUN 0.5" GAME_CUSTOM( 199?, m4rfym, 0, "runs.p1", 0x0000, 0x010000, CRC(e20f5a06) SHA1(f0f71f8870db7003fce96f1dfe09804cf17c3ab3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5)" ) -GAME_CUSTOM( 199?, m4rfym__ar, m4rfym, "rund.p1", 0x0000, 0x010000, CRC(2be2a66d) SHA1(a66d74ccf1783912673cfcb6c1ae7fbb6d70ca0e), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5D)" ) -GAME_CUSTOM( 199?, m4rfym__ao, m4rfym, "runc.p1", 0x0000, 0x010000, CRC(09f53ddf) SHA1(f46be95bfacac751102a5f4d4a0917a5e51a653e), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5C)" ) -GAME_CUSTOM( 199?, m4rfym__ap, m4rfym, "rundy.p1", 0x0000, 0x010000, CRC(a6f69a24) SHA1(8370287dcc890fcb7529d3d4c7a3c2e2e688f6a8), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5YD)" ) -GAME_CUSTOM( 199?, m4rfym__aq, m4rfym, "runk.p1", 0x0000, 0x010000, CRC(a2828b82) SHA1(0ae371a441df679fd9c699771ae9f58ce960d4a1), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5K)" ) -GAME_CUSTOM( 199?, m4rfym__as, m4rfym, "runy.p1", 0x0000, 0x010000, CRC(0e311ab4) SHA1(c98540c07e9cc23ec70ecfbcb2f4d66f2c716fc3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5Y)" ) +GAME_CUSTOM( 199?, m4rfym__ar, m4rfym, "rund.p1", 0x0000, 0x010000, CRC(2be2a66d) SHA1(a66d74ccf1783912673cfcb6c1ae7fbb6d70ca0e), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 D)" ) +GAME_CUSTOM( 199?, m4rfym__ao, m4rfym, "runc.p1", 0x0000, 0x010000, CRC(09f53ddf) SHA1(f46be95bfacac751102a5f4d4a0917a5e51a653e), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 C)" ) +GAME_CUSTOM( 199?, m4rfym__ap, m4rfym, "rundy.p1", 0x0000, 0x010000, CRC(a6f69a24) SHA1(8370287dcc890fcb7529d3d4c7a3c2e2e688f6a8), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 YD)" ) +GAME_CUSTOM( 199?, m4rfym__aq, m4rfym, "runk.p1", 0x0000, 0x010000, CRC(a2828b82) SHA1(0ae371a441df679fd9c699771ae9f58ce960d4a1), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 K)" ) +GAME_CUSTOM( 199?, m4rfym__as, m4rfym, "runy.p1", 0x0000, 0x010000, CRC(0e311ab4) SHA1(c98540c07e9cc23ec70ecfbcb2f4d66f2c716fc3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUN 0.5 Y)" ) // "(C)1993 BARCREST" and "AP1 0.1" GAME_CUSTOM( 199?, m4rfym__h, m4rfym, "ap1s.p1", 0x0000, 0x010000, CRC(7474509c) SHA1(c87e20f10806ec87fd33f97b43b8378d304f7d67), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1)" ) -GAME_CUSTOM( 199?, m4rfym__a, m4rfym, "ap1ad.p1", 0x0000, 0x010000, CRC(d1adbf80) SHA1(08801f38b8ba5034fd83b53b6cfff864104525b4), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1AD)" ) -GAME_CUSTOM( 199?, m4rfym__b, m4rfym, "ap1b.p1", 0x0000, 0x010000, CRC(4939f186) SHA1(389d46d603e75d3aaeeca990f4e1143c61f1565f), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4rfym__c, m4rfym, "ap1bd.p1", 0x0000, 0x010000, CRC(08a33b2c) SHA1(ef38e9cd0c9bc8393530e36060c803d1250c46a6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4rfym__d, m4rfym, "ap1d.p1", 0x0000, 0x010000, CRC(edef44fe) SHA1(4907804c1bebc1f13aa3eb9dad0e9189de8e9601), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4rfym__e, m4rfym, "ap1dk.p1", 0x0000, 0x010000, CRC(873a402c) SHA1(1315a4ad18544ca5d65526ea0f620cac528e4cad), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4rfym__f, m4rfym, "ap1dy.p1", 0x0000, 0x010000, CRC(e8436c00) SHA1(1c2f171e55c3519d63d6c4dd0d56df4e1daad6af), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4rfym__g, m4rfym, "ap1k.p1", 0x0000, 0x010000, CRC(9afeb1e7) SHA1(5fc5d73a2c976d227a0598fb1dd802c6336415d1), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4rfym__i, m4rfym, "ap1y.p1", 0x0000, 0x010000, CRC(152bf7cb) SHA1(8dd8b621f9dac430c293b29ca03814fc21a148b9), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 10)" ) +GAME_CUSTOM( 199?, m4rfym__a, m4rfym, "ap1ad.p1", 0x0000, 0x010000, CRC(d1adbf80) SHA1(08801f38b8ba5034fd83b53b6cfff864104525b4), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 AD)" ) +GAME_CUSTOM( 199?, m4rfym__b, m4rfym, "ap1b.p1", 0x0000, 0x010000, CRC(4939f186) SHA1(389d46d603e75d3aaeeca990f4e1143c61f1565f), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 B)" ) +GAME_CUSTOM( 199?, m4rfym__c, m4rfym, "ap1bd.p1", 0x0000, 0x010000, CRC(08a33b2c) SHA1(ef38e9cd0c9bc8393530e36060c803d1250c46a6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 BD)" ) +GAME_CUSTOM( 199?, m4rfym__d, m4rfym, "ap1d.p1", 0x0000, 0x010000, CRC(edef44fe) SHA1(4907804c1bebc1f13aa3eb9dad0e9189de8e9601), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 D)" ) +GAME_CUSTOM( 199?, m4rfym__e, m4rfym, "ap1dk.p1", 0x0000, 0x010000, CRC(873a402c) SHA1(1315a4ad18544ca5d65526ea0f620cac528e4cad), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 KD)" ) +GAME_CUSTOM( 199?, m4rfym__f, m4rfym, "ap1dy.p1", 0x0000, 0x010000, CRC(e8436c00) SHA1(1c2f171e55c3519d63d6c4dd0d56df4e1daad6af), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 YD)" ) +GAME_CUSTOM( 199?, m4rfym__g, m4rfym, "ap1k.p1", 0x0000, 0x010000, CRC(9afeb1e7) SHA1(5fc5d73a2c976d227a0598fb1dd802c6336415d1), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 K)" ) +GAME_CUSTOM( 199?, m4rfym__i, m4rfym, "ap1y.p1", 0x0000, 0x010000, CRC(152bf7cb) SHA1(8dd8b621f9dac430c293b29ca03814fc21a148b9), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP1 0.1 Y)" ) // "(C)1993 BARCREST" and "AP5 0.2" GAME_CUSTOM( 199?, m4rfym__s, m4rfym, "ap502s.p1", 0x0000, 0x010000, CRC(8502a09a) SHA1(e635552b7f0c7b2e142d7f4d0f1fd93edac6132d), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2)" ) -GAME_CUSTOM( 199?, m4rfym__j, m4rfym, "ap502ad.p1", 0x0000, 0x010000, CRC(ab059e57) SHA1(45ba91989b0fd1a44628f696b78eae2a349e3e4a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2AD)" ) -GAME_CUSTOM( 199?, m4rfym__k, m4rfym, "ap502b.p1", 0x0000, 0x010000, CRC(9ed27a6e) SHA1(2d655305a178e4ebe43f3d429dfec5a2ef6b9873), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4rfym__l, m4rfym, "ap502bd.p1", 0x0000, 0x010000, CRC(48e83fcd) SHA1(3e2de0416722df5004f00baae2d3f6846ff596e5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4rfym__m, m4rfym, "ap502d.p1", 0x0000, 0x010000, CRC(d0560301) SHA1(c35e97391c588f6567eeb253eb9de59bec9e1724), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4rfym__n, m4rfym, "ap502dk.p1", 0x0000, 0x010000, CRC(82aa8d80) SHA1(e42d10537dcc5aaae59472681b215b0eb0821c25), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4rfym__o, m4rfym, "ap502dr.p1", 0x0000, 0x010000, CRC(1cfb3102) SHA1(b1d3a533de0ff93e15f7c039e75af0ef6c8eec57), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4rfym__p, m4rfym, "ap502dy.p1", 0x0000, 0x010000, CRC(819019ec) SHA1(36d2093a7a592850533d4206e0c9dd28cdc17568), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4rfym__q, m4rfym, "ap502k.p1", 0x0000, 0x010000, CRC(5064a894) SHA1(3e67358fe5ed9bfac05f621d7e72e5be7aae67df), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4rfym__r, m4rfym, "ap502r.p1", 0x0000, 0x010000, CRC(2503c7da) SHA1(2478bab8b19ab68ff01be8fae2e86e47894b3d7c), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4rfym__t, m4rfym, "ap502y.p1", 0x0000, 0x010000, CRC(b868ef34) SHA1(a773503afd2f59b71e0b9a7e202d3e7120ec88ff), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 21)" ) +GAME_CUSTOM( 199?, m4rfym__j, m4rfym, "ap502ad.p1", 0x0000, 0x010000, CRC(ab059e57) SHA1(45ba91989b0fd1a44628f696b78eae2a349e3e4a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 AD)" ) +GAME_CUSTOM( 199?, m4rfym__k, m4rfym, "ap502b.p1", 0x0000, 0x010000, CRC(9ed27a6e) SHA1(2d655305a178e4ebe43f3d429dfec5a2ef6b9873), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 B)" ) +GAME_CUSTOM( 199?, m4rfym__l, m4rfym, "ap502bd.p1", 0x0000, 0x010000, CRC(48e83fcd) SHA1(3e2de0416722df5004f00baae2d3f6846ff596e5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 BD)" ) +GAME_CUSTOM( 199?, m4rfym__m, m4rfym, "ap502d.p1", 0x0000, 0x010000, CRC(d0560301) SHA1(c35e97391c588f6567eeb253eb9de59bec9e1724), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 D)" ) +GAME_CUSTOM( 199?, m4rfym__n, m4rfym, "ap502dk.p1", 0x0000, 0x010000, CRC(82aa8d80) SHA1(e42d10537dcc5aaae59472681b215b0eb0821c25), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 KD)" ) +GAME_CUSTOM( 199?, m4rfym__o, m4rfym, "ap502dr.p1", 0x0000, 0x010000, CRC(1cfb3102) SHA1(b1d3a533de0ff93e15f7c039e75af0ef6c8eec57), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 RD)" ) +GAME_CUSTOM( 199?, m4rfym__p, m4rfym, "ap502dy.p1", 0x0000, 0x010000, CRC(819019ec) SHA1(36d2093a7a592850533d4206e0c9dd28cdc17568), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 YD)" ) +GAME_CUSTOM( 199?, m4rfym__q, m4rfym, "ap502k.p1", 0x0000, 0x010000, CRC(5064a894) SHA1(3e67358fe5ed9bfac05f621d7e72e5be7aae67df), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 K)" ) +GAME_CUSTOM( 199?, m4rfym__r, m4rfym, "ap502r.p1", 0x0000, 0x010000, CRC(2503c7da) SHA1(2478bab8b19ab68ff01be8fae2e86e47894b3d7c), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 R)" ) +GAME_CUSTOM( 199?, m4rfym__t, m4rfym, "ap502y.p1", 0x0000, 0x010000, CRC(b868ef34) SHA1(a773503afd2f59b71e0b9a7e202d3e7120ec88ff), "Barcrest","Run For Your Money (Barcrest) (MPU4) (AP5 0.2 Y)" ) // "(C)1993 BARCREST" and "APR 0.1" GAME_CUSTOM( 199?, m4rfym__2, m4rfym, "aprs.p1", 0x0000, 0x010000, CRC(a114a96a) SHA1(b0a9091cac86750329513a0927dd39b76995b2f2), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1)" ) -GAME_CUSTOM( 199?, m4rfym__u, m4rfym, "aprad.p1", 0x0000, 0x010000, CRC(936f59ac) SHA1(325708d965d56a9a7482dbeaa089ca871d5c01b5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1AD)" ) -GAME_CUSTOM( 199?, m4rfym__v, m4rfym, "aprb.p1", 0x0000, 0x010000, CRC(72ad662a) SHA1(11f1695e05ecf34a58f8df3ffbc72ab2dd7d02c9), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 23)" ) -GAME_CUSTOM( 199?, m4rfym__w, m4rfym, "aprbd.p1", 0x0000, 0x010000, CRC(13af990d) SHA1(604d2173e3d6d25252b30b5bf386b53470c35581), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4rfym__x, m4rfym, "aprc.p1", 0x0000, 0x010000, CRC(fd3ece9a) SHA1(e11d1d258a415865f7477cdfddcd47e9bdb1c9b5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4rfym__y, m4rfym, "aprd.p1", 0x0000, 0x010000, CRC(8c19b732) SHA1(e7aeea41cf649fe2a28414ddedacdf72f56d32fe), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4rfym__z, m4rfym, "aprdk.p1", 0x0000, 0x010000, CRC(58a41fcd) SHA1(e8c92dfb5c9662c90d363b5b7a7e0a4b4894d4cb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4rfym__0, m4rfym, "aprdy.p1", 0x0000, 0x010000, CRC(9496cfad) SHA1(cb24779db99d283f1df86864886f21ad333cb98b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 28)" ) -GAME_CUSTOM( 199?, m4rfym__1, m4rfym, "aprk.p1", 0x0000, 0x010000, CRC(7277ef07) SHA1(dc509d125f8d377d4b2cb011d32be5bdba1daa17), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 29)" ) -GAME_CUSTOM( 199?, m4rfym__3, m4rfym, "apry.p1", 0x0000, 0x010000, CRC(bf2120bc) SHA1(473374a9510dd53e39b94bfcf1369e13647239e6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 31)" ) +GAME_CUSTOM( 199?, m4rfym__u, m4rfym, "aprad.p1", 0x0000, 0x010000, CRC(936f59ac) SHA1(325708d965d56a9a7482dbeaa089ca871d5c01b5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 AD)" ) +GAME_CUSTOM( 199?, m4rfym__v, m4rfym, "aprb.p1", 0x0000, 0x010000, CRC(72ad662a) SHA1(11f1695e05ecf34a58f8df3ffbc72ab2dd7d02c9), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 B)" ) +GAME_CUSTOM( 199?, m4rfym__w, m4rfym, "aprbd.p1", 0x0000, 0x010000, CRC(13af990d) SHA1(604d2173e3d6d25252b30b5bf386b53470c35581), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 BD)" ) +GAME_CUSTOM( 199?, m4rfym__x, m4rfym, "aprc.p1", 0x0000, 0x010000, CRC(fd3ece9a) SHA1(e11d1d258a415865f7477cdfddcd47e9bdb1c9b5), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 C)" ) +GAME_CUSTOM( 199?, m4rfym__y, m4rfym, "aprd.p1", 0x0000, 0x010000, CRC(8c19b732) SHA1(e7aeea41cf649fe2a28414ddedacdf72f56d32fe), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 D)" ) +GAME_CUSTOM( 199?, m4rfym__z, m4rfym, "aprdk.p1", 0x0000, 0x010000, CRC(58a41fcd) SHA1(e8c92dfb5c9662c90d363b5b7a7e0a4b4894d4cb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 KD)" ) +GAME_CUSTOM( 199?, m4rfym__0, m4rfym, "aprdy.p1", 0x0000, 0x010000, CRC(9496cfad) SHA1(cb24779db99d283f1df86864886f21ad333cb98b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 YD)" ) +GAME_CUSTOM( 199?, m4rfym__1, m4rfym, "aprk.p1", 0x0000, 0x010000, CRC(7277ef07) SHA1(dc509d125f8d377d4b2cb011d32be5bdba1daa17), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 K)" ) +GAME_CUSTOM( 199?, m4rfym__3, m4rfym, "apry.p1", 0x0000, 0x010000, CRC(bf2120bc) SHA1(473374a9510dd53e39b94bfcf1369e13647239e6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (APR 0.1 Y)" ) // "(C)1993 BARCREST" and "RU5 0.1" GAME_CUSTOM( 199?, m4rfym__af, m4rfym, "ru5s.p1", 0x0000, 0x010000, CRC(41795ea3) SHA1(6bfb6da6c0f7e762d628ce8a9dcdcbc3c0326ca6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1)" ) -GAME_CUSTOM( 199?, m4rfym__8, m4rfym, "ru5ad.p1", 0x0000, 0x010000, CRC(1c3e1f39) SHA1(a45cdaaa875e52cf5cd5adf986c98f4a22a14785), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1AD)" ) -GAME_CUSTOM( 199?, m4rfym__9, m4rfym, "ru5b.p1", 0x0000, 0x010000, CRC(41e44d37) SHA1(8eb409b96864fb0f7c3bf5c66a20a63c8cbc68af), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4rfym__aa, m4rfym, "ru5bd.p1", 0x0000, 0x010000, CRC(8d4db415) SHA1(b023a13f89b7e5c2f72fd213179f723621871faf), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4rfym__ab, m4rfym, "ru5d.p1", 0x0000, 0x010000, CRC(fcb70a63) SHA1(df81c3c26c066c1326b20b9e0dda2863ee9635a6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4rfym__ac, m4rfym, "ru5dk.p1", 0x0000, 0x010000, CRC(b4d83863) SHA1(02aebf94773d0a9454119b4ad663b6d8475fc8d3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4rfym__ad, m4rfym, "ru5dy.p1", 0x0000, 0x010000, CRC(66375af5) SHA1(0a6d10357c163e5e27e7436f8190070e36e3ef90), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4rfym__ae, m4rfym, "ru5k.p1", 0x0000, 0x010000, CRC(7871c141) SHA1(e1e9d2972c87d2835b1e5a62502160cb4abb7736), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 42)" ) -GAME_CUSTOM( 199?, m4rfym__ag, m4rfym, "ru5y.p1", 0x0000, 0x010000, CRC(ee217541) SHA1(68474c2e430d95ded2856183b9a02be917d092d6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 44)" ) +GAME_CUSTOM( 199?, m4rfym__8, m4rfym, "ru5ad.p1", 0x0000, 0x010000, CRC(1c3e1f39) SHA1(a45cdaaa875e52cf5cd5adf986c98f4a22a14785), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 AD)" ) +GAME_CUSTOM( 199?, m4rfym__9, m4rfym, "ru5b.p1", 0x0000, 0x010000, CRC(41e44d37) SHA1(8eb409b96864fb0f7c3bf5c66a20a63c8cbc68af), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 B)" ) +GAME_CUSTOM( 199?, m4rfym__aa, m4rfym, "ru5bd.p1", 0x0000, 0x010000, CRC(8d4db415) SHA1(b023a13f89b7e5c2f72fd213179f723621871faf), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 BD)" ) +GAME_CUSTOM( 199?, m4rfym__ab, m4rfym, "ru5d.p1", 0x0000, 0x010000, CRC(fcb70a63) SHA1(df81c3c26c066c1326b20b9e0dda2863ee9635a6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 D)" ) +GAME_CUSTOM( 199?, m4rfym__ac, m4rfym, "ru5dk.p1", 0x0000, 0x010000, CRC(b4d83863) SHA1(02aebf94773d0a9454119b4ad663b6d8475fc8d3), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 KD)" ) +GAME_CUSTOM( 199?, m4rfym__ad, m4rfym, "ru5dy.p1", 0x0000, 0x010000, CRC(66375af5) SHA1(0a6d10357c163e5e27e7436f8190070e36e3ef90), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 YD)" ) +GAME_CUSTOM( 199?, m4rfym__ae, m4rfym, "ru5k.p1", 0x0000, 0x010000, CRC(7871c141) SHA1(e1e9d2972c87d2835b1e5a62502160cb4abb7736), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 K)" ) +GAME_CUSTOM( 199?, m4rfym__ag, m4rfym, "ru5y.p1", 0x0000, 0x010000, CRC(ee217541) SHA1(68474c2e430d95ded2856183b9a02be917d092d6), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU5 0.1 Y)" ) // "(C)1993 BARCREST" and "RU8 0.1" GAME_CUSTOM( 199?, m4rfym__am, m4rfym, "ru8s.p1", 0x0000, 0x010000, CRC(d6ce5891) SHA1(c130e7bf614c67767c9af6f38e3cd41ce63d11ef), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1)" ) -GAME_CUSTOM( 199?, m4rfym__ah, m4rfym, "ru8c.p1", 0x0000, 0x010000, CRC(93290724) SHA1(37b17b08f77b308289d4392900576dc66a0377eb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1C)" ) -GAME_CUSTOM( 199?, m4rfym__ai, m4rfym, "ru8d.p1", 0x0000, 0x010000, CRC(3e7d6ebb) SHA1(a836a52aef9fe4a9021835e99109b7fefb4ead76), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 46)" ) -GAME_CUSTOM( 199?, m4rfym__aj, m4rfym, "ru8dk.p1", 0x0000, 0x010000, CRC(b2983dc1) SHA1(412bf4a643c807371fa465fb5f9a85bc3e46623d), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 47)" ) -GAME_CUSTOM( 199?, m4rfym__ak, m4rfym, "ru8dy.p1", 0x0000, 0x010000, CRC(7d06cdcc) SHA1(d68f6ee59eb7689df30412288db4e9ee6c4bf178), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 48)" ) -GAME_CUSTOM( 199?, m4rfym__al, m4rfym, "ru8k.p1", 0x0000, 0x010000, CRC(42f6226e) SHA1(c4bac8efd9c17f96dd9d973e9f64c85ceeacb36b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 49)" ) -GAME_CUSTOM( 199?, m4rfym__an, m4rfym, "ru8y.p1", 0x0000, 0x010000, CRC(f1fc1e75) SHA1(f6f1008349505ee0c494fcdde27db2a15147b6cb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 51)" ) +GAME_CUSTOM( 199?, m4rfym__ah, m4rfym, "ru8c.p1", 0x0000, 0x010000, CRC(93290724) SHA1(37b17b08f77b308289d4392900576dc66a0377eb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 C)" ) +GAME_CUSTOM( 199?, m4rfym__ai, m4rfym, "ru8d.p1", 0x0000, 0x010000, CRC(3e7d6ebb) SHA1(a836a52aef9fe4a9021835e99109b7fefb4ead76), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 D)" ) +GAME_CUSTOM( 199?, m4rfym__aj, m4rfym, "ru8dk.p1", 0x0000, 0x010000, CRC(b2983dc1) SHA1(412bf4a643c807371fa465fb5f9a85bc3e46623d), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 KD)" ) +GAME_CUSTOM( 199?, m4rfym__ak, m4rfym, "ru8dy.p1", 0x0000, 0x010000, CRC(7d06cdcc) SHA1(d68f6ee59eb7689df30412288db4e9ee6c4bf178), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 YD)" ) +GAME_CUSTOM( 199?, m4rfym__al, m4rfym, "ru8k.p1", 0x0000, 0x010000, CRC(42f6226e) SHA1(c4bac8efd9c17f96dd9d973e9f64c85ceeacb36b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 K)" ) +GAME_CUSTOM( 199?, m4rfym__an, m4rfym, "ru8y.p1", 0x0000, 0x010000, CRC(f1fc1e75) SHA1(f6f1008349505ee0c494fcdde27db2a15147b6cb), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RU8 0.1 Y)" ) // "(C)1993 BARCREST" and "RUT 0.1" GAME_CUSTOM( 199?, m4rfym__a0, m4rfym, "ruts.p1", 0x0000, 0x010000, CRC(efaf4e03) SHA1(da19d6e28a6727eb9afb69c23fd5685f0dbcc31a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1)" ) -GAME_CUSTOM( 199?, m4rfym__at, m4rfym, "rutad.p1", 0x0000, 0x010000, CRC(f27090c9) SHA1(28b7bb8046f67a3f8b90069de845b0b791b57078), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1AD)" ) -GAME_CUSTOM( 199?, m4rfym__au, m4rfym, "rutb.p1", 0x0000, 0x010000, CRC(cb7a74bf) SHA1(24274c7e3b40642d698f5c3a9a10cfeb23faaf1b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 58)" ) -GAME_CUSTOM( 199?, m4rfym__av, m4rfym, "rutbd.p1", 0x0000, 0x010000, CRC(19aba8f2) SHA1(cb726130837149c25adb5d87718b72259cb63a63), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 59)" ) -GAME_CUSTOM( 199?, m4rfym__aw, m4rfym, "rutd.p1", 0x0000, 0x010000, CRC(16a872bd) SHA1(47ad5eb9b473805e2eb86e0d4d9ef4b2e6e3c926), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 60)" ) -GAME_CUSTOM( 199?, m4rfym__ax, m4rfym, "rutdk.p1", 0x0000, 0x010000, CRC(a8259673) SHA1(443081395ea0c1b0a07e6cd4b17670b3e01bb50f), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 61)" ) -GAME_CUSTOM( 199?, m4rfym__ay, m4rfym, "rutdy.p1", 0x0000, 0x010000, CRC(6b799f68) SHA1(87482236f1116983e80a7f190710524d3809cd3a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 62)" ) -GAME_CUSTOM( 199?, m4rfym__az, m4rfym, "rutk.p1", 0x0000, 0x010000, CRC(20962e5e) SHA1(0be43050d403750b67c796a007b503e132014f4c), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 63)" ) -GAME_CUSTOM( 199?, m4rfym__a1, m4rfym, "ruty.p1", 0x0000, 0x010000, CRC(abb708c5) SHA1(6fe3b52a0ba484576fc83ed35aefeda01d275aec), "Barcrest","Run For Your Money (Barcrest) (MPU4) (set 65)" ) -// "(C)1996 B.W.B." and "RUC 1.3" (hack?) -GAME_CUSTOM( 199?, m4rfym__6, m4rfym, "rfym510l", 0x0000, 0x010000, CRC(24af47f3) SHA1(3d1ec9b013f3f7b497cfb62b42fbb2fa914b24b6), "Bwb","Run For Your Money (Barcrest) (MPU4) (RUC 1.3, hack?, set 1)" ) -GAME_CUSTOM( 199?, m4rfym__a3, m4rfym, "rfym5.10", 0x0000, 0x010000, CRC(c2ce2cc2) SHA1(d5633e01f669ee8772ed77befa90180c6aa0111c), "Bwb","Run For Your Money (Barcrest) (MPU4) (RUC 1.3, hack?, set 2)" ) -// "(C)1996 B.W.B." and "RU4 1.1" (hack?) -GAME_CUSTOM( 199?, m4rfym__a4, m4rfym, "rfym5.4", 0x0000, 0x010000, CRC(fe613006) SHA1(898b90893bfcb121575952c22c16570a27948bce), "Bwb","Run For Your Money (Barcrest) (MPU4) (RU4 1.1, hack?)" ) -// "(C)1996 B.W.B." and "RU8 1.2" (hack?) -GAME_CUSTOM( 199?, m4rfym__a5, m4rfym, "rfym5.8t", 0x0000, 0x010000, CRC(c600718a) SHA1(168fa558f1b5b91fb805d483f3f4351ac80f90ff), "Bwb","Run For Your Money (Barcrest) (MPU4) (RU8 1.2, hack?)" ) +GAME_CUSTOM( 199?, m4rfym__at, m4rfym, "rutad.p1", 0x0000, 0x010000, CRC(f27090c9) SHA1(28b7bb8046f67a3f8b90069de845b0b791b57078), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 AD)" ) +GAME_CUSTOM( 199?, m4rfym__au, m4rfym, "rutb.p1", 0x0000, 0x010000, CRC(cb7a74bf) SHA1(24274c7e3b40642d698f5c3a9a10cfeb23faaf1b), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 B)" ) +GAME_CUSTOM( 199?, m4rfym__av, m4rfym, "rutbd.p1", 0x0000, 0x010000, CRC(19aba8f2) SHA1(cb726130837149c25adb5d87718b72259cb63a63), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 BD)" ) +GAME_CUSTOM( 199?, m4rfym__aw, m4rfym, "rutd.p1", 0x0000, 0x010000, CRC(16a872bd) SHA1(47ad5eb9b473805e2eb86e0d4d9ef4b2e6e3c926), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 D)" ) +GAME_CUSTOM( 199?, m4rfym__ax, m4rfym, "rutdk.p1", 0x0000, 0x010000, CRC(a8259673) SHA1(443081395ea0c1b0a07e6cd4b17670b3e01bb50f), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 KD)" ) +GAME_CUSTOM( 199?, m4rfym__ay, m4rfym, "rutdy.p1", 0x0000, 0x010000, CRC(6b799f68) SHA1(87482236f1116983e80a7f190710524d3809cd3a), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 YD)" ) +GAME_CUSTOM( 199?, m4rfym__az, m4rfym, "rutk.p1", 0x0000, 0x010000, CRC(20962e5e) SHA1(0be43050d403750b67c796a007b503e132014f4c), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 K)" ) +GAME_CUSTOM( 199?, m4rfym__a1, m4rfym, "ruty.p1", 0x0000, 0x010000, CRC(abb708c5) SHA1(6fe3b52a0ba484576fc83ed35aefeda01d275aec), "Barcrest","Run For Your Money (Barcrest) (MPU4) (RUT 0.1 Y)" ) +// "(C)1996 B.W.B." and "RUC 1.3" (but hack?) +GAME_CUSTOM( 199?, m4rfym__6, m4rfym, "rfym510l", 0x0000, 0x010000, CRC(24af47f3) SHA1(3d1ec9b013f3f7b497cfb62b42fbb2fa914b24b6), "hack","Run For Your Money (Barcrest) (MPU4) (RUC 1.3 K5, hack, set 1)" ) +GAME_CUSTOM( 199?, m4rfym__a3, m4rfym, "rfym5.10", 0x0000, 0x010000, CRC(c2ce2cc2) SHA1(d5633e01f669ee8772ed77befa90180c6aa0111c), "hack","Run For Your Money (Barcrest) (MPU4) (RUC 1.3 K5, hack, set 2)" ) +// "(C)1996 B.W.B." and "RU4 1.1" (but hack?) +GAME_CUSTOM( 199?, m4rfym__a4, m4rfym, "rfym5.4", 0x0000, 0x010000, CRC(fe613006) SHA1(898b90893bfcb121575952c22c16570a27948bce), "hack","Run For Your Money (Barcrest) (MPU4) (RU4 1.1 K5, hack, set 1)" ) +// "(C)1996 B.W.B." and "RU8 1.2" (but hack?) +GAME_CUSTOM( 199?, m4rfym__a5, m4rfym, "rfym5.8t", 0x0000, 0x010000, CRC(c600718a) SHA1(168fa558f1b5b91fb805d483f3f4351ac80f90ff), "hack","Run For Your Money (Barcrest) (MPU4) (RU8 1.2 K5, hack)" ) // "BILL AND BEN" and "V1 8 0.1" (hack) -GAME_CUSTOM( 199?, m4rfym__4, m4rfym, "rfym20", 0x0000, 0x010000, CRC(5e1d70e2) SHA1(2da1b8033a77d367c4b5c3d83a0e5def4e5e5d78), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1, hack, set 1)" ) -GAME_CUSTOM( 199?, m4rfym__5, m4rfym, "rfym2010", 0x0000, 0x010000, CRC(ec440e7e) SHA1(21f8d4708b5d779dcefcc1e921a5efe17dd6f8c7), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1, hack, set 2)" ) -GAME_CUSTOM( 199?, m4rfym__a2, m4rfym, "rfym20.10", 0x0000, 0x010000, CRC(947d00d2) SHA1(2c99da689541de247e35ac39eadfe070ac3196b5), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1, hack, set 3)" ) +GAME_CUSTOM( 199?, m4rfym__4, m4rfym, "rfym20", 0x0000, 0x010000, CRC(5e1d70e2) SHA1(2da1b8033a77d367c4b5c3d83a0e5def4e5e5d78), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 1)" ) +GAME_CUSTOM( 199?, m4rfym__5, m4rfym, "rfym2010", 0x0000, 0x010000, CRC(ec440e7e) SHA1(21f8d4708b5d779dcefcc1e921a5efe17dd6f8c7), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 2)" ) +GAME_CUSTOM( 199?, m4rfym__a2, m4rfym, "rfym20.10", 0x0000, 0x010000, CRC(947d00d2) SHA1(2c99da689541de247e35ac39eadfe070ac3196b5), "hack","Run For Your Money (Barcrest) (MPU4) (V1 8 0.1 C, hack, set 3)" ) // "1997 COCO" and "RU4 1.1" (hack) -GAME_CUSTOM( 199?, m4rfym__7, m4rfym, "rfym55", 0x0000, 0x010000, CRC(b7d638d8) SHA1(6064ceffd94ff149d8bcb117fd823de52030ac64), "hack","Run For Your Money (Barcrest) (MPU4) (RU4 1.1, hack)" ) +GAME_CUSTOM( 199?, m4rfym__7, m4rfym, "rfym55", 0x0000, 0x010000, CRC(b7d638d8) SHA1(6064ceffd94ff149d8bcb117fd823de52030ac64), "hack","Run For Your Money (Barcrest) (MPU4) (RU4 1.1 K5, hack, set 2)" ) #define M4READY_EXTRA_ROMS \ ROM_REGION( 0x48, "fakechr", 0 ) \ @@ -1790,86 +1790,86 @@ GAME_CUSTOM( 199?, m4rfym__7, m4rfym, "rfym55", 0x0000, 0x010000, CRC(b // "(C)1991 BARCREST" and "RGO 0.8" GAME_CUSTOM( 199?, m4ready, 0, "rgos.p1", 0x0000, 0x010000, CRC(d00d3540) SHA1(0fd6a08477d05d1c129038c8de47de68a28c0a56), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8)" ) -GAME_CUSTOM( 199?, m4ready__as, m4ready, "rgob.p1", 0x0000, 0x010000, CRC(43ac7b73) SHA1(994d6256432543e1353521359f8faaea671a7bea), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8B)" ) -GAME_CUSTOM( 199?, m4ready__ar, m4ready, "rgok.p1", 0x0000, 0x010000, CRC(00413e8f) SHA1(580efbdf3ba092978648d83b6d21b5a4966d57e3), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8K)" ) -GAME_CUSTOM( 199?, m4ready__at, m4ready, "rgoy.p1", 0x0000, 0x010000, CRC(cfdfce82) SHA1(68464381f658f08efb3f790eea1e7dd61086f936), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8Y)" ) +GAME_CUSTOM( 199?, m4ready__as, m4ready, "rgob.p1", 0x0000, 0x010000, CRC(43ac7b73) SHA1(994d6256432543e1353521359f8faaea671a7bea), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 B)" ) +GAME_CUSTOM( 199?, m4ready__ar, m4ready, "rgok.p1", 0x0000, 0x010000, CRC(00413e8f) SHA1(580efbdf3ba092978648d83b6d21b5a4966d57e3), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 K)" ) +GAME_CUSTOM( 199?, m4ready__at, m4ready, "rgoy.p1", 0x0000, 0x010000, CRC(cfdfce82) SHA1(68464381f658f08efb3f790eea1e7dd61086f936), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 Y)" ) // datapak sets -GAME_CUSTOM( 199?, m4ready__ao, m4ready, "rgod.p1", 0x0000, 0x010000, CRC(f3898077) SHA1(4d2f32b4c3f01a0b54966dd0558dcadcf89fd229), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8D)" ) -GAME_CUSTOM( 199?, m4ready__am, m4ready, "rgoad.p1", 0x0000, 0x010000, CRC(d4ed739c) SHA1(6a7d5f63eaf59f08a8f870aba8523e2dc59d20cd), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8AD)" ) -GAME_CUSTOM( 199?, m4ready__an, m4ready, "rgobd.p1", 0x0000, 0x010000, CRC(0505340c) SHA1(e61b007dc50beb22bf3efa2c3cfab595880d3248), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8BD)" ) -GAME_CUSTOM( 199?, m4ready__ap, m4ready, "rgodk.p1", 0x0000, 0x010000, CRC(9a9b61c7) SHA1(756ed419451d1e070809303467789e01949dea2b), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8KD)" ) -GAME_CUSTOM( 199?, m4ready__aq, m4ready, "rgody.p1", 0x0000, 0x010000, CRC(a0eef0f0) SHA1(781de603d19eab0ee771b10374f53c149432c877), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8YD)" ) +GAME_CUSTOM( 199?, m4ready__ao, m4ready, "rgod.p1", 0x0000, 0x010000, CRC(f3898077) SHA1(4d2f32b4c3f01a0b54966dd0558dcadcf89fd229), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 D)" ) +GAME_CUSTOM( 199?, m4ready__am, m4ready, "rgoad.p1", 0x0000, 0x010000, CRC(d4ed739c) SHA1(6a7d5f63eaf59f08a8f870aba8523e2dc59d20cd), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 AD)" ) +GAME_CUSTOM( 199?, m4ready__an, m4ready, "rgobd.p1", 0x0000, 0x010000, CRC(0505340c) SHA1(e61b007dc50beb22bf3efa2c3cfab595880d3248), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 BD)" ) +GAME_CUSTOM( 199?, m4ready__ap, m4ready, "rgodk.p1", 0x0000, 0x010000, CRC(9a9b61c7) SHA1(756ed419451d1e070809303467789e01949dea2b), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 KD)" ) +GAME_CUSTOM( 199?, m4ready__aq, m4ready, "rgody.p1", 0x0000, 0x010000, CRC(a0eef0f0) SHA1(781de603d19eab0ee771b10374f53c149432c877), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGO 0.8 YD)" ) // "(C)1991 BARCREST" and "CGO 1.1" GAME_CUSTOM( 199?, m4ready__k, m4ready, "cgo11s.p1", 0x0000, 0x010000, CRC(a6b9ddd4) SHA1(b06d5d19b165b82c76b29f7925e0936aeccedb8c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1)" ) -GAME_CUSTOM( 199?, m4ready__b, m4ready, "cgo11b.p1", 0x0000, 0x010000, CRC(2ea96acb) SHA1(ffcf1fcb2b769b29b53b00c9ce80af061cc21b9d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1B)" ) -GAME_CUSTOM( 199?, m4ready__d, m4ready, "cgo11c.p1", 0x0000, 0x010000, CRC(76d36b80) SHA1(2699982fed3c2116ff0187d24059f59d3b6c1cae), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1C)" ) -GAME_CUSTOM( 199?, m4ready__i, m4ready, "cgo11k.p1", 0x0000, 0x010000, CRC(4f46e7f6) SHA1(9485edbcbb3a81b1a335a7c420aa676af8b14050), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1K)" ) -GAME_CUSTOM( 199?, m4ready__j, m4ready, "cgo11r.p1", 0x0000, 0x010000, CRC(f44dd36f) SHA1(6623daaa237e97b9d63815393562fe8abdb8d732), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1R)" ) -GAME_CUSTOM( 199?, m4ready__l, m4ready, "cgo11y.p1", 0x0000, 0x010000, CRC(d91653f6) SHA1(6445958cd07088fbf08c37a8b5540e3eb561d021), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1Y)" ) +GAME_CUSTOM( 199?, m4ready__b, m4ready, "cgo11b.p1", 0x0000, 0x010000, CRC(2ea96acb) SHA1(ffcf1fcb2b769b29b53b00c9ce80af061cc21b9d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 B)" ) +GAME_CUSTOM( 199?, m4ready__d, m4ready, "cgo11c.p1", 0x0000, 0x010000, CRC(76d36b80) SHA1(2699982fed3c2116ff0187d24059f59d3b6c1cae), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 C)" ) +GAME_CUSTOM( 199?, m4ready__i, m4ready, "cgo11k.p1", 0x0000, 0x010000, CRC(4f46e7f6) SHA1(9485edbcbb3a81b1a335a7c420aa676af8b14050), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 K)" ) +GAME_CUSTOM( 199?, m4ready__j, m4ready, "cgo11r.p1", 0x0000, 0x010000, CRC(f44dd36f) SHA1(6623daaa237e97b9d63815393562fe8abdb8d732), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 R)" ) +GAME_CUSTOM( 199?, m4ready__l, m4ready, "cgo11y.p1", 0x0000, 0x010000, CRC(d91653f6) SHA1(6445958cd07088fbf08c37a8b5540e3eb561d021), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 Y)" ) // datapak sets -GAME_CUSTOM( 199?, m4ready__e, m4ready, "cgo11d.p1", 0x0000, 0x010000, CRC(63516954) SHA1(abefafe43e3386a5c916e55503bcb623d74840e1), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1D)" ) -GAME_CUSTOM( 199?, m4ready__a, m4ready, "cgo11ad.p1", 0x0000, 0x010000, CRC(9f8bbdaf) SHA1(210cdc9ce493edbf55d43a3127b10931e3ce2fee), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1AD)" ) -GAME_CUSTOM( 199?, m4ready__c, m4ready, "cgo11bd.p1", 0x0000, 0x010000, CRC(4cabc589) SHA1(2b0b91f4ac6ebd18edb7a913b8079acc9f026e7d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1BD)" ) -GAME_CUSTOM( 199?, m4ready__f, m4ready, "cgo11dk.p1", 0x0000, 0x010000, CRC(84f112ef) SHA1(85fa44c7b25aeb83fa2c199abafe099a8ae92bf8), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1KD)" ) -GAME_CUSTOM( 199?, m4ready__g, m4ready, "cgo11dr.p1", 0x0000, 0x010000, CRC(07d13cf6) SHA1(11685efebf9c7091191654fec1f2ac6ad3d05ce1), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1RD)" ) -GAME_CUSTOM( 199?, m4ready__h, m4ready, "cgo11dy.p1", 0x0000, 0x010000, CRC(13c5b934) SHA1(3212ba2534726c8fca9a70325acff3f6e85dd1f7), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1YD)" ) +GAME_CUSTOM( 199?, m4ready__e, m4ready, "cgo11d.p1", 0x0000, 0x010000, CRC(63516954) SHA1(abefafe43e3386a5c916e55503bcb623d74840e1), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 D)" ) +GAME_CUSTOM( 199?, m4ready__a, m4ready, "cgo11ad.p1", 0x0000, 0x010000, CRC(9f8bbdaf) SHA1(210cdc9ce493edbf55d43a3127b10931e3ce2fee), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 AD)" ) +GAME_CUSTOM( 199?, m4ready__c, m4ready, "cgo11bd.p1", 0x0000, 0x010000, CRC(4cabc589) SHA1(2b0b91f4ac6ebd18edb7a913b8079acc9f026e7d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 BD)" ) +GAME_CUSTOM( 199?, m4ready__f, m4ready, "cgo11dk.p1", 0x0000, 0x010000, CRC(84f112ef) SHA1(85fa44c7b25aeb83fa2c199abafe099a8ae92bf8), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 KD)" ) +GAME_CUSTOM( 199?, m4ready__g, m4ready, "cgo11dr.p1", 0x0000, 0x010000, CRC(07d13cf6) SHA1(11685efebf9c7091191654fec1f2ac6ad3d05ce1), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 RD)" ) +GAME_CUSTOM( 199?, m4ready__h, m4ready, "cgo11dy.p1", 0x0000, 0x010000, CRC(13c5b934) SHA1(3212ba2534726c8fca9a70325acff3f6e85dd1f7), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (CGO 1.1 YD)" ) // "(C)1991 BARCREST" and "DRR 0.2" GAME_CUSTOM( 199?, m4ready__w, m4ready, "drr02s.p1", 0x0000, 0x010000, CRC(67b03b7f) SHA1(61e09db8b7622e6e094c4e585dbcfea724155829), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2)" ) -GAME_CUSTOM( 199?, m4ready__n, m4ready, "drr02b.p1", 0x0000, 0x010000, CRC(729e13c9) SHA1(dcefdd44592464616570101a5e05db31289fc66c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2B)" ) -GAME_CUSTOM( 199?, m4ready__p, m4ready, "drr02c.p1", 0x0000, 0x010000, CRC(258acbf9) SHA1(ced9dbef9162ddadb4838ad430d50aa14574e97d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2C)" ) -GAME_CUSTOM( 199?, m4ready__u, m4ready, "drr02k.p1", 0x0000, 0x010000, CRC(525e370e) SHA1(9849399643731beb31b7163b7eebd8774caf9289), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2K)" ) -GAME_CUSTOM( 199?, m4ready__v, m4ready, "drr02r.p1", 0x0000, 0x010000, CRC(352613a0) SHA1(052e7770d55dd379d1bf3501e46d973bc4fc48d8), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2R)" ) -GAME_CUSTOM( 199?, m4ready__x, m4ready, "drr02y.p1", 0x0000, 0x010000, CRC(009c7ece) SHA1(48463d7d0e521d51bad83ac5ddaaffabc68bf610), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2Y)" ) +GAME_CUSTOM( 199?, m4ready__n, m4ready, "drr02b.p1", 0x0000, 0x010000, CRC(729e13c9) SHA1(dcefdd44592464616570101a5e05db31289fc66c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 B)" ) +GAME_CUSTOM( 199?, m4ready__p, m4ready, "drr02c.p1", 0x0000, 0x010000, CRC(258acbf9) SHA1(ced9dbef9162ddadb4838ad430d50aa14574e97d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 C)" ) +GAME_CUSTOM( 199?, m4ready__u, m4ready, "drr02k.p1", 0x0000, 0x010000, CRC(525e370e) SHA1(9849399643731beb31b7163b7eebd8774caf9289), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 K)" ) +GAME_CUSTOM( 199?, m4ready__v, m4ready, "drr02r.p1", 0x0000, 0x010000, CRC(352613a0) SHA1(052e7770d55dd379d1bf3501e46d973bc4fc48d8), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 R)" ) +GAME_CUSTOM( 199?, m4ready__x, m4ready, "drr02y.p1", 0x0000, 0x010000, CRC(009c7ece) SHA1(48463d7d0e521d51bad83ac5ddaaffabc68bf610), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 Y)" ) // datapak sets -GAME_CUSTOM( 199?, m4ready__q, m4ready, "drr02d.p1", 0x0000, 0x010000, CRC(60940b5a) SHA1(a4d293944e0e65f99dea9391d9d7e1066aa7b83d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2D)" ) -GAME_CUSTOM( 199?, m4ready__m, m4ready, "drr02ad.p1", 0x0000, 0x010000, CRC(5acc5189) SHA1(abf66b90f4a64c3fb9ac4bf16f3bba2758f54482), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2AD)" ) -GAME_CUSTOM( 199?, m4ready__o, m4ready, "drr02bd.p1", 0x0000, 0x010000, CRC(70c5b183) SHA1(b1431d0c2c48941d1ff6d6115c8d1ab026d71f63), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2BD)" ) -GAME_CUSTOM( 199?, m4ready__r, m4ready, "drr02dk.p1", 0x0000, 0x010000, CRC(0335775e) SHA1(4d943c3e522f5c42ddd2104c316f75eec90f494f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2KD)" ) -GAME_CUSTOM( 199?, m4ready__s, m4ready, "drr02dr.p1", 0x0000, 0x010000, CRC(c05eef66) SHA1(ac5966ea0ff036d9c9179df6bc7aabd149f41d6c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2RD)" ) -GAME_CUSTOM( 199?, m4ready__t, m4ready, "drr02dy.p1", 0x0000, 0x010000, CRC(6a700473) SHA1(4025a99aa9e87a80875d150e965650d339d2a143), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2YD)" ) +GAME_CUSTOM( 199?, m4ready__q, m4ready, "drr02d.p1", 0x0000, 0x010000, CRC(60940b5a) SHA1(a4d293944e0e65f99dea9391d9d7e1066aa7b83d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 D)" ) +GAME_CUSTOM( 199?, m4ready__m, m4ready, "drr02ad.p1", 0x0000, 0x010000, CRC(5acc5189) SHA1(abf66b90f4a64c3fb9ac4bf16f3bba2758f54482), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 AD)" ) +GAME_CUSTOM( 199?, m4ready__o, m4ready, "drr02bd.p1", 0x0000, 0x010000, CRC(70c5b183) SHA1(b1431d0c2c48941d1ff6d6115c8d1ab026d71f63), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 BD)" ) +GAME_CUSTOM( 199?, m4ready__r, m4ready, "drr02dk.p1", 0x0000, 0x010000, CRC(0335775e) SHA1(4d943c3e522f5c42ddd2104c316f75eec90f494f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 KD)" ) +GAME_CUSTOM( 199?, m4ready__s, m4ready, "drr02dr.p1", 0x0000, 0x010000, CRC(c05eef66) SHA1(ac5966ea0ff036d9c9179df6bc7aabd149f41d6c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 RD)" ) +GAME_CUSTOM( 199?, m4ready__t, m4ready, "drr02dy.p1", 0x0000, 0x010000, CRC(6a700473) SHA1(4025a99aa9e87a80875d150e965650d339d2a143), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (DRR 0.2 YD)" ) // "(C)1991 BARCREST" and "HJJ 0.1" GAME_CUSTOM( 199?, m4ready__y, m4ready, "hjj.hex", 0x0000, 0x010000, CRC(48ab2375) SHA1(4d9360a89e97a6bb7bdb099940d73f425eadd63d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.1)" ) // "(C)1991 BARCREST" and "HJJ 0.2" GAME_CUSTOM( 199?, m4ready__9, m4ready, "hjj02s.p1", 0x0000, 0x010000, CRC(39de9801) SHA1(c29e883c45ed6b272d65c7922b1871199a424244), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2)" ) -GAME_CUSTOM( 199?, m4ready__0, m4ready, "hjj02b.p1", 0x0000, 0x010000, CRC(778ec121) SHA1(98454562da1da56d57ce3e6279805207671d7337), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2B)" ) -GAME_CUSTOM( 199?, m4ready__2, m4ready, "hjj02c.p1", 0x0000, 0x010000, CRC(fbb149fc) SHA1(6a8305a3ef4a1818a12dab3d380e79b7e642a904), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2C)" ) -GAME_CUSTOM( 199?, m4ready__7, m4ready, "hjj02k.p1", 0x0000, 0x010000, CRC(c224c58a) SHA1(5f9b5ff92e2f1b0438380d635b255ec8b4fc080f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2K)" ) -GAME_CUSTOM( 199?, m4ready__8, m4ready, "hjj02r.p1", 0x0000, 0x010000, CRC(32fefefe) SHA1(f58e228a1496b0858903c2d850c8453835b6f24b), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2R)" ) -GAME_CUSTOM( 199?, m4ready__aa, m4ready, "hjj02y.p1", 0x0000, 0x010000, CRC(0178cc91) SHA1(d618ff2eb0a1992b88f3b5427ffc54d34bf8c124), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2Y)" ) +GAME_CUSTOM( 199?, m4ready__0, m4ready, "hjj02b.p1", 0x0000, 0x010000, CRC(778ec121) SHA1(98454562da1da56d57ce3e6279805207671d7337), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 B)" ) +GAME_CUSTOM( 199?, m4ready__2, m4ready, "hjj02c.p1", 0x0000, 0x010000, CRC(fbb149fc) SHA1(6a8305a3ef4a1818a12dab3d380e79b7e642a904), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 C)" ) +GAME_CUSTOM( 199?, m4ready__7, m4ready, "hjj02k.p1", 0x0000, 0x010000, CRC(c224c58a) SHA1(5f9b5ff92e2f1b0438380d635b255ec8b4fc080f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 K)" ) +GAME_CUSTOM( 199?, m4ready__8, m4ready, "hjj02r.p1", 0x0000, 0x010000, CRC(32fefefe) SHA1(f58e228a1496b0858903c2d850c8453835b6f24b), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 R)" ) +GAME_CUSTOM( 199?, m4ready__aa, m4ready, "hjj02y.p1", 0x0000, 0x010000, CRC(0178cc91) SHA1(d618ff2eb0a1992b88f3b5427ffc54d34bf8c124), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 Y)" ) // datapak sets -GAME_CUSTOM( 199?, m4ready__3, m4ready, "hjj02d.p1", 0x0000, 0x010000, CRC(9e657e28) SHA1(3eaf9f8a0511f4533e9b47105d4417c71248fab2), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2D)" ) -GAME_CUSTOM( 199?, m4ready__z, m4ready, "hjj02ad.p1", 0x0000, 0x010000, CRC(9f787e01) SHA1(d6cae1c1ae15b74285076e87c7fd8105f6a114ae), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2AD)" ) -GAME_CUSTOM( 199?, m4ready__1, m4ready, "hjj02bd.p1", 0x0000, 0x010000, CRC(7e8dbab0) SHA1(5b40536503b2d62792f874535367f5658acf8d2e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2BD)" ) -GAME_CUSTOM( 199?, m4ready__4, m4ready, "hjj02dk.p1", 0x0000, 0x010000, CRC(2e1bab77) SHA1(76a2784bc183c6d79a845bb7306eae687ced82a0), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2KD)" ) -GAME_CUSTOM( 199?, m4ready__5, m4ready, "hjj02dr.p1", 0x0000, 0x010000, CRC(9d26064f) SHA1(6596b3a671ab8e38b8357023f8994948ef1c1f0f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2RD)" ) -GAME_CUSTOM( 199?, m4ready__6, m4ready, "hjj02dy.p1", 0x0000, 0x010000, CRC(0ab388b6) SHA1(cc8f157a8a91e3fb8bd1fbdd35989d72c8684c50), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2YD)" ) +GAME_CUSTOM( 199?, m4ready__3, m4ready, "hjj02d.p1", 0x0000, 0x010000, CRC(9e657e28) SHA1(3eaf9f8a0511f4533e9b47105d4417c71248fab2), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 D)" ) +GAME_CUSTOM( 199?, m4ready__z, m4ready, "hjj02ad.p1", 0x0000, 0x010000, CRC(9f787e01) SHA1(d6cae1c1ae15b74285076e87c7fd8105f6a114ae), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 AD)" ) +GAME_CUSTOM( 199?, m4ready__1, m4ready, "hjj02bd.p1", 0x0000, 0x010000, CRC(7e8dbab0) SHA1(5b40536503b2d62792f874535367f5658acf8d2e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 BD)" ) +GAME_CUSTOM( 199?, m4ready__4, m4ready, "hjj02dk.p1", 0x0000, 0x010000, CRC(2e1bab77) SHA1(76a2784bc183c6d79a845bb7306eae687ced82a0), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 KD)" ) +GAME_CUSTOM( 199?, m4ready__5, m4ready, "hjj02dr.p1", 0x0000, 0x010000, CRC(9d26064f) SHA1(6596b3a671ab8e38b8357023f8994948ef1c1f0f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 RD)" ) +GAME_CUSTOM( 199?, m4ready__6, m4ready, "hjj02dy.p1", 0x0000, 0x010000, CRC(0ab388b6) SHA1(cc8f157a8a91e3fb8bd1fbdd35989d72c8684c50), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (HJJ 0.2 YD)" ) // "(C)1991 BARCREST" and "PPL 0.2" GAME_CUSTOM( 199?, m4ready__ak, m4ready, "ppl02s.p1", 0x0000, 0x010000, CRC(40c1d256) SHA1(abd55dcc06b49d54976743c610ad3de21278ac2d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2)" ) -GAME_CUSTOM( 199?, m4ready__ac, m4ready, "ppl02b.p1", 0x0000, 0x010000, CRC(dbd56cf1) SHA1(968c1d09626e493c51d7637e19a7f092047b283f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2B)" ) -GAME_CUSTOM( 199?, m4ready__ae, m4ready, "ppl02c.p1", 0x0000, 0x010000, CRC(ad6f5c6d) SHA1(91f3d7bad3cdb7014ff3caa1631e6567cb95f47e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2C)" ) -GAME_CUSTOM( 199?, m4ready__ai, m4ready, "ppl02k.p1", 0x0000, 0x010000, CRC(7fcc03d7) SHA1(359743edec7ca54bd9a780f81ac25d314ada2d7e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2K)" ) -GAME_CUSTOM( 199?, m4ready__aj, m4ready, "ppl02r.p1", 0x0000, 0x010000, CRC(e35580e3) SHA1(397bd2ce068aa45f3c55a3ddd97ae3e09391a7da), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2R)" ) -GAME_CUSTOM( 199?, m4ready__al, m4ready, "ppl02y.p1", 0x0000, 0x010000, CRC(7802f70c) SHA1(c96758c02bebff4b85436a93ae012c80c6cb2963), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2Y)" ) +GAME_CUSTOM( 199?, m4ready__ac, m4ready, "ppl02b.p1", 0x0000, 0x010000, CRC(dbd56cf1) SHA1(968c1d09626e493c51d7637e19a7f092047b283f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 B)" ) +GAME_CUSTOM( 199?, m4ready__ae, m4ready, "ppl02c.p1", 0x0000, 0x010000, CRC(ad6f5c6d) SHA1(91f3d7bad3cdb7014ff3caa1631e6567cb95f47e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 C)" ) +GAME_CUSTOM( 199?, m4ready__ai, m4ready, "ppl02k.p1", 0x0000, 0x010000, CRC(7fcc03d7) SHA1(359743edec7ca54bd9a780f81ac25d314ada2d7e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 K)" ) +GAME_CUSTOM( 199?, m4ready__aj, m4ready, "ppl02r.p1", 0x0000, 0x010000, CRC(e35580e3) SHA1(397bd2ce068aa45f3c55a3ddd97ae3e09391a7da), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 R)" ) +GAME_CUSTOM( 199?, m4ready__al, m4ready, "ppl02y.p1", 0x0000, 0x010000, CRC(7802f70c) SHA1(c96758c02bebff4b85436a93ae012c80c6cb2963), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 Y)" ) // datapak sets -GAME_CUSTOM( 199?, m4ready__af, m4ready, "ppl02d.p1", 0x0000, 0x010000, CRC(041f0fd8) SHA1(8e32c88f7b0a541a9460926a2fec0318a7239279), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2D)" ) -GAME_CUSTOM( 199?, m4ready__ab, m4ready, "ppl02ad.p1", 0x0000, 0x010000, CRC(d8b3be27) SHA1(95d1d979b439303817670fd686b5df324feb618f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2AD)" ) -GAME_CUSTOM( 199?, m4ready__ad, m4ready, "ppl02bd.p1", 0x0000, 0x010000, CRC(eeafd36d) SHA1(68c314e937d24a59ca305facc409218c63bef24e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2BD)" ) -GAME_CUSTOM( 199?, m4ready__ag, m4ready, "ppl02dk.p1", 0x0000, 0x010000, CRC(632ecd46) SHA1(9e90279db99aa22923a79e309b053b35b70c9f8e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2KD)" ) -GAME_CUSTOM( 199?, m4ready__ah, m4ready, "ppl02dy.p1", 0x0000, 0x010000, CRC(4fb07726) SHA1(f234018ea18511217d176023b489254cf5a5a15e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2YD)" ) +GAME_CUSTOM( 199?, m4ready__af, m4ready, "ppl02d.p1", 0x0000, 0x010000, CRC(041f0fd8) SHA1(8e32c88f7b0a541a9460926a2fec0318a7239279), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 D)" ) +GAME_CUSTOM( 199?, m4ready__ab, m4ready, "ppl02ad.p1", 0x0000, 0x010000, CRC(d8b3be27) SHA1(95d1d979b439303817670fd686b5df324feb618f), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 AD)" ) +GAME_CUSTOM( 199?, m4ready__ad, m4ready, "ppl02bd.p1", 0x0000, 0x010000, CRC(eeafd36d) SHA1(68c314e937d24a59ca305facc409218c63bef24e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 BD)" ) +GAME_CUSTOM( 199?, m4ready__ag, m4ready, "ppl02dk.p1", 0x0000, 0x010000, CRC(632ecd46) SHA1(9e90279db99aa22923a79e309b053b35b70c9f8e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 KD)" ) +GAME_CUSTOM( 199?, m4ready__ah, m4ready, "ppl02dy.p1", 0x0000, 0x010000, CRC(4fb07726) SHA1(f234018ea18511217d176023b489254cf5a5a15e), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (PPL 0.2 YD)" ) // "(C)1991 BARCREST" and "RGT 1.0" GAME_CUSTOM( 199?, m4ready__a4, m4ready, "rgt10s.p1", 0x0000, 0x010000, CRC(dd289204) SHA1(431f73cb45d248c672c50dc8fbc579209e41207d), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0)" ) -GAME_CUSTOM( 199?, m4ready__av, m4ready, "rgt10b.p1", 0x0000, 0x010000, CRC(5d86b45a) SHA1(a7553848a1e4304acaf72f9d293123ca2af629f0), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0B)" ) -GAME_CUSTOM( 199?, m4ready__ax, m4ready, "rgt10c.p1", 0x0000, 0x010000, CRC(91f28aa6) SHA1(42c21d11df3145a0919f7aef53a5621b2beca353), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0C)" ) -GAME_CUSTOM( 199?, m4ready__a2, m4ready, "rgt10k.p1", 0x0000, 0x010000, CRC(78d6eff1) SHA1(d3172ffc9ef3a4f60680081d993e1487e4229625), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0K)" ) -GAME_CUSTOM( 199?, m4ready__a3, m4ready, "rgt10r.p1", 0x0000, 0x010000, CRC(1992945e) SHA1(716b62ca8edc5523fd83355e650982b50b4f9458), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0R)" ) -GAME_CUSTOM( 199?, m4ready__a5, m4ready, "rgt10y.p1", 0x0000, 0x010000, CRC(8dab3aca) SHA1(0fe8f87a17acd8df0b7b75b852b58eb1e273eb27), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0Y)" ) +GAME_CUSTOM( 199?, m4ready__av, m4ready, "rgt10b.p1", 0x0000, 0x010000, CRC(5d86b45a) SHA1(a7553848a1e4304acaf72f9d293123ca2af629f0), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 B)" ) +GAME_CUSTOM( 199?, m4ready__ax, m4ready, "rgt10c.p1", 0x0000, 0x010000, CRC(91f28aa6) SHA1(42c21d11df3145a0919f7aef53a5621b2beca353), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 C)" ) +GAME_CUSTOM( 199?, m4ready__a2, m4ready, "rgt10k.p1", 0x0000, 0x010000, CRC(78d6eff1) SHA1(d3172ffc9ef3a4f60680081d993e1487e4229625), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 K)" ) +GAME_CUSTOM( 199?, m4ready__a3, m4ready, "rgt10r.p1", 0x0000, 0x010000, CRC(1992945e) SHA1(716b62ca8edc5523fd83355e650982b50b4f9458), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 R)" ) +GAME_CUSTOM( 199?, m4ready__a5, m4ready, "rgt10y.p1", 0x0000, 0x010000, CRC(8dab3aca) SHA1(0fe8f87a17acd8df0b7b75b852b58eb1e273eb27), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 Y)" ) // datapak sets -GAME_CUSTOM( 199?, m4ready__ay, m4ready, "rgt10d.p1", 0x0000, 0x010000, CRC(abd4a67e) SHA1(183746cd2cd661587854a80ad5455074fcf143cc), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0D)" ) -GAME_CUSTOM( 199?, m4ready__au, m4ready, "rgt10ad.p1", 0x0000, 0x010000, CRC(22f65e05) SHA1(d488e4c65059b3b7e8e88e39a05e0cc9eae2d836), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0AD)" ) -GAME_CUSTOM( 199?, m4ready__aw, m4ready, "rgt10bd.p1", 0x0000, 0x010000, CRC(6280594e) SHA1(d2b666aaac8ebe94bfab1c4404d0e42bd6c8b176), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0BD)" ) -GAME_CUSTOM( 199?, m4ready__az, m4ready, "rgt10dk.p1", 0x0000, 0x010000, CRC(63ee9525) SHA1(e1fa5348672d05149e6ab26f31af047e38192f2c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0KD)" ) -GAME_CUSTOM( 199?, m4ready__a0, m4ready, "rgt10dr.p1", 0x0000, 0x010000, CRC(481ffebc) SHA1(3608faa929b703d2e45ea37b4f7051d5bb37f073), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0RD)" ) -GAME_CUSTOM( 199?, m4ready__a1, m4ready, "rgt10dy.p1", 0x0000, 0x010000, CRC(fe2498e9) SHA1(bd81c775daf860c2484af88a8b11b75df00ccaaa), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0YD)" ) +GAME_CUSTOM( 199?, m4ready__ay, m4ready, "rgt10d.p1", 0x0000, 0x010000, CRC(abd4a67e) SHA1(183746cd2cd661587854a80ad5455074fcf143cc), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 D)" ) +GAME_CUSTOM( 199?, m4ready__au, m4ready, "rgt10ad.p1", 0x0000, 0x010000, CRC(22f65e05) SHA1(d488e4c65059b3b7e8e88e39a05e0cc9eae2d836), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 AD)" ) +GAME_CUSTOM( 199?, m4ready__aw, m4ready, "rgt10bd.p1", 0x0000, 0x010000, CRC(6280594e) SHA1(d2b666aaac8ebe94bfab1c4404d0e42bd6c8b176), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 BD)" ) +GAME_CUSTOM( 199?, m4ready__az, m4ready, "rgt10dk.p1", 0x0000, 0x010000, CRC(63ee9525) SHA1(e1fa5348672d05149e6ab26f31af047e38192f2c), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 KD)" ) +GAME_CUSTOM( 199?, m4ready__a0, m4ready, "rgt10dr.p1", 0x0000, 0x010000, CRC(481ffebc) SHA1(3608faa929b703d2e45ea37b4f7051d5bb37f073), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 RD)" ) +GAME_CUSTOM( 199?, m4ready__a1, m4ready, "rgt10dy.p1", 0x0000, 0x010000, CRC(fe2498e9) SHA1(bd81c775daf860c2484af88a8b11b75df00ccaaa), "Barcrest","Ready Steady Go (Barcrest) (type 2) (MPU4) (RGT 1.0 YD)" ) #define M4MAG7S_EXTRA_ROMS \ @@ -1889,35 +1889,35 @@ GAME_CUSTOM( 199?, m4ready__a1, m4ready, "rgt10dy.p1", 0x0000, 0x010000, CR // "(C)1993 BARCREST" and "MAS 1.2" GAME_CUSTOM( 199?, m4mag7s, 0, "mas12s.p1", 0x0000, 0x020000, CRC(0a94e574) SHA1(e4516638fb7f783e79cfcdbbef1188965351eae2), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2)" ) -GAME_CUSTOM( 199?, m4mag7s__ag, m4mag7s, "mas12y.p1", 0x0000, 0x020000, CRC(5f012d8e) SHA1(069b493285df9ac3639c43349245a77890333dcc), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 1)" ) -GAME_CUSTOM( 199?, m4mag7s__4, m4mag7s, "mas12ad.p1", 0x0000, 0x020000, CRC(46c6522a) SHA1(e8bfa00afb0e07c524023a92c715f191ad26e759), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4mag7s__5, m4mag7s, "mas12b.p1", 0x0000, 0x020000, CRC(9225a526) SHA1(7c9139c45ddfbcbbabf59c28f17d19ce3b8f7c05), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4mag7s__6, m4mag7s, "mas12bd.p1", 0x0000, 0x020000, CRC(cbdcfcef) SHA1(11eb24b04535e8fc922bc802ab2f8af5e70881d5), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4mag7s__7, m4mag7s, "mas12c.p1", 0x0000, 0x020000, CRC(a56f1834) SHA1(9a3bcca0ff62100a36b1de06c621108910da51d8), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 35)" ) -GAME_CUSTOM( 199?, m4mag7s__8, m4mag7s, "mas12d.p1", 0x0000, 0x020000, CRC(ef3eae50) SHA1(0eb26a6ffc963a84bfb11934bd9c1fecfec15f2a), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 36)" ) -GAME_CUSTOM( 199?, m4mag7s__9, m4mag7s, "mas12dh.p1", 0x0000, 0x020000, CRC(0530acac) SHA1(43d73351b5002afbc0e14c49056c7cac17c93854), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4mag7s__aa, m4mag7s, "mas12dk.p1", 0x0000, 0x020000, CRC(811b54b9) SHA1(c54b50b64856615eb362e0de889b7d758866ee77), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4mag7s__ab, m4mag7s, "mas12dr.p1", 0x0000, 0x020000, CRC(3214ef88) SHA1(8f0ab310363882c92fb4d58197ee093822e9611c), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4mag7s__ac, m4mag7s, "mas12dy.p1", 0x0000, 0x020000, CRC(06f87447) SHA1(9df82a89c9846eb51a3719870b91dd675a97cbe6), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4mag7s__ad, m4mag7s, "mas12h.p1", 0x0000, 0x020000, CRC(5cc9f565) SHA1(833c77ebd895e884430193d14edf0882b5bc5a75), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4mag7s__ae, m4mag7s, "mas12k.p1", 0x0000, 0x020000, CRC(d8e20d70) SHA1(a411a06b89ff21ad7f55196f80dd2766a99bfc21), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 42)" ) -GAME_CUSTOM( 199?, m4mag7s__af, m4mag7s, "mas12r.p1", 0x0000, 0x020000, CRC(6bedb641) SHA1(39b5a8dfb581ae6ed209c6f2a12c06b38ad861a3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 43)" ) +GAME_CUSTOM( 199?, m4mag7s__ag, m4mag7s, "mas12y.p1", 0x0000, 0x020000, CRC(5f012d8e) SHA1(069b493285df9ac3639c43349245a77890333dcc), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 Y)" ) +GAME_CUSTOM( 199?, m4mag7s__4, m4mag7s, "mas12ad.p1", 0x0000, 0x020000, CRC(46c6522a) SHA1(e8bfa00afb0e07c524023a92c715f191ad26e759), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 AD)" ) +GAME_CUSTOM( 199?, m4mag7s__5, m4mag7s, "mas12b.p1", 0x0000, 0x020000, CRC(9225a526) SHA1(7c9139c45ddfbcbbabf59c28f17d19ce3b8f7c05), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 B)" ) +GAME_CUSTOM( 199?, m4mag7s__6, m4mag7s, "mas12bd.p1", 0x0000, 0x020000, CRC(cbdcfcef) SHA1(11eb24b04535e8fc922bc802ab2f8af5e70881d5), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 BD)" ) +GAME_CUSTOM( 199?, m4mag7s__7, m4mag7s, "mas12c.p1", 0x0000, 0x020000, CRC(a56f1834) SHA1(9a3bcca0ff62100a36b1de06c621108910da51d8), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 C)" ) +GAME_CUSTOM( 199?, m4mag7s__8, m4mag7s, "mas12d.p1", 0x0000, 0x020000, CRC(ef3eae50) SHA1(0eb26a6ffc963a84bfb11934bd9c1fecfec15f2a), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 D)" ) +GAME_CUSTOM( 199?, m4mag7s__9, m4mag7s, "mas12dh.p1", 0x0000, 0x020000, CRC(0530acac) SHA1(43d73351b5002afbc0e14c49056c7cac17c93854), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 DH)" ) +GAME_CUSTOM( 199?, m4mag7s__aa, m4mag7s, "mas12dk.p1", 0x0000, 0x020000, CRC(811b54b9) SHA1(c54b50b64856615eb362e0de889b7d758866ee77), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 KD)" ) +GAME_CUSTOM( 199?, m4mag7s__ab, m4mag7s, "mas12dr.p1", 0x0000, 0x020000, CRC(3214ef88) SHA1(8f0ab310363882c92fb4d58197ee093822e9611c), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 RD)" ) +GAME_CUSTOM( 199?, m4mag7s__ac, m4mag7s, "mas12dy.p1", 0x0000, 0x020000, CRC(06f87447) SHA1(9df82a89c9846eb51a3719870b91dd675a97cbe6), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 YD)" ) +GAME_CUSTOM( 199?, m4mag7s__ad, m4mag7s, "mas12h.p1", 0x0000, 0x020000, CRC(5cc9f565) SHA1(833c77ebd895e884430193d14edf0882b5bc5a75), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 H)" ) +GAME_CUSTOM( 199?, m4mag7s__ae, m4mag7s, "mas12k.p1", 0x0000, 0x020000, CRC(d8e20d70) SHA1(a411a06b89ff21ad7f55196f80dd2766a99bfc21), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 K)" ) +GAME_CUSTOM( 199?, m4mag7s__af, m4mag7s, "mas12r.p1", 0x0000, 0x020000, CRC(6bedb641) SHA1(39b5a8dfb581ae6ed209c6f2a12c06b38ad861a3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MAS 1.2 R)" ) // "(C)1993 BARCREST" and "MA7 1.4" GAME_CUSTOM( 199?, m4mag7s__a, m4mag7s, "ma714s", 0x0000, 0x020000, CRC(9c1d4f97) SHA1(7875f044f992b313f4dfaae2e7b604baf16387a3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.4)" ) // "(C)1993 BARCREST" and "MA7 1.5" GAME_CUSTOM( 199?, m4mag7s__m, m4mag7s, "ma715s.p1", 0x0000, 0x020000, CRC(6518c171) SHA1(df884c875f3cfb8e12fb35550dd1f5b331e4b204), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5)" ) -GAME_CUSTOM( 199?, m4mag7s__b, m4mag7s, "ma715ad.p1", 0x0000, 0x020000, CRC(f807cc3f) SHA1(d402a1bf6b9a69d26b0806da83d6a943760aa6ed), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4mag7s__c, m4mag7s, "ma715b.p1", 0x0000, 0x020000, CRC(bedfd8b5) SHA1(a2bcd42e7163779aa7bb74ddc4a44d07f1179994), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4mag7s__d, m4mag7s, "ma715bd.p1", 0x0000, 0x020000, CRC(b2c06469) SHA1(00ed3998c24c7f03fc270e3025d3815163b6ff38), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4mag7s__e, m4mag7s, "ma715d.p1", 0x0000, 0x020000, CRC(9d4c2afe) SHA1(2833f9de808b2630ca67405098c3c502d597b6ca), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4mag7s__f, m4mag7s, "ma715dh.p1", 0x0000, 0x020000, CRC(9615f2ba) SHA1(ac6bc67bc740b6efd3050f9f5bc553acc25d9be6), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4mag7s__g, m4mag7s, "ma715dk.p1", 0x0000, 0x020000, CRC(4b08770e) SHA1(e748b800804cd2505d10e5e7168a3dffaf007c7c), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4mag7s__h, m4mag7s, "ma715dr.p1", 0x0000, 0x020000, CRC(d1e6a9b7) SHA1(d5c67cbc07931831159c801e0f4abfdc477980b8), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4mag7s__i, m4mag7s, "ma715dy.p1", 0x0000, 0x020000, CRC(7fe4ecc1) SHA1(ce4abc96d8d50683bee31c9bce7835dd76065a9b), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4mag7s__j, m4mag7s, "ma715h.p1", 0x0000, 0x020000, CRC(9a0a4e66) SHA1(ef8acb1f2deda724ff7b2850b1ce7a09f88ac011), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4mag7s__k, m4mag7s, "ma715k.p1", 0x0000, 0x020000, CRC(4717cbd2) SHA1(b88b17dda9e16ecbcce55bdb99c23d9e8267b7b9), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4mag7s__l, m4mag7s, "ma715r.p1", 0x0000, 0x020000, CRC(ddf9156b) SHA1(b8fb10944d910cd72a3268a80e8cd1b07dbee8f3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4mag7s__n, m4mag7s, "ma715y.p1", 0x0000, 0x020000, CRC(73fb501d) SHA1(2449da89e811ebf27970a8a9336107f85d876229), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 15)" ) +GAME_CUSTOM( 199?, m4mag7s__b, m4mag7s, "ma715ad.p1", 0x0000, 0x020000, CRC(f807cc3f) SHA1(d402a1bf6b9a69d26b0806da83d6a943760aa6ed), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 AD)" ) +GAME_CUSTOM( 199?, m4mag7s__c, m4mag7s, "ma715b.p1", 0x0000, 0x020000, CRC(bedfd8b5) SHA1(a2bcd42e7163779aa7bb74ddc4a44d07f1179994), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 B)" ) +GAME_CUSTOM( 199?, m4mag7s__d, m4mag7s, "ma715bd.p1", 0x0000, 0x020000, CRC(b2c06469) SHA1(00ed3998c24c7f03fc270e3025d3815163b6ff38), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 BD)" ) +GAME_CUSTOM( 199?, m4mag7s__e, m4mag7s, "ma715d.p1", 0x0000, 0x020000, CRC(9d4c2afe) SHA1(2833f9de808b2630ca67405098c3c502d597b6ca), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 D)" ) +GAME_CUSTOM( 199?, m4mag7s__f, m4mag7s, "ma715dh.p1", 0x0000, 0x020000, CRC(9615f2ba) SHA1(ac6bc67bc740b6efd3050f9f5bc553acc25d9be6), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 DH)" ) +GAME_CUSTOM( 199?, m4mag7s__g, m4mag7s, "ma715dk.p1", 0x0000, 0x020000, CRC(4b08770e) SHA1(e748b800804cd2505d10e5e7168a3dffaf007c7c), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 KD)" ) +GAME_CUSTOM( 199?, m4mag7s__h, m4mag7s, "ma715dr.p1", 0x0000, 0x020000, CRC(d1e6a9b7) SHA1(d5c67cbc07931831159c801e0f4abfdc477980b8), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 RD)" ) +GAME_CUSTOM( 199?, m4mag7s__i, m4mag7s, "ma715dy.p1", 0x0000, 0x020000, CRC(7fe4ecc1) SHA1(ce4abc96d8d50683bee31c9bce7835dd76065a9b), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 YD)" ) +GAME_CUSTOM( 199?, m4mag7s__j, m4mag7s, "ma715h.p1", 0x0000, 0x020000, CRC(9a0a4e66) SHA1(ef8acb1f2deda724ff7b2850b1ce7a09f88ac011), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 H)" ) +GAME_CUSTOM( 199?, m4mag7s__k, m4mag7s, "ma715k.p1", 0x0000, 0x020000, CRC(4717cbd2) SHA1(b88b17dda9e16ecbcce55bdb99c23d9e8267b7b9), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 K)" ) +GAME_CUSTOM( 199?, m4mag7s__l, m4mag7s, "ma715r.p1", 0x0000, 0x020000, CRC(ddf9156b) SHA1(b8fb10944d910cd72a3268a80e8cd1b07dbee8f3), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 R)" ) +GAME_CUSTOM( 199?, m4mag7s__n, m4mag7s, "ma715y.p1", 0x0000, 0x020000, CRC(73fb501d) SHA1(2449da89e811ebf27970a8a9336107f85d876229), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.5 Y)" ) // "(C)1993 BARCREST" and "MA7 1.6" GAME_CUSTOM( 199?, m4mag7s__z, m4mag7s, "ma716s.p1", 0x0000, 0x020000, CRC(30fd2e9f) SHA1(9ed06ee736a09b36f48fb3b69be03b39861b0ea5), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (MA7 1.6)" ) GAME_CUSTOM( 199?, m4mag7s__o, m4mag7s, "ma716ad.p1", 0x0000, 0x020000, CRC(7632ce64) SHA1(2308d777110aa7636c4c0fc08be23d1732ba3b69), "Barcrest","Magnificent 7s (Barcrest) (MPU4) (set 16)" ) @@ -1973,7 +1973,8 @@ GAME_CUSTOM( 199?, m4mag7s__2, m4mag7s, "mag715t", 0x0000, 0x020000 ROM_END \ GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring_big ,ROT0,company,title,GAME_FLAGS ) -GAME_CUSTOM( 199?, m4makmnt, 0, "mams.p1", 0x0000, 0x020000, CRC(af08e1e6) SHA1(c7e87d351f67592084d758ee53ba4d354bb28866), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 1)" ) +// "(C)1993 BARCREST" and "MAM 0.3" +GAME_CUSTOM( 199?, m4makmnt, 0, "mams.p1", 0x0000, 0x020000, CRC(af08e1e6) SHA1(c7e87d351f67592084d758ee53ba4d354bb28866), "Barcrest","Make A Mint (Barcrest) (MPU4) (MAM 0.3)" ) GAME_CUSTOM( 199?, m4makmnt__o, m4makmnt, "mamad.p1", 0x0000, 0x020000, CRC(82f63f55) SHA1(2cbc514a49e826505580a57f17ee696bdf9bf436), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 16)" ) GAME_CUSTOM( 199?, m4makmnt__p, m4makmnt, "mamb.p1", 0x0000, 0x020000, CRC(233c2e35) SHA1(823fc5736469c7e1d1da72bec8d64aabb277f9ab), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 17)" ) GAME_CUSTOM( 199?, m4makmnt__q, m4makmnt, "mambd.p1", 0x0000, 0x020000, CRC(0fec9190) SHA1(6cea986853efc042c6325f31f790f80ae2993308), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 18)" ) @@ -1984,8 +1985,8 @@ GAME_CUSTOM( 199?, m4makmnt__u, m4makmnt, "mamdy.p1", 0x0000, 0x020000, GAME_CUSTOM( 199?, m4makmnt__v, m4makmnt, "mamk.p1", 0x0000, 0x020000, CRC(69fb8663) SHA1(741b6e7b97d0c9b243e8e318ed169f92f8fbd5e9), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 23)" ) GAME_CUSTOM( 199?, m4makmnt__w, m4makmnt, "mamr.p1", 0x0000, 0x020000, CRC(daf43d52) SHA1(066cf554178d4e4fdff10c1e93567618f711d196), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 24)" ) GAME_CUSTOM( 199?, m4makmnt__x, m4makmnt, "mamy.p1", 0x0000, 0x020000, CRC(ee18a69d) SHA1(d3cf2c5ed4ec00be4d68c895ca3973da1acccb79), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 25)" ) - -GAME_CUSTOM( 199?, m4makmnt__k, m4makmnt, "mam04s.p1", 0x0000, 0x020000, CRC(08eac690) SHA1(e35793da266bd9dd8a018ba9773f368e36ce501d), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 12)" ) +// "(C)1993 BARCREST" and "MAM 0.4" +GAME_CUSTOM( 199?, m4makmnt__k, m4makmnt, "mam04s.p1", 0x0000, 0x020000, CRC(08eac690) SHA1(e35793da266bd9dd8a018ba9773f368e36ce501d), "Barcrest","Make A Mint (Barcrest) (MPU4) (MAM 0.4)" ) GAME_CUSTOM( 199?, m4makmnt__a, m4makmnt, "mam04ad.p1", 0x0000, 0x020000, CRC(9b750bc7) SHA1(10a86f0a0d18ce0be502a9d36282f6b5eef0ece5), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 2)" ) GAME_CUSTOM( 199?, m4makmnt__b, m4makmnt, "mam04b.p1", 0x0000, 0x020000, CRC(8f5cefa9) SHA1(fc0dfb67794d090ef15facd0f2b60e1d505b295f), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 3)" ) GAME_CUSTOM( 199?, m4makmnt__c, m4makmnt, "mam04bd.p1", 0x0000, 0x020000, CRC(166fa502) SHA1(345ad131d8757445c549312350507a3a804ca20e), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 4)" ) @@ -1997,8 +1998,8 @@ GAME_CUSTOM( 199?, m4makmnt__h, m4makmnt, "mam04dy.p1", 0x0000, 0x020000, GAME_CUSTOM( 199?, m4makmnt__i, m4makmnt, "mam04k.p1", 0x0000, 0x020000, CRC(c59b47ff) SHA1(8022c6c988532d3f98edf5c59c97403ab2d0fb90), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 10)" ) GAME_CUSTOM( 199?, m4makmnt__j, m4makmnt, "mam04r.p1", 0x0000, 0x020000, CRC(7694fcce) SHA1(a67c76551240129914cc071543db96962f3b198f), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 11)" ) GAME_CUSTOM( 199?, m4makmnt__l, m4makmnt, "mam04y.p1", 0x0000, 0x020000, CRC(42786701) SHA1(6efb0cbf630cd1b87715e692f76e368e3fba0856), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 13)" ) - -GAME_CUSTOM( 199?, m4makmnt__9, m4makmnt, "mmg04s.p1", 0x0000, 0x020000, CRC(1c46683e) SHA1(d08589bb32056ea599e6ffbbb795f46f8eff0782), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 37)" ) +// "(C)1993 BARCREST" and "MMG 0.4" +GAME_CUSTOM( 199?, m4makmnt__9, m4makmnt, "mmg04s.p1", 0x0000, 0x020000, CRC(1c46683e) SHA1(d08589bb32056ea599e6ffbbb795f46f8eff0782), "Barcrest","Make A Mint (Barcrest) (MPU4) (MMG 0.4)" ) GAME_CUSTOM( 199?, m4makmnt__z, m4makmnt, "mmg04ad.p1", 0x0000, 0x020000, CRC(9cbf9691) SHA1(a68f2e9e0ec03dc47017c221a3e780e5cc992a15), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 27)" ) GAME_CUSTOM( 199?, m4makmnt__0, m4makmnt, "mmg04b.p1", 0x0000, 0x020000, CRC(2507742d) SHA1(3bdd6f43da4d4c923bedcc1eba5cb1e1b92ee473), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 28)" ) GAME_CUSTOM( 199?, m4makmnt__1, m4makmnt, "mmg04bd.p1", 0x0000, 0x020000, CRC(11a53854) SHA1(e52ee92f39645380864e86c694a345c028cb42cf), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 29)" ) @@ -2010,8 +2011,8 @@ GAME_CUSTOM( 199?, m4makmnt__6, m4makmnt, "mmg04dy.p1", 0x0000, 0x020000, GAME_CUSTOM( 199?, m4makmnt__7, m4makmnt, "mmg04k.p1", 0x0000, 0x020000, CRC(6fc0dc7b) SHA1(4ad8ef1e666e4796d3a09ba4bda9e48c60266380), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 35)" ) GAME_CUSTOM( 199?, m4makmnt__8, m4makmnt, "mmg04r.p1", 0x0000, 0x020000, CRC(dccf674a) SHA1(a8b2ebeec8587e0655349baca700afc552c3e62d), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 36)" ) GAME_CUSTOM( 199?, m4makmnt__aa, m4makmnt, "mmg04y.p1", 0x0000, 0x020000, CRC(e823fc85) SHA1(10414bbac8ac3bdbf11bc4092370c499fb9db650), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 38)" ) - -GAME_CUSTOM( 199?, m4makmnt__al, m4makmnt, "mmg05s.p1", 0x0000, 0x020000, CRC(771c17c8) SHA1(d9e595ae020c48769fcbf3de718b6986b6fd8bc5), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 49)" ) +// "(C)1993 BARCREST" and "MMG 0.5" +GAME_CUSTOM( 199?, m4makmnt__al, m4makmnt, "mmg05s.p1", 0x0000, 0x020000, CRC(771c17c8) SHA1(d9e595ae020c48769fcbf3de718b6986b6fd8bc5), "Barcrest","Make A Mint (Barcrest) (MPU4) (MMG 0.5)" ) GAME_CUSTOM( 199?, m4makmnt__ab, m4makmnt, "mmg05ad.p1", 0x0000, 0x020000, CRC(d1e70066) SHA1(9635da90808628ae84c6073fef9622a8f37bd069), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 39)" ) GAME_CUSTOM( 199?, m4makmnt__ac, m4makmnt, "mmg05b.p1", 0x0000, 0x020000, CRC(cc0335ff) SHA1(9ca52a49cc48cbfa7c394e0c22cc5075ad1096a1), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 40)" ) GAME_CUSTOM( 199?, m4makmnt__ad, m4makmnt, "mmg05bd.p1", 0x0000, 0x020000, CRC(5cfdaea3) SHA1(f9c5c4b4021ace3e17818c4d4462fe9c87a64d70), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 41)" ) @@ -2023,17 +2024,20 @@ GAME_CUSTOM( 199?, m4makmnt__ai, m4makmnt, "mmg05dy.p1", 0x0000, 0x020000, GAME_CUSTOM( 199?, m4makmnt__aj, m4makmnt, "mmg05k.p1", 0x0000, 0x020000, CRC(86c49da9) SHA1(bf29075a87574009f9ad8fd36e2d3a84c50e6b26), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 47)" ) GAME_CUSTOM( 199?, m4makmnt__ak, m4makmnt, "mmg05r.p1", 0x0000, 0x020000, CRC(35cb2698) SHA1(6371313a179559240ddb55976546ecc8d511e104), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 48)" ) GAME_CUSTOM( 199?, m4makmnt__am, m4makmnt, "mmg05y.p1", 0x0000, 0x020000, CRC(0127bd57) SHA1(3d1b59fda52f09fd8af59177b3f5c614b453ac25), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 50)" ) - -GAME_CUSTOM( 199?, m4makmnt__an, m4makmnt, "ma_x6__5.3_1", 0x0000, 0x010000, CRC(2fe3c309) SHA1(5dba65b29ea5492a78866863629d89f9a8588959), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 51)" ) -GAME_CUSTOM( 199?, m4makmnt__ao, m4makmnt, "ma_x6__c.3_1", 0x0000, 0x010000, CRC(e9259a4d) SHA1(9a8e9590403f507f83197a898af5d543bda81b2b), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 52)" ) -GAME_CUSTOM( 199?, m4makmnt__ap, m4makmnt, "ma_x6_d5.3_1", 0x0000, 0x010000, CRC(a93dba0d) SHA1(6fabe994ac6c9ea4ce2bae99df699fa100098926), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 53)" ) -GAME_CUSTOM( 199?, m4makmnt__aq, m4makmnt, "ma_x6_dc.3_1", 0x0000, 0x010000, CRC(805d75c2) SHA1(b2433556b72f89887c1e404c80d85c940535e8af), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 54)" ) -GAME_CUSTOM( 199?, m4makmnt__ar, m4makmnt, "ma_x6a_5.3_1", 0x0000, 0x010000, CRC(79f673de) SHA1(805ea08f5ed016d25ec23dbc3952aad4873a1cde), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 55)" ) -GAME_CUSTOM( 199?, m4makmnt__as, m4makmnt, "ma_x6a_c.3_1", 0x0000, 0x010000, CRC(43ede82a) SHA1(d6ec3dd170c56e90018568480bca72cd8390aa2d), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 56)" ) - -GAME_CUSTOM( 199?, m4makmnt__m, m4makmnt, "mam15g", 0x0000, 0x020000, CRC(d3fd61f9) SHA1(1c738f818ea84f4bfca3c62fd9c34ce5e983b10a), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4makmnt__n, m4makmnt, "mam15t", 0x0000, 0x020000, CRC(a5975cbe) SHA1(eb6dd70c79c6b051190055d71ec8421080e5ba39), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4makmnt__y, m4makmnt, "mint2010", 0x0000, 0x020000, CRC(e60d10b9) SHA1(3abe7a7f33a73827ed6585d92fe53d4058c87baf), "Barcrest","Make A Mint (Barcrest) (MPU4) (set 26)" ) +// "(C)1993 BARCREST" and "MMG 0.2" +GAME_CUSTOM( 199?, m4makmnt__y, m4makmnt, "mint2010", 0x0000, 0x020000, CRC(e60d10b9) SHA1(3abe7a7f33a73827ed6585d92fe53d4058c87baf), "Barcrest","Make A Mint (Barcrest) (MPU4) (MMG 0.2)" ) +// "(C)1997 B.W.B." and "MA_ 3.1" +GAME_CUSTOM( 199?, m4makmnt__an, m4makmnt, "ma_x6__5.3_1", 0x0000, 0x010000, CRC(2fe3c309) SHA1(5dba65b29ea5492a78866863629d89f9a8588959), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.1)" ) +GAME_CUSTOM( 199?, m4makmnt__ap, m4makmnt, "ma_x6_d5.3_1", 0x0000, 0x010000, CRC(a93dba0d) SHA1(6fabe994ac6c9ea4ce2bae99df699fa100098926), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.1 D)" ) +GAME_CUSTOM( 199?, m4makmnt__ar, m4makmnt, "ma_x6a_5.3_1", 0x0000, 0x010000, CRC(79f673de) SHA1(805ea08f5ed016d25ec23dbc3952aad4873a1cde), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.1 K)" ) +// "(C)1997 B.W.B." and "MA_ 3.0" +GAME_CUSTOM( 199?, m4makmnt__ao, m4makmnt, "ma_x6__c.3_1", 0x0000, 0x010000, CRC(e9259a4d) SHA1(9a8e9590403f507f83197a898af5d543bda81b2b), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.0)" ) +GAME_CUSTOM( 199?, m4makmnt__aq, m4makmnt, "ma_x6_dc.3_1", 0x0000, 0x010000, CRC(805d75c2) SHA1(b2433556b72f89887c1e404c80d85c940535e8af), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.0 D)" ) +GAME_CUSTOM( 199?, m4makmnt__as, m4makmnt, "ma_x6a_c.3_1", 0x0000, 0x010000, CRC(43ede82a) SHA1(d6ec3dd170c56e90018568480bca72cd8390aa2d), "Bwb","Make A Mint (Barcrest) (MPU4) (MA_ 3.0 K)" ) +// "(C)1993 BARCREST" and "MMG 0.4" (but hack, doesn't want standard characterizer) +GAME_CUSTOM( 199?, m4makmnt__m, m4makmnt, "mam15g", 0x0000, 0x020000, CRC(d3fd61f9) SHA1(1c738f818ea84f4bfca3c62fd9c34ce5e983b10a), "hack","Make A Mint (Barcrest) (MPU4) (MMG 0.4, hack)" ) +// no copyright string and "MAM 0.3" +GAME_CUSTOM( 199?, m4makmnt__n, m4makmnt, "mam15t", 0x0000, 0x020000, CRC(a5975cbe) SHA1(eb6dd70c79c6b051190055d71ec8421080e5ba39), "hack","Make A Mint (Barcrest) (MPU4) (MAM 0.3 C, hack)" ) #define M4VIVAES_EXTRA_ROMS \ ROM_REGION( 0x48, "fakechr", 0 ) \ @@ -2136,73 +2140,76 @@ GAME_CUSTOM( 199?, m4vivaes__j, m4vivaes, "5p5vivaespana6-0.bin", 0x0000, 0 ROM_END \ GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring_big ,ROT0,company,title,GAME_FLAGS ) -GAME_CUSTOM( 199?, m4potblk, 0, "pbg16s.p1", 0x0000, 0x020000, CRC(36a1c679) SHA1(bf2eb5c2a07e61b7a2c0d8402b0e0583adfa22dc), "Barcrest","Pot Black (Barcrest) (MPU4) (set 1)" ) -GAME_CUSTOM( 199?, m4potblk__q, m4potblk, "pbg16ad.p1", 0x0000, 0x020000, CRC(919e90ba) SHA1(b32459b394595a5c3d238c6eec47c7d4d34fcdf8), "Barcrest","Pot Black (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4potblk__r, m4potblk, "pbg16b.p1", 0x0000, 0x020000, CRC(db445653) SHA1(145af560641f9becb6d98c2f157f94b0fdd6459c), "Barcrest","Pot Black (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4potblk__s, m4potblk, "pbg16bd.p1", 0x0000, 0x020000, CRC(db5938ec) SHA1(323f190c62f23b8092274dd17f07198f53abc828), "Barcrest","Pot Black (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4potblk__t, m4potblk, "pbg16d.p1", 0x0000, 0x020000, CRC(f8d7a418) SHA1(81a2d020ec03574b041b9be0b8ed96386804f4af), "Barcrest","Pot Black (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4potblk__u, m4potblk, "pbg16dh.p1", 0x0000, 0x020000, CRC(a642339a) SHA1(104b405923b71d69bc996dced4dc284d41397c5f), "Barcrest","Pot Black (Barcrest) (MPU4) (set 22)" ) -GAME_CUSTOM( 199?, m4potblk__v, m4potblk, "pbg16dk.p1", 0x0000, 0x020000, CRC(22912b8b) SHA1(cdbaaf0509fb6115182c8ac79002e1d983bcc765), "Barcrest","Pot Black (Barcrest) (MPU4) (set 23)" ) -GAME_CUSTOM( 199?, m4potblk__w, m4potblk, "pbg16dr.p1", 0x0000, 0x020000, CRC(b87ff532) SHA1(d64d4733523d4afe5b4e3ca5f2c33ee8d4ab1c2b), "Barcrest","Pot Black (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4potblk__x, m4potblk, "pbg16dy.p1", 0x0000, 0x020000, CRC(167db044) SHA1(291982c6af2486724be32b8f41ee66d699afad22), "Barcrest","Pot Black (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4potblk__y, m4potblk, "pbg16h.p1", 0x0000, 0x020000, CRC(a65f5d25) SHA1(6ea4bc92ecf849653c1abbb5c1e1d97d0e58a373), "Barcrest","Pot Black (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4potblk__z, m4potblk, "pbg16k.p1", 0x0000, 0x020000, CRC(228c4534) SHA1(e4a4e7ec059e4da568c507d8f1f006c04e1c13c4), "Barcrest","Pot Black (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4potblk__0, m4potblk, "pbg16r.p1", 0x0000, 0x020000, CRC(b8629b8d) SHA1(08fc4498b45f2e939c4c465d4d979aa4532b5ce4), "Barcrest","Pot Black (Barcrest) (MPU4) (set 28)" ) -GAME_CUSTOM( 199?, m4potblk__1, m4potblk, "pbg16y.p1", 0x0000, 0x020000, CRC(1660defb) SHA1(9f6112759b029e71056a92137f890910b6afb708), "Barcrest","Pot Black (Barcrest) (MPU4) (set 29)" ) - -GAME_CUSTOM( 199?, m4potblk__c, m4potblk, "pbg14s.p1", 0x0000, 0x020000, CRC(c9316c92) SHA1(d9248069c4702d4ce780ab82bdb783ba5aea034b), "Barcrest","Pot Black (Barcrest) (MPU4) (set 4)" ) - -GAME_CUSTOM( 199?, m4potblk__o, m4potblk, "pbg15s.p1", 0x0000, 0x020000, CRC(f31c9a6a) SHA1(f2c7dceaabbe0689227f2c59d063ac20403eae1d), "Barcrest","Pot Black (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4potblk__d, m4potblk, "pbg15ad.p1", 0x0000, 0x020000, CRC(ded4ba89) SHA1(f8b4727987bef1e74894df4e7549d3c28ba4de98), "Barcrest","Pot Black (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4potblk__e, m4potblk, "pbg15b.p1", 0x0000, 0x020000, CRC(5a6570be) SHA1(f44e4511cc0c0f410104f9a36ae51b3972bd4522), "Barcrest","Pot Black (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4potblk__f, m4potblk, "pbg15bd.p1", 0x0000, 0x020000, CRC(941312df) SHA1(51ec4052cfaa245873146d0ecb8834be5cc22db2), "Barcrest","Pot Black (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4potblk__g, m4potblk, "pbg15d.p1", 0x0000, 0x020000, CRC(79f682f5) SHA1(ee6f31009b8a5354db930d6f228a2969dbebb9ad), "Barcrest","Pot Black (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4potblk__h, m4potblk, "pbg15dh.p1", 0x0000, 0x020000, CRC(e90819a9) SHA1(f3d423e56205f6b18892fe8771aa853f7185336a), "Barcrest","Pot Black (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4potblk__i, m4potblk, "pbg15dk.p1", 0x0000, 0x020000, CRC(6ddb01b8) SHA1(aeefd2145f328f0f7af87b16f9bc2324d134b7e1), "Barcrest","Pot Black (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4potblk__j, m4potblk, "pbg15dr.p1", 0x0000, 0x020000, CRC(f735df01) SHA1(f669cd719cdf9fa170babc652be164bd7c580344), "Barcrest","Pot Black (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4potblk__k, m4potblk, "pbg15dy.p1", 0x0000, 0x020000, CRC(59379a77) SHA1(91b56aef53de7c554924ebab56faa3e8655dcbfd), "Barcrest","Pot Black (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4potblk__l, m4potblk, "pbg15h.p1", 0x0000, 0x020000, CRC(277e7bc8) SHA1(9f89a048fcf268883002bb0dcb14854949ebec46), "Barcrest","Pot Black (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4potblk__m, m4potblk, "pbg15k.p1", 0x0000, 0x020000, CRC(a3ad63d9) SHA1(0e65ff6ae02bd42cb1b3c9249ac85dc13b4eb8ad), "Barcrest","Pot Black (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4potblk__n, m4potblk, "pbg15r.p1", 0x0000, 0x020000, CRC(3943bd60) SHA1(cfcd1e2b76f592e3bc5b8ed33af66ad183e829e1), "Barcrest","Pot Black (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4potblk__p, m4potblk, "pbg15y.p1", 0x0000, 0x020000, CRC(9741f816) SHA1(52482fed48574582ed48424666284695fe661880), "Barcrest","Pot Black (Barcrest) (MPU4) (set 17)" ) - -GAME_CUSTOM( 199?, m4potblk__ad, m4potblk, "pbs04s.p1", 0x0000, 0x020000, CRC(b4a7eaac) SHA1(295b793802a6145758861142133ced98f2258119), "Barcrest","Pot Black (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4potblk__2, m4potblk, "pbs04ad.p1", 0x0000, 0x020000, CRC(c4fedb7d) SHA1(1ce1e524bd11e775c0f8498849c1d9ca41fcf912), "Barcrest","Pot Black (Barcrest) (MPU4) (set 30)" ) -GAME_CUSTOM( 199?, m4potblk__3, m4potblk, "pbs04b.p1", 0x0000, 0x020000, CRC(f1fcaf2d) SHA1(786513cbfdde2f37c6ab3649781bc7c70bbdfb61), "Barcrest","Pot Black (Barcrest) (MPU4) (set 31)" ) -GAME_CUSTOM( 199?, m4potblk__4, m4potblk, "pbs04bd.p1", 0x0000, 0x020000, CRC(49e475b8) SHA1(95548a22c67bd8df6df05503b6318b15bd84bb7a), "Barcrest","Pot Black (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4potblk__5, m4potblk, "pbs04c.p1", 0x0000, 0x020000, CRC(c6b6123f) SHA1(ccd286dc09606d6cbf45835701dc83ca361c8dc0), "Barcrest","Pot Black (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4potblk__6, m4potblk, "pbs04dh.p1", 0x0000, 0x020000, CRC(34ff7ece) SHA1(a659aee7b093c00e920428f78e96e4246ad469ba), "Barcrest","Pot Black (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4potblk__7, m4potblk, "pbs04dk.p1", 0x0000, 0x020000, CRC(0323ddee) SHA1(74ac57542d6bf32a105682daf661546d18e1eab4), "Barcrest","Pot Black (Barcrest) (MPU4) (set 35)" ) -GAME_CUSTOM( 199?, m4potblk__8, m4potblk, "pbs04dr.p1", 0x0000, 0x020000, CRC(b02c66df) SHA1(7f2b24d747349a7a17b5f90dbada2a6c9f620b1d), "Barcrest","Pot Black (Barcrest) (MPU4) (set 36)" ) -GAME_CUSTOM( 199?, m4potblk__9, m4potblk, "pbs04dy.p1", 0x0000, 0x020000, CRC(84c0fd10) SHA1(586a41908165211b6d6386f12170aeda1ff3fbe9), "Barcrest","Pot Black (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4potblk__aa, m4potblk, "pbs04h.p1", 0x0000, 0x020000, CRC(8ce7a45b) SHA1(1eab7d504b4a8f6158aa5878dcc62c9531169a85), "Barcrest","Pot Black (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4potblk__ab, m4potblk, "pbs04k.p1", 0x0000, 0x020000, CRC(bb3b077b) SHA1(584fd9f1578c61e1a1c30068c42b16716c5d490f), "Barcrest","Pot Black (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4potblk__ac, m4potblk, "pbs04r.p1", 0x0000, 0x020000, CRC(0834bc4a) SHA1(0064b1ec9db506c4dd14ed7ffeffa08bebc117b1), "Barcrest","Pot Black (Barcrest) (MPU4) (set 40)" ) -GAME_CUSTOM( 199?, m4potblk__ae, m4potblk, "pbs04y.p1", 0x0000, 0x020000, CRC(3cd82785) SHA1(fb2cb5acfc60d0896da9c22b7a9370e7c0271cf7), "Barcrest","Pot Black (Barcrest) (MPU4) (set 42)" ) - -GAME_CUSTOM( 199?, m4potblk__ar, m4potblk, "pbs06s.p1", 0x0000, 0x020000, CRC(d2b42b29) SHA1(a077605b1f9f3082a03882b4f5b360a530a97135), "Barcrest","Pot Black (Barcrest) (MPU4) (set 55)" ) -GAME_CUSTOM( 199?, m4potblk__af, m4potblk, "pbs06ad.p1", 0x0000, 0x020000, CRC(6344d6c7) SHA1(7c01149d9f21a15b1067a42d3f8def2868f15181), "Barcrest","Pot Black (Barcrest) (MPU4) (set 43)" ) -GAME_CUSTOM( 199?, m4potblk__ag, m4potblk, "pbs06b.p1", 0x0000, 0x020000, CRC(2056d268) SHA1(ac978d59ff3cead2678d56579e404eb7494ab957), "Barcrest","Pot Black (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4potblk__ah, m4potblk, "pbs06bd.p1", 0x0000, 0x020000, CRC(ee5e7802) SHA1(568b6b2e6d58ee766a74badb60118dc0899b8b68), "Barcrest","Pot Black (Barcrest) (MPU4) (set 45)" ) -GAME_CUSTOM( 199?, m4potblk__ai, m4potblk, "pbs06c.p1", 0x0000, 0x020000, CRC(171c6f7a) SHA1(e0c7455b64105cdd41ab24ef4cec7b044732faf6), "Barcrest","Pot Black (Barcrest) (MPU4) (set 46)" ) -GAME_CUSTOM( 199?, m4potblk__aj, m4potblk, "pbs06d.p1", 0x0000, 0x020000, CRC(03c52023) SHA1(534fbee8e19217002c428cc2d9a6693b8bccf974), "Barcrest","Pot Black (Barcrest) (MPU4) (set 47)" ) -GAME_CUSTOM( 199?, m4potblk__ak, m4potblk, "pbs06dh.p1", 0x0000, 0x020000, CRC(93457374) SHA1(40f4ed7260f234b69084676448705b53ff4700e4), "Barcrest","Pot Black (Barcrest) (MPU4) (set 48)" ) -GAME_CUSTOM( 199?, m4potblk__al, m4potblk, "pbs06dk.p1", 0x0000, 0x020000, CRC(a499d054) SHA1(6c740d6e765c5ac3690814f71cb340a67f0bb113), "Barcrest","Pot Black (Barcrest) (MPU4) (set 49)" ) -GAME_CUSTOM( 199?, m4potblk__am, m4potblk, "pbs06dr.p1", 0x0000, 0x020000, CRC(17966b65) SHA1(2a785268954388dba259df162298316e0d187ceb), "Barcrest","Pot Black (Barcrest) (MPU4) (set 50)" ) -GAME_CUSTOM( 199?, m4potblk__an, m4potblk, "pbs06dy.p1", 0x0000, 0x020000, CRC(237af0aa) SHA1(c6f1cf33506517eac98d449c54be33d1f220241c), "Barcrest","Pot Black (Barcrest) (MPU4) (set 51)" ) -GAME_CUSTOM( 199?, m4potblk__ao, m4potblk, "pbs06h.p1", 0x0000, 0x020000, CRC(5d4dd91e) SHA1(a715dde45ce7f3c6e62cb08eb5eaacb918803280), "Barcrest","Pot Black (Barcrest) (MPU4) (set 52)" ) -GAME_CUSTOM( 199?, m4potblk__ap, m4potblk, "pbs06k.p1", 0x0000, 0x020000, CRC(6a917a3e) SHA1(b8e6fb7ea83c5a363fdd756a5479a51d15cb246d), "Barcrest","Pot Black (Barcrest) (MPU4) (set 53)" ) -GAME_CUSTOM( 199?, m4potblk__aq, m4potblk, "pbs06r.p1", 0x0000, 0x020000, CRC(d99ec10f) SHA1(62ffc2772495fd165b2ad9f76a54154f51464394), "Barcrest","Pot Black (Barcrest) (MPU4) (set 54)" ) -GAME_CUSTOM( 199?, m4potblk__as, m4potblk, "pbs06y.p1", 0x0000, 0x020000, CRC(ed725ac0) SHA1(4c2c38e1c2ce7e15c409e06b6f21410f04b70348), "Barcrest","Pot Black (Barcrest) (MPU4) (set 56)" ) - -GAME_CUSTOM( 199?, m4potblk__at, m4potblk, "po_x6__5.1_1", 0x0000, 0x020000, CRC(1fe40fd1) SHA1(5e16ff5b1019d83c1f40d63f89c16030dae0ab11), "Barcrest","Pot Black (Barcrest) (MPU4) (set 57)" ) -GAME_CUSTOM( 199?, m4potblk__au, m4potblk, "po_x6__t.1_1", 0x0000, 0x020000, CRC(c9314f6e) SHA1(4f9226883f9e1963c568eea327775688fb966431), "Barcrest","Pot Black (Barcrest) (MPU4) (set 58)" ) -GAME_CUSTOM( 199?, m4potblk__av, m4potblk, "po_x6_d5.1_1", 0x0000, 0x020000, CRC(404d5a99) SHA1(7a846df3b7f9f0108d84e4a4c2d199e5971b6375), "Barcrest","Pot Black (Barcrest) (MPU4) (set 59)" ) -GAME_CUSTOM( 199?, m4potblk__aw, m4potblk, "po_x6_dt.1_1", 0x0000, 0x020000, CRC(7213fd77) SHA1(07482cb54d4f03aad62c54d66322f7101f6c8dcf), "Barcrest","Pot Black (Barcrest) (MPU4) (set 60)" ) -GAME_CUSTOM( 199?, m4potblk__ax, m4potblk, "po_x6a_t.1_1", 0x0000, 0x020000, CRC(1b47a76a) SHA1(3587e4c0b50e359529e132376af3cd239194db31), "Barcrest","Pot Black (Barcrest) (MPU4) (set 61)" ) - -GAME_CUSTOM( 199?, m4potblk__a, m4potblk, "pb15g", 0x0000, 0x020000, CRC(650a54be) SHA1(80a5bb95857c911c1972f8be5bf794637cb02323), "Barcrest","Pot Black (Barcrest) (MPU4) (set 2)" ) -GAME_CUSTOM( 199?, m4potblk__b, m4potblk, "pb15t", 0x0000, 0x020000, CRC(98628744) SHA1(1a0df7036c36f3b87d5a239e1c9edfd7c74d2ae8), "Barcrest","Pot Black (Barcrest) (MPU4) (set 3)" ) +//"(C)1993 BARCREST" and "PBG 1.6" +GAME_CUSTOM( 199?, m4potblk, 0, "pbg16s.p1", 0x0000, 0x020000, CRC(36a1c679) SHA1(bf2eb5c2a07e61b7a2c0d8402b0e0583adfa22dc), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6)" ) +GAME_CUSTOM( 199?, m4potblk__q, m4potblk, "pbg16ad.p1", 0x0000, 0x020000, CRC(919e90ba) SHA1(b32459b394595a5c3d238c6eec47c7d4d34fcdf8), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 AD)" ) +GAME_CUSTOM( 199?, m4potblk__r, m4potblk, "pbg16b.p1", 0x0000, 0x020000, CRC(db445653) SHA1(145af560641f9becb6d98c2f157f94b0fdd6459c), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 B)" ) +GAME_CUSTOM( 199?, m4potblk__s, m4potblk, "pbg16bd.p1", 0x0000, 0x020000, CRC(db5938ec) SHA1(323f190c62f23b8092274dd17f07198f53abc828), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 BD)" ) +GAME_CUSTOM( 199?, m4potblk__t, m4potblk, "pbg16d.p1", 0x0000, 0x020000, CRC(f8d7a418) SHA1(81a2d020ec03574b041b9be0b8ed96386804f4af), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 D)" ) +GAME_CUSTOM( 199?, m4potblk__u, m4potblk, "pbg16dh.p1", 0x0000, 0x020000, CRC(a642339a) SHA1(104b405923b71d69bc996dced4dc284d41397c5f), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 DH)" ) +GAME_CUSTOM( 199?, m4potblk__v, m4potblk, "pbg16dk.p1", 0x0000, 0x020000, CRC(22912b8b) SHA1(cdbaaf0509fb6115182c8ac79002e1d983bcc765), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 KD)" ) +GAME_CUSTOM( 199?, m4potblk__w, m4potblk, "pbg16dr.p1", 0x0000, 0x020000, CRC(b87ff532) SHA1(d64d4733523d4afe5b4e3ca5f2c33ee8d4ab1c2b), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 RD)" ) +GAME_CUSTOM( 199?, m4potblk__x, m4potblk, "pbg16dy.p1", 0x0000, 0x020000, CRC(167db044) SHA1(291982c6af2486724be32b8f41ee66d699afad22), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 YD)" ) +GAME_CUSTOM( 199?, m4potblk__y, m4potblk, "pbg16h.p1", 0x0000, 0x020000, CRC(a65f5d25) SHA1(6ea4bc92ecf849653c1abbb5c1e1d97d0e58a373), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 H)" ) +GAME_CUSTOM( 199?, m4potblk__z, m4potblk, "pbg16k.p1", 0x0000, 0x020000, CRC(228c4534) SHA1(e4a4e7ec059e4da568c507d8f1f006c04e1c13c4), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 K)" ) +GAME_CUSTOM( 199?, m4potblk__0, m4potblk, "pbg16r.p1", 0x0000, 0x020000, CRC(b8629b8d) SHA1(08fc4498b45f2e939c4c465d4d979aa4532b5ce4), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 R)" ) +GAME_CUSTOM( 199?, m4potblk__1, m4potblk, "pbg16y.p1", 0x0000, 0x020000, CRC(1660defb) SHA1(9f6112759b029e71056a92137f890910b6afb708), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.6 Y)" ) +// "(C)1993 BARCREST" and "PBG 1.4" +GAME_CUSTOM( 199?, m4potblk__c, m4potblk, "pbg14s.p1", 0x0000, 0x020000, CRC(c9316c92) SHA1(d9248069c4702d4ce780ab82bdb783ba5aea034b), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.4)" ) +// "(C)1993 BARCREST" and "PBG 1.5" +GAME_CUSTOM( 199?, m4potblk__o, m4potblk, "pbg15s.p1", 0x0000, 0x020000, CRC(f31c9a6a) SHA1(f2c7dceaabbe0689227f2c59d063ac20403eae1d), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5)" ) +GAME_CUSTOM( 199?, m4potblk__d, m4potblk, "pbg15ad.p1", 0x0000, 0x020000, CRC(ded4ba89) SHA1(f8b4727987bef1e74894df4e7549d3c28ba4de98), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 AD)" ) +GAME_CUSTOM( 199?, m4potblk__e, m4potblk, "pbg15b.p1", 0x0000, 0x020000, CRC(5a6570be) SHA1(f44e4511cc0c0f410104f9a36ae51b3972bd4522), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 B)" ) +GAME_CUSTOM( 199?, m4potblk__f, m4potblk, "pbg15bd.p1", 0x0000, 0x020000, CRC(941312df) SHA1(51ec4052cfaa245873146d0ecb8834be5cc22db2), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 BD)" ) +GAME_CUSTOM( 199?, m4potblk__g, m4potblk, "pbg15d.p1", 0x0000, 0x020000, CRC(79f682f5) SHA1(ee6f31009b8a5354db930d6f228a2969dbebb9ad), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 D)" ) +GAME_CUSTOM( 199?, m4potblk__h, m4potblk, "pbg15dh.p1", 0x0000, 0x020000, CRC(e90819a9) SHA1(f3d423e56205f6b18892fe8771aa853f7185336a), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 DH)" ) +GAME_CUSTOM( 199?, m4potblk__i, m4potblk, "pbg15dk.p1", 0x0000, 0x020000, CRC(6ddb01b8) SHA1(aeefd2145f328f0f7af87b16f9bc2324d134b7e1), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 KD)" ) +GAME_CUSTOM( 199?, m4potblk__j, m4potblk, "pbg15dr.p1", 0x0000, 0x020000, CRC(f735df01) SHA1(f669cd719cdf9fa170babc652be164bd7c580344), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 RD)" ) +GAME_CUSTOM( 199?, m4potblk__k, m4potblk, "pbg15dy.p1", 0x0000, 0x020000, CRC(59379a77) SHA1(91b56aef53de7c554924ebab56faa3e8655dcbfd), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 YD)" ) +GAME_CUSTOM( 199?, m4potblk__l, m4potblk, "pbg15h.p1", 0x0000, 0x020000, CRC(277e7bc8) SHA1(9f89a048fcf268883002bb0dcb14854949ebec46), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 H)" ) +GAME_CUSTOM( 199?, m4potblk__m, m4potblk, "pbg15k.p1", 0x0000, 0x020000, CRC(a3ad63d9) SHA1(0e65ff6ae02bd42cb1b3c9249ac85dc13b4eb8ad), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 K)" ) +GAME_CUSTOM( 199?, m4potblk__n, m4potblk, "pbg15r.p1", 0x0000, 0x020000, CRC(3943bd60) SHA1(cfcd1e2b76f592e3bc5b8ed33af66ad183e829e1), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 R)" ) +GAME_CUSTOM( 199?, m4potblk__p, m4potblk, "pbg15y.p1", 0x0000, 0x020000, CRC(9741f816) SHA1(52482fed48574582ed48424666284695fe661880), "Barcrest","Pot Black (Barcrest) (MPU4) (PBG 1.5 Y)" ) +// "(C)1993 BARCREST" and "PBS 0.4" +GAME_CUSTOM( 199?, m4potblk__ad, m4potblk, "pbs04s.p1", 0x0000, 0x020000, CRC(b4a7eaac) SHA1(295b793802a6145758861142133ced98f2258119), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4)" ) +GAME_CUSTOM( 199?, m4potblk__2, m4potblk, "pbs04ad.p1", 0x0000, 0x020000, CRC(c4fedb7d) SHA1(1ce1e524bd11e775c0f8498849c1d9ca41fcf912), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 AD)" ) +GAME_CUSTOM( 199?, m4potblk__3, m4potblk, "pbs04b.p1", 0x0000, 0x020000, CRC(f1fcaf2d) SHA1(786513cbfdde2f37c6ab3649781bc7c70bbdfb61), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 B)" ) +GAME_CUSTOM( 199?, m4potblk__4, m4potblk, "pbs04bd.p1", 0x0000, 0x020000, CRC(49e475b8) SHA1(95548a22c67bd8df6df05503b6318b15bd84bb7a), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 BD)" ) +GAME_CUSTOM( 199?, m4potblk__5, m4potblk, "pbs04c.p1", 0x0000, 0x020000, CRC(c6b6123f) SHA1(ccd286dc09606d6cbf45835701dc83ca361c8dc0), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 C)" ) +GAME_CUSTOM( 199?, m4potblk__6, m4potblk, "pbs04dh.p1", 0x0000, 0x020000, CRC(34ff7ece) SHA1(a659aee7b093c00e920428f78e96e4246ad469ba), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 DH)" ) +GAME_CUSTOM( 199?, m4potblk__7, m4potblk, "pbs04dk.p1", 0x0000, 0x020000, CRC(0323ddee) SHA1(74ac57542d6bf32a105682daf661546d18e1eab4), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 KD)" ) +GAME_CUSTOM( 199?, m4potblk__8, m4potblk, "pbs04dr.p1", 0x0000, 0x020000, CRC(b02c66df) SHA1(7f2b24d747349a7a17b5f90dbada2a6c9f620b1d), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 RD)" ) +GAME_CUSTOM( 199?, m4potblk__9, m4potblk, "pbs04dy.p1", 0x0000, 0x020000, CRC(84c0fd10) SHA1(586a41908165211b6d6386f12170aeda1ff3fbe9), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 YD)" ) +GAME_CUSTOM( 199?, m4potblk__aa, m4potblk, "pbs04h.p1", 0x0000, 0x020000, CRC(8ce7a45b) SHA1(1eab7d504b4a8f6158aa5878dcc62c9531169a85), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 H)" ) +GAME_CUSTOM( 199?, m4potblk__ab, m4potblk, "pbs04k.p1", 0x0000, 0x020000, CRC(bb3b077b) SHA1(584fd9f1578c61e1a1c30068c42b16716c5d490f), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 K)" ) +GAME_CUSTOM( 199?, m4potblk__ac, m4potblk, "pbs04r.p1", 0x0000, 0x020000, CRC(0834bc4a) SHA1(0064b1ec9db506c4dd14ed7ffeffa08bebc117b1), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 R)" ) +GAME_CUSTOM( 199?, m4potblk__ae, m4potblk, "pbs04y.p1", 0x0000, 0x020000, CRC(3cd82785) SHA1(fb2cb5acfc60d0896da9c22b7a9370e7c0271cf7), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.4 Y)" ) +// "(C)1993 BARCREST" and "PBS 0.6" +GAME_CUSTOM( 199?, m4potblk__ar, m4potblk, "pbs06s.p1", 0x0000, 0x020000, CRC(d2b42b29) SHA1(a077605b1f9f3082a03882b4f5b360a530a97135), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6)" ) +GAME_CUSTOM( 199?, m4potblk__af, m4potblk, "pbs06ad.p1", 0x0000, 0x020000, CRC(6344d6c7) SHA1(7c01149d9f21a15b1067a42d3f8def2868f15181), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 AD)" ) +GAME_CUSTOM( 199?, m4potblk__ag, m4potblk, "pbs06b.p1", 0x0000, 0x020000, CRC(2056d268) SHA1(ac978d59ff3cead2678d56579e404eb7494ab957), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 B)" ) +GAME_CUSTOM( 199?, m4potblk__ah, m4potblk, "pbs06bd.p1", 0x0000, 0x020000, CRC(ee5e7802) SHA1(568b6b2e6d58ee766a74badb60118dc0899b8b68), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 BD)" ) +GAME_CUSTOM( 199?, m4potblk__ai, m4potblk, "pbs06c.p1", 0x0000, 0x020000, CRC(171c6f7a) SHA1(e0c7455b64105cdd41ab24ef4cec7b044732faf6), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 C)" ) +GAME_CUSTOM( 199?, m4potblk__aj, m4potblk, "pbs06d.p1", 0x0000, 0x020000, CRC(03c52023) SHA1(534fbee8e19217002c428cc2d9a6693b8bccf974), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 D)" ) +GAME_CUSTOM( 199?, m4potblk__ak, m4potblk, "pbs06dh.p1", 0x0000, 0x020000, CRC(93457374) SHA1(40f4ed7260f234b69084676448705b53ff4700e4), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 DH)" ) +GAME_CUSTOM( 199?, m4potblk__al, m4potblk, "pbs06dk.p1", 0x0000, 0x020000, CRC(a499d054) SHA1(6c740d6e765c5ac3690814f71cb340a67f0bb113), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 KD)" ) +GAME_CUSTOM( 199?, m4potblk__am, m4potblk, "pbs06dr.p1", 0x0000, 0x020000, CRC(17966b65) SHA1(2a785268954388dba259df162298316e0d187ceb), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 RD)" ) +GAME_CUSTOM( 199?, m4potblk__an, m4potblk, "pbs06dy.p1", 0x0000, 0x020000, CRC(237af0aa) SHA1(c6f1cf33506517eac98d449c54be33d1f220241c), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 YD)" ) +GAME_CUSTOM( 199?, m4potblk__ao, m4potblk, "pbs06h.p1", 0x0000, 0x020000, CRC(5d4dd91e) SHA1(a715dde45ce7f3c6e62cb08eb5eaacb918803280), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 H)" ) +GAME_CUSTOM( 199?, m4potblk__ap, m4potblk, "pbs06k.p1", 0x0000, 0x020000, CRC(6a917a3e) SHA1(b8e6fb7ea83c5a363fdd756a5479a51d15cb246d), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 K)" ) +GAME_CUSTOM( 199?, m4potblk__aq, m4potblk, "pbs06r.p1", 0x0000, 0x020000, CRC(d99ec10f) SHA1(62ffc2772495fd165b2ad9f76a54154f51464394), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 R)" ) +GAME_CUSTOM( 199?, m4potblk__as, m4potblk, "pbs06y.p1", 0x0000, 0x020000, CRC(ed725ac0) SHA1(4c2c38e1c2ce7e15c409e06b6f21410f04b70348), "Barcrest","Pot Black (Barcrest) (MPU4) (PBS 0.6 Y)" ) +// "(C)1997 B.W.B." and "PO 1.2" +GAME_CUSTOM( 199?, m4potblk__at, m4potblk, "po_x6__5.1_1", 0x0000, 0x020000, CRC(1fe40fd1) SHA1(5e16ff5b1019d83c1f40d63f89c16030dae0ab11), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.2)" ) +GAME_CUSTOM( 199?, m4potblk__av, m4potblk, "po_x6_d5.1_1", 0x0000, 0x020000, CRC(404d5a99) SHA1(7a846df3b7f9f0108d84e4a4c2d199e5971b6375), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.2 D)" ) +// "(C)1997 B.W.B." and "PO 1.1" +GAME_CUSTOM( 199?, m4potblk__au, m4potblk, "po_x6__t.1_1", 0x0000, 0x020000, CRC(c9314f6e) SHA1(4f9226883f9e1963c568eea327775688fb966431), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.1)" ) +GAME_CUSTOM( 199?, m4potblk__aw, m4potblk, "po_x6_dt.1_1", 0x0000, 0x020000, CRC(7213fd77) SHA1(07482cb54d4f03aad62c54d66322f7101f6c8dcf), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.1 D)" ) +GAME_CUSTOM( 199?, m4potblk__ax, m4potblk, "po_x6a_t.1_1", 0x0000, 0x020000, CRC(1b47a76a) SHA1(3587e4c0b50e359529e132376af3cd239194db31), "Bwb","Pot Black (Barcrest) (MPU4) (PO 1.1 K)" ) +// no copyright string and "PBG 1.5" +GAME_CUSTOM( 199?, m4potblk__a, m4potblk, "pb15g", 0x0000, 0x020000, CRC(650a54be) SHA1(80a5bb95857c911c1972f8be5bf794637cb02323), "hack","Pot Black (Barcrest) (MPU4) (PBG 1.5 Y, hack)" ) +// no copyright string and "PBS 0.4" +GAME_CUSTOM( 199?, m4potblk__b, m4potblk, "pb15t", 0x0000, 0x020000, CRC(98628744) SHA1(1a0df7036c36f3b87d5a239e1c9edfd7c74d2ae8), "hack","Pot Black (Barcrest) (MPU4) (PBS 0.4 C, hack)" ) #define M4PLACBT_EXTRA_ROMS \ @@ -2220,63 +2227,66 @@ GAME_CUSTOM( 199?, m4potblk__b, m4potblk, "pb15t", 0x0000, 0x020000, ROM_END \ GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring_big ,ROT0,company,title,GAME_FLAGS ) - -GAME_CUSTOM( 199?, m4placbt, 0, "pyb07s.p1", 0x0000, 0x020000, CRC(ad02705a) SHA1(027bcbbd828e4fd23831af9554d582857e6784e1), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 1)" ) -GAME_CUSTOM( 199?, m4placbt__m, m4placbt, "pyb07ad.p1", 0x0000, 0x020000, CRC(427a7489) SHA1(fb0a24da5ef7a948152e8180968aaaebbd85afa0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4placbt__n, m4placbt, "pyb07b.p1", 0x0000, 0x020000, CRC(35cdf803) SHA1(94953da72c2ee8792f53bf677483ffed15d4709c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4placbt__o, m4placbt, "pyb07bd.p1", 0x0000, 0x020000, CRC(cf60da4c) SHA1(8667308f750e944894f68f20b70d42244b751e22), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4placbt__p, m4placbt, "pyb07c.p1", 0x0000, 0x020000, CRC(02874511) SHA1(b5acdcfb7d901faa1271eb16e5d36d0a484d97cb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4placbt__q, m4placbt, "pyb07d.p1", 0x0000, 0x020000, CRC(48d6f375) SHA1(1891b6f8f4599d94280bcb68e9d0e9259351e2b8), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4placbt__r, m4placbt, "pyb07dk.p1", 0x0000, 0x020000, CRC(85a7721a) SHA1(e3af55577b4ad4ae48e95b576e336cb019f3ecd0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4placbt__s, m4placbt, "pyb07dr.p1", 0x0000, 0x020000, CRC(36a8c92b) SHA1(a1091dea9ffe53c9ba1495f7e0d2aebe92d9bb64), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4placbt__t, m4placbt, "pyb07dy.p1", 0x0000, 0x020000, CRC(024452e4) SHA1(a92c887ab467be6bcccaec1cd5dcc1304eddba19), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4placbt__u, m4placbt, "pyb07k.p1", 0x0000, 0x020000, CRC(7f0a5055) SHA1(5620d8a3333f2f56ea24bcecf1a791e6ee0f43d9), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 22)" ) -GAME_CUSTOM( 199?, m4placbt__v, m4placbt, "pyb07r.p1", 0x0000, 0x020000, CRC(cc05eb64) SHA1(1329decc84de231e8c1929f057233b25cc8b5942), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 23)" ) -GAME_CUSTOM( 199?, m4placbt__w, m4placbt, "pyb07y.p1", 0x0000, 0x020000, CRC(f8e970ab) SHA1(66a54a9c2750ea1aa4ce562aad74c98775865ed6), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 24)" ) - -GAME_CUSTOM( 199?, m4placbt__k, m4placbt, "pyb06s.p1", 0x0000, 0x020000, CRC(acd9d628) SHA1(93d8f0ffa3b9ebdd9fef39b2bc49bb85b2fac00f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4placbt__a, m4placbt, "pyb06ad.p1", 0x0000, 0x020000, CRC(e08b6176) SHA1(ccfb43ee033b4ed36e8656bcb4ba62230dde8466), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 2)" ) -GAME_CUSTOM( 199?, m4placbt__b, m4placbt, "pyb06b.p1", 0x0000, 0x020000, CRC(b6486055) SHA1(e0926720aba1e9d1327c32db29220d91050ea338), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4placbt__c, m4placbt, "pyb06bd.p1", 0x0000, 0x020000, CRC(6d91cfb3) SHA1(82d6ed6d6b2022d0945ec0fb8012fa4fef7029e0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4placbt__d, m4placbt, "pyb06c.p1", 0x0000, 0x020000, CRC(8102dd47) SHA1(7b834d896e104b1f42069d6fa0bce75b5c15b899), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4placbt__e, m4placbt, "pyb06d.p1", 0x0000, 0x020000, CRC(cb536b23) SHA1(874eaaa434a0212edefa05a440e7e5f826d1f92e), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4placbt__f, m4placbt, "pyb06dk.p1", 0x0000, 0x020000, CRC(275667e5) SHA1(4ac40eaa03462c1a70f0366f589bc2a59972827b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4placbt__g, m4placbt, "pyb06dr.p1", 0x0000, 0x020000, CRC(9459dcd4) SHA1(ae8b559205c6cb3f2e3b1131cd99ff7ce037c573), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4placbt__h, m4placbt, "pyb06dy.p1", 0x0000, 0x020000, CRC(a0b5471b) SHA1(95400779bb1d3fdeada5d8fca4fd66a89d3e13a2), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4placbt__i, m4placbt, "pyb06k.p1", 0x0000, 0x020000, CRC(fc8fc803) SHA1(81fa3104075b56f51c35d944fa3652aa8cce988c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4placbt__j, m4placbt, "pyb06r.p1", 0x0000, 0x020000, CRC(4f807332) SHA1(e3852ac9811d780ac87f375acaf5ec1026071b2e), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4placbt__l, m4placbt, "pyb06y.p1", 0x0000, 0x020000, CRC(7b6ce8fd) SHA1(096fb2e8a4ac5f723810766bc4245d403814a20f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 13)" ) - -GAME_CUSTOM( 199?, m4placbt__ab, m4placbt, "pyh05s.p1", 0x0000, 0x020000, CRC(3c544ad9) SHA1(50780424382fd4ccd023a784e43bb60b8f862456), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 39)" ) -GAME_CUSTOM( 199?, m4placbt__1, m4placbt, "pyh05ad.p1", 0x0000, 0x020000, CRC(948d1ad6) SHA1(66c580f0ef9035de5f50600db51d63336a8d3fbb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 29)" ) -GAME_CUSTOM( 199?, m4placbt__2, m4placbt, "pyh05b.p1", 0x0000, 0x020000, CRC(26c5fca4) SHA1(8166a195eb1aa7df99cc27e7cd6207a9192d14b9), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 30)" ) -GAME_CUSTOM( 199?, m4placbt__3, m4placbt, "pyh05bd.p1", 0x0000, 0x020000, CRC(1997b413) SHA1(cf701534243b302b83908bdf359050b325bd037a), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 31)" ) -GAME_CUSTOM( 199?, m4placbt__4, m4placbt, "pyh05c.p1", 0x0000, 0x020000, CRC(118f41b6) SHA1(29b74182d24d8d301a7aa899f4c1dd2b1a4eb84c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 32)" ) -GAME_CUSTOM( 199?, m4placbt__5, m4placbt, "pyh05d.p1", 0x0000, 0x020000, CRC(5bdef7d2) SHA1(c00a602ea6f0a53d53b13c2e4921aabd9d10b0f3), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 33)" ) -GAME_CUSTOM( 199?, m4placbt__6, m4placbt, "pyh05dk.p1", 0x0000, 0x020000, CRC(53501c45) SHA1(fa1161a0fe6916cd84370886688517e9905561d2), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 34)" ) -GAME_CUSTOM( 199?, m4placbt__7, m4placbt, "pyh05dr.p1", 0x0000, 0x020000, CRC(e05fa774) SHA1(44d53a0480b382f01ab42ca5b0521a612f672433), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 35)" ) -GAME_CUSTOM( 199?, m4placbt__8, m4placbt, "pyh05dy.p1", 0x0000, 0x020000, CRC(d4b33cbb) SHA1(e9681c025b3b661a26b89ef1fa6bbcffb6c2e233), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 36)" ) -GAME_CUSTOM( 199?, m4placbt__9, m4placbt, "pyh05k.p1", 0x0000, 0x020000, CRC(6c0254f2) SHA1(df14735ec9bc77fc35f52094598bb3fbb015944f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 37)" ) -GAME_CUSTOM( 199?, m4placbt__aa, m4placbt, "pyh05r.p1", 0x0000, 0x020000, CRC(df0defc3) SHA1(d259f6eb770130671d06e221d467df658ba0b29b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 38)" ) -GAME_CUSTOM( 199?, m4placbt__ac, m4placbt, "pyh05y.p1", 0x0000, 0x020000, CRC(ebe1740c) SHA1(424707d023fd026cf43a687ed02d4ee4398b299f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 40)" ) - -GAME_CUSTOM( 199?, m4placbt__an, m4placbt, "pyh06s.p1", 0x0000, 0x020000, CRC(10b75ddf) SHA1(d093ac51c64642400d2cf24a713dc7adb4a6a9d0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 51)" ) -GAME_CUSTOM( 199?, m4placbt__ad, m4placbt, "pyh06ad.p1", 0x0000, 0x020000, CRC(7ae70380) SHA1(c0e2b67ade2275a903359b6df7f55e44ef78828f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 41)" ) -GAME_CUSTOM( 199?, m4placbt__ae, m4placbt, "pyh06b.p1", 0x0000, 0x020000, CRC(dc588857) SHA1(dd2d2ffa87c61b200aa82337beea7d2205f1176c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 42)" ) -GAME_CUSTOM( 199?, m4placbt__af, m4placbt, "pyh06bd.p1", 0x0000, 0x020000, CRC(f7fdad45) SHA1(78334007b0a414fd3d2b8ec1645d1f04e711eb77), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 43)" ) -GAME_CUSTOM( 199?, m4placbt__ag, m4placbt, "pyh06c.p1", 0x0000, 0x020000, CRC(eb123545) SHA1(410400c219fb15f3267c2f94737fa9d2785318a0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 44)" ) -GAME_CUSTOM( 199?, m4placbt__ah, m4placbt, "pyh06d.p1", 0x0000, 0x020000, CRC(a1438321) SHA1(53f7e0156b137bea91264fe662642083ca9f5f9c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 45)" ) -GAME_CUSTOM( 199?, m4placbt__ai, m4placbt, "pyh06dk.p1", 0x0000, 0x020000, CRC(bd3a0513) SHA1(98dfd874dcbee5a3c16a0ebf42f944bf0ba50672), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 46)" ) -GAME_CUSTOM( 199?, m4placbt__aj, m4placbt, "pyh06dr.p1", 0x0000, 0x020000, CRC(0e35be22) SHA1(8ff910601bfec1b47e50ba92cdb80c1bdfe287ec), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 47)" ) -GAME_CUSTOM( 199?, m4placbt__ak, m4placbt, "pyh06dy.p1", 0x0000, 0x020000, CRC(3ad925ed) SHA1(af584333e443127071b874bafea0c8667da33f6c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 48)" ) -GAME_CUSTOM( 199?, m4placbt__al, m4placbt, "pyh06k.p1", 0x0000, 0x020000, CRC(969f2001) SHA1(e934aa7e95e91f155ee82e8eaac5c949b35e024b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 49)" ) -GAME_CUSTOM( 199?, m4placbt__am, m4placbt, "pyh06r.p1", 0x0000, 0x020000, CRC(25909b30) SHA1(8a44e59a46ffec3badb27ee62e7e9bb0adff62a4), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 50)" ) -GAME_CUSTOM( 199?, m4placbt__ao, m4placbt, "pyh06y.p1", 0x0000, 0x020000, CRC(117c00ff) SHA1(ace5d8c4f4e0647c89608db2c2ad35f241be3672), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 52)" ) - -GAME_CUSTOM( 199?, m4placbt__x, m4placbt, "pyb10h", 0x0000, 0x020000, CRC(69be6185) SHA1(f697350912505cd857acae2733ad8b48e67cab6b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4placbt__y, m4placbt, "pyb15g", 0x0000, 0x020000, CRC(369fd852) SHA1(4c532a59451352aa54a1e47d12f04403d2e9c8cb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4placbt__z, m4placbt, "pyb15t", 0x0000, 0x020000, CRC(c38d7b04) SHA1(5785344084498cab4ce2734b3d8c0dc8f0cbed5a), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4placbt__0, m4placbt, "pyh04s", 0x0000, 0x020000, CRC(c824b937) SHA1(9bc0a1e75540520ef3448dc7a3c95c81f93abe78), "Barcrest","Place Your Bets (Barcrest) (MPU4) (set 28)" ) +// "(C)1993 BARCREST" and "PYB 0.7" +GAME_CUSTOM( 199?, m4placbt, 0, "pyb07s.p1", 0x0000, 0x020000, CRC(ad02705a) SHA1(027bcbbd828e4fd23831af9554d582857e6784e1), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7)" ) +GAME_CUSTOM( 199?, m4placbt__m, m4placbt, "pyb07ad.p1", 0x0000, 0x020000, CRC(427a7489) SHA1(fb0a24da5ef7a948152e8180968aaaebbd85afa0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 AD)" ) +GAME_CUSTOM( 199?, m4placbt__n, m4placbt, "pyb07b.p1", 0x0000, 0x020000, CRC(35cdf803) SHA1(94953da72c2ee8792f53bf677483ffed15d4709c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 B)" ) +GAME_CUSTOM( 199?, m4placbt__o, m4placbt, "pyb07bd.p1", 0x0000, 0x020000, CRC(cf60da4c) SHA1(8667308f750e944894f68f20b70d42244b751e22), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 BD)" ) +GAME_CUSTOM( 199?, m4placbt__p, m4placbt, "pyb07c.p1", 0x0000, 0x020000, CRC(02874511) SHA1(b5acdcfb7d901faa1271eb16e5d36d0a484d97cb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 C)" ) +GAME_CUSTOM( 199?, m4placbt__q, m4placbt, "pyb07d.p1", 0x0000, 0x020000, CRC(48d6f375) SHA1(1891b6f8f4599d94280bcb68e9d0e9259351e2b8), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 D)" ) +GAME_CUSTOM( 199?, m4placbt__r, m4placbt, "pyb07dk.p1", 0x0000, 0x020000, CRC(85a7721a) SHA1(e3af55577b4ad4ae48e95b576e336cb019f3ecd0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 KD)" ) +GAME_CUSTOM( 199?, m4placbt__s, m4placbt, "pyb07dr.p1", 0x0000, 0x020000, CRC(36a8c92b) SHA1(a1091dea9ffe53c9ba1495f7e0d2aebe92d9bb64), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 RD)" ) +GAME_CUSTOM( 199?, m4placbt__t, m4placbt, "pyb07dy.p1", 0x0000, 0x020000, CRC(024452e4) SHA1(a92c887ab467be6bcccaec1cd5dcc1304eddba19), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 YD)" ) +GAME_CUSTOM( 199?, m4placbt__u, m4placbt, "pyb07k.p1", 0x0000, 0x020000, CRC(7f0a5055) SHA1(5620d8a3333f2f56ea24bcecf1a791e6ee0f43d9), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 K)" ) +GAME_CUSTOM( 199?, m4placbt__v, m4placbt, "pyb07r.p1", 0x0000, 0x020000, CRC(cc05eb64) SHA1(1329decc84de231e8c1929f057233b25cc8b5942), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 R)" ) +GAME_CUSTOM( 199?, m4placbt__w, m4placbt, "pyb07y.p1", 0x0000, 0x020000, CRC(f8e970ab) SHA1(66a54a9c2750ea1aa4ce562aad74c98775865ed6), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.7 Y)" ) +// "(C)1993 BARCREST" and "PYB 0.6" +GAME_CUSTOM( 199?, m4placbt__k, m4placbt, "pyb06s.p1", 0x0000, 0x020000, CRC(acd9d628) SHA1(93d8f0ffa3b9ebdd9fef39b2bc49bb85b2fac00f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6)" ) +GAME_CUSTOM( 199?, m4placbt__a, m4placbt, "pyb06ad.p1", 0x0000, 0x020000, CRC(e08b6176) SHA1(ccfb43ee033b4ed36e8656bcb4ba62230dde8466), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 AD)" ) +GAME_CUSTOM( 199?, m4placbt__b, m4placbt, "pyb06b.p1", 0x0000, 0x020000, CRC(b6486055) SHA1(e0926720aba1e9d1327c32db29220d91050ea338), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 B)" ) +GAME_CUSTOM( 199?, m4placbt__c, m4placbt, "pyb06bd.p1", 0x0000, 0x020000, CRC(6d91cfb3) SHA1(82d6ed6d6b2022d0945ec0fb8012fa4fef7029e0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 BD)" ) +GAME_CUSTOM( 199?, m4placbt__d, m4placbt, "pyb06c.p1", 0x0000, 0x020000, CRC(8102dd47) SHA1(7b834d896e104b1f42069d6fa0bce75b5c15b899), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 C)" ) +GAME_CUSTOM( 199?, m4placbt__e, m4placbt, "pyb06d.p1", 0x0000, 0x020000, CRC(cb536b23) SHA1(874eaaa434a0212edefa05a440e7e5f826d1f92e), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 D)" ) +GAME_CUSTOM( 199?, m4placbt__f, m4placbt, "pyb06dk.p1", 0x0000, 0x020000, CRC(275667e5) SHA1(4ac40eaa03462c1a70f0366f589bc2a59972827b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 KD)" ) +GAME_CUSTOM( 199?, m4placbt__g, m4placbt, "pyb06dr.p1", 0x0000, 0x020000, CRC(9459dcd4) SHA1(ae8b559205c6cb3f2e3b1131cd99ff7ce037c573), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 RD)" ) +GAME_CUSTOM( 199?, m4placbt__h, m4placbt, "pyb06dy.p1", 0x0000, 0x020000, CRC(a0b5471b) SHA1(95400779bb1d3fdeada5d8fca4fd66a89d3e13a2), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 YD)" ) +GAME_CUSTOM( 199?, m4placbt__i, m4placbt, "pyb06k.p1", 0x0000, 0x020000, CRC(fc8fc803) SHA1(81fa3104075b56f51c35d944fa3652aa8cce988c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 K)" ) +GAME_CUSTOM( 199?, m4placbt__j, m4placbt, "pyb06r.p1", 0x0000, 0x020000, CRC(4f807332) SHA1(e3852ac9811d780ac87f375acaf5ec1026071b2e), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 R)" ) +GAME_CUSTOM( 199?, m4placbt__l, m4placbt, "pyb06y.p1", 0x0000, 0x020000, CRC(7b6ce8fd) SHA1(096fb2e8a4ac5f723810766bc4245d403814a20f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 Y)" ) +// "(C)1993 BARCREST" and "PYH 0.6" +GAME_CUSTOM( 199?, m4placbt__an, m4placbt, "pyh06s.p1", 0x0000, 0x020000, CRC(10b75ddf) SHA1(d093ac51c64642400d2cf24a713dc7adb4a6a9d0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6)" ) +GAME_CUSTOM( 199?, m4placbt__ad, m4placbt, "pyh06ad.p1", 0x0000, 0x020000, CRC(7ae70380) SHA1(c0e2b67ade2275a903359b6df7f55e44ef78828f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 AD)" ) +GAME_CUSTOM( 199?, m4placbt__ae, m4placbt, "pyh06b.p1", 0x0000, 0x020000, CRC(dc588857) SHA1(dd2d2ffa87c61b200aa82337beea7d2205f1176c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 B)" ) +GAME_CUSTOM( 199?, m4placbt__af, m4placbt, "pyh06bd.p1", 0x0000, 0x020000, CRC(f7fdad45) SHA1(78334007b0a414fd3d2b8ec1645d1f04e711eb77), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 BD)" ) +GAME_CUSTOM( 199?, m4placbt__ag, m4placbt, "pyh06c.p1", 0x0000, 0x020000, CRC(eb123545) SHA1(410400c219fb15f3267c2f94737fa9d2785318a0), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 C)" ) +GAME_CUSTOM( 199?, m4placbt__ah, m4placbt, "pyh06d.p1", 0x0000, 0x020000, CRC(a1438321) SHA1(53f7e0156b137bea91264fe662642083ca9f5f9c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 D)" ) +GAME_CUSTOM( 199?, m4placbt__ai, m4placbt, "pyh06dk.p1", 0x0000, 0x020000, CRC(bd3a0513) SHA1(98dfd874dcbee5a3c16a0ebf42f944bf0ba50672), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 KD)" ) +GAME_CUSTOM( 199?, m4placbt__aj, m4placbt, "pyh06dr.p1", 0x0000, 0x020000, CRC(0e35be22) SHA1(8ff910601bfec1b47e50ba92cdb80c1bdfe287ec), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 RD)" ) +GAME_CUSTOM( 199?, m4placbt__ak, m4placbt, "pyh06dy.p1", 0x0000, 0x020000, CRC(3ad925ed) SHA1(af584333e443127071b874bafea0c8667da33f6c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 YD)" ) +GAME_CUSTOM( 199?, m4placbt__al, m4placbt, "pyh06k.p1", 0x0000, 0x020000, CRC(969f2001) SHA1(e934aa7e95e91f155ee82e8eaac5c949b35e024b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 K)" ) +GAME_CUSTOM( 199?, m4placbt__am, m4placbt, "pyh06r.p1", 0x0000, 0x020000, CRC(25909b30) SHA1(8a44e59a46ffec3badb27ee62e7e9bb0adff62a4), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 R)" ) +GAME_CUSTOM( 199?, m4placbt__ao, m4placbt, "pyh06y.p1", 0x0000, 0x020000, CRC(117c00ff) SHA1(ace5d8c4f4e0647c89608db2c2ad35f241be3672), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.6 Y)" ) +// "(C)1993 BARCREST" and "PYH 0.5" +GAME_CUSTOM( 199?, m4placbt__ab, m4placbt, "pyh05s.p1", 0x0000, 0x020000, CRC(3c544ad9) SHA1(50780424382fd4ccd023a784e43bb60b8f862456), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5)" ) +GAME_CUSTOM( 199?, m4placbt__1, m4placbt, "pyh05ad.p1", 0x0000, 0x020000, CRC(948d1ad6) SHA1(66c580f0ef9035de5f50600db51d63336a8d3fbb), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 AD)" ) +GAME_CUSTOM( 199?, m4placbt__2, m4placbt, "pyh05b.p1", 0x0000, 0x020000, CRC(26c5fca4) SHA1(8166a195eb1aa7df99cc27e7cd6207a9192d14b9), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 B)" ) +GAME_CUSTOM( 199?, m4placbt__3, m4placbt, "pyh05bd.p1", 0x0000, 0x020000, CRC(1997b413) SHA1(cf701534243b302b83908bdf359050b325bd037a), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 BD)" ) +GAME_CUSTOM( 199?, m4placbt__4, m4placbt, "pyh05c.p1", 0x0000, 0x020000, CRC(118f41b6) SHA1(29b74182d24d8d301a7aa899f4c1dd2b1a4eb84c), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 C)" ) +GAME_CUSTOM( 199?, m4placbt__5, m4placbt, "pyh05d.p1", 0x0000, 0x020000, CRC(5bdef7d2) SHA1(c00a602ea6f0a53d53b13c2e4921aabd9d10b0f3), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 D)" ) +GAME_CUSTOM( 199?, m4placbt__6, m4placbt, "pyh05dk.p1", 0x0000, 0x020000, CRC(53501c45) SHA1(fa1161a0fe6916cd84370886688517e9905561d2), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 KD)" ) +GAME_CUSTOM( 199?, m4placbt__7, m4placbt, "pyh05dr.p1", 0x0000, 0x020000, CRC(e05fa774) SHA1(44d53a0480b382f01ab42ca5b0521a612f672433), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 RD)" ) +GAME_CUSTOM( 199?, m4placbt__8, m4placbt, "pyh05dy.p1", 0x0000, 0x020000, CRC(d4b33cbb) SHA1(e9681c025b3b661a26b89ef1fa6bbcffb6c2e233), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 YD)" ) +GAME_CUSTOM( 199?, m4placbt__9, m4placbt, "pyh05k.p1", 0x0000, 0x020000, CRC(6c0254f2) SHA1(df14735ec9bc77fc35f52094598bb3fbb015944f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 K)" ) +GAME_CUSTOM( 199?, m4placbt__aa, m4placbt, "pyh05r.p1", 0x0000, 0x020000, CRC(df0defc3) SHA1(d259f6eb770130671d06e221d467df658ba0b29b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 R)" ) +GAME_CUSTOM( 199?, m4placbt__ac, m4placbt, "pyh05y.p1", 0x0000, 0x020000, CRC(ebe1740c) SHA1(424707d023fd026cf43a687ed02d4ee4398b299f), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 Y)" ) +// "(C)1993 BARCREST" and "PYH 0.4" +GAME_CUSTOM( 199?, m4placbt__0, m4placbt, "pyh04s", 0x0000, 0x020000, CRC(c824b937) SHA1(9bc0a1e75540520ef3448dc7a3c95c81f93abe78), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.4)" ) +// "(C)1993 BARCREST" and "PYH 0.1" +GAME_CUSTOM( 199?, m4placbt__x, m4placbt, "pyb10h", 0x0000, 0x020000, CRC(69be6185) SHA1(f697350912505cd857acae2733ad8b48e67cab6b), "Barcrest","Place Your Bets (Barcrest) (MPU4) (PYH 0.1)" ) +// no copyright string and "PYH 0.5" +GAME_CUSTOM( 199?, m4placbt__y, m4placbt, "pyb15g", 0x0000, 0x020000, CRC(369fd852) SHA1(4c532a59451352aa54a1e47d12f04403d2e9c8cb), "hack","Place Your Bets (Barcrest) (MPU4) (PYH 0.5 Y, hack)" ) +// no copyright string and "PYB 0.6" +GAME_CUSTOM( 199?, m4placbt__z, m4placbt, "pyb15t", 0x0000, 0x020000, CRC(c38d7b04) SHA1(5785344084498cab4ce2734b3d8c0dc8f0cbed5a), "hack","Place Your Bets (Barcrest) (MPU4) (PYB 0.6 C, hack)" ) #define M4C9_EXTRA_ROMS \ @@ -3688,21 +3698,21 @@ GAME_CUSTOM( 199?, m4bdash__ar, m4bdash, "bls02k.p1", 0x0000, 0x020000, CR GAME_CUSTOM( 199?, m4bdash__as, m4bdash, "bls02r.p1", 0x0000, 0x020000, CRC(2e9788bc) SHA1(586a30b3485e0ceb8b9b389e103fdbab78115446), "Barcrest","Boulder Dash (Barcrest) (MPU4) (set 56)" ) GAME_CUSTOM( 199?, m4bdash__au, m4bdash, "bls02y.p1", 0x0000, 0x020000, CRC(1a7b1373) SHA1(dde4754d92f0fde495ab826294a650ac81fd586e), "Barcrest","Boulder Dash (Barcrest) (MPU4) (set 58)" ) // "(C)1999 BWB" and "BO_ 2.0" -GAME_CUSTOM( 199?, m4bdash__ax, m4bdash, "bo__x__x.2_0", 0x0000, 0x020000, CRC(7e54982f) SHA1(c5187d2f6a5b202af5fd6326d52451d3b3f48f33), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0, set 1)" ) -GAME_CUSTOM( 199?, m4bdash__az, m4bdash, "bo__x_dx.2_0", 0x0000, 0x020000, CRC(d0d9e7b1) SHA1(31e858991fc1dfe9c1a8bd7955096617ebe0a4ce), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0, set 2)" ) -GAME_CUSTOM( 199?, m4bdash__a1, m4bdash, "bo__xa_x.2_0", 0x0000, 0x020000, CRC(e7054491) SHA1(7d102b1071d90ff29ea4a9418478b17b93c08059), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0, set 3)" ) -GAME_CUSTOM( 199?, m4bdash__a3, m4bdash, "bo__xb_x.2_0", 0x0000, 0x020000, CRC(adc2ecc7) SHA1(75e4216ff022c1ae0642913c9aaa7e241b806fcd), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0, set 4)" ) +GAME_CUSTOM( 199?, m4bdash__ax, m4bdash, "bo__x__x.2_0", 0x0000, 0x020000, CRC(7e54982f) SHA1(c5187d2f6a5b202af5fd6326d52451d3b3f48f33), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0)" ) +GAME_CUSTOM( 199?, m4bdash__az, m4bdash, "bo__x_dx.2_0", 0x0000, 0x020000, CRC(d0d9e7b1) SHA1(31e858991fc1dfe9c1a8bd7955096617ebe0a4ce), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 D)" ) +GAME_CUSTOM( 199?, m4bdash__a1, m4bdash, "bo__xa_x.2_0", 0x0000, 0x020000, CRC(e7054491) SHA1(7d102b1071d90ff29ea4a9418478b17b93c08059), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 K)" ) +GAME_CUSTOM( 199?, m4bdash__a3, m4bdash, "bo__xb_x.2_0", 0x0000, 0x020000, CRC(adc2ecc7) SHA1(75e4216ff022c1ae0642913c9aaa7e241b806fcd), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.0 B)" ) // "(C)1999 BWB" and "BO_ 2.1" -GAME_CUSTOM( 199?, m4bdash__ay, m4bdash, "bo__x__x.2_1", 0x0000, 0x020000, CRC(3e48d8ad) SHA1(73d69712993819d012c2ab2a8a36b7ebad419144), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1, set 1)" ) -GAME_CUSTOM( 199?, m4bdash__a0, m4bdash, "bo__x_dx.2_1", 0x0000, 0x020000, CRC(b6e146c4) SHA1(8bda363f16bd258d5c6ba1b20cecc0a76e0965f7), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1, set 2)" ) -GAME_CUSTOM( 199?, m4bdash__a2, m4bdash, "bo__xa_x.2_1", 0x0000, 0x020000, CRC(813de5e4) SHA1(498923261e49b20666a930593fcf25ccfc9a9d79), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1, set 3)" ) -GAME_CUSTOM( 199?, m4bdash__a4, m4bdash, "bo__xb_x.2_1", 0x0000, 0x020000, CRC(cbfa4db2) SHA1(d1ed60f876b4f056f478cfc23b08a7789379e143), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1, set 4)" ) +GAME_CUSTOM( 199?, m4bdash__ay, m4bdash, "bo__x__x.2_1", 0x0000, 0x020000, CRC(3e48d8ad) SHA1(73d69712993819d012c2ab2a8a36b7ebad419144), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1)" ) +GAME_CUSTOM( 199?, m4bdash__a0, m4bdash, "bo__x_dx.2_1", 0x0000, 0x020000, CRC(b6e146c4) SHA1(8bda363f16bd258d5c6ba1b20cecc0a76e0965f7), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 D)" ) +GAME_CUSTOM( 199?, m4bdash__a2, m4bdash, "bo__xa_x.2_1", 0x0000, 0x020000, CRC(813de5e4) SHA1(498923261e49b20666a930593fcf25ccfc9a9d79), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 K)" ) +GAME_CUSTOM( 199?, m4bdash__a4, m4bdash, "bo__xb_x.2_1", 0x0000, 0x020000, CRC(cbfa4db2) SHA1(d1ed60f876b4f056f478cfc23b08a7789379e143), "Bwb","Boulder Dash (Barcrest) (MPU4) (BO_ 2.1 B)" ) // no copyright string and "BLD 1.0" GAME_CUSTOM( 199?, m4bdash__a, m4bdash, "bdvarg.bin", 0x0000, 0x020000, CRC(99d579e7) SHA1(afc47144e0a8d464d8547b1ad14b0a3a1c15c027), "hack","Boulder Dash (Barcrest) (MPU4) (BLD 1.0, hack)" ) // no copyright string and "BLD 0.7" -GAME_CUSTOM( 199?, m4bdash__av, m4bdash, "bold15g", 0x0000, 0x020000, CRC(fa400d34) SHA1(2faeb9b880fb4980aa0d96b4b962c879498445f2), "hack","Boulder Dash (Barcrest) (MPU4) (BLD 0.7, hack)" ) +GAME_CUSTOM( 199?, m4bdash__av, m4bdash, "bold15g", 0x0000, 0x020000, CRC(fa400d34) SHA1(2faeb9b880fb4980aa0d96b4b962c879498445f2), "hack","Boulder Dash (Barcrest) (MPU4) (BLD 0.7 C, hack)" ) // no copyright string and "BLS 0.1" -GAME_CUSTOM( 199?, m4bdash__aw, m4bdash, "bold15t", 0x0000, 0x020000, CRC(f3f331ae) SHA1(d999c8571549d8d26b7b861299d77c7282aef700), "hack","Boulder Dash (Barcrest) (MPU4) (BLS 0.1, hack)" ) +GAME_CUSTOM( 199?, m4bdash__aw, m4bdash, "bold15t", 0x0000, 0x020000, CRC(f3f331ae) SHA1(d999c8571549d8d26b7b861299d77c7282aef700), "hack","Boulder Dash (Barcrest) (MPU4) (BLS 0.1 C, hack)" ) #define M4PRZDTY_EXTRA_ROMS \ @@ -4026,15 +4036,15 @@ GAME_CUSTOM( 199?, m4buc__ap, m4buc, "bus02r.p1", 0x000000, 0x020000 GAME_CUSTOM( 199?, m4buc__ar, m4buc, "bus02y.p1", 0x000000, 0x020000, CRC(95f7d5c5) SHA1(301949ad27963041a3cef000ed9ffd16c119b18d), "Barcrest","Buccaneer (Barcrest) (MPU4) (set 55)" ) // "(C)1999 BWB" and "BR_ 1.0" -GAME_CUSTOM( 199?, m4buc__as, m4buc, "br_sj___.1_1", 0x000000, 0x020000, CRC(02c30d48) SHA1(8e5d09d721bf6e1876d672b6c84f46666cf42b90), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 1)" ) -GAME_CUSTOM( 199?, m4buc__at, m4buc, "br_sj_b_.1_1", 0x000000, 0x020000, CRC(490ec8a7) SHA1(faf9f450d48382aeb7b8e01750fc226c30e761d3), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 2)" ) -GAME_CUSTOM( 199?, m4buc__au, m4buc, "br_sj_d_.1_1", 0x000000, 0x020000, CRC(ac4e72d6) SHA1(303f77e536b8da79a926dc5b30441ae9071f683b), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 3)" ) -GAME_CUSTOM( 199?, m4buc__av, m4buc, "br_sj_k_.1_1", 0x000000, 0x020000, CRC(1c71f108) SHA1(10f4e99b0af4a102ed23098123d82da2a8f1c5be), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 4)" ) -GAME_CUSTOM( 199?, m4buc__aw, m4buc, "br_sjb__.1_1", 0x000000, 0x020000, CRC(d15579a0) SHA1(577c7cd11da15083327dba385a6769b346be2b71), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 5)" ) -GAME_CUSTOM( 199?, m4buc__ax, m4buc, "br_sjbg_.1_1", 0x000000, 0x020000, CRC(5f8ec0ae) SHA1(8eacfd43e3f875af862b77f044b7a9f1487af4a1), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 6)" ) -GAME_CUSTOM( 199?, m4buc__ay, m4buc, "br_sjbt_.1_1", 0x000000, 0x020000, CRC(00f9581e) SHA1(1461539f501250a08bf66e4a94e4b84113dc0dc5), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 7)" ) -GAME_CUSTOM( 199?, m4buc__az, m4buc, "br_sjwb_.1_1", 0x000000, 0x020000, CRC(d15cb680) SHA1(4ab485eb2d1d57c690926e430e0c8b2af045381d), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 8)" ) -GAME_CUSTOM( 199?, m4buc__n, m4buc, "buccaneer5-15sw.bin", 0x000000, 0x020000, CRC(9b92d1f6) SHA1(d374fe966a1b039c971f278ab1113640e7629233), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0, set 9)" ) +GAME_CUSTOM( 199?, m4buc__as, m4buc, "br_sj___.1_1", 0x000000, 0x020000, CRC(02c30d48) SHA1(8e5d09d721bf6e1876d672b6c84f46666cf42b90), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0)" ) +GAME_CUSTOM( 199?, m4buc__at, m4buc, "br_sj_b_.1_1", 0x000000, 0x020000, CRC(490ec8a7) SHA1(faf9f450d48382aeb7b8e01750fc226c30e761d3), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 YD)" ) +GAME_CUSTOM( 199?, m4buc__au, m4buc, "br_sj_d_.1_1", 0x000000, 0x020000, CRC(ac4e72d6) SHA1(303f77e536b8da79a926dc5b30441ae9071f683b), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 D)" ) +GAME_CUSTOM( 199?, m4buc__av, m4buc, "br_sj_k_.1_1", 0x000000, 0x020000, CRC(1c71f108) SHA1(10f4e99b0af4a102ed23098123d82da2a8f1c5be), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 Y)" ) +GAME_CUSTOM( 199?, m4buc__aw, m4buc, "br_sjb__.1_1", 0x000000, 0x020000, CRC(d15579a0) SHA1(577c7cd11da15083327dba385a6769b346be2b71), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 B)" ) +GAME_CUSTOM( 199?, m4buc__ax, m4buc, "br_sjbg_.1_1", 0x000000, 0x020000, CRC(5f8ec0ae) SHA1(8eacfd43e3f875af862b77f044b7a9f1487af4a1), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 BAD)" ) +GAME_CUSTOM( 199?, m4buc__ay, m4buc, "br_sjbt_.1_1", 0x000000, 0x020000, CRC(00f9581e) SHA1(1461539f501250a08bf66e4a94e4b84113dc0dc5), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 BR)" ) +GAME_CUSTOM( 199?, m4buc__az, m4buc, "br_sjwb_.1_1", 0x000000, 0x020000, CRC(d15cb680) SHA1(4ab485eb2d1d57c690926e430e0c8b2af045381d), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 YDH)" ) +GAME_CUSTOM( 199?, m4buc__n, m4buc, "buccaneer5-15sw.bin", 0x000000, 0x020000, CRC(9b92d1f6) SHA1(d374fe966a1b039c971f278ab1113640e7629233), "Bwb","Buccaneer (Barcrest) (MPU4) (BR_ 1.0 K)" ) // no copyright string and "BUG 0.4" GAME_CUSTOM( 199?, m4buc__a, m4buc, "bucc15g", 0x000000, 0x020000, CRC(63dd1180) SHA1(a557af6927744b4ce2773c70db5ce1a7708ceb2c), "hack","Buccaneer (Barcrest) (MPU4) (BUG 0.4, hack)" ) // no copyright string and "BUS 0.1" @@ -4919,37 +4929,37 @@ GAME_CUSTOM( 199?, m4przlux__f, m4przlux, "plxy.p1", 0x0000, 0x010000, CRC GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring ,ROT0,company,title,GAME_FLAGS ) // "(C)1997 B.W.B." and "TD 7.1" (Td4 in the 7-segs) -GAME_CUSTOM( 199?, m4topdog, 0, "td_20_b4.7_1", 0x0000, 0x010000, CRC(fe864f25) SHA1(b9f97aaf0425b4987b5bfa0b793e9226fdffe58f), "Bwb","Top Dog (Barcrest) (MPU4) (Td4 / TD 7.1)" ) -GAME_CUSTOM( 199?, m4topdog__b, m4topdog, "td_20_d4.7_1", 0x0000, 0x010000, CRC(35da9e2d) SHA1(a2d1efd7c9cbe4bb5ce7574c6bea2edf55f3e08f), "Bwb","Top Dog (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4topdog__d, m4topdog, "td_20_k4.7_1", 0x0000, 0x010000, CRC(44618034) SHA1(0fce08e279a16d94422155c695b9b5f124b657ea), "Bwb","Top Dog (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4topdog__f, m4topdog, "td_20a_4.7_1", 0x0000, 0x010000, CRC(e7bcc879) SHA1(6c963d059867bdd506af1826fe038daa560a3623), "Bwb","Top Dog (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4topdog__h, m4topdog, "td_20b_4.7_1", 0x0000, 0x010000, CRC(79468269) SHA1(709f34a0ebea816cb268b5dc36c3d02939cd6224), "Bwb","Top Dog (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4topdog__j, m4topdog, "td_20bg4.7_1", 0x0000, 0x010000, CRC(4cb61b04) SHA1(6bb56cd06240c1bbb73406fe132e302822dec0df), "Bwb","Top Dog (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4topdog__l, m4topdog, "td_20bt4.7_1", 0x0000, 0x010000, CRC(2cdd5be2) SHA1(bc1afe70268eb7e3cb8fe1a43d262201faec0613), "Bwb","Top Dog (Barcrest) (MPU4) (set 13)" ) +GAME_CUSTOM( 199?, m4topdog, 0, "td_20_b4.7_1", 0x0000, 0x010000, CRC(fe864f25) SHA1(b9f97aaf0425b4987b5bfa0b793e9226fdffe58f), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 YD / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__b, m4topdog, "td_20_d4.7_1", 0x0000, 0x010000, CRC(35da9e2d) SHA1(a2d1efd7c9cbe4bb5ce7574c6bea2edf55f3e08f), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 D / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__d, m4topdog, "td_20_k4.7_1", 0x0000, 0x010000, CRC(44618034) SHA1(0fce08e279a16d94422155c695b9b5f124b657ea), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 Y / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__f, m4topdog, "td_20a_4.7_1", 0x0000, 0x010000, CRC(e7bcc879) SHA1(6c963d059867bdd506af1826fe038daa560a3623), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 K / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__h, m4topdog, "td_20b_4.7_1", 0x0000, 0x010000, CRC(79468269) SHA1(709f34a0ebea816cb268b5dc36c3d02939cd6224), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 B / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__j, m4topdog, "td_20bg4.7_1", 0x0000, 0x010000, CRC(4cb61b04) SHA1(6bb56cd06240c1bbb73406fe132e302822dec0df), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 BAD / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__l, m4topdog, "td_20bt4.7_1", 0x0000, 0x010000, CRC(2cdd5be2) SHA1(bc1afe70268eb7e3cb8fe1a43d262201faec0613), "Bwb","Top Dog (Barcrest) (MPU4) (TD4 7.1 BR / TD 7.1)" ) // "(C)1997 B.W.B." and "TD 7.1" (Tdt in the 7-segs) -GAME_CUSTOM( 199?, m4topdog__a, m4topdog, "td_20_bc.7_1", 0x0000, 0x010000, CRC(3af18a9f) SHA1(0db7427d934363d021265fcac811505867f20d47), "Bwb","Top Dog (Barcrest) (MPU4) (TdT / TD 7.1)" ) -GAME_CUSTOM( 199?, m4topdog__c, m4topdog, "td_20_dc.7_1", 0x0000, 0x010000, CRC(b90dfbce) SHA1(b9eb9393fbd33725d372b3b6648c261cf0ae486f), "Bwb","Top Dog (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4topdog__e, m4topdog, "td_20_kc.7_1", 0x0000, 0x010000, CRC(8ec10cf7) SHA1(cdc479f7f41f2205285a9db6539dce83feef6af4), "Bwb","Top Dog (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4topdog__g, m4topdog, "td_20a_c.7_1", 0x0000, 0x010000, CRC(ea229917) SHA1(3e42c1eca1a89b2d536498156beddddcba9899b2), "Bwb","Top Dog (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4topdog__i, m4topdog, "td_20b_c.7_1", 0x0000, 0x010000, CRC(1301d28b) SHA1(b0fc0c73dedd89bbdb5845ec9f91530959fabeb6), "Bwb","Top Dog (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4topdog__k, m4topdog, "td_20bgc.7_1", 0x0000, 0x010000, CRC(8ce831d0) SHA1(e58ca3b38e8dc7196c27cf00123a6e7122bd7f58), "Bwb","Top Dog (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4topdog__m, m4topdog, "td_20btc.7_1", 0x0000, 0x010000, CRC(67e96c75) SHA1(da9dd06f5d4773fa8e3945cf89cfdde4c465acb9), "Bwb","Top Dog (Barcrest) (MPU4) (set 14)" ) +GAME_CUSTOM( 199?, m4topdog__a, m4topdog, "td_20_bc.7_1", 0x0000, 0x010000, CRC(3af18a9f) SHA1(0db7427d934363d021265fcac811505867f20d47), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 YD / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__c, m4topdog, "td_20_dc.7_1", 0x0000, 0x010000, CRC(b90dfbce) SHA1(b9eb9393fbd33725d372b3b6648c261cf0ae486f), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 D / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__e, m4topdog, "td_20_kc.7_1", 0x0000, 0x010000, CRC(8ec10cf7) SHA1(cdc479f7f41f2205285a9db6539dce83feef6af4), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 Y / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__g, m4topdog, "td_20a_c.7_1", 0x0000, 0x010000, CRC(ea229917) SHA1(3e42c1eca1a89b2d536498156beddddcba9899b2), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 K / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__i, m4topdog, "td_20b_c.7_1", 0x0000, 0x010000, CRC(1301d28b) SHA1(b0fc0c73dedd89bbdb5845ec9f91530959fabeb6), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 B / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__k, m4topdog, "td_20bgc.7_1", 0x0000, 0x010000, CRC(8ce831d0) SHA1(e58ca3b38e8dc7196c27cf00123a6e7122bd7f58), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 BAD / TD 7.1)" ) +GAME_CUSTOM( 199?, m4topdog__m, m4topdog, "td_20btc.7_1", 0x0000, 0x010000, CRC(67e96c75) SHA1(da9dd06f5d4773fa8e3945cf89cfdde4c465acb9), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 7.1 BR / TD 7.1)" ) // "(C)1997 B.W.B." and "TD 8.3" -GAME_CUSTOM( 199?, m4topdog__n, m4topdog, "td_25_bc.8_1", 0x0000, 0x010000, CRC(ac324184) SHA1(d6743c8cbbe719b12f47792a07ec2e898630591b), "Bwb","Top Dog (Barcrest) (MPU4) (TdT / TD 8.3)" ) -GAME_CUSTOM( 199?, m4topdog__o, m4topdog, "td_25_dc.8_1", 0x0000, 0x010000, CRC(6ea8077c) SHA1(672976af1fad0257be7a15b839ec261653704be8), "Bwb","Top Dog (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4topdog__p, m4topdog, "td_25_kc.8_1", 0x0000, 0x010000, CRC(e006de48) SHA1(2c09e04d2dc3ec369c4c01eb1ff1af57156d05c1), "Bwb","Top Dog (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4topdog__q, m4topdog, "td_25a_c.8_1", 0x0000, 0x010000, CRC(84e54ba8) SHA1(dd09094854463f4b7033773be77d4a2d7f06b650), "Bwb","Top Dog (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4topdog__r, m4topdog, "td_25b_c.8_1", 0x0000, 0x010000, CRC(314f4f03) SHA1(a7c399ddf453305d0dbe2a63e57427b261c48c2c), "Bwb","Top Dog (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4topdog__s, m4topdog, "td_25bgc.8_1", 0x0000, 0x010000, CRC(efc0899c) SHA1(0d0e5a006d260a1bfcde7966c06360386c949f29), "Bwb","Top Dog (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4topdog__u, m4topdog, "td_25btc.8_1", 0x0000, 0x010000, CRC(f5dec7d9) SHA1(ffb361745aebb3c7d6bf4925d95904e8ced13a35), "Bwb","Top Dog (Barcrest) (MPU4) (set 22)" ) +GAME_CUSTOM( 199?, m4topdog__n, m4topdog, "td_25_bc.8_1", 0x0000, 0x010000, CRC(ac324184) SHA1(d6743c8cbbe719b12f47792a07ec2e898630591b), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 YD / TD 8.3)" ) +GAME_CUSTOM( 199?, m4topdog__o, m4topdog, "td_25_dc.8_1", 0x0000, 0x010000, CRC(6ea8077c) SHA1(672976af1fad0257be7a15b839ec261653704be8), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 D / TD 8.3)" ) +GAME_CUSTOM( 199?, m4topdog__p, m4topdog, "td_25_kc.8_1", 0x0000, 0x010000, CRC(e006de48) SHA1(2c09e04d2dc3ec369c4c01eb1ff1af57156d05c1), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 Y / TD 8.3)" ) +GAME_CUSTOM( 199?, m4topdog__q, m4topdog, "td_25a_c.8_1", 0x0000, 0x010000, CRC(84e54ba8) SHA1(dd09094854463f4b7033773be77d4a2d7f06b650), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 K / TD 8.3)" ) +GAME_CUSTOM( 199?, m4topdog__r, m4topdog, "td_25b_c.8_1", 0x0000, 0x010000, CRC(314f4f03) SHA1(a7c399ddf453305d0dbe2a63e57427b261c48c2c), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 B / TD 8.3)" ) +GAME_CUSTOM( 199?, m4topdog__s, m4topdog, "td_25bgc.8_1", 0x0000, 0x010000, CRC(efc0899c) SHA1(0d0e5a006d260a1bfcde7966c06360386c949f29), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 BAD / TD 8.3)" ) +GAME_CUSTOM( 199?, m4topdog__u, m4topdog, "td_25btc.8_1", 0x0000, 0x010000, CRC(f5dec7d9) SHA1(ffb361745aebb3c7d6bf4925d95904e8ced13a35), "Bwb","Top Dog (Barcrest) (MPU4) (TDT 8.3 BR / TD 8.3)" ) // "(C)1998 B.W.B." and "TD 2.0" -GAME_CUSTOM( 199?, m4topdog__t, m4topdog, "td_25bgp.2_1", 0x0000, 0x010000, CRC(f0894f48) SHA1(63056dd434d18bb9a052db25cc6ce29d0c3f9f82), "Bwb","Top Dog (Barcrest) (MPU4) (TdP / TD 2.0)" ) +GAME_CUSTOM( 199?, m4topdog__t, m4topdog, "td_25bgp.2_1", 0x0000, 0x010000, CRC(f0894f48) SHA1(63056dd434d18bb9a052db25cc6ce29d0c3f9f82), "Bwb","Top Dog (Barcrest) (MPU4) (TDP 2.0 BAD / TD 2.0)" ) // "(C)1998 B.W.B." and "TD 1.4" -GAME_CUSTOM( 199?, m4topdog__v, m4topdog, "td_30a_c.1_1", 0x0000, 0x010000, CRC(f0986895) SHA1(65c24de42a3009959c9bb7f5b42536aa6fd70c2b), "Bwb","Top Dog (Barcrest) (MPU4) (Td / TD 1.4)" ) -GAME_CUSTOM( 199?, m4topdog__w, m4topdog, "td_30b_c.1_1", 0x0000, 0x010000, CRC(7683cf72) SHA1(4319954b833ef6b0d88b8d22c5e700a9df96dc65), "Bwb","Top Dog (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4topdog__x, m4topdog, "td_30bdc.1_1", 0x0000, 0x010000, CRC(f5a4481b) SHA1(75b32b0996315b8ce833fd695377716dbeb0b7e4), "Bwb","Top Dog (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4topdog__y, m4topdog, "td_30bgc.1_1", 0x0000, 0x010000, CRC(1ffe440f) SHA1(adc1909fbbfe7e63bb89b29878bda5a6df776a6a), "Bwb","Top Dog (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4topdog__z, m4topdog, "td_30btc.1_1", 0x0000, 0x010000, CRC(5109516c) SHA1(a4919465286be9e1f0e7970a91a89738f8fcad4e), "Bwb","Top Dog (Barcrest) (MPU4) (set 27)" ) +GAME_CUSTOM( 199?, m4topdog__v, m4topdog, "td_30a_c.1_1", 0x0000, 0x010000, CRC(f0986895) SHA1(65c24de42a3009959c9bb7f5b42536aa6fd70c2b), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 K)" ) +GAME_CUSTOM( 199?, m4topdog__w, m4topdog, "td_30b_c.1_1", 0x0000, 0x010000, CRC(7683cf72) SHA1(4319954b833ef6b0d88b8d22c5e700a9df96dc65), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 B)" ) +GAME_CUSTOM( 199?, m4topdog__x, m4topdog, "td_30bdc.1_1", 0x0000, 0x010000, CRC(f5a4481b) SHA1(75b32b0996315b8ce833fd695377716dbeb0b7e4), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 BD)" ) +GAME_CUSTOM( 199?, m4topdog__y, m4topdog, "td_30bgc.1_1", 0x0000, 0x010000, CRC(1ffe440f) SHA1(adc1909fbbfe7e63bb89b29878bda5a6df776a6a), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 BAD)" ) +GAME_CUSTOM( 199?, m4topdog__z, m4topdog, "td_30btc.1_1", 0x0000, 0x010000, CRC(5109516c) SHA1(a4919465286be9e1f0e7970a91a89738f8fcad4e), "Bwb","Top Dog (Barcrest) (MPU4) (TD 1.4 BR)" ) #define M4KINGQ_EXTRA_ROMS \ ROM_REGION( 0x200000, "msm6376", 0 ) \ @@ -4966,30 +4976,31 @@ GAME_CUSTOM( 199?, m4topdog__z, m4topdog, "td_30btc.1_1", 0x0000, 0x010000, GAME(year, setname, parent ,mod4oki ,mpu4 , mpu4_state,m4_showstring ,ROT0,company,title,GAME_FLAGS ) // "(C)1996 B.W.B." and "EE 2.1" (EE4 in 7-seg) -GAME_CUSTOM( 199?, m4kingq, 0, "ee_05a_4.2_1", 0x0000, 0x010000, CRC(8dd842b6) SHA1(1c1bcaae355ceee4d7b1572b0fa1a8b23a8afdbf), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE4 / EE 2.1)" ) +GAME_CUSTOM( 199?, m4kingq, 0, "ee_05a_4.2_1", 0x0000, 0x010000, CRC(8dd842b6) SHA1(1c1bcaae355ceee4d7b1572b0fa1a8b23a8afdbf), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE4 2.1 K/ EE 2.1)" ) // "(C)1996 B.W.B." and "EE 2.2" (EE8 in 7-seg) -GAME_CUSTOM( 199?, m4kingq__a, m4kingq, "ee_05a__.2_1", 0x0000, 0x010000, CRC(36aa5fb9) SHA1(b4aaf647713e33e79be7927e5eeef240d3beedf7), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE8 / EE 2.2)" ) +GAME_CUSTOM( 199?, m4kingq__a, m4kingq, "ee_05a__.2_1", 0x0000, 0x010000, CRC(36aa5fb9) SHA1(b4aaf647713e33e79be7927e5eeef240d3beedf7), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE8 2.2 K / EE 2.2)" ) // "(C)1995 B.W.B." and "EE_ 2.0" (EE in 7-seg) -GAME_CUSTOM( 199?, m4kingq__b, m4kingq, "ee_20a__.2_1", 0x0000, 0x010000, CRC(2c61341f) SHA1(76d68ae2a44087414be8be12b3824c62311721dd), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE / EE_ 2.0)" ) -GAME_CUSTOM( 199?, m4kingq__d, m4kingq, "ee_20b__.2_1", 0x0000, 0x010000, CRC(2fc7c7c2) SHA1(3b8736a582009d7b1455769374342ff72026d2fa), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4kingq__f, m4kingq, "ee_20bd_.2_1", 0x0000, 0x010000, CRC(239de2dd) SHA1(c8021ba5bfdc10f59fec27c364035225093328d8), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4kingq__h, m4kingq, "ee_20bg_.2_1", 0x0000, 0x010000, CRC(ddc4d832) SHA1(031f987e9fced1df4acc57eb4b60911d52e1dbf6), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4kingq__i, m4kingq, "ee_20bt_.2_1", 0x0000, 0x010000, CRC(6f278771) SHA1(4459c9490be14bcbc139eebe6542325c80937ff3), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4kingq__k, m4kingq, "ee_20sb_.2_1", 0x0000, 0x010000, CRC(307ad157) SHA1(32b6187e907bfbdb87a9ad2d9ca5870b09de5e4a), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4kingq__l, m4kingq, "ee_25a_c.3_1", 0x0000, 0x010000, CRC(4dc25083) SHA1(b754b4003f73bd74d1670a36a70985ce5e48794d), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4kingq__m, m4kingq, "ee_25b_c.3_1", 0x0000, 0x010000, CRC(a6fe50ff) SHA1(011602d9624f232ba8484e57f5f33ff06091809f), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4kingq__n, m4kingq, "ee_25bdc.3_1", 0x0000, 0x010000, CRC(d0088a97) SHA1(aacc1a86bd4b321d0ee21d14147e1d135b3a5bae), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4kingq__o, m4kingq, "ee_25bgc.3_1", 0x0000, 0x010000, CRC(e4dcd86b) SHA1(b8f8ec317bf9f18e3d0ae9a9fd59349fee24530d), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4kingq__p, m4kingq, "ee_25btc.3_1", 0x0000, 0x010000, CRC(8f44347a) SHA1(09815a6e1d3a91cd2e69578bbcfef3203ddb33d6), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4kingq__r, m4kingq, "ee_25sbc.3_1", 0x0000, 0x010000, CRC(0f4bdd7c) SHA1(5c5cb3a9d6a96afc6e29149d2a8adf19aae0bc41), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4kingq__s, m4kingq, "eei20___.2_1", 0x0000, 0x010000, CRC(15f4b869) SHA1(5be6f660321cb47900dda986ef44eb5c1c324013), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 19)" ) +GAME_CUSTOM( 199?, m4kingq__b, m4kingq, "ee_20a__.2_1", 0x0000, 0x010000, CRC(2c61341f) SHA1(76d68ae2a44087414be8be12b3824c62311721dd), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 K / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__d, m4kingq, "ee_20b__.2_1", 0x0000, 0x010000, CRC(2fc7c7c2) SHA1(3b8736a582009d7b1455769374342ff72026d2fa), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 B / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__f, m4kingq, "ee_20bd_.2_1", 0x0000, 0x010000, CRC(239de2dd) SHA1(c8021ba5bfdc10f59fec27c364035225093328d8), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 BD / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__h, m4kingq, "ee_20bg_.2_1", 0x0000, 0x010000, CRC(ddc4d832) SHA1(031f987e9fced1df4acc57eb4b60911d52e1dbf6), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 BA / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__i, m4kingq, "ee_20bt_.2_1", 0x0000, 0x010000, CRC(6f278771) SHA1(4459c9490be14bcbc139eebe6542325c80937ff3), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 R / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__k, m4kingq, "ee_20sb_.2_1", 0x0000, 0x010000, CRC(307ad157) SHA1(32b6187e907bfbdb87a9ad2d9ca5870b09de5e4a), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 YD / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__s, m4kingq, "eei20___.2_1", 0x0000, 0x010000, CRC(15f4b869) SHA1(5be6f660321cb47900dda986ef44eb5c1c324013), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 2.0 C / EE_ 2.0)" ) +// "(C)1995 B.W.B." and "EE_ 2.0" (EE' in 7-seg) +GAME_CUSTOM( 199?, m4kingq__l, m4kingq, "ee_25a_c.3_1", 0x0000, 0x010000, CRC(4dc25083) SHA1(b754b4003f73bd74d1670a36a70985ce5e48794d), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 K / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__m, m4kingq, "ee_25b_c.3_1", 0x0000, 0x010000, CRC(a6fe50ff) SHA1(011602d9624f232ba8484e57f5f33ff06091809f), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 B / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__n, m4kingq, "ee_25bdc.3_1", 0x0000, 0x010000, CRC(d0088a97) SHA1(aacc1a86bd4b321d0ee21d14147e1d135b3a5bae), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 BD / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__o, m4kingq, "ee_25bgc.3_1", 0x0000, 0x010000, CRC(e4dcd86b) SHA1(b8f8ec317bf9f18e3d0ae9a9fd59349fee24530d), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 AD / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__p, m4kingq, "ee_25btc.3_1", 0x0000, 0x010000, CRC(8f44347a) SHA1(09815a6e1d3a91cd2e69578bbcfef3203ddb33d6), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 BR / EE_ 2.0)" ) +GAME_CUSTOM( 199?, m4kingq__r, m4kingq, "ee_25sbc.3_1", 0x0000, 0x010000, CRC(0f4bdd7c) SHA1(5c5cb3a9d6a96afc6e29149d2a8adf19aae0bc41), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE' 2.0 YD / EE_ 2.0)" ) // "(C)1996 B.W.B." and "EE 1.0" (EE in 7-seg) -GAME_CUSTOM( 199?, m4kingq__c, m4kingq, "ee_20a_c.1_1", 0x0000, 0x010000, CRC(948140ac) SHA1(d43f1f2903ecd809dee191087fa075c638728a5b), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE / EE 1.0)" ) -GAME_CUSTOM( 199?, m4kingq__e, m4kingq, "ee_20b_c.1_1", 0x0000, 0x010000, CRC(70d399ab) SHA1(ca2c593151f4f852c7cb66859a12e832e53cd31f), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4kingq__g, m4kingq, "ee_20bdc.1_1", 0x0000, 0x010000, CRC(cbb8c57b) SHA1(ea165199213f95128aec95ae40799faa8c457dd3), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 8)" ) -GAME_CUSTOM( 199?, m4kingq__j, m4kingq, "ee_20s_c.1_1", 0x0000, 0x010000, CRC(a0c1e313) SHA1(8a088a33e51a31ff0abdb554aa4d8ce61eaf4b7d), "Bwb","Kings & Queens (Barcrest) (MPU4) (set 11)" ) +GAME_CUSTOM( 199?, m4kingq__c, m4kingq, "ee_20a_c.1_1", 0x0000, 0x010000, CRC(948140ac) SHA1(d43f1f2903ecd809dee191087fa075c638728a5b), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 1.0 K / EE 1.0)" ) +GAME_CUSTOM( 199?, m4kingq__e, m4kingq, "ee_20b_c.1_1", 0x0000, 0x010000, CRC(70d399ab) SHA1(ca2c593151f4f852c7cb66859a12e832e53cd31f), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 1.0 B / EE 1.0)" ) +GAME_CUSTOM( 199?, m4kingq__g, m4kingq, "ee_20bdc.1_1", 0x0000, 0x010000, CRC(cbb8c57b) SHA1(ea165199213f95128aec95ae40799faa8c457dd3), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 1.0 BD / EE 1.0)" ) +GAME_CUSTOM( 199?, m4kingq__j, m4kingq, "ee_20s_c.1_1", 0x0000, 0x010000, CRC(a0c1e313) SHA1(8a088a33e51a31ff0abdb554aa4d8ce61eaf4b7d), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE 1.0 CB / EE 1.0)" ) // "(C)1998 B.W.B." and "EE2 1.0" (EE2 in 7-seg) -GAME_CUSTOM( 199?, m4kingq__t, m4kingq, "knq2pprg.bin", 0x0000, 0x010000, CRC(23b22f79) SHA1(3d8b9cbffb9b427897548981ddacf724215336a4), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE2 / EE2 1.0)" ) +GAME_CUSTOM( 199?, m4kingq__t, m4kingq, "knq2pprg.bin", 0x0000, 0x010000, CRC(23b22f79) SHA1(3d8b9cbffb9b427897548981ddacf724215336a4), "Bwb","Kings & Queens (Barcrest) (MPU4) (EE2 1.0 / EE2 1.0)" ) #define M4KINGQC_EXTRA_ROMS \ ROM_REGION( 0x200000, "msm6376", 0 ) \ @@ -5450,21 +5461,21 @@ GAME_CUSTOM( 199?, m4lvlcl__f, m4lvlcl, "ll__xgdx.3_1", 0x0000, 0x010000, CR // "(C)1998 B.W.B." and "RH__4.0" GAME_CUSTOM( 199?, m4rhs, 0, "rh_sj___.4s1", 0x0000, 0x020000, CRC(be6179cd) SHA1(8aefffdffb25bc4dd7d083c7027be746181c2ff9), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0)" ) -GAME_CUSTOM( 199?, m4rhs__b, m4rhs, "rh_sj_b_.4s1", 0x0000, 0x020000, CRC(58a4480e) SHA1(f4ecfa1debbfa9dba75263bce2c9f66741c3466f), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 3)" ) -GAME_CUSTOM( 199?, m4rhs__d, m4rhs, "rh_sj_d_.4s1", 0x0000, 0x020000, CRC(8f1176db) SHA1(283ef0b9515eac342a02489118bd30016ba85399), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 5)" ) -GAME_CUSTOM( 199?, m4rhs__e, m4rhs, "rh_sj_k_.4s1", 0x0000, 0x020000, CRC(3f2ef505) SHA1(28c3806bc48af21a2b7ea27d42ea9f6b4346f3b8), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4rhs__f, m4rhs, "rh_sja__.4s1", 0x0000, 0x020000, CRC(b8cdd5fb) SHA1(4e336dd3d61f4fdba731951c56e440766ea8efeb), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4rhs__h, m4rhs, "rh_sjab_.4s1", 0x0000, 0x020000, CRC(c8468d4c) SHA1(6a9f8fe10949712ecacca3bfcd7d5ab4860682e2), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 9)" ) -GAME_CUSTOM( 199?, m4rhs__i, m4rhs, "rh_sjad_.4s1", 0x0000, 0x020000, CRC(df4768f0) SHA1(74894b232b27e65058d59acf174172da86def95a), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 10)" ) -GAME_CUSTOM( 199?, m4rhs__j, m4rhs, "rh_sjak_.4s1", 0x0000, 0x020000, CRC(6f78eb2e) SHA1(a9fec7a7ad9334c3d8760e1982ac00651858cee8), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 11)" ) +GAME_CUSTOM( 199?, m4rhs__b, m4rhs, "rh_sj_b_.4s1", 0x0000, 0x020000, CRC(58a4480e) SHA1(f4ecfa1debbfa9dba75263bce2c9f66741c3466f), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YD)" ) +GAME_CUSTOM( 199?, m4rhs__d, m4rhs, "rh_sj_d_.4s1", 0x0000, 0x020000, CRC(8f1176db) SHA1(283ef0b9515eac342a02489118bd30016ba85399), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 D)" ) +GAME_CUSTOM( 199?, m4rhs__e, m4rhs, "rh_sj_k_.4s1", 0x0000, 0x020000, CRC(3f2ef505) SHA1(28c3806bc48af21a2b7ea27d42ea9f6b4346f3b8), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 Y)" ) +GAME_CUSTOM( 199?, m4rhs__f, m4rhs, "rh_sja__.4s1", 0x0000, 0x020000, CRC(b8cdd5fb) SHA1(4e336dd3d61f4fdba731951c56e440766ea8efeb), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 K)" ) +GAME_CUSTOM( 199?, m4rhs__h, m4rhs, "rh_sjab_.4s1", 0x0000, 0x020000, CRC(c8468d4c) SHA1(6a9f8fe10949712ecacca3bfcd7d5ab4860682e2), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YKD)" ) +GAME_CUSTOM( 199?, m4rhs__i, m4rhs, "rh_sjad_.4s1", 0x0000, 0x020000, CRC(df4768f0) SHA1(74894b232b27e65058d59acf174172da86def95a), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 KD)" ) +GAME_CUSTOM( 199?, m4rhs__j, m4rhs, "rh_sjak_.4s1", 0x0000, 0x020000, CRC(6f78eb2e) SHA1(a9fec7a7ad9334c3d8760e1982ac00651858cee8), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__4.0 YK)" ) // "(C)1998 B.W.B." and "RH__6.0" GAME_CUSTOM( 199?, m4rhs__a, m4rhs, "rh_sj__c.6_1", 0x0000, 0x020000, CRC(476f3cf2) SHA1(18ce990e28ca8565ade5eec9a62f0b243121af73), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__6.0)" ) -GAME_CUSTOM( 199?, m4rhs__c, m4rhs, "rh_sj_bc.6_1", 0x0000, 0x020000, CRC(2e37a58c) SHA1(a48c96384aa81f98bfa980c93e93523ecef3d43c), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4rhs__g, m4rhs, "rh_sja_c.6_1", 0x0000, 0x020000, CRC(b7b790e5) SHA1(e2b34dc2f6ede4f4c22b11123dfaed46f2c5c45e), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (set 8)" ) +GAME_CUSTOM( 199?, m4rhs__c, m4rhs, "rh_sj_bc.6_1", 0x0000, 0x020000, CRC(2e37a58c) SHA1(a48c96384aa81f98bfa980c93e93523ecef3d43c), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__6.0 YD)" ) +GAME_CUSTOM( 199?, m4rhs__g, m4rhs, "rh_sja_c.6_1", 0x0000, 0x020000, CRC(b7b790e5) SHA1(e2b34dc2f6ede4f4c22b11123dfaed46f2c5c45e), "Bwb","Rocky Horror Show (Barcrest) (MPU4) (RH__6.0 K)" ) // no copyright string and "RH__2.0" GAME_CUSTOM( 199?, m4rhs__k, m4rhs, "rocky15g", 0x0000, 0x020000, CRC(05f4f333) SHA1(a1b917f6c91d751fb2433e46c4c60840b47eed9e), "hack","Rocky Horror Show (Barcrest) (MPU4) (RH__2.0, hack)" ) // no copyright string and "RH__3.0" -GAME_CUSTOM( 199?, m4rhs__l, m4rhs, "rocky15t", 0x0000, 0x020000, CRC(3fbad6de) SHA1(e8d76b3878794c769187d92d2834018a84e764ac), "hack","Rocky Horror Show (Barcrest) (MPU4) (RH__3.0, hack)" ) +GAME_CUSTOM( 199?, m4rhs__l, m4rhs, "rocky15t", 0x0000, 0x020000, CRC(3fbad6de) SHA1(e8d76b3878794c769187d92d2834018a84e764ac), "hack","Rocky Horror Show (Barcrest) (MPU4) (RH__3.0 YC, hack)" ) #define M4OADRAC_EXTRA_ROMS \ @@ -5490,9 +5501,9 @@ GAME_CUSTOM( 199?, m4oadrac__f, m4oadrac, "dr__xb_x.2_0", 0x0000, 0x020000, GAME_CUSTOM( 199?, m4oadrac__h, m4oadrac, "dri_xa_x.2_0", 0x0000, 0x020000, CRC(849d2a80) SHA1(c9ff0a5a543b62ca5b885f93a35b5f40e88db8c3), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.0, set 2)" ) // "(C)1999 BWB" and "DR_ 2.1" GAME_CUSTOM( 199?, m4oadrac__a, m4oadrac, "dr__x__x.2_1", 0x0000, 0x020000, CRC(d91773af) SHA1(3d8dda0f409f55bce9c4d4e2a8377e43fe2f1f7d), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1)" ) -GAME_CUSTOM( 199?, m4oadrac__c, m4oadrac, "dr__x_dx.2_1", 0x0000, 0x020000, CRC(f8c36b67) SHA1(c765d7a5eb4d7cd74295da26a7c6f5341a1ca257), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4oadrac__e, m4oadrac, "dr__xa_x.2_1", 0x0000, 0x020000, CRC(cf1fc847) SHA1(6b09c0de15a380da1783a387569d83328f5b29a0), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4oadrac__g, m4oadrac, "dr__xb_x.2_1", 0x0000, 0x020000, CRC(85d86011) SHA1(81f8624908299aa37e75fc5d12059b3600212d35), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (set 8)" ) +GAME_CUSTOM( 199?, m4oadrac__c, m4oadrac, "dr__x_dx.2_1", 0x0000, 0x020000, CRC(f8c36b67) SHA1(c765d7a5eb4d7cd74295da26a7c6f5341a1ca257), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 D)" ) +GAME_CUSTOM( 199?, m4oadrac__e, m4oadrac, "dr__xa_x.2_1", 0x0000, 0x020000, CRC(cf1fc847) SHA1(6b09c0de15a380da1783a387569d83328f5b29a0), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 K)" ) +GAME_CUSTOM( 199?, m4oadrac__g, m4oadrac, "dr__xb_x.2_1", 0x0000, 0x020000, CRC(85d86011) SHA1(81f8624908299aa37e75fc5d12059b3600212d35), "Bwb","Ooh Aah Dracula (Barcrest) (MPU4) (DR_ 2.1 B)" ) @@ -5515,35 +5526,33 @@ GAME_CUSTOM( 199?, m4ticcla__b, m4ticcla, "ct_20_d4.7_1", 0x0000, 0x010000, GAME_CUSTOM( 199?, m4ticcla__d, m4ticcla, "ct_20a_4.7_1", 0x0000, 0x010000, CRC(35318095) SHA1(888105a674c9ea8ccad33e24c05ef42936f5f4cf), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 K)" ) GAME_CUSTOM( 199?, m4ticcla__g, m4ticcla, "ct_20bg4.7_1", 0x0000, 0x010000, CRC(7f200f42) SHA1(0ea6aa0de88982737d818c9dac9f2605cea7bc11), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 BAD)" ) GAME_CUSTOM( 199?, m4ticcla__i, m4ticcla, "ct_20bt4.7_1", 0x0000, 0x010000, CRC(7c7280a4) SHA1(3dbdc53a3474f4147427ed4fa8a161a3b364d43b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT4 7.0 BR)" ) - // "(C)1996 B.W.B." and "CT 4.0" -GAME_CUSTOM( 199?, m4ticcla__a, m4ticcla, "ct_20_bc.4_1", 0x0000, 0x010000, CRC(fb40b5ff) SHA1(723a07a2b6b08483aa75ecdd4fd9720a66201fc3), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 2)" ) -GAME_CUSTOM( 199?, m4ticcla__c, m4ticcla, "ct_20_dc.4_1", 0x0000, 0x010000, CRC(0f20a790) SHA1(02876178f0af64154d490cc048a7bc1c9a6f521b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 4)" ) -GAME_CUSTOM( 199?, m4ticcla__e, m4ticcla, "ct_20a_c.4_1", 0x0000, 0x010000, CRC(e409f49f) SHA1(8774015ec20ed9fe54e812013dfc12d408276c31), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 6)" ) -GAME_CUSTOM( 199?, m4ticcla__f, m4ticcla, "ct_20b_c.4_1", 0x0000, 0x010000, CRC(864a59cf) SHA1(abd9b7a47c791ce4f91abbd3bf97bdcd9d8296ee), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 7)" ) -GAME_CUSTOM( 199?, m4ticcla__h, m4ticcla, "ct_20bgc.4_1", 0x0000, 0x010000, CRC(215b8965) SHA1(883735066a1425b502e89d1234575294ac83746c), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 9)" ) - +GAME_CUSTOM( 199?, m4ticcla__a, m4ticcla, "ct_20_bc.4_1", 0x0000, 0x010000, CRC(fb40b5ff) SHA1(723a07a2b6b08483aa75ecdd4fd9720a66201fc3), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 YD)" ) +GAME_CUSTOM( 199?, m4ticcla__c, m4ticcla, "ct_20_dc.4_1", 0x0000, 0x010000, CRC(0f20a790) SHA1(02876178f0af64154d490cc048a7bc1c9a6f521b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 D)" ) +GAME_CUSTOM( 199?, m4ticcla__e, m4ticcla, "ct_20a_c.4_1", 0x0000, 0x010000, CRC(e409f49f) SHA1(8774015ec20ed9fe54e812013dfc12d408276c31), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 K)" ) +GAME_CUSTOM( 199?, m4ticcla__f, m4ticcla, "ct_20b_c.4_1", 0x0000, 0x010000, CRC(864a59cf) SHA1(abd9b7a47c791ce4f91abbd3bf97bdcd9d8296ee), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 B)" ) +GAME_CUSTOM( 199?, m4ticcla__h, m4ticcla, "ct_20bgc.4_1", 0x0000, 0x010000, CRC(215b8965) SHA1(883735066a1425b502e89d1234575294ac83746c), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 4.0 BAD)" ) // "(C)1996 B.W.B." and "CT4 3.0" (CTT on startup) -GAME_CUSTOM( 199?, m4ticcla__j, m4ticcla, "ct_25_bc.3_1", 0x0000, 0x010000, CRC(9d6fb3b0) SHA1(a6278579d217b5544d9f0b942a7a344596153950), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 11)" ) -GAME_CUSTOM( 199?, m4ticcla__l, m4ticcla, "ct_25_dc.3_1", 0x0000, 0x010000, CRC(eb359c82) SHA1(c137768461b859d5277b08c8783b0c8625f9b1be), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 13)" ) -GAME_CUSTOM( 199?, m4ticcla__o, m4ticcla, "ct_25a_c.3_1", 0x0000, 0x010000, CRC(28e0a15b) SHA1(b3678ba3d1f392665cc6ec9c24c2c506a41cd4fa), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 16)" ) -GAME_CUSTOM( 199?, m4ticcla__q, m4ticcla, "ct_25b_c.3_1", 0x0000, 0x010000, CRC(e0ba763d) SHA1(453d8a0dbe616c5a8c4313b918fcfe21fed473e0), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 18)" ) -GAME_CUSTOM( 199?, m4ticcla__s, m4ticcla, "ct_25bgc.3_1", 0x0000, 0x010000, CRC(1e0ca1d1) SHA1(0b1023cdd5cd3db657cea53c85e31ed83c2e5524), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 20)" ) -GAME_CUSTOM( 199?, m4ticcla__u, m4ticcla, "ct_25btc.3_1", 0x0000, 0x010000, CRC(f656897a) SHA1(92ad5c6ce2a696298bbfc8c1750825db4e3bc80b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 22)" ) - +GAME_CUSTOM( 199?, m4ticcla__j, m4ticcla, "ct_25_bc.3_1", 0x0000, 0x010000, CRC(9d6fb3b0) SHA1(a6278579d217b5544d9f0b942a7a344596153950), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 YD / CT4 3.0)" ) +GAME_CUSTOM( 199?, m4ticcla__l, m4ticcla, "ct_25_dc.3_1", 0x0000, 0x010000, CRC(eb359c82) SHA1(c137768461b859d5277b08c8783b0c8625f9b1be), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 D / CT4 3.0)" ) +GAME_CUSTOM( 199?, m4ticcla__o, m4ticcla, "ct_25a_c.3_1", 0x0000, 0x010000, CRC(28e0a15b) SHA1(b3678ba3d1f392665cc6ec9c24c2c506a41cd4fa), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 K / CT4 3.0)" ) +GAME_CUSTOM( 199?, m4ticcla__q, m4ticcla, "ct_25b_c.3_1", 0x0000, 0x010000, CRC(e0ba763d) SHA1(453d8a0dbe616c5a8c4313b918fcfe21fed473e0), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 B / CT4 3.0)" ) +GAME_CUSTOM( 199?, m4ticcla__s, m4ticcla, "ct_25bgc.3_1", 0x0000, 0x010000, CRC(1e0ca1d1) SHA1(0b1023cdd5cd3db657cea53c85e31ed83c2e5524), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 BAD / CT4 3.0)" ) +GAME_CUSTOM( 199?, m4ticcla__u, m4ticcla, "ct_25btc.3_1", 0x0000, 0x010000, CRC(f656897a) SHA1(92ad5c6ce2a696298bbfc8c1750825db4e3bc80b), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CTT 3.0 BR / CT4 3.0)" ) // "(C)1998 B.W.B." and "CT 2.3" -GAME_CUSTOM( 199?, m4ticcla__k, m4ticcla, "ct_25_dc.2_1", 0x0000, 0x010000, CRC(b49af435) SHA1(e5f92f114931e554eb8eb5fe89f50298783d541c), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 12)" ) -GAME_CUSTOM( 199?, m4ticcla__m, m4ticcla, "ct_25_kc.2_1", 0x0000, 0x010000, CRC(43309e7b) SHA1(d8f6ecbea618da7f54309f2a6e93210c51b68b81), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 14)" ) -GAME_CUSTOM( 199?, m4ticcla__n, m4ticcla, "ct_25a_c.2_1", 0x0000, 0x010000, CRC(717396ed) SHA1(6cdb0f99b40096178f6e85a0966182e704d1b99a), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 15)" ) -GAME_CUSTOM( 199?, m4ticcla__p, m4ticcla, "ct_25b_c.2_1", 0x0000, 0x010000, CRC(b3d7e79c) SHA1(86c0b419c3ca054f8a2ed785cffeb03e6c5b69f2), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 17)" ) -GAME_CUSTOM( 199?, m4ticcla__r, m4ticcla, "ct_25bgc.2_1", 0x0000, 0x010000, CRC(0869d04c) SHA1(0f0fd3982ac376c66d139655a50639f48bf740b4), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 19)" ) -GAME_CUSTOM( 199?, m4ticcla__t, m4ticcla, "ct_25btc.2_1", 0x0000, 0x010000, CRC(032ec96d) SHA1(c5cef956bc0e3eb45cf128c8d0b4e1d6e5b01afe), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 21)" ) -GAME_CUSTOM( 199?, m4ticcla__v, m4ticcla, "ct_30_dc.2_1", 0x0000, 0x010000, CRC(57fabdfb) SHA1(ad86621e4bc8141508c691e148a66e74fc070a88), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 23)" ) -GAME_CUSTOM( 199?, m4ticcla__w, m4ticcla, "ct_30a_c.2_1", 0x0000, 0x010000, CRC(800c94c3) SHA1(c78497899ea9cf27e66f6e8526b95d51215053b2), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 24)" ) -GAME_CUSTOM( 199?, m4ticcla__x, m4ticcla, "ct_30b_c.2_1", 0x0000, 0x010000, CRC(3036ef04) SHA1(de514a85d45d11a880ed147aebe211ffb5bee146), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 25)" ) -GAME_CUSTOM( 199?, m4ticcla__y, m4ticcla, "ct_30bdc.2_1", 0x0000, 0x010000, CRC(9852c9d4) SHA1(37bb20d63fa70ea99e18a16a8f11c461a377a07a), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 26)" ) -GAME_CUSTOM( 199?, m4ticcla__z, m4ticcla, "ct_30bgc.2_1", 0x0000, 0x010000, CRC(a1bc89b4) SHA1(4c82ce8fe78768443823e868f7cc49a06e7cc441), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 27)" ) -GAME_CUSTOM( 199?, m4ticcla__0, m4ticcla, "ct_30btc.2_1", 0x0000, 0x010000, CRC(cde0d12e) SHA1(5427ad700311c30cc86eccc7f1ff36cf0da3b980), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (set 28)" ) +GAME_CUSTOM( 199?, m4ticcla__k, m4ticcla, "ct_25_dc.2_1", 0x0000, 0x010000, CRC(b49af435) SHA1(e5f92f114931e554eb8eb5fe89f50298783d541c), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 D)" ) +GAME_CUSTOM( 199?, m4ticcla__m, m4ticcla, "ct_25_kc.2_1", 0x0000, 0x010000, CRC(43309e7b) SHA1(d8f6ecbea618da7f54309f2a6e93210c51b68b81), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 Y)" ) +GAME_CUSTOM( 199?, m4ticcla__n, m4ticcla, "ct_25a_c.2_1", 0x0000, 0x010000, CRC(717396ed) SHA1(6cdb0f99b40096178f6e85a0966182e704d1b99a), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 K)" ) +GAME_CUSTOM( 199?, m4ticcla__p, m4ticcla, "ct_25b_c.2_1", 0x0000, 0x010000, CRC(b3d7e79c) SHA1(86c0b419c3ca054f8a2ed785cffeb03e6c5b69f2), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 B)" ) +GAME_CUSTOM( 199?, m4ticcla__r, m4ticcla, "ct_25bgc.2_1", 0x0000, 0x010000, CRC(0869d04c) SHA1(0f0fd3982ac376c66d139655a50639f48bf740b4), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 BAD)" ) +GAME_CUSTOM( 199?, m4ticcla__t, m4ticcla, "ct_25btc.2_1", 0x0000, 0x010000, CRC(032ec96d) SHA1(c5cef956bc0e3eb45cf128c8d0b4e1d6e5b01afe), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.3 BR)" ) +// "(C)1998 B.W.B." and "CT 2.4" +GAME_CUSTOM( 199?, m4ticcla__v, m4ticcla, "ct_30_dc.2_1", 0x0000, 0x010000, CRC(57fabdfb) SHA1(ad86621e4bc8141508c691e148a66e74fc070a88), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 D)" ) +GAME_CUSTOM( 199?, m4ticcla__w, m4ticcla, "ct_30a_c.2_1", 0x0000, 0x010000, CRC(800c94c3) SHA1(c78497899ea9cf27e66f6e8526b95d51215053b2), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 K)" ) +GAME_CUSTOM( 199?, m4ticcla__x, m4ticcla, "ct_30b_c.2_1", 0x0000, 0x010000, CRC(3036ef04) SHA1(de514a85d45d11a880ed147aebe211ffb5bee146), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 B)" ) +GAME_CUSTOM( 199?, m4ticcla__y, m4ticcla, "ct_30bdc.2_1", 0x0000, 0x010000, CRC(9852c9d4) SHA1(37bb20d63fa70ea99e18a16a8f11c461a377a07a), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BD)" ) +GAME_CUSTOM( 199?, m4ticcla__z, m4ticcla, "ct_30bgc.2_1", 0x0000, 0x010000, CRC(a1bc89b4) SHA1(4c82ce8fe78768443823e868f7cc49a06e7cc441), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BAD)" ) +GAME_CUSTOM( 199?, m4ticcla__0, m4ticcla, "ct_30btc.2_1", 0x0000, 0x010000, CRC(cde0d12e) SHA1(5427ad700311c30cc86eccc7f1ff36cf0da3b980), "Bwb","Tic Tac Toe Classic (Barcrest) (MPU4) (CT 2.4 BR)" ) #define M4TICGLC_EXTRA_ROMS \ ROM_REGION( 0x200000, "msm6376", 0 ) \ diff --git a/src/mame/drivers/namcofl.cpp b/src/mame/drivers/namcofl.cpp index ece0a205a75..0ab2074e09f 100644 --- a/src/mame/drivers/namcofl.cpp +++ b/src/mame/drivers/namcofl.cpp @@ -611,10 +611,10 @@ static MACHINE_CONFIG_START( namcofl, namcofl_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_C352_ADD("c352", 48384000/2, 288) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present. + //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MACHINE_CONFIG_END ROM_START( speedrcr ) diff --git a/src/mame/drivers/namconb1.cpp b/src/mame/drivers/namconb1.cpp index 32a698289dd..e54f1e7463d 100644 --- a/src/mame/drivers/namconb1.cpp +++ b/src/mame/drivers/namconb1.cpp @@ -1146,10 +1146,10 @@ static MACHINE_CONFIG_START( namconb1, namconb1_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_C352_ADD("c352", MASTER_CLOCK/2, 288) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present. + //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MACHINE_CONFIG_END static MACHINE_CONFIG_START( namconb2, namconb1_state ) @@ -1183,10 +1183,10 @@ static MACHINE_CONFIG_START( namconb2, namconb1_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_C352_ADD("c352", MASTER_CLOCK/2, 288) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present. + //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MACHINE_CONFIG_END diff --git a/src/mame/drivers/namcond1.cpp b/src/mame/drivers/namcond1.cpp index 1a4022c495f..5a08b3b8f2c 100644 --- a/src/mame/drivers/namcond1.cpp +++ b/src/mame/drivers/namcond1.cpp @@ -209,10 +209,10 @@ static MACHINE_CONFIG_START( namcond1, namcond1_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_C352_ADD("c352", XTAL_49_152MHz/2, 288) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present. + //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MCFG_AT28C16_ADD( "at28c16", nullptr ) diff --git a/src/mame/drivers/namcos11.cpp b/src/mame/drivers/namcos11.cpp index 1c36939e343..7886c5e7bbc 100644 --- a/src/mame/drivers/namcos11.cpp +++ b/src/mame/drivers/namcos11.cpp @@ -593,11 +593,11 @@ static MACHINE_CONFIG_START( coh110, namcos11_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", 20013200, 228) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_C352_ADD("c352", 25401600, 288) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present. + //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MCFG_AT28C16_ADD( "at28c16", nullptr ) MACHINE_CONFIG_END diff --git a/src/mame/drivers/namcos12.cpp b/src/mame/drivers/namcos12.cpp index c9aac3d4668..80edc04f403 100644 --- a/src/mame/drivers/namcos12.cpp +++ b/src/mame/drivers/namcos12.cpp @@ -1665,7 +1665,7 @@ static MACHINE_CONFIG_START( coh700, namcos12_state ) MCFG_PSX_DMA_CHANNEL_READ( "maincpu", 5, psx_dma_read_delegate( FUNC( namcos12_state::namcos12_rom_read ), (namcos12_state *) owner ) ) - MCFG_CPU_ADD("sub", H83002, 16737350) + MCFG_CPU_ADD("sub", H83002, 16934400) // frequency based on research (superctr) MCFG_CPU_PROGRAM_MAP(s12h8rwmap) MCFG_CPU_IO_MAP(s12h8iomap) @@ -1691,11 +1691,11 @@ static MACHINE_CONFIG_START( coh700, namcos12_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MCFG_C352_ADD("c352", 29168000, 332) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_C352_ADD("c352", 25401600, 288) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + //MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) // Second DAC not present. + //MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( ptblank2, coh700 ) diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp index 33e43c44051..bb72042a459 100644 --- a/src/mame/drivers/namcos22.cpp +++ b/src/mame/drivers/namcos22.cpp @@ -3781,10 +3781,10 @@ static MACHINE_CONFIG_START( namcos22, namcos22_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2, 288) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MACHINE_CONFIG_END @@ -3840,10 +3840,10 @@ static MACHINE_CONFIG_START( namcos22s, namcos22_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2, 288) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( alpine, namcos22s ) diff --git a/src/mame/drivers/namcos23.cpp b/src/mame/drivers/namcos23.cpp index 0d730716a07..6493eeb41f2 100644 --- a/src/mame/drivers/namcos23.cpp +++ b/src/mame/drivers/namcos23.cpp @@ -1267,10 +1267,17 @@ Notes: #include "machine/namco_settings.h" #define JVSCLOCK (XTAL_14_7456MHz) -#define H8CLOCK (16737350) /* from 2061 */ -#define BUSCLOCK (16737350*2) /* 33MHz CPU bus clock / input */ -#define C352CLOCK (25992000) /* measured at 25.992MHz from 2061 pin 9 */ -#define C352DIV (296) + +//#define H8CLOCK (16737350) /* from 2061 */ +//#define BUSCLOCK (16737350*2) /* 33MHz CPU bus clock / input */ +//#define C352CLOCK (25401600) /* previously measured at 25.992MHz from 2061 pin 9 */ +//#define C352DIV (296) + +#define H8CLOCK (16934400) /* based on research (superctr) */ +#define BUSCLOCK (16934400*2) +#define C352CLOCK (25401600) +#define C352DIV (288) + #define VSYNC1 (59.8824) #define VSYNC2 (59.915) #define HSYNC (16666150) @@ -3587,10 +3594,10 @@ static MACHINE_CONFIG_START( gorgon, namcos23_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_C352_ADD("c352", C352CLOCK, C352DIV) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.00) + MCFG_SOUND_ROUTE(2, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(3, "rspeaker", 1.00) MACHINE_CONFIG_END diff --git a/src/mame/drivers/nanos.cpp b/src/mame/drivers/nanos.cpp index 9951564fc39..de6ae52883c 100644 --- a/src/mame/drivers/nanos.cpp +++ b/src/mame/drivers/nanos.cpp @@ -318,14 +318,14 @@ WRITE8_MEMBER(nanos_state::nanos_port_b_w) UINT8 nanos_state::row_number(UINT8 code) { - if BIT(code,0) return 0; - if BIT(code,1) return 1; - if BIT(code,2) return 2; - if BIT(code,3) return 3; - if BIT(code,4) return 4; - if BIT(code,5) return 5; - if BIT(code,6) return 6; - if BIT(code,7) return 7; + if (BIT(code, 0)) return 0; + if (BIT(code, 1)) return 1; + if (BIT(code, 2)) return 2; + if (BIT(code, 3)) return 3; + if (BIT(code, 4)) return 4; + if (BIT(code, 5)) return 5; + if (BIT(code, 6)) return 6; + if (BIT(code, 7)) return 7; return 0; } diff --git a/src/mame/drivers/pasopia.cpp b/src/mame/drivers/pasopia.cpp index a83adb8872b..99b91514e16 100644 --- a/src/mame/drivers/pasopia.cpp +++ b/src/mame/drivers/pasopia.cpp @@ -219,13 +219,13 @@ READ8_MEMBER( pasopia_state::rombank_r ) READ8_MEMBER( pasopia_state::keyb_r ) { UINT8 i,j,res = 0; - for(j=0;j<3;j++) + for (j=0; j<3; j++) { - if BIT(m_mux_data, 4+j) + if (BIT(m_mux_data, 4+j)) { - for(i=0;i<4;i++) + for (i=0; i<4; i++) { - if BIT(m_mux_data, i) + if (BIT(m_mux_data, i)) res |= m_keyboard[j*4+i]->read(); } } diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp index 9111e712156..d96e490d972 100644 --- a/src/mame/drivers/pasopia7.cpp +++ b/src/mame/drivers/pasopia7.cpp @@ -736,13 +736,13 @@ GFXDECODE_END READ8_MEMBER( pasopia7_state::keyb_r ) { UINT8 i,j,res = 0; - for(j=0;j<3;j++) + for (j=0; j<3; j++) { - if BIT(m_mux_data, 4+j) + if (BIT(m_mux_data, 4+j)) { - for(i=0;i<4;i++) + for (i=0; i<4; i++) { - if BIT(m_mux_data, i) + if (BIT(m_mux_data, i)) res |= m_keyboard[j*4+i]->read(); } } diff --git a/src/mame/drivers/pegasus.cpp b/src/mame/drivers/pegasus.cpp index e3af28d9586..2b57f9fb6cc 100644 --- a/src/mame/drivers/pegasus.cpp +++ b/src/mame/drivers/pegasus.cpp @@ -124,7 +124,7 @@ READ8_MEMBER( pegasus_state::pegasus_keyboard_r ) if (!BIT(m_kbd_row, i)) data &= m_io_keyboard[i]->read(); m_kbd_irq = (data == 0xff) ? 1 : 0; - if BIT(m_control_bits, 3) + if (BIT(m_control_bits, 3)) data<<=4; return data; } @@ -169,7 +169,7 @@ READ8_MEMBER( pegasus_state::pegasus_pcg_r ) WRITE8_MEMBER( pegasus_state::pegasus_pcg_w ) { -// if BIT(m_control_bits, 1) +// if (BIT(m_control_bits, 1)) { UINT8 code = m_p_videoram[offset] & 0x7f; m_p_pcgram[(code << 4) | (~m_kbd_row & 15)] = data; diff --git a/src/mame/drivers/peyper.cpp b/src/mame/drivers/peyper.cpp index 4f50229c96c..df2d1f31cce 100644 --- a/src/mame/drivers/peyper.cpp +++ b/src/mame/drivers/peyper.cpp @@ -14,9 +14,9 @@ Wolf Man (Peyper) Nemesis (Peyper) Odisea Paris-Dakar (Peyper) + Hang-On (Sonic) Others not emulated (need roms): - Hang-On (Sonic) Night Fever (Sonic) Storm (Sonic) @@ -795,8 +795,12 @@ ROM_END /*------------------------------------------------------------------- / Hang-On (1988) /-------------------------------------------------------------------*/ - - +ROM_START(hangonp) + ROM_REGION(0x6000, "maincpu", 0) + ROM_LOAD("hangon1.bin", 0x0000, 0x2000, CRC(b0672137) SHA1(e0bd0808a3a8c6df200b0edc7b5e8cf293a659b7)) + ROM_LOAD("hangon2.bin", 0x2000, 0x2000, CRC(6e1e55c0) SHA1(473c882a0eb68807969894b82be2b86d7c463c93)) + ROM_LOAD("hangon3.bin", 0x4000, 0x2000, CRC(26949f2f) SHA1(e3e1a436ce59c7f1c2904cd8f50f2ba4a4e37638)) +ROM_END /*------------------------------------------------------------------- / Odisea Paris-Dakar (1987) /-------------------------------------------------------------------*/ @@ -838,3 +842,4 @@ GAME( 1987, sonstwr2, sonstwar, peyper, sonstwar, peyper_state, peyper, ROT0 GAME( 1987, wolfman, 0, peyper, wolfman, peyper_state, wolfman, ROT0, "Peyper", "Wolf Man", MACHINE_MECHANICAL) GAME( 1986, nemesisp, 0, peyper, wolfman, peyper_state, wolfman, ROT0, "Peyper", "Nemesis", MACHINE_MECHANICAL) GAME( 1987, odisea, 0, peyper, odisea, peyper_state, wolfman, ROT0, "Peyper", "Odisea Paris-Dakar", MACHINE_MECHANICAL) +GAME( 1988, hangonp, 0, peyper, sonstwar, peyper_state, peyper, ROT0, "Sonic", "Hang-On (Sonic)", MACHINE_MECHANICAL) // inputs to be checked diff --git a/src/mame/drivers/phc25.cpp b/src/mame/drivers/phc25.cpp index 9f87d0313b1..9c4462062f0 100644 --- a/src/mame/drivers/phc25.cpp +++ b/src/mame/drivers/phc25.cpp @@ -262,7 +262,7 @@ INPUT_PORTS_END READ8_MEMBER( phc25_state::video_ram_r ) { - if BIT(m_port40, 7) // graphics + if (BIT(m_port40, 7)) // graphics { return m_video_ram[offset]; } diff --git a/src/mame/drivers/play_1.cpp b/src/mame/drivers/play_1.cpp index 1095d67e464..47d2ee83e67 100644 --- a/src/mame/drivers/play_1.cpp +++ b/src/mame/drivers/play_1.cpp @@ -5,12 +5,17 @@ PINBALL Playmatic MPU 1 -Status: -- Main board is emulated and appears to be working (currently in attract mode) -- Displays to add -- Switches, lamps, solenoids to add -- Sound board to emulate -- Mechanical sounds to add +ToDo: +- Sounds play too fast, especially in Chance. +- Add mechanical sounds +- Lamps, solenoids +- Ball numbers are individual lamps + +Notes: +X is the outhole. +Chance: When starting the game, hold down X to make "Player 1" light up. +Others: When starting the game, hold down X, then release it and hit Z to advance + the player to the correct number otherwise some weird bugs can happen. **********************************************************************************/ @@ -18,6 +23,8 @@ Status: #include "machine/genpin.h" #include "cpu/cosmac/cosmac.h" #include "machine/clock.h" +#include "sound/speaker.h" +#include "play_1.lh" class play_1_state : public driver_device { @@ -25,12 +32,10 @@ public: play_1_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_dips(*this, "X") + , m_monotone(*this, "monotone") { } - DECLARE_DRIVER_INIT(play_1); - DECLARE_READ8_MEMBER(port00_r); - DECLARE_READ8_MEMBER(port01_r); - DECLARE_READ8_MEMBER(port06_r); DECLARE_READ8_MEMBER(port07_r); DECLARE_WRITE8_MEMBER(port01_w); DECLARE_WRITE8_MEMBER(port02_w); @@ -38,7 +43,6 @@ public: DECLARE_WRITE8_MEMBER(port04_w); DECLARE_WRITE8_MEMBER(port05_w); DECLARE_WRITE8_MEMBER(port06_w); - DECLARE_WRITE8_MEMBER(port07_w); DECLARE_READ_LINE_MEMBER(clear_r); DECLARE_READ_LINE_MEMBER(ef2_r); DECLARE_READ_LINE_MEMBER(ef3_r); @@ -47,14 +51,19 @@ public: private: UINT16 m_resetcnt; + UINT16 m_clockcnt; + UINT8 m_segment; + UINT8 m_match; virtual void machine_reset() override; required_device m_maincpu; + required_ioport_array<4> m_dips; + required_device m_monotone; }; static ADDRESS_MAP_START( play_1_map, AS_PROGRAM, 8, play_1_state ) ADDRESS_MAP_GLOBAL_MASK(0xfff) AM_RANGE(0x0000, 0x07ff) AM_ROM - AM_RANGE(0x0800, 0x081f) AM_RAM + AM_RANGE(0x0800, 0x081f) AM_RAM AM_SHARE("nvram") // capacitor acting as a 2-month "battery" AM_RANGE(0x0c00, 0x0c1f) AM_RAM ADDRESS_MAP_END @@ -62,81 +71,309 @@ static ADDRESS_MAP_START( chance_map, AS_PROGRAM, 8, play_1_state ) ADDRESS_MAP_GLOBAL_MASK(0xfff) AM_RANGE(0x0000, 0x0bff) AM_ROM AM_RANGE(0x0c00, 0x0c1f) AM_RAM - AM_RANGE(0x0e00, 0x0e1f) AM_RAM + AM_RANGE(0x0e00, 0x0e1f) AM_RAM AM_SHARE("nvram") // capacitor acting as a 2-month "battery" ADDRESS_MAP_END static ADDRESS_MAP_START( play_1_io, AS_IO, 8, play_1_state ) - AM_RANGE(0x00, 0x00) AM_READ(port00_r) - AM_RANGE(0x01, 0x01) AM_READWRITE(port01_r,port01_w) //segments - AM_RANGE(0x02, 0x02) AM_WRITE(port02_w) // N1-8 - AM_RANGE(0x03, 0x03) AM_WRITE(port03_w) // D1-4 - AM_RANGE(0x04, 0x04) AM_WRITE(port04_w) // U1-8 - AM_RANGE(0x05, 0x05) AM_WRITE(port05_w) // V1-8 - AM_RANGE(0x06, 0x06) AM_READWRITE(port06_r,port06_w) // W1-8, input selector - AM_RANGE(0x07, 0x07) AM_READ(port07_r) // another input selector + AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_WRITE(port01_w) //segments + AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2") AM_WRITE(port02_w) // N1-8 + AM_RANGE(0x03, 0x03) AM_READ_PORT("IN3") AM_WRITE(port03_w) // D1-4 + AM_RANGE(0x04, 0x04) AM_READ_PORT("IN4") AM_WRITE(port04_w) // U1-8 + AM_RANGE(0x05, 0x05) AM_READ_PORT("IN5") AM_WRITE(port05_w) // V1-8 + AM_RANGE(0x06, 0x06) AM_READ_PORT("IN6") AM_WRITE(port06_w) // W1-8 + AM_RANGE(0x07, 0x07) AM_READ(port07_r) ADDRESS_MAP_END -static INPUT_PORTS_START( play_1 ) - PORT_START("DSW0") - PORT_DIPNAME(0x01, 0x01, DEF_STR( Coinage ) ) // this is something else, don't know what yet - PORT_DIPSETTING ( 0x00, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING ( 0x01, DEF_STR( 1C_1C ) ) +static INPUT_PORTS_START( chance ) + PORT_START("X.0") +// PORT_DIPNAME(0x01, 0x01, DEF_STR( Coinage ) ) // this is something else, don't know what yet +// PORT_DIPSETTING ( 0x00, DEF_STR( 1C_3C ) ) +// PORT_DIPSETTING ( 0x01, DEF_STR( 1C_1C ) ) PORT_DIPNAME(0x02, 0x00, "Balls") PORT_DIPSETTING ( 0x00, "3" ) PORT_DIPSETTING ( 0x02, "5" ) PORT_DIPNAME(0x04, 0x00, "Special award") PORT_DIPSETTING ( 0x00, "Free game" ) PORT_DIPSETTING ( 0x04, "Extra ball" ) - // rotary switches for credits per coin + + PORT_START("X.1") + PORT_DIPNAME(0xff, 0x10, "Coinage for slot 2" ) + PORT_DIPSETTING ( 0x01, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING ( 0x02, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING ( 0x04, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING ( 0x08, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING ( 0x10, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING ( 0x20, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING ( 0x40, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING ( 0x80, DEF_STR( 1C_6C ) ) + + PORT_START("X.2") + PORT_DIPNAME(0xff, 0x10, "Coinage for slot 3" ) + PORT_DIPSETTING ( 0x01, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING ( 0x02, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING ( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING ( 0x08, DEF_STR( 1C_6C ) ) + PORT_DIPSETTING ( 0x10, DEF_STR( 1C_7C ) ) + PORT_DIPSETTING ( 0x20, DEF_STR( 1C_8C ) ) + PORT_DIPSETTING ( 0x40, DEF_STR( 1C_9C ) ) + PORT_DIPSETTING ( 0x80, "1 coin 10 credits" ) + + PORT_START("IN1") // 11-18 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole trough + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_T) // Tilt + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y) + + PORT_START("IN2") // 21-28 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G) + + PORT_START("IN3") // 31-38 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_K) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_L) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N) + + PORT_START("IN4") // 41-48 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) // lastlap trough + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON) // lastlap outhole + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE) + + PORT_START("IN5") // 51-58 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_UP) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN) + + PORT_START("IN6") // 61-68 + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_0_PAD) // Show total free replays + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) // Show total games paid + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) // Show 1st chute + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD) // Show 2nd shute + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD) // Show 3rd chute + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) + + PORT_START("X.3") // 71-78 + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9) // Test + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) // Reset Unit 1,2,3,4,5 + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) // Show high score to date + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD) // Set 3rd replay score + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD) // Set 2nd replay score + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD) // Set 1st replay score + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END +static INPUT_PORTS_START( play_1 ) + PORT_INCLUDE( chance ) + PORT_MODIFY("IN4") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE) + + PORT_MODIFY("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START ) // start + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_T) // Tilt + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) // trough + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y) +INPUT_PORTS_END + +static INPUT_PORTS_START( spcgambl ) + PORT_INCLUDE( play_1 ) + PORT_MODIFY("IN1") // 11-18 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START ) // start + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_T) // Tilt + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y) + + PORT_MODIFY("IN2") // 21-28 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) // trough + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G) +INPUT_PORTS_END + + void play_1_state::machine_reset() { m_resetcnt = 0; -} - -READ8_MEMBER( play_1_state::port00_r ) -{ - return 0; -} - -READ8_MEMBER( play_1_state::port01_r ) -{ - return 0; -} - -READ8_MEMBER( play_1_state::port06_r ) -{ - return 0xff; // Big Town etc check this at boot + m_clockcnt = 0; + m_segment = 0; + m_match = 0; } READ8_MEMBER( play_1_state::port07_r ) { - return 0; + UINT8 data = m_dips[3]->read(); + data |= (m_segment & m_dips[1]->read()) ? 0x40 : 0; + data |= (m_segment & m_dips[2]->read()) ? 0x80 : 0; + return data; } WRITE8_MEMBER( play_1_state::port01_w ) { + static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511 + // d0-1 via 4013 to match-game board + // d4-7 via 4511 to match-game board + if (BIT(data, 0)) + output().set_digit_value(40, patterns[1]); + else + output().set_digit_value(40, 0); + + if (BIT(data, 1)) + output().set_digit_value(45, patterns[0]); + else + output().set_digit_value(45, 0); + + m_match = patterns[data>>4] & 0x7f; } WRITE8_MEMBER( play_1_state::port02_w ) { + // N1-8, segments and other + m_segment = data; } WRITE8_MEMBER( play_1_state::port03_w ) { + static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511 + // D1-4, digit select + switch (~data & 15) + { + case 0: + // M1 thru M8 (unknown purpose) bit 4 lights up the bumpers + break; + case 1: + // a combination of bits could set higher frequencies, but that isn't documented + if (BIT(m_segment, 0)) + m_monotone->set_unscaled_clock(523); + else + if (BIT(m_segment, 1)) + m_monotone->set_unscaled_clock(659); + else + if (BIT(m_segment, 2)) + m_monotone->set_unscaled_clock(784); + else + if (BIT(m_segment, 3)) + m_monotone->set_unscaled_clock(988); + else + if ((m_segment & 0x0F)==0) + m_monotone->set_unscaled_clock(0); + // Bit 4 adjusts the volume, not emulated yet + + // display player number + { + char wordnum[8]; + UINT8 player = m_segment >> 5; + for (UINT8 i = 1; i < 5; i++) + { + sprintf(wordnum,"text%d", i); + output().set_value(wordnum, (player == i) ? 0:1); + } + } + break; + case 2: + output().set_digit_value(0, patterns[m_segment>>4]); + output().set_digit_value(1, patterns[m_segment&15]); + break; + case 3: + output().set_digit_value(2, patterns[m_segment>>4]); + output().set_digit_value(3, patterns[m_segment&15]); + break; + case 4: + output().set_digit_value(4, patterns[m_segment>>4]); + output().set_digit_value(5, patterns[m_segment&15]); + output().set_digit_value(14, patterns[m_segment>>4]); + output().set_digit_value(15, patterns[m_segment&15]); + output().set_digit_value(24, patterns[m_segment>>4]); + output().set_digit_value(25, patterns[m_segment&15]); + output().set_digit_value(34, patterns[m_segment>>4]); + output().set_digit_value(35, patterns[m_segment&15]); + break; + case 5: + output().set_digit_value(10, patterns[m_segment>>4]); + output().set_digit_value(11, patterns[m_segment&15]); + break; + case 6: + output().set_digit_value(12, patterns[m_segment>>4]); + output().set_digit_value(13, patterns[m_segment&15]); + break; + case 7: + output().set_digit_value(20, patterns[m_segment>>4]); + output().set_digit_value(21, patterns[m_segment&15]); + break; + case 8: + output().set_digit_value(22, patterns[m_segment>>4]); + output().set_digit_value(23, patterns[m_segment&15]); + break; + case 9: + output().set_digit_value(30, patterns[m_segment>>4]); + output().set_digit_value(31, patterns[m_segment&15]); + break; + case 10: + case 11: + output().set_digit_value(32, patterns[m_segment>>4]); + output().set_digit_value(33, patterns[m_segment&15]); + break; + default: + break; + } } WRITE8_MEMBER( play_1_state::port04_w ) { + // U1-8 } WRITE8_MEMBER( play_1_state::port05_w ) { + // V1-8 } WRITE8_MEMBER( play_1_state::port06_w ) { + // W1-8 } READ_LINE_MEMBER( play_1_state::clear_r ) @@ -144,39 +381,41 @@ READ_LINE_MEMBER( play_1_state::clear_r ) // A hack to make the machine reset itself on boot if (m_resetcnt < 0xffff) m_resetcnt++; - return (m_resetcnt == 0xff00) ? 0 : 1; + return (m_resetcnt == 0x8000) ? 0 : 1; } READ_LINE_MEMBER( play_1_state::ef2_r ) { - return BIT(ioport("DSW0")->read(), 0); // 1 or 3 games dip (1=1 game) + return !BIT(m_dips[0]->read(), 0); // 1 or 3 games dip (1=1 game) inverted } READ_LINE_MEMBER( play_1_state::ef3_r ) { - return BIT(ioport("DSW0")->read(), 1); // 3 or 5 balls dip (1=5 balls) + return !BIT(m_dips[0]->read(), 1); // 3 or 5 balls dip (1=5 balls) inverted } READ_LINE_MEMBER( play_1_state::ef4_r ) { - return BIT(ioport("DSW0")->read(), 2); // extra ball or game dip (1=extra ball) + return !BIT(m_dips[0]->read(), 2); // extra ball or game dip (1=extra ball) inverted } WRITE_LINE_MEMBER( play_1_state::clock_w ) { - m_maincpu->int_w(1); - m_maincpu->int_w(0); // INT is a pulse-line - m_maincpu->ef1_w(state); - // also, state and !state go to display panel -} - -DRIVER_INIT_MEMBER(play_1_state,play_1) -{ + if (state) + { + m_clockcnt++; + m_maincpu->int_w(BIT(m_clockcnt, 0)); // inverted + m_maincpu->ef1_w(BIT(m_clockcnt, 1)); // inverted + if (BIT(m_clockcnt, 1)) + output().set_digit_value(41, m_match); + else + output().set_digit_value(44, m_match); + } } static MACHINE_CONFIG_START( play_1, play_1_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", CDP1802, 400000) + MCFG_CPU_ADD("maincpu", CDP1802, 400000) // 2 gates, 1 cap, 1 resistor oscillating somewhere between 350 to 450 kHz MCFG_CPU_PROGRAM_MAP(play_1_map) MCFG_CPU_IO_MAP(play_1_io) MCFG_COSMAC_WAIT_CALLBACK(VCC) @@ -185,11 +424,21 @@ static MACHINE_CONFIG_START( play_1, play_1_state ) MCFG_COSMAC_EF3_CALLBACK(READLINE(play_1_state, ef3_r)) MCFG_COSMAC_EF4_CALLBACK(READLINE(play_1_state, ef4_r)) - MCFG_DEVICE_ADD("xpoint", CLOCK, 60) // crossing-point detector + MCFG_NVRAM_ADD_0FILL("nvram") + + /* Video */ + MCFG_DEFAULT_LAYOUT(layout_play_1) + + MCFG_DEVICE_ADD("xpoint", CLOCK, 120) // crossing-point detector MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_1_state, clock_w)) /* Sound */ MCFG_FRAGMENT_ADD( genpin_audio ) + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + MCFG_DEVICE_ADD("monotone", CLOCK, 0) // sound device + MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("speaker", speaker_sound_device, level_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( chance, play_1 ) @@ -245,8 +494,8 @@ ROM_END /* Big Town, Last Lap and Party all reportedly share the same roms with different playfield/machine artworks */ -GAME(1978, bigtown, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Big Town", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1978, chance, 0, chance, play_1, play_1_state, play_1, ROT0, "Playmatic", "Chance", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1978, lastlap, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Last Lap", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1978, spcgambl, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Space Gambler", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1979, party, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Party", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1978, bigtown, 0, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Big Town", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND ) +GAME(1978, chance, 0, chance, chance, driver_device, 0, ROT0, "Playmatic", "Chance", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1978, lastlap, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Last Lap", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1978, spcgambl, 0, play_1, spcgambl, driver_device, 0, ROT0, "Playmatic", "Space Gambler", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1979, party, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Party", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) diff --git a/src/mame/drivers/play_2.cpp b/src/mame/drivers/play_2.cpp index 4a386b6cc6f..bf18c83cc5c 100644 --- a/src/mame/drivers/play_2.cpp +++ b/src/mame/drivers/play_2.cpp @@ -6,11 +6,11 @@ PINBALL Playmatic MPU 2 Status: -- Main board is emulated and working (currently runs the initial test mode) -- Displays to add -- Switches, lamps, solenoids to add -- Sound board to emulate +- Lamps, Solenoids to add +- AY chips output port adds various components across the analog outputs (including muting) - Mechanical sounds to add +- Sound board to add +- Most games work ***********************************************************************************/ @@ -19,6 +19,8 @@ Status: #include "cpu/cosmac/cosmac.h" #include "machine/clock.h" #include "machine/7474.h" +#include "sound/ay8910.h" +#include "play_2.lh" class play_2_state : public driver_device { @@ -26,11 +28,12 @@ public: play_2_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_audiocpu(*this, "audiocpu") , m_4013a(*this, "4013a") , m_4013b(*this, "4013b") + , m_keyboard(*this, "X") { } - DECLARE_DRIVER_INIT(play_2); DECLARE_WRITE8_MEMBER(port01_w); DECLARE_WRITE8_MEMBER(port02_w); DECLARE_WRITE8_MEMBER(port03_w); @@ -44,14 +47,26 @@ public: DECLARE_WRITE_LINE_MEMBER(q4013a_w); DECLARE_WRITE_LINE_MEMBER(clock_w); DECLARE_WRITE_LINE_MEMBER(clock2_w); + DECLARE_WRITE8_MEMBER(port01_a_w); + DECLARE_READ8_MEMBER(port02_a_r); + DECLARE_READ_LINE_MEMBER(clear_a_r); private: UINT16 m_clockcnt; UINT16 m_resetcnt; + UINT16 m_resetcnt_a; + UINT8 m_soundlatch; + UINT8 m_a_irqset; + UINT16 m_a_irqcnt; + UINT8 m_kbdrow; + UINT8 m_segment[5]; + bool m_disp_sw; virtual void machine_reset() override; required_device m_maincpu; + required_device m_audiocpu; required_device m_4013a; required_device m_4013b; + required_ioport_array<8> m_keyboard; }; @@ -70,41 +85,156 @@ static ADDRESS_MAP_START( play_2_io, AS_IO, 8, play_2_state ) AM_RANGE(0x07, 0x07) AM_WRITE(port07_w) ADDRESS_MAP_END +static ADDRESS_MAP_START( play_2_audio_map, AS_PROGRAM, 8, play_2_state ) + AM_RANGE(0x0000, 0x3fff) AM_ROM + AM_RANGE(0x4000, 0x4001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd1", ay8910_device, data_r, address_data_w) + AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd2", ay8910_device, data_r, address_data_w) + AM_RANGE(0x8000, 0x80ff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( play_2_audio_io, AS_IO, 8, play_2_state ) + AM_RANGE(0x01, 0x01) AM_WRITE(port01_a_w) // irq counter + AM_RANGE(0x02, 0x02) AM_READ(port02_a_r) // sound code +ADDRESS_MAP_END + static INPUT_PORTS_START( play_2 ) + PORT_START("X.0") // 11-18 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD) + + PORT_START("X.1") // 21-28 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_K) + + PORT_START("X.2") // 31-38 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_L) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA) + + PORT_START("X.3") // 41-48 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE) + + PORT_START("X.4") // 51-58 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_UP) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN) + + PORT_START("X.5") // 61-68 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O) + + PORT_START("X.6") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8) // zone select (door switch) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9) // reset button on the ios board + + PORT_START("X.7") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE ) // reset button on main cpu EF4 INPUT_PORTS_END void play_2_state::machine_reset() { m_clockcnt = 0; m_resetcnt = 0; + m_resetcnt_a = 0; m_4013b->d_w(1); + m_a_irqset = 54; // default value of the CDP1863 + m_a_irqcnt = (m_a_irqset << 3) | 7; + m_soundlatch = 0; + m_kbdrow = 0; + m_disp_sw = 0; + for (UINT8 i = 0; i < 5; i++) + m_segment[i] = 0; } WRITE8_MEMBER( play_2_state::port01_w ) { -} - -WRITE8_MEMBER( play_2_state::port02_w ) -{ -} - -WRITE8_MEMBER( play_2_state::port03_w ) -{ -} - -READ8_MEMBER( play_2_state::port04_r ) -{ - return 0xff; -} - -READ8_MEMBER( play_2_state::port05_r ) -{ - return 0xff; + m_kbdrow = data; + if (m_kbdrow && m_disp_sw) + { + m_disp_sw = 0; + for (UINT8 j = 0; j < 6; j++) + if (BIT(m_kbdrow, j)) + for (UINT8 i = 0; i < 5; i++) + output().set_digit_value(j*10 + i, m_segment[i]); + } } WRITE8_MEMBER( play_2_state::port06_w ) { + //m_soundlatch = data; +} + +WRITE8_MEMBER( play_2_state::port03_w ) +{ + if (BIT(data, 6)) + m_audiocpu->ef1_w(1); // inverted +} + +READ8_MEMBER( play_2_state::port04_r ) +{ + if (m_kbdrow & 0x3f) + for (UINT8 i = 0; i < 6; i++) + if (BIT(m_kbdrow, i)) + return m_keyboard[i]->read(); + + return 0; +} + +READ8_MEMBER( play_2_state::port05_r ) +{ + return m_keyboard[6]->read(); +} + +WRITE8_MEMBER( play_2_state::port02_w ) +{ + m_segment[4] = m_segment[3]; + m_segment[3] = m_segment[2]; + m_segment[2] = m_segment[1]; + m_segment[1] = m_segment[0]; + m_segment[0] = data; + m_disp_sw = 1; } WRITE8_MEMBER( play_2_state::port07_w ) @@ -113,6 +243,18 @@ WRITE8_MEMBER( play_2_state::port07_w ) m_4013b->clear_w(1); } +WRITE8_MEMBER( play_2_state::port01_a_w ) +{ + m_a_irqset = data; + m_a_irqcnt = (m_a_irqset << 3) | 7; +} + +READ8_MEMBER( play_2_state::port02_a_r ) +{ + m_audiocpu->ef1_w(0); // inverted + return m_soundlatch; +} + READ_LINE_MEMBER( play_2_state::clear_r ) { // A hack to make the machine reset itself on boot @@ -121,18 +263,22 @@ READ_LINE_MEMBER( play_2_state::clear_r ) return (m_resetcnt == 0xff00) ? 0 : 1; } +READ_LINE_MEMBER( play_2_state::clear_a_r ) +{ + // A hack to make the machine reset itself on boot + if (m_resetcnt_a < 0xffff) + m_resetcnt_a++; + return (m_resetcnt_a == 0xff00) ? 0 : 1; +} + READ_LINE_MEMBER( play_2_state::ef1_r ) { - return BIT(m_clockcnt, 10); + return (!BIT(m_clockcnt, 10)); // inverted } READ_LINE_MEMBER( play_2_state::ef4_r ) { - return 1; // test button -} - -DRIVER_INIT_MEMBER( play_2_state, play_2 ) -{ + return BIT(m_keyboard[7]->read(), 0); // inverted test button - doesn't seem to do anything } WRITE_LINE_MEMBER( play_2_state::clock_w ) @@ -145,13 +291,24 @@ WRITE_LINE_MEMBER( play_2_state::clock_w ) // simulate 4020 chip if ((m_clockcnt & 0x3ff) == 0) m_4013b->preset_w(BIT(m_clockcnt, 10)); // Q10 output + + // sound irq + m_a_irqcnt--; + if (m_a_irqcnt == 1) + m_audiocpu->int_w(1); // inverted + else + if (m_a_irqcnt == 0) + { + m_a_irqcnt = (m_a_irqset << 3) | 7; + m_audiocpu->int_w(0); // inverted + } } } WRITE_LINE_MEMBER( play_2_state::clock2_w ) { m_4013b->clock_w(state); - m_maincpu->ef3_w(!state); + m_maincpu->ef3_w(state); // inverted } WRITE_LINE_MEMBER( play_2_state::q4013a_w ) @@ -172,6 +329,9 @@ static MACHINE_CONFIG_START( play_2, play_2_state ) MCFG_NVRAM_ADD_0FILL("nvram") + /* Video */ + MCFG_DEFAULT_LAYOUT(layout_play_2) + MCFG_DEVICE_ADD("tpb_clock", CLOCK, 2950000 / 8) // TPB line from CPU MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_2_state, clock_w)) @@ -189,6 +349,18 @@ static MACHINE_CONFIG_START( play_2, play_2_state ) /* Sound */ MCFG_FRAGMENT_ADD( genpin_audio ) + + MCFG_CPU_ADD("audiocpu", CDP1802, XTAL_3_579545MHz) + MCFG_CPU_PROGRAM_MAP(play_2_audio_map) + MCFG_CPU_IO_MAP(play_2_audio_io) + MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_CLEAR_CALLBACK(READLINE(play_2_state, clear_a_r)) + + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_SOUND_ADD("aysnd1", AY8910, XTAL_3_579545MHz / 2) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00) + MCFG_SOUND_ADD("aysnd2", AY8910, XTAL_3_579545MHz / 2) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00) MACHINE_CONFIG_END /*------------------------------------------------------------------- @@ -200,6 +372,8 @@ ROM_START(antar) ROM_LOAD("antar09.bin", 0x0400, 0x0400, CRC(2c954f1a) SHA1(fa83a5f1c269ea28d4eeff181f493cbb4dc9bc47)) ROM_LOAD("antar10.bin", 0x0800, 0x0400, CRC(a6ce5667) SHA1(85ecd4fce94dc419e4c210262f867310b0889cd3)) ROM_LOAD("antar11.bin", 0x0c00, 0x0400, CRC(6474b17f) SHA1(e4325ceff820393b06eb2e8e4a85412b0d01a385)) + + ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) ROM_END ROM_START(antar2) @@ -208,6 +382,8 @@ ROM_START(antar2) ROM_LOAD("antar09.bin", 0x0400, 0x0400, CRC(2c954f1a) SHA1(fa83a5f1c269ea28d4eeff181f493cbb4dc9bc47)) ROM_LOAD("antar10a.bin", 0x0800, 0x0400, CRC(520eb401) SHA1(1d5e3f829a7e7f38c7c519c488e6b7e1a4d34321)) ROM_LOAD("antar11a.bin", 0x0c00, 0x0400, CRC(17ad38bf) SHA1(e2c9472ed8fbe9d5965a5c79515a1b7ea9edaa79)) + + ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) ROM_END @@ -220,6 +396,8 @@ ROM_START(evlfight) ROM_LOAD("evfg09.bin", 0x0400, 0x0400, CRC(5232dc4c) SHA1(6f95a578e9f09688e6ce8b0a622bcee887936c82)) ROM_LOAD("evfg10.bin", 0x0800, 0x0400, CRC(de2f754d) SHA1(0287a9975095bcbf03ddb2b374ff25c080c8020f)) ROM_LOAD("evfg11.bin", 0x0c00, 0x0400, CRC(5eb8ac02) SHA1(31c80e74a4272becf7014aa96eaf7de555e26cd6)) + + ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) ROM_END /*------------------------------------------------------------------- @@ -246,6 +424,8 @@ ROM_START(attack) ROM_LOAD("attack9.bin", 0x0400, 0x0400, CRC(bbd086b4) SHA1(6fc94b94beea482d8c8f5b3c69d3f218e2b2dfc4)) ROM_LOAD("attack10.bin", 0x0800, 0x0400, CRC(764925e4) SHA1(2f207ef87786d27d0d856c5816a570a59d89b718)) ROM_LOAD("attack11.bin", 0x0c00, 0x0400, CRC(972157b4) SHA1(23c90f23a34b34acfe445496a133b6022a749ccc)) + + ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) ROM_END /*------------------------------------------------------------------- @@ -257,18 +437,20 @@ ROM_START(blkfever) ROM_LOAD("blackf9.bin", 0x0400, 0x0400, CRC(ecb72fdc) SHA1(d3598031b7170fab39727b3402b7053d4f9e1ca7)) ROM_LOAD("blackf10.bin", 0x0800, 0x0400, CRC(b3fae788) SHA1(e14e09cc7da1098abf2f60f26a8ec507e123ff7c)) ROM_LOAD("blackf11.bin", 0x0c00, 0x0400, CRC(5a97c1b4) SHA1(b9d7eb0dd55ef6d959c0fab48f710e4b1c8d8003)) + + ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) ROM_END /*------------------------------------------------------------------- -/ Zira (??/80) +/ Zira (??/81) /-------------------------------------------------------------------*/ ROM_START(zira) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("zira_u8.bin", 0x0000, 0x0800, CRC(53f8bf17) SHA1(5eb74f27bc65374a85dd44bbc8f6142488c226a2)) ROM_LOAD("zira_u9.bin", 0x0800, 0x0800, CRC(d50a2419) SHA1(81b157f579a433389506817b1b6e02afaa2cf0d5)) - ROM_REGION(0x10000, "audiocpu", 0) - ROM_LOAD("zira.snd", 0x0000, 0x0400, NO_DUMP) + ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) + ROM_LOAD("zira.snd", 0x0000, 0x0400, CRC(c8a54854) SHA1(6c0367dcb2a11f0478c44b4e2115c1cb1e8052f3)) ROM_END /*------------------------------------------------------------------- @@ -284,19 +466,12 @@ ROM_START(cerberup) ROM_LOAD("cerb.snd", 0x0000, 0x2000, CRC(8af53a23) SHA1(a80b57576a1eb1b4544b718b9abba100531e3942)) ROM_END -// ??/84 Nautilus -// ??/84 The Raid -// ??/85 Stop Ship -// ??/86 Flash Dragon -// ??/87 Phantom Ship -// ??/87 Skill Flight - -GAME(1979, antar, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Antar (set 1)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1979, antar2, antar, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Antar (set 2)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1980, evlfight, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Evil Fight", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1980, attack, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Attack", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1980, blkfever, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Black Fever", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1982, cerberup, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Cerberus (Pinball)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1985, madrace, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Mad Race", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1980, zira, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Zira", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1979, antar, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Antar (set 1)", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +GAME(1979, antar2, antar, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Antar (set 2)", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +GAME(1980, evlfight, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Evil Fight", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +GAME(1980, attack, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Attack", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +GAME(1980, blkfever, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Black Fever", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +GAME(1982, cerberup, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Cerberus (Pinball)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME(1985, madrace, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Mad Race", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME(1980, zira, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Zira", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) diff --git a/src/mame/drivers/play_3.cpp b/src/mame/drivers/play_3.cpp index 83c4b7c82ac..f4094a7046e 100644 --- a/src/mame/drivers/play_3.cpp +++ b/src/mame/drivers/play_3.cpp @@ -13,7 +13,7 @@ Status: - Mechanical sounds to add ***********************************************************************************/ - +#if 0 #include "machine/genpin.h" #include "cpu/cosmac/cosmac.h" @@ -217,3 +217,4 @@ ROM_END GAME(1983, megaaton, 0, play_3, play_3, play_3_state, play_3, ROT0, "Playmatic", "Meg-Aaton", MACHINE_IS_SKELETON_MECHANICAL) GAME(1983, megaatona, megaaton, play_3, play_3, play_3_state, play_3, ROT0, "Playmatic", "Meg-Aaton (alternate set)", MACHINE_IS_SKELETON_MECHANICAL) +#endif diff --git a/src/mame/drivers/play_5.cpp b/src/mame/drivers/play_5.cpp index cef4e7dd4c7..2d0e5b69b4f 100644 --- a/src/mame/drivers/play_5.cpp +++ b/src/mame/drivers/play_5.cpp @@ -1,28 +1,52 @@ // license:BSD-3-Clause // copyright-holders:Miodrag Milanovic, Robbbert -/********************************************************************************** +/********************************************************************************************* PINBALL -Playmatic MPU 5 +Playmatic MPU 3,4,5 Status: -- Main board is emulated and working (currently runs the initial test mode) -- Displays to add -- Switches, lamps, solenoids to add -- Sound board to emulate +- Lamps, Solenoids to add +- AY chips output port adds various components across the analog outputs (including muting) - Mechanical sounds to add +- Most games work +-- Spain82: not working +-- Nautilus: sound is broken (runs into the weeds) +-- Skill Flight: not working +-- Meg Aaton: not working (No Ball) -(note to self: MPU3 and MPU5 appear at first glance to be identical apart from -cpu clock. MPU2 also appears to be identical to MPU3 apart from the RAM address. -If the sound cards are sufficiently similar, we should be able to merge all 3.) +Note: The input lines INT, EF1-4 are inverted (not true voltage). -***********************************************************************************/ +First time: +- The default settings are fine, so start with a clean slate +- Wait for it to say No Ball, then hold down X. +- Keep holding X, insert credits, and press start. When it says ball 1, let go immediately. +- If you hold down X longer than you should, it says Coil Error, and the game is ended. You + should let go the instant the ball number increments. +- Any games marked working actually do work, but like most pinballs they are a pain to play + with the keyboard. + +Setting up: +The manual is not that clear, there's a lot we don't know, this *seems* to work... +- Start machine, wait for it to say No Ball, and it plays a tune +- Press 8 (to simulate opening the front door) +- Press 1, it says BooP (Bookkeeping) +- Press 8 and the credits number increments to 8, then 01 and on to 17 (2 pushes per number) +- When it gets to 01, the display says Adjust +- To adjust a setting, press 1 to choose a digit, then tap 9 until it is correct. +- The settings in the manual do not fully line up with what we see in the display. + + +***********************************************************************************************/ #include "machine/genpin.h" #include "cpu/cosmac/cosmac.h" #include "machine/clock.h" #include "machine/7474.h" +#include "sound/ay8910.h" +#include "play_5.lh" + class play_5_state : public driver_device { @@ -30,11 +54,12 @@ public: play_5_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_audiocpu(*this, "audiocpu") , m_4013a(*this, "4013a") , m_4013b(*this, "4013b") + , m_keyboard(*this, "X") { } - DECLARE_DRIVER_INIT(play_5); DECLARE_WRITE8_MEMBER(port01_w); DECLARE_WRITE8_MEMBER(port02_w); DECLARE_WRITE8_MEMBER(port03_w); @@ -48,14 +73,26 @@ public: DECLARE_WRITE_LINE_MEMBER(q4013a_w); DECLARE_WRITE_LINE_MEMBER(clock_w); DECLARE_WRITE_LINE_MEMBER(clock2_w); + DECLARE_WRITE8_MEMBER(port01_a_w); + DECLARE_READ8_MEMBER(port02_a_r); + DECLARE_READ_LINE_MEMBER(clear_a_r); private: UINT16 m_clockcnt; UINT16 m_resetcnt; + UINT16 m_resetcnt_a; + UINT8 m_soundlatch; + UINT8 m_a_irqset; + UINT16 m_a_irqcnt; + UINT8 m_kbdrow; + UINT8 m_segment[5]; + bool m_disp_sw; virtual void machine_reset() override; required_device m_maincpu; + required_device m_audiocpu; required_device m_4013a; required_device m_4013b; + required_ioport_array<10> m_keyboard; }; @@ -65,50 +102,181 @@ static ADDRESS_MAP_START( play_5_map, AS_PROGRAM, 8, play_5_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( play_5_io, AS_IO, 8, play_5_state ) - AM_RANGE(0x01, 0x01) AM_WRITE(port01_w) // digits - AM_RANGE(0x02, 0x02) AM_WRITE(port02_w) - AM_RANGE(0x03, 0x03) AM_WRITE(port03_w) - AM_RANGE(0x04, 0x04) AM_READ(port04_r) - AM_RANGE(0x05, 0x05) AM_READ(port05_r) + AM_RANGE(0x01, 0x01) AM_WRITE(port01_w) // digits, scan-lines + AM_RANGE(0x02, 0x02) AM_WRITE(port02_w) // sound code + AM_RANGE(0x03, 0x03) AM_WRITE(port03_w) // + AM_RANGE(0x04, 0x04) AM_READ(port04_r) // switches + AM_RANGE(0x05, 0x05) AM_READ(port05_r) // more switches AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // segments - AM_RANGE(0x07, 0x07) AM_WRITE(port07_w) + AM_RANGE(0x07, 0x07) AM_WRITE(port07_w) // flipflop clear +ADDRESS_MAP_END + +static ADDRESS_MAP_START( play_5_audio_map, AS_PROGRAM, 8, play_5_state ) + AM_RANGE(0x0000, 0x3fff) AM_ROM + AM_RANGE(0x4000, 0x4001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd1", ay8910_device, data_r, address_data_w) + AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd2", ay8910_device, data_r, address_data_w) + AM_RANGE(0x8000, 0x80ff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( play_5_audio_io, AS_IO, 8, play_5_state ) + AM_RANGE(0x01, 0x01) AM_WRITE(port01_a_w) // irq counter + AM_RANGE(0x02, 0x02) AM_READ(port02_a_r) // sound code ADDRESS_MAP_END static INPUT_PORTS_START( play_5 ) + PORT_START("X.0") // 11-18 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD) + + PORT_START("X.1") // 21-28 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_K) + + PORT_START("X.2") // 31-38 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_L) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA) + + PORT_START("X.3") // 41-48 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE) + + PORT_START("X.4") // 51-58 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_UP) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN) + + PORT_START("X.5") // 61-68 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O) + + PORT_START("X.6") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8) PORT_TOGGLE // zone select (door switch) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9) PORT_TOGGLE // test button + + PORT_START("X.7") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_TILT ) + PORT_BIT( 0xE0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START("X.8") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("X.9") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE ) INPUT_PORTS_END void play_5_state::machine_reset() { m_clockcnt = 0; m_resetcnt = 0; + m_resetcnt_a = 0; m_4013b->d_w(1); + m_a_irqset = 54; // default value of the CDP1863 + m_a_irqcnt = (m_a_irqset << 3) | 7; + m_soundlatch = 0; + m_kbdrow = 0; + m_disp_sw = 0; + for (UINT8 i = 0; i < 5; i++) + m_segment[i] = 0; } WRITE8_MEMBER( play_5_state::port01_w ) { + m_kbdrow = data; + if (m_kbdrow && m_disp_sw) + { + m_disp_sw = 0; + for (UINT8 j = 0; j < 6; j++) + if (BIT(m_kbdrow, j)) + for (UINT8 i = 0; i < 5; i++) + { + output().set_digit_value(j*10 + i, m_segment[i] & 0x7f); + // decimal dot on tens controls if last 0 shows or not + if ((j == 5) && BIT(m_segment[i], 7)) + output().set_digit_value(60 + i, 0x3f); + } + } } WRITE8_MEMBER( play_5_state::port02_w ) { + m_soundlatch = data; } WRITE8_MEMBER( play_5_state::port03_w ) { + if (BIT(data, 6)) + m_audiocpu->ef1_w(1); // inverted } READ8_MEMBER( play_5_state::port04_r ) { - return 0xff; + if (m_kbdrow & 0x3f) + for (UINT8 i = 0; i < 6; i++) + if (BIT(m_kbdrow, i)) + return m_keyboard[i]->read(); + + return 0; } READ8_MEMBER( play_5_state::port05_r ) { - return 0xff; + UINT8 data = 0, key8 = m_keyboard[8]->read() & 0x0f; + if (BIT(m_kbdrow, 0)) + data |= m_keyboard[6]->read(); + if (BIT(m_kbdrow, 1)) + data |= m_keyboard[7]->read(); + return (data & 0xf0) | key8; } WRITE8_MEMBER( play_5_state::port06_w ) { + m_segment[4] = m_segment[3]; + m_segment[3] = m_segment[2]; + m_segment[2] = m_segment[1]; + m_segment[1] = m_segment[0]; + m_segment[0] = data; + m_disp_sw = 1; } WRITE8_MEMBER( play_5_state::port07_w ) @@ -117,6 +285,18 @@ WRITE8_MEMBER( play_5_state::port07_w ) m_4013b->clear_w(1); } +WRITE8_MEMBER( play_5_state::port01_a_w ) +{ + m_a_irqset = data; + m_a_irqcnt = (m_a_irqset << 3) | 7; +} + +READ8_MEMBER( play_5_state::port02_a_r ) +{ + m_audiocpu->ef1_w(0); // inverted + return m_soundlatch; +} + READ_LINE_MEMBER( play_5_state::clear_r ) { // A hack to make the machine reset itself on boot @@ -125,18 +305,22 @@ READ_LINE_MEMBER( play_5_state::clear_r ) return (m_resetcnt == 0xff00) ? 0 : 1; } +READ_LINE_MEMBER( play_5_state::clear_a_r ) +{ + // A hack to make the machine reset itself on boot + if (m_resetcnt_a < 0xffff) + m_resetcnt_a++; + return (m_resetcnt_a == 0xff00) ? 0 : 1; +} + READ_LINE_MEMBER( play_5_state::ef1_r ) { - return BIT(m_clockcnt, 10); + return (!BIT(m_clockcnt, 10)); // inverted } READ_LINE_MEMBER( play_5_state::ef4_r ) { - return 1; // reset button -} - -DRIVER_INIT_MEMBER( play_5_state, play_5 ) -{ + return BIT(m_keyboard[9]->read(), 0); // inverted test button - doesn't seem to do anything } WRITE_LINE_MEMBER( play_5_state::clock_w ) @@ -149,13 +333,24 @@ WRITE_LINE_MEMBER( play_5_state::clock_w ) // simulate 4020 chip if ((m_clockcnt & 0x3ff) == 0) m_4013b->preset_w(BIT(m_clockcnt, 10)); // Q10 output + + // sound irq + m_a_irqcnt--; + if (m_a_irqcnt == 1) + m_audiocpu->int_w(1); // inverted + else + if (m_a_irqcnt == 0) + { + m_a_irqcnt = (m_a_irqset << 3) | 7; + m_audiocpu->int_w(0); // inverted + } } } WRITE_LINE_MEMBER( play_5_state::clock2_w ) { m_4013b->clock_w(state); - m_maincpu->ef3_w(!state); + m_maincpu->ef3_w(state); // inverted } WRITE_LINE_MEMBER( play_5_state::q4013a_w ) @@ -176,6 +371,10 @@ static MACHINE_CONFIG_START( play_5, play_5_state ) MCFG_NVRAM_ADD_0FILL("nvram") + /* Video */ + MCFG_DEFAULT_LAYOUT(layout_play_5) + + // Devices MCFG_DEVICE_ADD("tpb_clock", CLOCK, XTAL_3_579545MHz / 8) // TPB line from CPU MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_5_state, clock_w)) @@ -184,17 +383,30 @@ static MACHINE_CONFIG_START( play_5, play_5_state ) // This is actually a 4013 chip (has 2 RS flipflops) MCFG_DEVICE_ADD("4013a", TTL7474, 0) - MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("4013a", ttl7474_device, d_w)) MCFG_7474_OUTPUT_CB(WRITELINE(play_5_state, q4013a_w)) + MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("4013a", ttl7474_device, d_w)) MCFG_DEVICE_ADD("4013b", TTL7474, 0) - MCFG_7474_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, ef2_w)) - MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, int_w)) MCFG_DEVCB_INVERT // int is reversed in mame + MCFG_7474_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, ef2_w)) MCFG_DEVCB_INVERT // inverted + MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, int_w)) MCFG_DEVCB_INVERT // inverted /* Sound */ MCFG_FRAGMENT_ADD( genpin_audio ) + + MCFG_CPU_ADD("audiocpu", CDP1802, XTAL_3_579545MHz) + MCFG_CPU_PROGRAM_MAP(play_5_audio_map) + MCFG_CPU_IO_MAP(play_5_audio_io) + MCFG_COSMAC_WAIT_CALLBACK(VCC) + MCFG_COSMAC_CLEAR_CALLBACK(READLINE(play_5_state, clear_a_r)) + + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_SOUND_ADD("aysnd1", AY8910, XTAL_3_579545MHz / 2) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00) + MCFG_SOUND_ADD("aysnd2", AY8910, XTAL_3_579545MHz / 2) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00) MACHINE_CONFIG_END + /*------------------------------------------------------------------- / KZ-26 (1984) /-------------------------------------------------------------------*/ @@ -294,8 +506,18 @@ ROM_START(fldragon) ROM_LOAD("fldraudiocpu.rom", 0x2000, 0x2000, CRC(6ff2b276) SHA1(040b614f0b0587521ef5550b5587b94a7f3f178b)) ROM_REGION(0x10000, "audiocpu", 0) - ROM_LOAD("fdsndu3.rom", 0x0000, 0x2000, NO_DUMP) - ROM_LOAD("fdsndu4.rom", 0x2000, 0x0800, NO_DUMP) + ROM_LOAD("fdsndu3.rom", 0x0000, 0x2000, CRC(aa9c52a8) SHA1(97d5d63b14d10c70a5eb80c08ccf5a1f3df7596d)) + ROM_LOAD("fdsndu4.rom", 0x2000, 0x0800, CRC(0a7dc1d2) SHA1(32c7be5e9fbe4fa9ca661af7b7b5ea13ef250ce6)) +ROM_END + +ROM_START(fldragona) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("fldr_1a.cpu", 0x0000, 0x2000, CRC(21fda8e8) SHA1(feea608c2605cea1cdf9f7ed884297a95993f754)) + ROM_LOAD("fldr_2a.cpu", 0x2000, 0x2000, CRC(3592a0b7) SHA1(4c4ed7930dcbbf81ce2e5296c0b36bb615bd2270)) + + ROM_REGION(0x10000, "audiocpu", 0) + ROM_LOAD("fdsndu3.rom", 0x0000, 0x2000, CRC(aa9c52a8) SHA1(97d5d63b14d10c70a5eb80c08ccf5a1f3df7596d)) + ROM_LOAD("fdsndu4.rom", 0x2000, 0x0800, CRC(0a7dc1d2) SHA1(32c7be5e9fbe4fa9ca661af7b7b5ea13ef250ce6)) ROM_END /*------------------------------------------------------------------- @@ -310,14 +532,24 @@ ROM_START(sklflite) ROM_LOAD("skflcpu1.rom", 0x0000, 0x2000, CRC(8f833b55) SHA1(1729203582c22b51d1cc401aa8f270aa5cdadabe)) ROM_LOAD("skflaudiocpu.rom", 0x2000, 0x2000, CRC(ffc497aa) SHA1(3e88539ae1688322b9268f502d8ca41cffb28df3)) - ROM_REGION(0x10000, "audiocpu", 0) - ROM_LOAD("sfsndu3.rom", 0x0000, 0x2000, NO_DUMP) - ROM_LOAD("sfsndu4.rom", 0x2000, 0x0800, NO_DUMP) + ROM_REGION(0x8000, "audiocpu", 0) + ROM_LOAD("skflsnd.rom", 0x0000, 0x8000, CRC(926a1da9) SHA1(16c762fbfe6a55597f26ff55d380192bb8647ee0)) ROM_END /*------------------------------------------------------------------- / ??/87 Phantom Ship /-------------------------------------------------------------------*/ +ROM_START(phntmshp) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("video1.bin", 0x0000, 0x2000, CRC(2b61a8d2) SHA1(1b5cabbab252b2ffb6ed12fb7e4181de7695ed9a)) + ROM_LOAD("video2.bin", 0x2000, 0x2000, CRC(50126db1) SHA1(58d89e44131554cb087c4cad62869f90366704ad)) + + ROM_REGION(0x20000, "audiocpu", 0) + ROM_LOAD("sonido1.bin", 0x00000, 0x8000, CRC(3294611d) SHA1(5f790b41bcb6d87418c80e61ac8ae69c57864b1d)) + ROM_LOAD("sonido2.bin", 0x08000, 0x8000, CRC(c2efc826) SHA1(44ee144b902627745853011968e0d654b35b3b08)) + ROM_LOAD("sonido3.bin", 0x10000, 0x8000, CRC(13d50f39) SHA1(70624de2dd8412c83866183a83f16cc5b8bdccb8)) + ROM_LOAD("sonido4.bin", 0x18000, 0x8000, CRC(b53f73ed) SHA1(bb928cfee418e8d9698d7bee78a32426f793c6e9)) +ROM_END /*------------------------------------------------------------------- / Trailer (1985) @@ -331,14 +563,65 @@ ROM_START(trailer) ROM_LOAD("trsndu4.rom", 0x2000, 0x0800, CRC(bda2a735) SHA1(134b5abb813ed8bf2eeac0861b4c88c7176582d8)) ROM_END -GAME(1982, spain82, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Spain '82", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1984, nautilus, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Nautilus", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1984, theraid, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "The Raid", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1984, ufo_x, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "UFO-X", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1984, kz26, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "KZ-26", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1985, rock2500, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Rock 2500", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1985, starfirp, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Star Fire", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1985, starfirpa, starfirp, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Star Fire (alternate set)", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1985, trailer, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Trailer", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1986, fldragon, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Flash Dragon", MACHINE_IS_SKELETON_MECHANICAL) -GAME(1987, sklflite, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Skill Flight (Playmatic)", MACHINE_IS_SKELETON_MECHANICAL) +/*------------------------------------------------------------------- +/ Meg Aaton +/-------------------------------------------------------------------*/ +ROM_START(megaaton) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("cpumegat.bin", 0x0000, 0x2000, CRC(7e7a4ede) SHA1(3194b367cbbf6e0cb2629cd5d82ddee6fe36985a)) + + ROM_REGION(0x10000, "audiocpu", 0) + ROM_LOAD("smogot.bin", 0x0000, 0x2000, CRC(fefc3ab2) SHA1(e748d9b443a69fcdd587f22c87d41818b6c0e436)) + ROM_LOAD("smegat.bin", 0x2000, 0x1000, CRC(910ab7fe) SHA1(0ddfd15c9c25f43b8fcfc4e11bc8ea180f6bd761)) +ROM_END + +ROM_START(megaatona) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("mega_u12.bin", 0x0000, 0x1000, CRC(65761b02) SHA1(dd9586eaf70698ef7a80ce1be293322f64829aea)) + ROM_LOAD("mega_u11.bin", 0x1000, 0x1000, CRC(513f3683) SHA1(0f080a33426df1ffdb14e9b2e6382304e201e335)) + + ROM_REGION(0x10000, "audiocpu", 0) + ROM_LOAD("smogot.bin", 0x0000, 0x2000, CRC(fefc3ab2) SHA1(e748d9b443a69fcdd587f22c87d41818b6c0e436)) + ROM_LOAD("smegat.bin", 0x2000, 0x1000, CRC(910ab7fe) SHA1(0ddfd15c9c25f43b8fcfc4e11bc8ea180f6bd761)) +ROM_END + +/*------------------------------------------------------------------- +/ ??/87 Iron Balls (Stargame) +/-------------------------------------------------------------------*/ +ROM_START(ironball) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("video.bin", 0x0000, 0x2000, CRC(1867ebff) SHA1(485e46c742d914febcbdd58cb5a886f1d773282a)) + + ROM_REGION(0x10000, "audiocpu", 0) + ROM_LOAD("sound.bin", 0x0000, 0x2000, CRC(83165483) SHA1(5076e5e836105d69c4ba606d8b995ecb16f88504)) +ROM_END + +/*------------------------------------------------------------------- +/ ??/83 Miss Disco (Bingo machine) +/-------------------------------------------------------------------*/ +ROM_START(msdisco) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD("1.bin", 0x0000, 0x1000, CRC(06fb7da9) SHA1(36c6fda166b2a07a5ed9ad5d2b6fdfe8fd707b0f)) + + ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF) +ROM_END + +GAME(1982, spain82, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Spain '82", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME(1983, megaaton, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Meg-Aaton", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) +GAME(1983, megaatona, megaaton, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Meg-Aaton (alternate set)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) +GAME(1984, nautilus, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Nautilus", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) +GAME(1984, theraid, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "The Raid", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1984, ufo_x, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "UFO-X", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1984, kz26, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "KZ-26", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1985, rock2500, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Rock 2500", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1985, starfirp, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Star Fire", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1985, starfirpa, starfirp, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Star Fire (alternate set)", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1985, trailer, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Trailer", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND) +GAME(1986, fldragon, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Flash Dragon", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +GAME(1986, fldragona, fldragon, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Flash Dragon (alternate set)", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +GAME(1987, phntmshp, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Phantom Ship", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +GAME(1987, sklflite, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Skill Flight (Playmatic)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +// not by Playmatic, but same hardware +GAME(1987, ironball, 0, play_5, play_5, driver_device, 0, ROT0, "Stargame", "Iron Balls", MACHINE_MECHANICAL | MACHINE_NO_SOUND) +// bingo hardware, to be split (?) +GAME(1983, msdisco, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Miss Disco (Bingo)", MACHINE_IS_SKELETON_MECHANICAL) diff --git a/src/mame/drivers/ravens.cpp b/src/mame/drivers/ravens.cpp index 4d9f9ecfb9c..b49cdf6a5cb 100644 --- a/src/mame/drivers/ravens.cpp +++ b/src/mame/drivers/ravens.cpp @@ -147,13 +147,13 @@ READ8_MEMBER( ravens_state::port17_r ) keyin = ioport("X0")->read(); if (keyin != 0xff) for (i = 0; i < 8; i++) - if BIT(~keyin, i) + if (BIT(~keyin, i)) return i | 0x80; keyin = ioport("X1")->read(); if (keyin != 0xff) for (i = 0; i < 8; i++) - if BIT(~keyin, i) + if (BIT(~keyin, i)) return i | 0x88; keyin = ioport("X2")->read(); @@ -161,7 +161,7 @@ READ8_MEMBER( ravens_state::port17_r ) m_maincpu->reset(); if (keyin != 0xff) for (i = 0; i < 8; i++) - if BIT(~keyin, i) + if (BIT(~keyin, i)) return (i<<4) | 0x80; return 0; diff --git a/src/mame/drivers/segahang.cpp b/src/mame/drivers/segahang.cpp index b374f09182a..8e6950c430e 100644 --- a/src/mame/drivers/segahang.cpp +++ b/src/mame/drivers/segahang.cpp @@ -1194,7 +1194,61 @@ ROM_START( shangonro ) ROM_REGION16_BE( 0x00e0000, "sprites", 0 ) // sprites ROM_LOAD16_BYTE( "epr-10675.22", 0x000001, 0x010000, CRC(d6ac012b) SHA1(305023b1a0a9d84cfc081ffc2ad7578b53d562f2) ) - ROM_LOAD16_BYTE( "epr-10682.11", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) ) + ROM_LOAD16_BYTE( "epr-10682.13", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) ) + ROM_LOAD16_BYTE( "epr-10676.21", 0x020001, 0x010000, CRC(25ebf2c5) SHA1(abcf673ae4e280417dd9f46d18c0ec7c0e4802ae) ) + ROM_LOAD16_BYTE( "epr-10683.12", 0x020000, 0x010000, CRC(6365d2e9) SHA1(688e2ba194e859f86cd3486c2575ebae257e975a) ) + ROM_LOAD16_BYTE( "epr-10677.20", 0x040001, 0x010000, CRC(8a57b8d6) SHA1(df1a31559dd2d1e7c2c9d800bf97526bdf3e84e6) ) + ROM_LOAD16_BYTE( "epr-10684.11", 0x040000, 0x010000, CRC(3aff8910) SHA1(4b41a49a7f02363424e814b37edce9a7a44a112e) ) + ROM_LOAD16_BYTE( "epr-10678.19", 0x060001, 0x010000, CRC(af473098) SHA1(a2afaba1cbf672949dc50e407b46d7e9ae183774) ) + ROM_LOAD16_BYTE( "epr-10685.10", 0x060000, 0x010000, CRC(80bafeef) SHA1(f01bcf65485e60f34e533295a896fca0b92e5b14) ) + ROM_LOAD16_BYTE( "epr-10679.18", 0x080001, 0x010000, CRC(03bc4878) SHA1(548fc58bcc620204e30fa12fa4c4f0a3f6a1e4c0) ) + ROM_LOAD16_BYTE( "epr-10686.9", 0x080000, 0x010000, CRC(274b734e) SHA1(906fa528659bc17c9b4744cec52f7096711adce8) ) + ROM_LOAD16_BYTE( "epr-10680.17", 0x0a0001, 0x010000, CRC(9f0677ed) SHA1(5964642b70bfad418da44f2d91476f887b021f74) ) + ROM_LOAD16_BYTE( "epr-10687.8", 0x0a0000, 0x010000, CRC(508a4701) SHA1(d17aea2aadc2e2cd65d81bf91feb3ef6923d5c0b) ) + ROM_LOAD16_BYTE( "epr-10681.16", 0x0c0001, 0x010000, CRC(b176ea72) SHA1(7ec0eb0f13398d014c2e235773ded00351edb3e2) ) + ROM_LOAD16_BYTE( "epr-10688.7", 0x0c0000, 0x010000, CRC(42fcd51d) SHA1(0eacb3527dc21746e5b901fcac83f2764a0f9e2c) ) + + ROM_REGION( 0x8000, "gfx3", 0 ) // road gfx + ROM_LOAD( "epr-10866.108", 0x0000, 0x08000, CRC(1bbe4fc8) SHA1(30f7f301e4d10d3b254d12bf3d32e5371661a566) ) + + ROM_REGION( 0x10000, "soundcpu", 0 ) // sound CPU + ROM_LOAD( "epr-10834a.52", 0x0000, 0x08000, CRC(83347dc0) SHA1(079bb750edd6372750a207764e8c84bb6abf2f79) ) + + ROM_REGION( 0x20000, "pcm", 0 ) // Sega PCM sound data + ROM_LOAD( "epr-10835.55", 0x00000, 0x10000, CRC(da08ca2b) SHA1(2c94c127efd66f6cf86b25e2653637818a99aed1) ) + ROM_LOAD( "epr-10836.56", 0x10000, 0x10000, CRC(8b10e601) SHA1(75e9bcdd3f096be9bed672d61064b9240690deec) ) + + ROM_REGION( 0x2000, "sprites:zoom", 0 ) // zoom table + ROM_LOAD( "epr-6844.119", 0x0000, 0x2000, CRC(e3ec7bd6) SHA1(feec0fe664e16fac0fde61cf64b401b9b0575323) ) +ROM_END + + +ROM_START( shangonho ) + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code + ROM_LOAD16_BYTE( "epr-10865.ic22", 0x00000, 0x08000, CRC(98e861dd) SHA1(f2059f4559893d38d7d781c8599aeb7a5074eec0) ) + ROM_LOAD16_BYTE( "epr-10862.ic8", 0x00001, 0x08000, CRC(d6f058c7) SHA1(72f25455ed619d988bcceb1cfe39a7e06722c9dc) ) + ROM_LOAD16_BYTE( "epr-10864.ic20", 0x10000, 0x08000, CRC(b3048f44) SHA1(8e559df140f1ddf307d8430c7976ecbbe8907260) ) + ROM_LOAD16_BYTE( "epr-10861.ic6", 0x10001, 0x08000, CRC(0a131e14) SHA1(088a7ff479462a6a5aa1e096805fc50883a1c245) ) + ROM_LOAD16_BYTE( "epr-10863.ic18", 0x20000, 0x08000, CRC(12ee8716) SHA1(8e798d23d22f85cd046641184d104c17b27995b2) ) + ROM_LOAD16_BYTE( "epr-10860.ic4", 0x20001, 0x08000, CRC(155e0cfd) SHA1(e51734351c887fe3920c881f57abdfbb7d075f57) ) + + ROM_REGION( 0x40000, "subcpu", 0 ) // second 68000 CPU (encrypted FD1094) + ROM_LOAD16_BYTE( "epr-10859.ic31", 0x000001, 0x10000, CRC(a22bc1a2) SHA1(74b535fb72228807aafe835bfb69e97f58bda12d) ) + ROM_LOAD16_BYTE( "epr-10857.ic25", 0x000000, 0x10000, CRC(064827a3) SHA1(c72cb799b4535f9faa7f3d37bc4d0763f52f5361) ) + ROM_LOAD16_BYTE( "epr-10858.ic30", 0x020001, 0x10000, CRC(8f8f4af0) SHA1(1dac21b7df6ec6874d36a07e30de7129b7f7f33a) ) + ROM_LOAD16_BYTE( "epr-10856.ic24", 0x020000, 0x10000, CRC(000ad595) SHA1(eb80e798159c09bc5142a7ea8b9b0f895976b0d4) ) + + ROM_REGION( 0x2000, "subcpu:key", 0 ) // FD1094 decryption key + ROM_LOAD( "317-0039.key", 0x0000, 0x2000, CRC(97b05dd6) SHA1(c16033021a0fbc8d9759c40deab41d58babdaf90) ) + + ROM_REGION( 0x18000, "gfx1", 0 ) // tiles + ROM_LOAD( "epr-10652.38", 0x00000, 0x08000, CRC(260286f9) SHA1(dc7c8d2c6ef924a937328685eed19bda1c8b1819) ) + ROM_LOAD( "epr-10651.23", 0x08000, 0x08000, CRC(c609ee7b) SHA1(c6dacf81cbfe7e5df1f9a967cf571be1dcf1c429) ) + ROM_LOAD( "epr-10650.7", 0x10000, 0x08000, CRC(b236a403) SHA1(af02b8122794c083a66f2ab35d2c73b84b2df0be) ) + + ROM_REGION16_BE( 0x00e0000, "sprites", 0 ) // sprites + ROM_LOAD16_BYTE( "epr-10675.22", 0x000001, 0x010000, CRC(d6ac012b) SHA1(305023b1a0a9d84cfc081ffc2ad7578b53d562f2) ) + ROM_LOAD16_BYTE( "epr-10682.13", 0x000000, 0x010000, CRC(d9d83250) SHA1(f8ca3197edcdf53643a5b335c3c044ddc1310cd4) ) ROM_LOAD16_BYTE( "epr-10676.21", 0x020001, 0x010000, CRC(25ebf2c5) SHA1(abcf673ae4e280417dd9f46d18c0ec7c0e4802ae) ) ROM_LOAD16_BYTE( "epr-10683.12", 0x020000, 0x010000, CRC(6365d2e9) SHA1(688e2ba194e859f86cd3486c2575ebae257e975a) ) ROM_LOAD16_BYTE( "epr-10677.20", 0x040001, 0x010000, CRC(8a57b8d6) SHA1(df1a31559dd2d1e7c2c9d800bf97526bdf3e84e6) ) @@ -1949,8 +2003,9 @@ GAME( 1985, hangon, 0, hangon, hangon, segahang_state,generic, RO GAME( 1985, hangon1, hangon, hangon, hangon, segahang_state,generic, ROT0, "Sega", "Hang-On", 0 ) GAME( 1985, hangon2, hangon, hangon, hangon2, segahang_state,generic, ROT0, "Sega", "Hang-On (ride-on)", 0 ) -GAME( 1987, shangonro, shangon, shangonro,shangonro, segahang_state,generic, ROT0, "Sega", "Super Hang-On (ride-on, Japan, FD1094 317-0038)", 0 ) -GAME( 1992, shangonrb, shangon, shangupb, shangupb, segahang_state,generic, ROT0, "bootleg", "Super Hang-On (bootleg)", 0 ) +GAME( 1987, shangonro, shangon, shangonro,shangonro, segahang_state,generic, ROT0, "Sega", "Super Hang-On (Hang-On conversion, ride-on, Japan, FD1094 317-0038)", 0 ) +GAME( 1987, shangonho, shangon, shangonro,shangupb, segahang_state,generic, ROT0, "Sega", "Super Hang-On (Hang-On conversion, Japan, FD1094 317-0039)", 0 ) +GAME( 1992, shangonrb, shangon, shangupb, shangupb, segahang_state,generic, ROT0, "bootleg", "Super Hang-On (Hang-On conversion, bootleg)", 0 ) GAME( 1985, sharrier, 0, sharrier, sharrier, segahang_state,sharrier,ROT0, "Sega", "Space Harrier (Rev A, 8751 315-5163A)", 0 ) GAME( 1985, sharrier1, sharrier, sharrier, sharrier, segahang_state,sharrier,ROT0, "Sega", "Space Harrier (8751 315-5163)", 0 ) diff --git a/src/mame/drivers/sleic.cpp b/src/mame/drivers/sleic.cpp index a78e6b1e604..218f4062365 100644 --- a/src/mame/drivers/sleic.cpp +++ b/src/mame/drivers/sleic.cpp @@ -4,8 +4,7 @@ PINBALL Sleic made a number of pinball machines (Pinball, Bike Race, Dona Elvira 2, - Super Pang, Io Moon) but seems only Pinball is dumped. The only manual I could - find is in Spanish and has no schematics. + Super Pang, Io Moon). The only manual I could find is in Spanish and has no schematics. Principal components: 80C188-10 @@ -74,7 +73,43 @@ MACHINE_CONFIG_END /*------------------------------------------------------------------- / Bike Race (1992) /-------------------------------------------------------------------*/ +ROM_START(bikerace) + ROM_REGION(0x100000, "maincpu", 0) + ROM_LOAD("bkcpu04.bin", 0xe0000, 0x20000, CRC(ce745e89) SHA1(04ba97a9ef1e60a7609c87cf6d8fcae2d0e32621)) + ROM_REGION(0x10000, "cpu2", 0) + ROM_LOAD("bkio07.bin", 0x0000, 0x8000, CRC(b52a9d4f) SHA1(726a4d9b354729d7390d2a4f877dc480701ec795)) + + ROM_REGION(0x10000, "cpu3", 0) + ROM_LOAD("bkdsp01.bin", 0x0000, 0x2000, CRC(9b220fcb) SHA1(54e82705d8ce8a26d9e1b5f0fe382ded1f2070c3)) + + ROM_REGION(0x100000, "user1", 0) + ROM_LOAD("bksnd02.bin", 0x00000, 0x80000, CRC(d67b3883) SHA1(712022b9b24c6ab559d020ab8e2106f68b4d7896)) + ROM_LOAD("bksnd03.bin", 0x80000, 0x80000, CRC(b6d00245) SHA1(f7da6f2ca681fbe62ea9cab7f92d3e501b7e867d)) + + ROM_REGION(0x100000, "user2", 0) + ROM_LOAD("bkcpu05.bin", 0x00000, 0x20000, CRC(072ce879) SHA1(4f6fb044592feb4c72bbdcbe5f19e063c0e49d0d)) + ROM_LOAD("bkcpu06.bin", 0x20000, 0x20000, CRC(9db436d4) SHA1(3869524c0490e0a019d2f8ab46546ff42727665e)) +ROM_END + +ROM_START(bikerace2) + ROM_REGION(0x100000, "maincpu", 0) + ROM_LOAD("04.bin", 0xe0000, 0x20000, CRC(aaaa4a8a) SHA1(ff579041575da4060615da2ff634f3aa91537751)) + + ROM_REGION(0x10000, "cpu2", 0) + ROM_LOAD("07.bin", 0x0000, 0x8000, CRC(0b763a89) SHA1(8952d7b13674e1599e53cce96e57c2783899a90a)) + + ROM_REGION(0x10000, "cpu3", 0) + ROM_LOAD("bkdsp01.bin", 0x0000, 0x2000, CRC(9b220fcb) SHA1(54e82705d8ce8a26d9e1b5f0fe382ded1f2070c3)) + + ROM_REGION(0x100000, "user1", 0) + ROM_LOAD("bksnd02.bin", 0x00000, 0x80000, CRC(d67b3883) SHA1(712022b9b24c6ab559d020ab8e2106f68b4d7896)) + ROM_LOAD("bksnd03.bin", 0x80000, 0x80000, CRC(b6d00245) SHA1(f7da6f2ca681fbe62ea9cab7f92d3e501b7e867d)) + + ROM_REGION(0x100000, "user2", 0) + ROM_LOAD("bkcpu05.bin", 0x00000, 0x20000, CRC(072ce879) SHA1(4f6fb044592feb4c72bbdcbe5f19e063c0e49d0d)) + ROM_LOAD("bkcpu06.bin", 0x20000, 0x20000, CRC(9db436d4) SHA1(3869524c0490e0a019d2f8ab46546ff42727665e)) +ROM_END /*------------------------------------------------------------------- / Dona Elvira 2 (1996) /-------------------------------------------------------------------*/ @@ -82,9 +117,22 @@ MACHINE_CONFIG_END /*------------------------------------------------------------------- / Io Moon (1994) /-------------------------------------------------------------------*/ +ROM_START(iomoon) + ROM_REGION(0x100000, "maincpu", 0) + ROM_LOAD("v1_3_01.bin", 0x80000, 0x80000, CRC(df80bf4f) SHA1(29547b444cad116c9dc925d6b3112f584df37250)) + ROM_REGION(0x10000, "cpu2", 0) + ROM_LOAD("v1_3_05.bin", 0x0000, 0x8000, CRC(6bb5e101) SHA1(125412953bbee7ee171c0bd34f7848fde37ace67)) + + ROM_REGION(0x100000, "user1", 0) + ROM_LOAD("v1_3_03.bin", 0x00000, 0x80000, CRC(334d0e20) SHA1(06b38cc7fcee633c45a9000187fcde8d7e03a51f)) + ROM_LOAD("v1_3_04.bin", 0x80000, 0x80000, CRC(f3a950bf) SHA1(e0410f8fe9b4efe7d21052c0a19894a563f90a27)) + + ROM_REGION(0x100000, "user2", 0) + ROM_LOAD("v1_3_02.bin", 0x00000, 0x80000, CRC(2bd589cd) SHA1(87354c76cbef8185d563266230c72a618ce6fcd7)) +ROM_END /*------------------------------------------------------------------- -/ Sleic Pin Ball (1994) +/ Sleic Pin Ball (1993) /-------------------------------------------------------------------*/ ROM_START(sleicpin) ROM_REGION(0x100000, "maincpu", 0) @@ -100,4 +148,7 @@ ROM_START(sleicpin) ROM_LOAD("sp02-1_1.rom", 0x00000, 0x80000, CRC(0e4851a0) SHA1(0692ee2df0b560e2013db9c03fd27c6eb12e618d)) ROM_END -GAME(1993, sleicpin, 0, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Sleic Pin Ball", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1992, bikerace, 0, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Bike Race", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1992, bikerace2, bikerace, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Bike Race (2-ball play)", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1993, sleicpin, 0, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Sleic Pin Ball", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1994, iomoon, 0, sleic, sleic, sleic_state, sleic, ROT0, "Sleic", "Io Moon", MACHINE_IS_SKELETON_MECHANICAL) diff --git a/src/mame/drivers/spectra.cpp b/src/mame/drivers/spectra.cpp index 3bcc3054252..6d406d3e41f 100644 --- a/src/mame/drivers/spectra.cpp +++ b/src/mame/drivers/spectra.cpp @@ -29,9 +29,6 @@ 15 - 1 (award is a free game) 16 - 1 (match enabled) -ToDo: -- Get good dump of u4 rom. - *******************************************************************************************/ @@ -266,7 +263,7 @@ MACHINE_CONFIG_END ROM_START(spectra) ROM_REGION(0x10000, "maincpu", 0) ROM_LOAD("spect_u5.dat", 0x0400, 0x0400, CRC(49e0759f) SHA1(c3badc90ff834cbc92d8c519780069310c2b1507)) - ROM_LOAD("spect_u4.dat", 0x0800, 0x0400, CRC(b58f1205) SHA1(9578fd89485f3f560789cb0f24c7116e4bc1d0da) BAD_DUMP) + ROM_LOAD("spect_u4.dat", 0x0800, 0x0400, CRC(15e53712) SHA1(e03049178569313cb89cfe0f09043c21d05b1988)) ROM_LOAD("spect_u3.dat", 0x0c00, 0x0400, CRC(9ca7510f) SHA1(a87849f16903836158063d593bb4a2e90c7473c8)) ROM_END diff --git a/src/mame/drivers/spinb.cpp b/src/mame/drivers/spinb.cpp index 77c995501b3..54afecedbf3 100644 --- a/src/mame/drivers/spinb.cpp +++ b/src/mame/drivers/spinb.cpp @@ -379,7 +379,7 @@ WRITE8_MEMBER( spinb_state::ppi60a_w ) { if (data) for (UINT8 i = 0; i < 8; i++) - if BIT(data, i) + if (BIT(data, i)) m_row = i; } @@ -388,7 +388,7 @@ WRITE8_MEMBER( spinb_state::ppi60b_w ) { if (data & 7) for (UINT8 i = 0; i < 3; i++) - if BIT(data, i) + if (BIT(data, i)) m_row = i+8; } @@ -403,11 +403,9 @@ WRITE8_MEMBER( spinb_state::sndbank_a_w ) if (!BIT(data, 6)) m_sound_addr_a |= (1<<19); - else - if (!BIT(data, 5)) + else if (!BIT(data, 5)) m_sound_addr_a |= (2<<19); - else - if BIT(data, 7) + else if (BIT(data, 7)) m_sndbank_a = 0xff; } @@ -418,11 +416,9 @@ WRITE8_MEMBER( spinb_state::sndbank_m_w ) if (!BIT(data, 6)) m_sound_addr_m |= (1<<19); - else - if (!BIT(data, 5)) + else if (!BIT(data, 5)) m_sound_addr_m |= (2<<19); - else - if BIT(data, 7) + else if (BIT(data, 7)) m_sndbank_m = 0xff; } diff --git a/src/mame/drivers/st_mp100.cpp b/src/mame/drivers/st_mp100.cpp index 17ac76a0bf2..130cc4ca922 100644 --- a/src/mame/drivers/st_mp100.cpp +++ b/src/mame/drivers/st_mp100.cpp @@ -595,22 +595,17 @@ WRITE8_MEMBER( st_mp100_state::u11_a_w ) if (!m_u10_ca2) { - if BIT(data, 2) + if (BIT(data, 2)) m_digit = 5; - else - if BIT(data, 3) + else if (BIT(data, 3)) m_digit = 4; - else - if BIT(data, 4) + else if (BIT(data, 4)) m_digit = 3; - else - if BIT(data, 5) + else if (BIT(data, 5)) m_digit = 2; - else - if BIT(data, 6) + else if (BIT(data, 6)) m_digit = 1; - else - if BIT(data, 7) + else if (BIT(data, 7)) m_digit = 0; if (BIT(data, 0) && (m_counter > 8)) diff --git a/src/mame/drivers/st_mp200.cpp b/src/mame/drivers/st_mp200.cpp index a0ed6306fd1..0410ad8b82c 100644 --- a/src/mame/drivers/st_mp200.cpp +++ b/src/mame/drivers/st_mp200.cpp @@ -335,14 +335,13 @@ WRITE_LINE_MEMBER( st_mp200_state::u11_ca2_w ) if (m_s14001a && state) { - if BIT(m_u10a, 7) + if (BIT(m_u10a, 7)) { m_s14001a->data_w(generic_space(), 0, m_u10a & 0x3f); m_s14001a->start_w(1); m_s14001a->start_w(0); } - else - if BIT(m_u10a, 6) + else if (BIT(m_u10a, 6)) { m_s14001a->force_update(); m_s14001a->set_output_gain(0, ((m_u10a >> 3 & 0xf) + 1) / 16.0); @@ -440,33 +439,19 @@ WRITE8_MEMBER( st_mp200_state::u11_a_w ) if (!m_u10_ca2) { if (m_7d && BIT(data, 1)) - { m_digit = 6; - } - else if BIT(data, 2) - { + else if (BIT(data, 2)) m_digit = 5; - } - else if BIT(data, 3) - { + else if (BIT(data, 3)) m_digit = 4; - } - else if BIT(data, 4) - { + else if (BIT(data, 4)) m_digit = 3; - } - else if BIT(data, 5) - { + else if (BIT(data, 5)) m_digit = 2; - } - else if BIT(data, 6) - { + else if (BIT(data, 6)) m_digit = 1; - } - else if BIT(data, 7) - { + else if (BIT(data, 7)) m_digit = 0; - } if (BIT(data, 0) && (m_counter > 8)) { diff --git a/src/mame/drivers/techno.cpp b/src/mame/drivers/techno.cpp index 7448583160b..aee9672af63 100644 --- a/src/mame/drivers/techno.cpp +++ b/src/mame/drivers/techno.cpp @@ -261,8 +261,19 @@ ROM_START(xforce) ROM_LOAD16_BYTE("ic15", 0x0001, 0x8000, CRC(fb8d2853) SHA1(0b0004abfe32edfd3ac15d66f90695d264c97eba)) ROM_LOAD16_BYTE("ic17", 0x0000, 0x8000, CRC(122ef649) SHA1(0b425f81869bc359841377a91c39f44395502bff)) - //ROM_REGION(0x20000), "cpu2", 0) + //ROM_REGION(0x20000, "cpu2", 0) // 5 x 27256 roms are undumped ROM_END +ROM_START(spcteam) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD16_BYTE("cpu_top.bin", 0x000001, 0x8000, CRC(b11dcf1f) SHA1(084eb98ee4c9f32d5518897a891ad1a601850d80)) + ROM_LOAD16_BYTE("cpu_bot.bin", 0x000000, 0x8000, CRC(892a5592) SHA1(c30dce37a5aae2834459179787f6c99353aadabb)) + + ROM_REGION(0x10000, "cpu2", 0) + ROM_LOAD("sound.bin", 0x8000, 0x8000, CRC(6a87370f) SHA1(51e055dcf23a30e337ff439bba3c40e5c51c490a)) + ROM_RELOAD(0, 0x8000) +ROM_END + GAME(1987, xforce, 0, techno, techno, driver_device, 0, ROT0, "Tecnoplay", "X Force", MACHINE_IS_SKELETON_MECHANICAL) +GAME(1988, spcteam, 0, techno, techno, driver_device, 0, ROT0, "Tecnoplay", "Space Team", MACHINE_IS_SKELETON_MECHANICAL) // needs correct layout diff --git a/src/mame/drivers/triforce.cpp b/src/mame/drivers/triforce.cpp index 3cf4d22941f..c7a9da673d8 100644 --- a/src/mame/drivers/triforce.cpp +++ b/src/mame/drivers/triforce.cpp @@ -69,6 +69,7 @@ Games on this system include.... |*| 2004 | Virtua Striker 4 (Japan) (Rev E) | Sega | GDROM | GDT-0013E | 317-0391-JPN | | | | 2004 | Virtua Striker 4 (Export) | Sega | GDROM | GDT-0014 | | | |*| 2004 | Virtua Striker 4 (Export) | Sega | GDROM | GDT-0015 | 317-0393-EXP | | +| | 2004 | Virtua Striker 4 (Export) | Sega | CF | MDA-G0016 | 317-0393-EXP | | | | 2004 | The Key Of Avalon 2: Eutaxy Commandment (server) | Sega / Hitmaker | GDROM | GDT-0016 | | | | | 2004 | The Key Of Avalon 2: Eutaxy Commandment (client) | Sega / Hitmaker | GDROM | GDT-0017 | | | | | 2004 | The Key Of Avalon 2: Eutaxy Commandment (client) (Rev A) | Sega / Hitmaker | GDROM | GDT-0017A | | | @@ -88,6 +89,7 @@ Games on this system include.... | | 2006 | Virtua Striker 4 Ver.2006 (Japan) (Rev C) | Sega | GDROM | GDT-0020C | | | |*| 2006 | Virtua Striker 4 Ver.2006 (Japan) (Rev D) | Sega | GDROM | GDT-0020D | 317-0432-JPN | 253-5508-0432J| |*| 2006 | Virtua Striker 4 Ver.2006 (Export) | Sega | GDROM | GDT-0021 | 317-0433-EXP | 253-5508-0433E| +| | 2006 | Virtua Striker 4 Ver.2006 (Export) | Sega | CF | MDA-G00?? | 317-0433-EXP | 253-5508-0433E| | | 2006 | Triforce Firmware Update for Compact Flash Box | Sega | GDROM | GDT-0022 | 317-0567-COM | | |*| 2006 | Triforce Firmware Update for Compact Flash Box (Rev A) | Sega | GDROM | GDT-0022A | 317-0567-COM | | | | 2006 | Donkey Kong : Banana Kingdom | Namco / Nintendo | Cart? | | | | diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp new file mode 100644 index 00000000000..31292780bfb --- /dev/null +++ b/src/mame/drivers/vgmplay.cpp @@ -0,0 +1,846 @@ +// license:BSD-3-Clause +// copyright-holders: Olivier Galibert + +// A "virtual" driver to play vgm files +// Use with mame vgmplay -bitb file.vgm + +#include + +#include "emu.h" +#include "debugger.h" +#include "imagedev/bitbngr.h" + +#include "sound/2612intf.h" +#include "sound/ym2151.h" +#include "sound/ym2413.h" +#include "sound/sn76496.h" +#include "sound/segapcm.h" + +class vgmplay_device : public cpu_device +{ +public: + enum { + REG_SIZE = 0x00000000, + A_YM2612 = 0x00000010, + A_YM2151 = 0x00000020, + A_YM2413 = 0x00000030, + A_SN76496 = 0x00000040, + A_SEGAPCM = 0x00001000, + }; + + vgmplay_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + virtual void device_start() override; + virtual void device_reset() override; + + virtual UINT32 execute_min_cycles() const override; + virtual UINT32 execute_max_cycles() const override; + virtual UINT32 execute_input_lines() const override; + virtual void execute_run() override; + virtual void execute_set_input(int inputnum, int state) override; + + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; + + virtual void state_import(const device_state_entry &entry) override; + virtual void state_export(const device_state_entry &entry) override; + virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; + + virtual UINT32 disasm_min_opcode_bytes() const override; + virtual UINT32 disasm_max_opcode_bytes() const override; + virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) override; + + READ8_MEMBER(segapcm_rom_r); + +private: + struct rom_block { + offs_t start_address; + offs_t end_address; + std::unique_ptr data; + + rom_block(rom_block &&) = default; + rom_block(offs_t start, offs_t end, std::unique_ptr &&d) : start_address(start), end_address(end), data(std::move(d)) {} + }; + + enum { RESET, RUN, DONE }; + + address_space_config m_file_config, m_io_config; + address_space *m_file, *m_io; + + int m_icount, m_state; + + UINT32 m_pc; + + std::list m_rom_blocks[0x40]; + UINT32 m_rom_masks[0x40]; + + std::vector m_data_streams[0x40]; + std::vector m_data_stream_starts[0x40]; + + UINT32 m_ym2612_stream_offset; + + UINT8 rom_r(UINT8 type, offs_t offset); + UINT32 handle_data_block(UINT32 address); + void blocks_clear(); +}; + +const device_type VGMPLAY = &device_creator; + +class vgmplay_state : public driver_device +{ +public: + vgmplay_state(const machine_config &mconfig, device_type type, const char *tag); + + virtual void machine_start() override; + + READ8_MEMBER(file_r); + READ8_MEMBER(file_size_r); + +private: + std::vector m_file_data; + required_device m_file; + required_device m_ym2612; + required_device m_ym2151; + required_device m_ym2413; + required_device m_sn76496; + required_device m_segapcm; + + UINT32 r32(int offset) const; +}; + +vgmplay_device::vgmplay_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + cpu_device(mconfig, VGMPLAY, "VGM Player engine", tag, owner, clock, "vgmplay_core", __FILE__), + m_file_config("file", ENDIANNESS_LITTLE, 8, 32), + m_io_config("io", ENDIANNESS_LITTLE, 8, 32) +{ +} + +void vgmplay_device::device_start() +{ + m_icountptr = &m_icount; + m_file = &space(AS_PROGRAM); + m_io = &space(AS_IO); + + save_item(NAME(m_pc)); + + state_add(STATE_GENPC, "GENPC", m_pc).noshow(); + state_add(STATE_GENPCBASE, "GENPCBASE", m_pc).noshow(); +} + +void vgmplay_device::device_reset() +{ + m_pc = 0; + m_state = RESET; + + m_ym2612_stream_offset = 0; + blocks_clear(); +} + +UINT32 vgmplay_device::execute_min_cycles() const +{ + return 0; +} + +UINT32 vgmplay_device::execute_max_cycles() const +{ + return 65536; +} + +UINT32 vgmplay_device::execute_input_lines() const +{ + return 0; +} + +void vgmplay_device::blocks_clear() +{ + for(int i = 0; i < 0x40; i++) { + m_rom_blocks[i].clear(); + m_rom_masks[i] = 0; + m_data_streams[i].clear(); + m_data_stream_starts[i].clear(); + } +} + +UINT32 vgmplay_device::handle_data_block(UINT32 address) +{ + UINT32 size = m_file->read_dword(m_pc+3); + UINT8 type = m_file->read_byte(m_pc+2); + if(type < 0x40) { + UINT32 start = m_data_streams[type].size(); + m_data_stream_starts[type].push_back(start); + m_data_streams[type].resize(start + size); + for(UINT32 i=0; iread_byte(m_pc+7+i); + + } else if(type < 0x7f) + logerror("ignored compressed stream size %x type %02x\n", size, type); + + else if(type < 0x80) + logerror("ignored compression table size %x\n", size); + + else if(type < 0xc0) { + UINT32 rs = m_file->read_dword(m_pc+7); + UINT32 start = m_file->read_dword(m_pc+11); + std::unique_ptr block = std::make_unique(size - 8); + for(UINT32 i=0; iread_byte(m_pc+15+i); + m_rom_blocks[type - 0x80].emplace_front(start, start+size-9, std::move(block)); + + UINT32 mask = rs-1; + mask |= mask >> 1; + mask |= mask >> 2; + mask |= mask >> 4; + mask |= mask >> 8; + mask |= mask >> 16; + m_rom_masks[type - 0x80] = mask; + } else + logerror("ignored ram block size %x type %02x\n", size, type); + return 7+size; +} + +void vgmplay_device::execute_run() +{ + while(m_icount > 0) { + switch(m_state) { + case RESET: { + UINT32 size = m_io->read_dword(REG_SIZE); + if(!size) { + m_pc = 0; + m_state = DONE; + break; + } + UINT32 version = m_file->read_dword(8); + m_pc = version < 0x150 ? 0x40 : 0x34 + m_file->read_dword(0x34); + m_state = RUN; + break; + } + case RUN: { + if(machine().debug_flags & DEBUG_FLAG_ENABLED) + debugger_instruction_hook(this, m_pc); + UINT8 code = m_file->read_byte(m_pc); + switch(code) { + case 0x4f: + m_io->write_byte(A_SN76496+0, m_file->read_byte(m_pc+1)); + m_pc += 2; + break; + + case 0x50: + m_io->write_byte(A_SN76496+1, m_file->read_byte(m_pc+1)); + m_pc += 2; + break; + + case 0x51: + m_io->write_byte(A_YM2413+0, m_file->read_byte(m_pc+1)); + m_io->write_byte(A_YM2413+1, m_file->read_byte(m_pc+2)); + m_pc += 3; + break; + + case 0x52: + m_io->write_byte(A_YM2612+0, m_file->read_byte(m_pc+1)); + m_io->write_byte(A_YM2612+1, m_file->read_byte(m_pc+2)); + m_pc += 3; + break; + + case 0x53: + m_io->write_byte(A_YM2612+2, m_file->read_byte(m_pc+1)); + m_io->write_byte(A_YM2612+3, m_file->read_byte(m_pc+2)); + m_pc += 3; + break; + + case 0x54: + m_io->write_byte(A_YM2151+0, m_file->read_byte(m_pc+1)); + m_io->write_byte(A_YM2151+1, m_file->read_byte(m_pc+2)); + m_pc += 3; + break; + + case 0x61: { + UINT32 duration = m_file->read_word(m_pc+1); + m_icount -= duration; + m_pc += 3; + break; + } + + case 0x62: + m_icount -= 735; + m_pc++; + break; + + case 0x63: + m_icount -= 882; + m_pc++; + break; + + case 0x66: + m_state = DONE; + break; + + case 0x67: + m_pc += handle_data_block(m_pc); + break; + + case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: + case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f: + m_icount -= 1+(code & 0xf); + m_pc += 1; + break; + + case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: + case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f: + if(!m_data_streams[0].empty()) { + if(m_ym2612_stream_offset >= int(m_data_streams[0].size())) + m_ym2612_stream_offset = 0; + + m_io->write_byte(A_YM2612+0, 0x2a); + m_io->write_byte(A_YM2612+1, m_data_streams[0][m_ym2612_stream_offset]); + } + m_pc += 1; + m_icount -= code & 0xf; + break; + + case 0xc0: + m_io->write_byte(A_SEGAPCM + (m_file->read_word(m_pc+1) & 0x7ff), m_file->read_byte(m_pc+3)); + m_pc += 4; + break; + + case 0xe0: + m_ym2612_stream_offset = m_file->read_dword(m_pc+1); + m_pc += 5; + break; + + default: + logerror("unhandled code %02x\n", code); + m_state = DONE; + m_icount = 0; + break; + } + break; + } + case DONE: { + static bool done = false; + if(!done) { + logerror("done\n"); + done = true; + } + if(machine().debug_flags & DEBUG_FLAG_ENABLED) + debugger_instruction_hook(this, m_pc); + m_icount = 0; + break; + } + } + } +} + +void vgmplay_device::execute_set_input(int inputnum, int state) +{ +} + +const address_space_config *vgmplay_device::memory_space_config(address_spacenum spacenum) const +{ + switch(spacenum) { + case AS_PROGRAM: return &m_file_config; + case AS_IO: return &m_io_config; + default: return nullptr; + } +} + +void vgmplay_device::state_import(const device_state_entry &entry) +{ +} + +void vgmplay_device::state_export(const device_state_entry &entry) +{ +} + +void vgmplay_device::state_string_export(const device_state_entry &entry, std::string &str) const +{ +} + +UINT32 vgmplay_device::disasm_min_opcode_bytes() const +{ + return 1; +} + +UINT32 vgmplay_device::disasm_max_opcode_bytes() const +{ + return 9; +} + +offs_t vgmplay_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) +{ + switch(oprom[0]) { + case 0x4f: + sprintf(buffer, "psg r06 = %02x", oprom[1]); + return 2 | DASMFLAG_SUPPORTED; + + case 0x50: + sprintf(buffer, "psg write %02x", oprom[1]); + return 2 | DASMFLAG_SUPPORTED; + + case 0x51: + sprintf(buffer, "ym2413 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x52: + sprintf(buffer, "ym2612.0 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x53: + sprintf(buffer, "ym2612.1 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x54: + sprintf(buffer, "ym2151 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x55: + sprintf(buffer, "ym2203 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x56: + sprintf(buffer, "ym2608.0 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x57: + sprintf(buffer, "ym2608.1 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x58: + sprintf(buffer, "ym2610.0 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x59: + sprintf(buffer, "ym2610.1 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x5a: + sprintf(buffer, "ym3812 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x5b: + sprintf(buffer, "ym3526 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x5c: + sprintf(buffer, "y8950 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x5d: + sprintf(buffer, "ymz280b r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x5e: + sprintf(buffer, "ymf262.0 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x5f: + sprintf(buffer, "ymf262.1 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0x61: { + UINT32 duration = oprom[1] | (oprom[2] << 8); + sprintf(buffer, "wait %d", duration); + return 3 | DASMFLAG_SUPPORTED; + } + + case 0x62: + sprintf(buffer, "wait 735"); + return 1 | DASMFLAG_SUPPORTED; + + case 0x63: + sprintf(buffer, "wait 882"); + return 1 | DASMFLAG_SUPPORTED; + + case 0x66: + sprintf(buffer, "end"); + return 1 | DASMFLAG_SUPPORTED; + + case 0x67: { + static const char *const basic_types[8] = { + "ym2612 pcm", + "rf5c68 pcm", + "rf5c164 pcm", + "pwm pcm", + "okim6258 adpcm", + "huc6280 pcm", + "scsp pcm", + "nes apu dpcm" + }; + + static const char *const rom_types[20] = { + "sega pcm rom", + "ym2608 delta-t rom", + "ym2610 adpcm rom", + "ym2610 delta-t rom", + "ymf278b rom", + "ymf271 rom", + "ymz280b rom", + "ymf278b rom", + "y8950 delta-t rom", + "multipcm rom", + "upd7759 rom", + "okim6295 rom", + "k054539 rom", + "c140 rom", + "k053260 rom", + "qsound rom", + "es5505/es5506 rom", + "x1-010 rom", + "c352 rom", + "ga20 rom" + }; + + static const char *const ram_types[3] = { + "rf5c68 ram", + "rf5c164 ram", + "nes apu ram" + }; + + static const char *const ram2_types[2] = { + "scsp ram", + "es5503 ram" + }; + + UINT8 type = oprom[2]; + UINT32 size = oprom[3] | (oprom[4] << 8) | (oprom[5] << 16) | (oprom[6] << 24); + if(type < 0x8) + sprintf(buffer, "data-block %x, %s", size, basic_types[type]); + else if(type < 0x40) + sprintf(buffer, "data-block %x, %02x", size, type); + else if(type < 0x48) + sprintf(buffer, "data-block %x comp., %s", size, basic_types[type & 0x3f]); + else if(type < 0x7f) + sprintf(buffer, "data-block %x comp., %02x", size, type & 0x3f); + else if(type < 0x80) + sprintf(buffer, "decomp-table %x, %02x/%02x", size, oprom[7], oprom[8]); + else if(type < 0x94) + sprintf(buffer, "data-block %x, %s", size, rom_types[type & 0x7f]); + else if(type < 0xc0) + sprintf(buffer, "data-block %x, rom %02x", size, type); + else if(type < 0x93) + sprintf(buffer, "data-block %x, %s", size, ram_types[type & 0x1f]); + else if(type < 0xe0) + sprintf(buffer, "data-block %x, ram %02x", size, type); + else if(type < 0xe2) + sprintf(buffer, "data-block %x, %s", size, ram2_types[type & 0x1f]); + else + sprintf(buffer, "data-block %x, ram %02x", size, type); + return (7+size) | DASMFLAG_SUPPORTED; + } + + case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: + case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f: + sprintf(buffer, "wait %d", 1+(oprom[0] & 0x0f)); + return 1 | DASMFLAG_SUPPORTED; + + case 0x80: + sprintf(buffer, "ym2612.0 r2a = rom++"); + return 1 | DASMFLAG_SUPPORTED; + + case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87: + case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f: + sprintf(buffer, "ym2612.0 r2a = rom++; wait %d", oprom[0] & 0xf); + return 1 | DASMFLAG_SUPPORTED; + + case 0xa0: + sprintf(buffer, "ay8910 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb0: + sprintf(buffer, "rf5c68 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb1: + sprintf(buffer, "rf5c68 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb2: + sprintf(buffer, "pwm r%x = %03x", oprom[1] >> 4, oprom[2] | ((oprom[1] & 0xf) << 8)); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb3: + sprintf(buffer, "dmg r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb4: + sprintf(buffer, "apu r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb5: + sprintf(buffer, "multipcm r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb6: + sprintf(buffer, "upd7759 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb7: + sprintf(buffer, "okim6258 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb8: + sprintf(buffer, "huc6280 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xb9: + sprintf(buffer, "k053260 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xba: + sprintf(buffer, "pokey r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xbb: + sprintf(buffer, "rf5c68 r%02x = %02x", oprom[1], oprom[2]); + return 3 | DASMFLAG_SUPPORTED; + + case 0xc0: + sprintf(buffer, "segapcm %04x = %02x", oprom[1] | (oprom[2] << 8), oprom[3]); + return 4 | DASMFLAG_SUPPORTED; + + case 0xc1: + sprintf(buffer, "rf5c68 %04x = %02x", oprom[1] | (oprom[2] << 8), oprom[3]); + return 4 | DASMFLAG_SUPPORTED; + + case 0xc2: + sprintf(buffer, "rf5c163 %04x = %02x", oprom[1] | (oprom[2] << 8), oprom[3]); + return 4 | DASMFLAG_SUPPORTED; + + case 0xc3: + sprintf(buffer, "multipcm c%02x.off = %04x", oprom[1], oprom[2] | (oprom[3] << 8)); + return 4 | DASMFLAG_SUPPORTED; + + case 0xc4: + sprintf(buffer, "qsound %02x = %04x", oprom[3], oprom[2] | (oprom[1] << 8)); + return 4 | DASMFLAG_SUPPORTED; + + case 0xd0: + sprintf(buffer, "ymf278b r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]); + return 4 | DASMFLAG_SUPPORTED; + + case 0xd1: + sprintf(buffer, "ymf271 r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]); + return 4 | DASMFLAG_SUPPORTED; + + case 0xd2: + sprintf(buffer, "scc1 r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]); + return 4 | DASMFLAG_SUPPORTED; + + case 0xd3: + sprintf(buffer, "k054539 r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]); + return 4 | DASMFLAG_SUPPORTED; + + case 0xd4: + sprintf(buffer, "c140 r%02x.%02x = %02x", oprom[1], oprom[2], oprom[3]); + return 4 | DASMFLAG_SUPPORTED; + + case 0xe0: { + UINT32 off = oprom[1] | (oprom[2] << 8) | (oprom[3] << 16) | (oprom[4] << 24); + sprintf(buffer, "ym2612 offset = %x", off); + return 5 | DASMFLAG_SUPPORTED; + } + + default: + sprintf(buffer, "?? %02x", oprom[0]); + return 1 | DASMFLAG_SUPPORTED; + } +} + +UINT8 vgmplay_device::rom_r(UINT8 type, offs_t offset) +{ + for(const auto &b : m_rom_blocks[type - 0x80]) + if(offset >= b.start_address && offset <= b.end_address) + return b.data[offset - b.start_address]; + logerror("Unmapped rom read, type %02x, offset %x\n", type, offset); + return 0; +} + +READ8_MEMBER(vgmplay_device::segapcm_rom_r) +{ + return rom_r(0x80, offset); +} + +vgmplay_state::vgmplay_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_file(*this, "file"), + m_ym2612(*this, "ym2612"), + m_ym2151(*this, "ym2151"), + m_ym2413(*this, "ym2413"), + m_sn76496(*this, "sn76496"), + m_segapcm(*this, "segapcm") +{ +} + +UINT32 vgmplay_state::r32(int off) const +{ + if(off + 3 < int(m_file_data.size())) + return m_file_data[off] | (m_file_data[off+1] << 8) | (m_file_data[off+2] << 16) | (m_file_data[off+3] << 24); + return 0; +} + +void vgmplay_state::machine_start() +{ + UINT32 size = 0; + if(m_file->exists()) { + size = m_file->length(); + m_file_data.resize(size); + m_file->input(&m_file_data[0], size); + + // Decompress gzip-compressed files (aka vgz) + if(m_file_data[0] == 0x1f && m_file_data[1] == 0x8b) { + std::vector decomp; + int bs = m_file_data.size(); + decomp.resize(2*bs); + z_stream str; + str.zalloc = nullptr; + str.zfree = nullptr; + str.opaque = nullptr; + str.data_type = 0; + str.next_in = &m_file_data[0]; + str.avail_in = m_file_data.size(); + str.total_in = 0; + str.total_out = 0; + int err = inflateInit2(&str, 31); + if(err != Z_OK) { + logerror("gzip header but not a gzip file\n"); + m_file_data.clear(); + return; + } + do { + if(str.total_out >= decomp.size()) + decomp.resize(decomp.size() + bs); + str.next_out = &decomp[str.total_out]; + str.avail_out = decomp.size() - str.total_out; + err = inflate(&str, Z_SYNC_FLUSH); + } while(err == Z_OK); + if(err != Z_STREAM_END) { + logerror("broken gzip file\n"); + m_file_data.clear(); + return; + } + m_file_data.resize(str.total_out); + memcpy(&m_file_data[0], &decomp[0], str.total_out); + } + + if(m_file_data.size() < 0x40 || r32(0) != 0x206d6756) { + logerror("Not a vgm/vgz file\n"); + m_file_data.clear(); + return; + } + + UINT32 version = r32(8); + logerror("File version %x.%02x\n", version >> 8, version & 0xff); + if(r32(0x0c)) + m_sn76496->set_unscaled_clock(r32(0x0c)); + if(r32(0x10)) + m_ym2413->set_unscaled_clock(r32(0x10)); + if(version <= 0x101 && r32(0x0c)) { + m_ym2612->set_unscaled_clock(r32(0x0c)); + m_ym2151->set_unscaled_clock(r32(0x0c)); + } + if(version >= 0x110 && r32(0x2c)) + m_ym2612->set_unscaled_clock(r32(0x2c)); + if(version >= 0x110 && r32(0x30)) + m_ym2151->set_unscaled_clock(r32(0x30)); + if(version >= 0x151 && r32(0x38)) + m_segapcm->set_unscaled_clock(r32(0x38)); + if(version >= 0x151 && r32(0x40)) + logerror("Warning: file requests an unsupported RF5C68\n"); + if(version >= 0x151 && r32(0x44)) + logerror("Warning: file requests an unsupported YM2203\n"); + if(version >= 0x151 && r32(0x48)) + logerror("Warning: file requests an unsupported YM2608\n"); + if(version >= 0x151 && r32(0x4c)) + logerror("Warning: file requests an unsupported %s\n", r32(0x4c) & 0x80000000 ? "YM2610B" : "YM2610"); + if(version >= 0x151 && r32(0x50)) + logerror("Warning: file requests an unsupported YM3812\n"); + if(version >= 0x151 && r32(0x54)) + logerror("Warning: file requests an unsupported YM3526\n"); + if(version >= 0x151 && r32(0x58)) + logerror("Warning: file requests an unsupported Y8950\n"); + if(version >= 0x151 && r32(0x5c)) + logerror("Warning: file requests an unsupported YMF262\n"); + if(version >= 0x151 && r32(0x60)) + logerror("Warning: file requests an unsupported YMF278B\n"); + if(version >= 0x151 && r32(0x64)) + logerror("Warning: file requests an unsupported YMF271\n"); + if(version >= 0x151 && r32(0x68)) + logerror("Warning: file requests an unsupported YMZ280B\n"); + if(version >= 0x151 && r32(0x6c)) + logerror("Warning: file requests an unsupported RF5C164\n"); + if(version >= 0x151 && r32(0x70)) + logerror("Warning: file requests an unsupported PWM\n"); + if(version >= 0x151 && r32(0x74)) + logerror("Warning: file requests an unsupported AY8910\n"); + } +} + +READ8_MEMBER(vgmplay_state::file_r) +{ + if(offset < m_file_data.size()) + return m_file_data[offset]; + return 0; +} + +READ8_MEMBER(vgmplay_state::file_size_r) +{ + UINT32 size = m_file_data.size(); + return size >> (8*offset); +} + +static INPUT_PORTS_START( vgmplay ) +INPUT_PORTS_END + +static ADDRESS_MAP_START( file_map, AS_PROGRAM, 8, vgmplay_state ) + AM_RANGE(0x00000000, 0xffffffff) AM_READ(file_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( soundchips_map, AS_IO, 8, vgmplay_state ) + AM_RANGE(vgmplay_device::REG_SIZE, vgmplay_device::REG_SIZE+3) AM_READ(file_size_r) + AM_RANGE(vgmplay_device::A_YM2612, vgmplay_device::A_YM2612+3) AM_DEVREADWRITE("ym2612", ym2612_device, read, write) + AM_RANGE(vgmplay_device::A_YM2151, vgmplay_device::A_YM2151+1) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) + AM_RANGE(vgmplay_device::A_YM2413, vgmplay_device::A_YM2413+1) AM_DEVWRITE ("ym2413", ym2413_device, write) +// AM_RANGE(vgmplay_device::A_SN76496+0, vgmplay_device::A_SN76496+0) AM_DEVWRITE ("sn76496", sn76496_device, stereo_w) + AM_RANGE(vgmplay_device::A_SN76496+1, vgmplay_device::A_SN76496+1) AM_DEVWRITE ("sn76496", sn76496_device, write) + AM_RANGE(vgmplay_device::A_SEGAPCM, vgmplay_device::A_SEGAPCM+0x7ff) AM_DEVREADWRITE("segapcm", segapcm_device, sega_pcm_r, sega_pcm_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( segapcm_map, AS_0, 8, vgmplay_state ) + AM_RANGE(0, 0x1fffff) AM_DEVREAD("vgmplay", vgmplay_device, segapcm_rom_r) +ADDRESS_MAP_END + +static MACHINE_CONFIG_START( vgmplay, vgmplay_state ) + MCFG_CPU_ADD("vgmplay", VGMPLAY, 44100) + MCFG_CPU_PROGRAM_MAP( file_map ) + MCFG_CPU_IO_MAP( soundchips_map ) + + MCFG_DEVICE_ADD("file", BITBANGER, 0) + + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_SOUND_ADD("ym2612", YM2612, 7670454) + MCFG_SOUND_ROUTE(0, "lspeaker", 1) + MCFG_SOUND_ROUTE(1, "rspeaker", 1) + + MCFG_SOUND_ADD("ym2151", YM2151, 3579545) + MCFG_SOUND_ROUTE(0, "lspeaker", 1) + MCFG_SOUND_ROUTE(1, "rspeaker", 1) + + MCFG_SOUND_ADD("ym2413", YM2413, 3579545) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1) + + MCFG_SOUND_ADD("sn76496", SN76496, 3579545) + MCFG_SOUND_ROUTE(0, "lspeaker", 1) + MCFG_SOUND_ROUTE(0, "rspeaker", 1) + + MCFG_SOUND_ADD("segapcm", SEGAPCM, 4000000) + MCFG_SEGAPCM_BANK(BANK_512) // Should be configurable for yboard... + MCFG_DEVICE_ADDRESS_MAP(AS_0, segapcm_map) + MCFG_SOUND_ROUTE(0, "lspeaker", 1) + MCFG_SOUND_ROUTE(1, "rspeaker", 1) +MACHINE_CONFIG_END + +ROM_START( vgmplay ) +ROM_END + +CONS( 2016, vgmplay, 0, 0, vgmplay, vgmplay, driver_device, 0, "MAME", "VGM player", 0) + diff --git a/src/mame/drivers/victor9k.cpp b/src/mame/drivers/victor9k.cpp index 7563b4a37d4..7bc2708c8fd 100644 --- a/src/mame/drivers/victor9k.cpp +++ b/src/mame/drivers/victor9k.cpp @@ -10,16 +10,15 @@ TODO: + - contrast + - MC6852 + - codec sound - expansion bus - Z80 card - Winchester DMA card (Xebec S1410 + Tandon TM502/TM603SE) - RAM cards - clock cards - floppy 8048 - - hires graphics - - brightness/contrast - - MC6852 - - codec sound */ @@ -86,46 +85,80 @@ INPUT_PORTS_END // MC6845 //------------------------------------------------- -#define CODE_NON_DISPLAY 0x1000 -#define CODE_UNDERLINE 0x2000 -#define CODE_LOW_INTENSITY 0x4000 -#define CODE_REVERSE_VIDEO 0x8000 +#define DC_SECRET 0x1000 +#define DC_UNDLN 0x2000 +#define DC_LOWINT 0x4000 +#define DC_RVS 0x8000 MC6845_UPDATE_ROW( victor9k_state::crtc_update_row ) { + int hires = BIT(ma, 13); + int dot_addr = BIT(ma, 12); + int width = hires ? 16 : 10; + + if (m_hires != hires) + { + m_hires = hires; + m_crtc->set_clock(XTAL_30MHz / width); + m_crtc->set_hpixels_per_column(width); + } + address_space &program = m_maincpu->space(AS_PROGRAM); const rgb_t *palette = m_palette->palette()->entry_list_raw(); + + int x = hbp; - if (BIT(ma, 13)) - { - fatalerror("Graphics mode not supported!\n"); - } - else - { - UINT16 video_ram_addr = (ma & 0xfff) << 1; + offs_t aa = (ma & 0x7ff) << 1; - for (int sx = 0; sx < x_count; sx++) + for (int sx = 0; sx < x_count; sx++) + { + UINT16 dc = (m_video_ram[aa + 1] << 8) | m_video_ram[aa]; + offs_t ab = (dot_addr << 15) | ((dc & 0x7ff) << 4) | (ra & 0x0f); + UINT16 dd = program.read_word(ab << 1); + + int cursor = (sx == cursor_x) ? 1 : 0; + int undln = !((dc & DC_UNDLN) && BIT(dd, 15)) ? 2 : 0; + int rvs = (dc & DC_RVS) ? 4 : 0; + int secret = (dc & DC_SECRET) ? 1 : 0; + int lowint = (dc & DC_LOWINT) ? 1 : 0; + + for (int bit = 0; bit < width; bit++) { - UINT16 code = (m_video_ram[video_ram_addr + 1] << 8) | m_video_ram[video_ram_addr]; - UINT32 char_ram_addr = (BIT(ma, 12) << 16) | ((code & 0xff) << 5) | (ra << 1); - UINT16 data = program.read_word(char_ram_addr); + int pixel = 0; - if (code & CODE_REVERSE_VIDEO) data ^= 0xffff; - if (code & CODE_NON_DISPLAY) data = 0; - if (sx == cursor_x) data = 0xffff; - - for (int x = 0; x <= 10; x++) + switch (rvs | undln | cursor) { - int pixel = BIT(data, x); - int color = palette[pixel && de]; - if (!(code & CODE_LOW_INTENSITY) && color) color = 2; + case 0: case 5: + pixel = 1; + break; - bitmap.pix32(vbp + y, hbp + x + sx*10) = color; + case 1: case 4: + pixel = 0; + break; + + case 2: case 7: + pixel = !(!(BIT(dd, bit) && !secret)); + break; + + case 3: case 6: + pixel = !(BIT(dd, bit) && !secret); + break; } - video_ram_addr += 2; - video_ram_addr &= 0xfff; + int color = 0; + + if (pixel && de) + { + int pen = 1 + m_brt; + if (!lowint) pen = 9; + color = palette[pen]; + } + + bitmap.pix32(vbp + y, x++) = color; } + + aa += 2; + aa &= 0xfff; } } @@ -176,6 +209,14 @@ WRITE_LINE_MEMBER( victor9k_state::ssda_irq_w ) } +WRITE_LINE_MEMBER( victor9k_state::ssda_sm_dtr_w ) +{ + m_ssda->cts_w(state); + m_ssda->dcd_w(!state); + //m_cvsd->enc_dec_w(!state); +} + + WRITE8_MEMBER( victor9k_state::via1_pa_w ) { /* @@ -312,6 +353,8 @@ WRITE8_MEMBER( victor9k_state::via2_pb_w ) // contrast m_cont = data >> 5; + + if (LOG) logerror("BRT %u CONT %u\n", m_brt, m_cont); } WRITE_LINE_MEMBER( victor9k_state::via2_irq_w ) @@ -365,8 +408,9 @@ WRITE_LINE_MEMBER( victor9k_state::write_rib ) WRITE8_MEMBER( victor9k_state::via3_pb_w ) { // codec clock output - m_ssda->rx_clk_w(BIT(data, 7)); - m_ssda->tx_clk_w(BIT(data, 7)); + m_ssda->rx_clk_w(!BIT(data, 7)); + m_ssda->tx_clk_w(!BIT(data, 7)); + m_cvsd->clock_w(!BIT(data, 7)); } WRITE_LINE_MEMBER( victor9k_state::via3_irq_w ) @@ -412,6 +456,30 @@ WRITE_LINE_MEMBER( victor9k_state::fdc_irq_w ) // MACHINE INITIALIZATION //************************************************************************** +PALETTE_INIT_MEMBER(victor9k_state, victor9k) +{ + palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00)); + + // BRT0 82K + // BRT1 39K + // BRT2 20K + // 12V 220K pullup + palette.set_pen_color(1, rgb_t(0x00, 0x10, 0x00)); + palette.set_pen_color(2, rgb_t(0x00, 0x20, 0x00)); + palette.set_pen_color(3, rgb_t(0x00, 0x40, 0x00)); + palette.set_pen_color(4, rgb_t(0x00, 0x60, 0x00)); + palette.set_pen_color(5, rgb_t(0x00, 0x80, 0x00)); + palette.set_pen_color(6, rgb_t(0x00, 0xa0, 0x00)); + palette.set_pen_color(7, rgb_t(0x00, 0xc0, 0x00)); + palette.set_pen_color(8, rgb_t(0x00, 0xff, 0x00)); + + // CONT0 620R + // CONT1 332R + // CONT2 162R + // 12V 110R pullup + palette.set_pen_color(9, rgb_t(0xff, 0x00, 0x00)); +} + void victor9k_state::machine_start() { // state saving @@ -425,6 +493,7 @@ void victor9k_state::machine_start() save_item(NAME(m_kbrdy)); save_item(NAME(m_kbackctl)); +#ifndef USE_SCP // patch out SCP self test m_rom->base()[0x11ab] = 0xc3; @@ -433,6 +502,7 @@ void victor9k_state::machine_start() m_rom->base()[0x1d52] = 0x90; m_rom->base()[0x1d53] = 0x90; m_rom->base()[0x1d54] = 0x90; +#endif } void victor9k_state::machine_reset() @@ -470,10 +540,10 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_SCREEN_UPDATE_DEVICE(HD46505S_TAG, hd6845_device, screen_update) MCFG_SCREEN_SIZE(640, 480) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) + MCFG_PALETTE_ADD("palette", 16) + MCFG_PALETTE_INIT_OWNER(victor9k_state, victor9k) - MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette") - - MCFG_MC6845_ADD(HD46505S_TAG, HD6845, SCREEN_TAG, XTAL_30MHz/11) // HD6845 == HD46505S + MCFG_MC6845_ADD(HD46505S_TAG, HD6845, SCREEN_TAG, XTAL_30MHz/10) // HD6845 == HD46505S MCFG_MC6845_SHOW_BORDER_AREA(true) MCFG_MC6845_CHAR_WIDTH(10) MCFG_MC6845_UPDATE_ROW_CB(victor9k_state, crtc_update_row) @@ -481,7 +551,8 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD(HC55516_TAG, HC55516, 100000) + MCFG_SOUND_ADD(HC55516_TAG, HC55516, 0) + //MCFG_HC55516_DIG_OUT_CB(DEVWRITELINE(MC6852_TAG, mc6852_device, rx_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) // devices @@ -516,6 +587,7 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state ) MCFG_DEVICE_ADD(MC6852_TAG, MC6852, XTAL_30MHz/30) MCFG_MC6852_TX_DATA_CALLBACK(DEVWRITELINE(HC55516_TAG, hc55516_device, digit_w)) + MCFG_MC6852_SM_DTR_CALLBACK(WRITELINE(victor9k_state, ssda_sm_dtr_w)) MCFG_MC6852_IRQ_CALLBACK(WRITELINE(victor9k_state, ssda_irq_w)) MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, XTAL_30MHz/30) @@ -598,4 +670,4 @@ ROM_END //************************************************************************** // YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS -COMP( 1982, victor9k, 0, 0, victor9k, victor9k, driver_device, 0, "Victor Business Products", "Victor 9000", MACHINE_NOT_WORKING ) +COMP( 1982, victor9k, 0, 0, victor9k, victor9k, driver_device, 0, "Victor Business Products", "Victor 9000", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp new file mode 100644 index 00000000000..a84d9bb3d1d --- /dev/null +++ b/src/mame/drivers/vis.cpp @@ -0,0 +1,152 @@ +// license:BSD-3-Clause +// copyright-holders:Carl + +#include "emu.h" +#include "cpu/i86/i286.h" +#include "machine/at.h" +#include "bus/isa/isa_cards.h" + +class vis_state : public driver_device +{ +public: + vis_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_mb(*this, "mb") + { } + required_device m_maincpu; + required_device m_mb; + + DECLARE_READ8_MEMBER(sysctl_r); + DECLARE_WRITE8_MEMBER(sysctl_w); + DECLARE_READ8_MEMBER(unk_r); + DECLARE_WRITE8_MEMBER(unk_w); + DECLARE_READ8_MEMBER(unk2_r); + DECLARE_READ8_MEMBER(unk3_r); + DECLARE_READ8_MEMBER(cdrom_r); + DECLARE_WRITE8_MEMBER(cdrom_w); +protected: + void machine_reset() override; +private: + UINT8 m_sysctl; + UINT8 m_unkidx; + UINT8 m_unk[16]; + UINT8 m_cdcmd, m_cdstat; +}; + +void vis_state::machine_reset() +{ + m_cdcmd = 0; + m_cdstat = 0; + m_sysctl = 0; +} + +READ8_MEMBER(vis_state::unk_r) +{ + if(offset) + return m_unk[m_unkidx]; + return 0; +} + +WRITE8_MEMBER(vis_state::unk_w) +{ + if(offset) + m_unk[m_unkidx] = data; + else + m_unkidx = data & 0xf; +} + +READ8_MEMBER(vis_state::unk2_r) +{ + return 0x40; +} + +READ8_MEMBER(vis_state::unk3_r) +{ + return 0x00; +} + +// probably a mitsumi isa non-atapi cdrom controller, mcd.c in older linux versions +READ8_MEMBER(vis_state::cdrom_r) +{ + if(m_cdcmd) + { + if(offset) + { + int ret = m_cdstat; + m_cdstat = 0; + return ret; + } + else + { + m_cdcmd = 0; + return 0x80; + } + } + if(offset) + return 0; + else + return 0x20; +} + +WRITE8_MEMBER(vis_state::cdrom_w) +{ + if(!offset) + { + m_cdcmd = data; + m_cdstat = 4; + } +} + +READ8_MEMBER(vis_state::sysctl_r) +{ + return m_sysctl; +} + +WRITE8_MEMBER(vis_state::sysctl_w) +{ + if(BIT(data, 0) && !BIT(m_sysctl, 0)) + m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); + //m_maincpu->set_input_line(INPUT_LINE_A20, BIT(data, 1) ? CLEAR_LINE : ASSERT_LINE); + m_sysctl = data; +} + +static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, vis_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x000000, 0x09ffff) AM_RAM + AM_RANGE(0x0d8000, 0x0fffff) AM_ROM AM_REGION("bios", 0xd8000) + AM_RANGE(0x100000, 0x15ffff) AM_RAM + AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("bios", 0xf0000) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( at16_io, AS_IO, 16, vis_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0026, 0x0027) AM_READWRITE8(unk_r, unk_w, 0xffff) + AM_RANGE(0x006a, 0x006b) AM_READ8(unk2_r, 0x00ff) + AM_RANGE(0x0092, 0x0093) AM_READWRITE8(sysctl_r, sysctl_w, 0x00ff) + AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map) + AM_RANGE(0x0310, 0x0311) AM_READWRITE8(cdrom_r, cdrom_w, 0xffff) + AM_RANGE(0x031a, 0x031b) AM_READ8(unk3_r, 0x00ff) +ADDRESS_MAP_END + +static MACHINE_CONFIG_START( vis, vis_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", I80286, XTAL_12MHz ) + MCFG_CPU_PROGRAM_MAP(at16_map) + MCFG_CPU_IO_MAP(at16_io) + MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb) + MCFG_80286_SHUTDOWN(DEVWRITELINE("mb", at_mb_device, shutdown)) + + MCFG_DEVICE_ADD("mb", AT_MB, 0) + + MCFG_ISA16_SLOT_ADD("mb:isabus","vga", pc_isa16_cards, "clgd542x", true) +MACHINE_CONFIG_END + +ROM_START(vis) + ROM_REGION(0x100000,"bios", 0) + ROM_LOAD( "p513bk0b.bin", 0x00000, 0x80000, CRC(364e3f74) SHA1(04260ef1e65e482c9c49d25ace40e22487d6aab9)) + ROM_LOAD( "p513bk1b.bin", 0x80000, 0x80000, CRC(e18239c4) SHA1(a0262109e10a07a11eca43371be9978fff060bc5)) +ROM_END + +COMP ( 1992, vis, 0, 0, vis, 0, driver_device, 0, "Tandy/Memorex", "Video Information System MD-2500", MACHINE_NOT_WORKING ) + diff --git a/src/mame/drivers/wangpc.cpp b/src/mame/drivers/wangpc.cpp index 2b43d59b194..8babe95992a 100644 --- a/src/mame/drivers/wangpc.cpp +++ b/src/mame/drivers/wangpc.cpp @@ -449,7 +449,7 @@ READ8_MEMBER( wangpc_state::busy_clr_r ) { if (LOG) logerror("%s: BUSY clear\n", machine().describe_context()); - m_centronics_busy = 1; + m_centronics_busy = 0; check_level1_interrupts(); return 0xff; @@ -713,7 +713,7 @@ WRITE_LINE_MEMBER( wangpc_state::dack3_w ) void wangpc_state::check_level1_interrupts() { - int state = !m_timer2_irq || m_epci->rxrdy_r() || m_epci->txemt_r() || !m_centronics_ack || !m_dav || !m_centronics_busy; + int state = !m_timer2_irq || m_epci->rxrdy_r() || m_epci->txemt_r() || !m_centronics_ack || !m_dav || m_centronics_busy; m_pic->ir1_w(state); } @@ -1191,4 +1191,4 @@ ROM_END // GAME DRIVERS //************************************************************************** -COMP( 1985, wangpc, 0, 0, wangpc, wangpc, driver_device, 0, "Wang Laboratories", "Wang Professional Computer", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +COMP( 1985, wangpc, 0, 0, wangpc, wangpc, driver_device, 0, "Wang Laboratories", "Wang Professional Computer", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/yunsung8.cpp b/src/mame/drivers/yunsung8.cpp index 8c1ef5f83ec..9d5f12b66d3 100644 --- a/src/mame/drivers/yunsung8.cpp +++ b/src/mame/drivers/yunsung8.cpp @@ -46,11 +46,11 @@ To Do: ***************************************************************************/ -WRITE8_MEMBER(yunsung8_state::yunsung8_bankswitch_w) +WRITE8_MEMBER(yunsung8_state::bankswitch_w) { m_layers_ctrl = data & 0x30; // Layers enable - membank("bank1")->set_entry(data & 0x07); + membank("mainbank")->set_entry(data & 0x07); if (data & ~0x37) logerror("CPU #0 - PC %04X: Bank %02X\n", space.device().safe_pc(), data); @@ -66,22 +66,22 @@ WRITE8_MEMBER(yunsung8_state::yunsung8_bankswitch_w) */ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, yunsung8_state ) - AM_RANGE(0x0001, 0x0001) AM_WRITE(yunsung8_bankswitch_w) // ROM Bank (again?) - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") // Banked ROM + AM_RANGE(0x0001, 0x0001) AM_WRITE(bankswitch_w) // ROM Bank (again?) + AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank") // Banked ROM AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xdfff) AM_READWRITE(yunsung8_videoram_r, yunsung8_videoram_w) // Video RAM (Banked) + AM_RANGE(0xc000, 0xdfff) AM_READWRITE(videoram_r, videoram_w) // Video RAM (Banked) AM_RANGE(0xe000, 0xffff) AM_RAM ADDRESS_MAP_END static ADDRESS_MAP_START( port_map, AS_IO, 8, yunsung8_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ_PORT("SYSTEM") AM_WRITE(yunsung8_videobank_w) // video RAM bank - AM_RANGE(0x01, 0x01) AM_READ_PORT("P1") AM_WRITE(yunsung8_bankswitch_w) // ROM Bank + Layers Enable + AM_RANGE(0x00, 0x00) AM_READ_PORT("SYSTEM") AM_WRITE(videobank_w) // video RAM bank + AM_RANGE(0x01, 0x01) AM_READ_PORT("P1") AM_WRITE(bankswitch_w) // ROM Bank + Layers Enable AM_RANGE(0x02, 0x02) AM_READ_PORT("P2") AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // To Sound CPU AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW1") AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW2") - AM_RANGE(0x06, 0x06) AM_WRITE(yunsung8_flipscreen_w) // Flip Screen + AM_RANGE(0x06, 0x06) AM_WRITE(flipscreen_w) // Flip Screen AM_RANGE(0x07, 0x07) AM_WRITENOP // ? (end of IRQ, random value) ADDRESS_MAP_END @@ -95,17 +95,17 @@ ADDRESS_MAP_END ***************************************************************************/ -WRITE8_MEMBER(yunsung8_state::yunsung8_sound_bankswitch_w) +WRITE8_MEMBER(yunsung8_state::sound_bankswitch_w) { m_msm->reset_w(data & 0x20); - membank("bank2")->set_entry(data & 0x07); + membank("soundbank")->set_entry(data & 0x07); if (data != (data & (~0x27))) logerror("%s: Bank %02X\n", machine().describe_context(), data); } -WRITE8_MEMBER(yunsung8_state::yunsung8_adpcm_w) +WRITE8_MEMBER(yunsung8_state::adpcm_w) { /* Swap the nibbles */ m_adpcm = ((data & 0xf) << 4) | ((data >> 4) & 0xf); @@ -115,9 +115,9 @@ WRITE8_MEMBER(yunsung8_state::yunsung8_adpcm_w) static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, yunsung8_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") // Banked ROM - AM_RANGE(0xe000, 0xe000) AM_WRITE(yunsung8_sound_bankswitch_w ) // ROM Bank - AM_RANGE(0xe400, 0xe400) AM_WRITE(yunsung8_adpcm_w) + AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("soundbank") // Banked ROM + AM_RANGE(0xe000, 0xe000) AM_WRITE(sound_bankswitch_w ) // ROM Bank + AM_RANGE(0xe400, 0xe400) AM_WRITE(adpcm_w) AM_RANGE(0xec00, 0xec01) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU @@ -429,8 +429,8 @@ static const gfx_layout layout_8x8x8 = }; static GFXDECODE_START( yunsung8 ) - GFXDECODE_ENTRY( "gfx1", 0, layout_8x8x8, 0, 0x08 ) // [0] Tiles (Background) - GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4, 0, 0x40 ) // [1] Tiles (Text) + GFXDECODE_ENTRY( "bgfx", 0, layout_8x8x8, 0, 0x08 ) // [0] Tiles (Background) + GFXDECODE_ENTRY( "text", 0, layout_8x8x4, 0, 0x40 ) // [1] Tiles (Text) GFXDECODE_END @@ -444,7 +444,7 @@ GFXDECODE_END ***************************************************************************/ -WRITE_LINE_MEMBER(yunsung8_state::yunsung8_adpcm_int) +WRITE_LINE_MEMBER(yunsung8_state::adpcm_int) { m_msm->data_w(m_adpcm >> 4); m_adpcm <<= 4; @@ -456,17 +456,11 @@ WRITE_LINE_MEMBER(yunsung8_state::yunsung8_adpcm_int) void yunsung8_state::machine_start() { - UINT8 *MAIN = memregion("maincpu")->base(); - UINT8 *AUDIO = memregion("audiocpu")->base(); - m_videoram_0 = m_videoram + 0x0000; // Ram is banked m_videoram_1 = m_videoram + 0x2000; - membank("bank1")->configure_entries(0, 3, &MAIN[0x00000], 0x4000); - membank("bank1")->configure_entries(3, 5, &MAIN[0x10000], 0x4000); - membank("bank2")->configure_entries(0, 3, &AUDIO[0x00000], 0x4000); - membank("bank2")->configure_entries(3, 5, &AUDIO[0x10000], 0x4000); - + membank("mainbank")->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000); + membank("soundbank")->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000); save_item(NAME(m_videoram)); save_item(NAME(m_layers_ctrl)); @@ -500,7 +494,7 @@ static MACHINE_CONFIG_START( yunsung8, yunsung8_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS(XTAL_16MHz/2, 512, 64, 512-64, 262, 8, 256-8) /* TODO: completely inaccurate */ - MCFG_SCREEN_UPDATE_DRIVER(yunsung8_state, screen_update_yunsung8) + MCFG_SCREEN_UPDATE_DRIVER(yunsung8_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", yunsung8) @@ -517,7 +511,7 @@ static MACHINE_CONFIG_START( yunsung8, yunsung8_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) MCFG_SOUND_ADD("msm", MSM5205, XTAL_400kHz) /* verified on pcb */ - MCFG_MSM5205_VCLK_CB(WRITELINE(yunsung8_state, yunsung8_adpcm_int)) /* interrupt function */ + MCFG_MSM5205_VCLK_CB(WRITELINE(yunsung8_state, adpcm_int)) /* interrupt function */ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S96_4B) /* 4KHz, 4 Bits */ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80) @@ -569,21 +563,19 @@ Sound CPU: Z80A ***************************************************************************/ ROM_START( magix ) - ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */ - ROM_LOAD( "yunsung8.07", 0x00000, 0x0c000, CRC(d4d0b68b) SHA1(d7e1fb57a14f8b822791b98cecc6d5a053a89e0f) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */ + ROM_LOAD( "yunsung8.07", 0x00000, 0x20000, CRC(d4d0b68b) SHA1(d7e1fb57a14f8b822791b98cecc6d5a053a89e0f) ) - ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */ - ROM_LOAD( "yunsung8.08", 0x00000, 0x0c000, CRC(6fd60be9) SHA1(87622dc2967842629e90a02b415bec86cc26cbc7) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */ + ROM_LOAD( "yunsung8.08", 0x00000, 0x20000, CRC(6fd60be9) SHA1(87622dc2967842629e90a02b415bec86cc26cbc7) ) - ROM_REGION( 0x200000, "gfx1", 0 ) /* Background */ + ROM_REGION( 0x200000, "bgfx", 0 ) /* Background */ ROM_LOAD( "yunsung8.04", 0x000000, 0x80000, CRC(0a100d2b) SHA1(c36a2489748c8ac7b6d7457ad09d8153707c85be) ) ROM_LOAD( "yunsung8.03", 0x080000, 0x80000, CRC(c8cb0373) SHA1(339c4e0fef44da3cab615e07dc8739bd925ebf28) ) ROM_LOAD( "yunsung8.02", 0x100000, 0x80000, CRC(09efb8e5) SHA1(684bb5c4b579f8c77e79aab4decbefea495d9474) ) ROM_LOAD( "yunsung8.01", 0x180000, 0x80000, CRC(4590d782) SHA1(af875166207793572b9ecf01bb6a24feba562a96) ) - ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */ + ROM_REGION( 0x40000, "text", 0 ) /* Text */ ROM_LOAD( "yunsung8.05", 0x00000, 0x20000, CRC(862d378c) SHA1(a4e2cf14b5b25c6b8725dd285ddea65ce9ee257a) ) // only first $8000 bytes != 0 ROM_LOAD( "yunsung8.06", 0x20000, 0x20000, CRC(8b2ab901) SHA1(1a5c05dd0cf830b645357a62d8e6e876b44c6b7f) ) // only first $8000 bytes != 0 ROM_END @@ -599,21 +591,19 @@ Code is different, shifted around not patched. ***************************************************************************/ ROM_START( magixb ) - ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */ - ROM_LOAD( "8.bin", 0x00000, 0x0c000, CRC(3b92020f) SHA1(edc15c5b712774dad1685ce9a94e4290aab9934a) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */ + ROM_LOAD( "8.bin", 0x00000, 0x20000, CRC(3b92020f) SHA1(edc15c5b712774dad1685ce9a94e4290aab9934a) ) - ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */ - ROM_LOAD( "9.bin", 0x00000, 0x0c000, CRC(6fd60be9) SHA1(87622dc2967842629e90a02b415bec86cc26cbc7) ) // yunsung8.08 - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */ + ROM_LOAD( "9.bin", 0x00000, 0x20000, CRC(6fd60be9) SHA1(87622dc2967842629e90a02b415bec86cc26cbc7) ) // yunsung8.08 - ROM_REGION( 0x200000, "gfx1", 0 ) /* Background */ + ROM_REGION( 0x200000, "bgfx", 0 ) /* Background */ ROM_LOAD( "1.bin", 0x000000, 0x80000, CRC(0a100d2b) SHA1(c36a2489748c8ac7b6d7457ad09d8153707c85be) ) // yunsung8.04 ROM_LOAD( "2.bin", 0x080000, 0x80000, CRC(c8cb0373) SHA1(339c4e0fef44da3cab615e07dc8739bd925ebf28) ) // yunsung8.03 ROM_LOAD( "3.bin", 0x100000, 0x80000, CRC(09efb8e5) SHA1(684bb5c4b579f8c77e79aab4decbefea495d9474) ) // yunsung8.02 ROM_LOAD( "4.bin", 0x180000, 0x80000, CRC(4590d782) SHA1(af875166207793572b9ecf01bb6a24feba562a96) ) // yunsung8.01 - ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */ + ROM_REGION( 0x40000, "text", 0 ) /* Text */ ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(11b99819) SHA1(4b20feea227cefd2e905601d934538a13ba6685b) ) // only first $8000 bytes != 0 ROM_LOAD( "6.bin", 0x20000, 0x20000, CRC(361a864c) SHA1(e0bb78b49fc3d461d6ac46ad97a9d04112783132) ) // only first $8000 bytes != 0 ROM_END @@ -660,42 +650,38 @@ Sound CPU: Z80A ***************************************************************************/ ROM_START( cannball ) - ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */ - ROM_LOAD( "cannball.07", 0x00000, 0x0c000, CRC(17db56b4) SHA1(032e3dbde0b0e315dcb5f2b31f57e75e78818f2d) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */ + ROM_LOAD( "cannball.07", 0x00000, 0x20000, CRC(17db56b4) SHA1(032e3dbde0b0e315dcb5f2b31f57e75e78818f2d) ) - ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */ - ROM_LOAD( "cannball.08", 0x00000, 0x0c000, CRC(11403875) SHA1(9f583bc4f08e7aef3fd0f3fe3f31cce1d226641a) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */ + ROM_LOAD( "cannball.08", 0x00000, 0x20000, CRC(11403875) SHA1(9f583bc4f08e7aef3fd0f3fe3f31cce1d226641a) ) - ROM_REGION( 0x100000, "gfx1", 0 ) /* Background */ + ROM_REGION( 0x100000, "bgfx", 0 ) /* Background */ ROM_LOAD( "cannball.01", 0x000000, 0x40000, CRC(2d7785e4) SHA1(9911354c0be192506f8bfca3e85ede0bbc4828d5) ) ROM_LOAD( "cannball.02", 0x040000, 0x40000, CRC(24df387e) SHA1(5f4afe11feb367ca3b3c4f5eb37a6b6c4edb83bb) ) ROM_LOAD( "cannball.03", 0x080000, 0x40000, CRC(4d62f192) SHA1(8c60b9b4b36c13c2d145c49413580a10e71eb283) ) ROM_LOAD( "cannball.04", 0x0c0000, 0x40000, CRC(37cf8b12) SHA1(f93df8e0babe2c4ec996aa3c2a48bf40a5a02e62) ) - ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */ + ROM_REGION( 0x40000, "text", 0 ) /* Text */ ROM_LOAD( "cannball.05", 0x00000, 0x20000, CRC(87c1f1fa) SHA1(dbc568d2133734e41b69fd8d18b76531648b32ef) ) ROM_LOAD( "cannball.06", 0x20000, 0x20000, CRC(e722bee8) SHA1(3aed7df9df81a6776b6bf2f5b167965b0d689216) ) ROM_END ROM_START( cannballv ) - ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */ - ROM_LOAD( "yunsung1", 0x00000, 0x0c000, CRC(f7398b0d) SHA1(f2cdb9c4662cd325376d25ae9611f689605042db) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */ + ROM_LOAD( "yunsung1", 0x00000, 0x20000, CRC(f7398b0d) SHA1(f2cdb9c4662cd325376d25ae9611f689605042db) ) - ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */ - ROM_LOAD( "yunsung8", 0x00000, 0x0c000, CRC(11403875) SHA1(9f583bc4f08e7aef3fd0f3fe3f31cce1d226641a) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */ + ROM_LOAD( "yunsung8", 0x00000, 0x20000, CRC(11403875) SHA1(9f583bc4f08e7aef3fd0f3fe3f31cce1d226641a) ) - ROM_REGION( 0x200000, "gfx1", 0 ) /* Background */ + ROM_REGION( 0x200000, "bgfx", 0 ) /* Background */ ROM_LOAD( "yunsung7", 0x000000, 0x80000, CRC(a5f1a648) SHA1(7a5bf5bc0ad257ccb12104512e98dfb3525babfc) ) ROM_LOAD( "yunsung6", 0x080000, 0x80000, CRC(8baa686e) SHA1(831c3e2864d262bf5429dca6653c83dc976e610e) ) ROM_LOAD( "yunsung5", 0x100000, 0x80000, CRC(a7f2ce51) SHA1(81632aca067f2c8c45488266c4489d9af24fb552) ) ROM_LOAD( "yunsung4", 0x180000, 0x80000, CRC(74bef793) SHA1(6208580ce747cec3d410ce3c71e07aa570b9121d) ) - ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */ + ROM_REGION( 0x40000, "text", 0 ) /* Text */ ROM_LOAD( "yunsung3", 0x00000, 0x20000, CRC(8217abbe) SHA1(1a459a816a1aa5b68858e39c4a21bd78ee78dcab) ) ROM_LOAD( "yunsung2", 0x20000, 0x20000, CRC(76de1045) SHA1(a3845ee1874e6ec0ce26e6e73e4643243779e70d) ) ROM_END @@ -722,22 +708,20 @@ they jumpered the first position) ***************************************************************************/ ROM_START( rocktris ) - ROM_REGION( 0x24000, "maincpu", 0 ) /* Main Z80 Code */ - ROM_LOAD( "cpu.bin", 0x00000, 0x0c000, CRC(46e3b79c) SHA1(81a587b9f986c4e39b1888ec6ed6b86d1469b9a0) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "maincpu", 0 ) /* Main Z80 Code */ + ROM_LOAD( "cpu.bin", 0x00000, 0x20000, CRC(46e3b79c) SHA1(81a587b9f986c4e39b1888ec6ed6b86d1469b9a0) ) - ROM_REGION( 0x24000, "audiocpu", 0 ) /* Sound Z80 Code */ - ROM_LOAD( "cpu2.bin", 0x00000, 0x0c000, CRC(3a78a4cf) SHA1(f643c7a217cbb71f3a03f1f4a16545c546332819) ) - ROM_CONTINUE( 0x10000, 0x14000) + ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 Code */ + ROM_LOAD( "cpu2.bin", 0x00000, 0x20000, CRC(3a78a4cf) SHA1(f643c7a217cbb71f3a03f1f4a16545c546332819) ) - ROM_REGION( 0x200000, "gfx1", 0 ) /* Background */ + ROM_REGION( 0x200000, "bgfx", 0 ) /* Background */ ROM_LOAD( "gfx4.bin", 0x000000, 0x80000, CRC(abb49cac) SHA1(e2d766e950df398a8ec8b6888e128ffc3bdf1ce9) ) ROM_LOAD( "gfx3.bin", 0x080000, 0x80000, CRC(70a6ad52) SHA1(04cd58d3f885dd7c2fb1061f93d3ae3a418ad762) ) ROM_LOAD( "gfx2.bin", 0x100000, 0x80000, CRC(fcc9ec97) SHA1(1f09452988e3fa976b233e3b458c7a60977b76aa) ) ROM_LOAD( "gfx1.bin", 0x180000, 0x80000, CRC(4295034d) SHA1(9bdbbcdb46eb659a13b77c5bb26c9d8ad43731a7) ) - ROM_REGION( 0x40000, "gfx2", 0 ) /* Text */ + ROM_REGION( 0x40000, "text", 0 ) /* Text */ ROM_LOAD( "gfx5.bin", 0x00000, 0x20000, CRC(058ee379) SHA1(57088bb02c56212979b9119b773eedc31af17e50) ) ROM_LOAD( "gfx6.bin", 0x20000, 0x20000, CRC(593cbd39) SHA1(4d60b5811118f3f22f6f3b300a4daec158456b72) ) ROM_END diff --git a/src/mame/drivers/zapcomputer.cpp b/src/mame/drivers/zapcomputer.cpp index 2b5be700b8d..ad6791e68c0 100644 --- a/src/mame/drivers/zapcomputer.cpp +++ b/src/mame/drivers/zapcomputer.cpp @@ -92,13 +92,13 @@ READ8_MEMBER( zapcomp_state::keyboard_r ) UINT8 special = ioport("X1")->read(); UINT16 hex_keys = ioport("X0")->read(); - if BIT(special, 2) /* "SHIFT" key is pressed */ + if (BIT(special, 2)) /* "SHIFT" key is pressed */ retval |= 0x40; /* turn on the SHIFT bit but DO NOT turn on the strobe bit */ - if BIT(special, 1) /* "NEXT" key is pressed */ + if (BIT(special, 1)) /* "NEXT" key is pressed */ retval |= 0xA0; /* turn on the strobe & NEXT bits */ - if BIT(special, 0) /* "EXEC" key is pressed */ + if (BIT(special, 0)) /* "EXEC" key is pressed */ retval |= 0x90; /* turn on the strobe & EXEC bit */ for (int i=0; i<16; i++) diff --git a/src/mame/drivers/zrt80.cpp b/src/mame/drivers/zrt80.cpp index ed0cc48ea07..4166113748e 100644 --- a/src/mame/drivers/zrt80.cpp +++ b/src/mame/drivers/zrt80.cpp @@ -229,7 +229,7 @@ MC6845_UPDATE_ROW( zrt80_state::crtc_update_row ) mem = (ma + x) & 0x1fff; chr = m_p_videoram[mem]; - if BIT(chr, 7) + if (BIT(chr, 7)) { inv ^= 0xff; chr &= 0x7f; diff --git a/src/mame/includes/cave.h b/src/mame/includes/cave.h index 187444027fa..cc0533ce479 100644 --- a/src/mame/includes/cave.h +++ b/src/mame/includes/cave.h @@ -216,6 +216,7 @@ public: TILE_GET_INFO_MEMBER(get_tile_info_3); DECLARE_MACHINE_START(cave); DECLARE_MACHINE_RESET(cave); + DECLARE_MACHINE_RESET(sailormn); DECLARE_VIDEO_START(cave_2_layers); DECLARE_PALETTE_INIT(dfeveron); DECLARE_VIDEO_START(cave_3_layers); @@ -241,6 +242,7 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(cave_vblank_start_left); TIMER_DEVICE_CALLBACK_MEMBER(cave_vblank_start_right); TIMER_DEVICE_CALLBACK_MEMBER(timer_lev2_cb); + TIMER_DEVICE_CALLBACK_MEMBER(sailormn_startup); void cave_get_sprite_info(int chip); void cave_get_sprite_info_all(); void sailormn_tilebank_w(int bank); diff --git a/src/mame/includes/compis.h b/src/mame/includes/compis.h deleted file mode 100644 index d8a06b09757..00000000000 --- a/src/mame/includes/compis.h +++ /dev/null @@ -1,133 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -// thanks-to:Per Ola Ingvarsson, Tomas Karlsson -/***************************************************************************** - * - * includes/compis.h - * - * machine driver header - * - ****************************************************************************/ - -#pragma once - -#ifndef __COMPIS__ -#define __COMPIS__ - -#include "emu.h" -#include "bus/isbx/isbx.h" -#include "cpu/i86/i186.h" -#include "cpu/mcs48/mcs48.h" -#include "imagedev/cassette.h" -#include "machine/compiskb.h" -#include "bus/centronics/ctronics.h" -#include "machine/i8251.h" -#include "machine/i8255.h" -#include "machine/i80130.h" -#include "machine/mm58274c.h" -#include "machine/pic8259.h" -#include "machine/pit8253.h" -#include "machine/ram.h" -#include "machine/z80dart.h" -#include "video/upd7220.h" - -#define I80186_TAG "ic1" -#define I80130_TAG "ic15" -#define I8251A_TAG "ic59" -#define I8253_TAG "ic60" -#define I8274_TAG "ic65" -#define MM58174A_TAG "ic66" -#define I8255_TAG "ic69" -#define RS232_A_TAG "rs232a" -#define RS232_B_TAG "rs232b" -#define CASSETTE_TAG "cassette" -#define CENTRONICS_TAG "centronics" -#define ISBX_0_TAG "isbx0" -#define ISBX_1_TAG "isbx1" -#define SCREEN_TAG "screen" -#define COMPIS_KEYBOARD_TAG "compiskb" - -class compis_state : public driver_device -{ -public: - compis_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, I80186_TAG), - m_osp(*this, I80130_TAG), - m_pit(*this, I8253_TAG), - m_ppi(*this, I8255_TAG), - m_mpsc(*this, I8274_TAG), - m_centronics(*this, CENTRONICS_TAG), - m_uart(*this, I8251A_TAG), - m_rtc(*this, MM58174A_TAG), - m_crtc(*this, "upd7220"), - m_palette(*this, "palette"), - m_cassette(*this, CASSETTE_TAG), - m_isbx0(*this, ISBX_0_TAG), - m_isbx1(*this, ISBX_1_TAG), - m_ram(*this, RAM_TAG), - m_video_ram(*this, "video_ram"), - m_s8(*this, "S8") - { } - - required_device m_maincpu; - required_device m_osp; - required_device m_pit; - required_device m_ppi; - required_device m_mpsc; - required_device m_centronics; - required_device m_uart; - required_device m_rtc; - required_device m_crtc; - required_device m_palette; - required_device m_cassette; - required_device m_isbx0; - required_device m_isbx1; - required_device m_ram; - required_shared_ptr m_video_ram; - required_ioport m_s8; - - virtual void machine_start() override; - virtual void machine_reset() override; - - DECLARE_WRITE8_MEMBER( tape_mon_w ); - DECLARE_READ16_MEMBER( isbx0_tdma_r ); - DECLARE_WRITE16_MEMBER( isbx0_tdma_w ); - DECLARE_READ16_MEMBER( isbx1_tdma_r ); - DECLARE_WRITE16_MEMBER( isbx1_tdma_w ); - DECLARE_READ16_MEMBER( isbx0_cs_r ); - DECLARE_WRITE16_MEMBER( isbx0_cs_w ); - DECLARE_READ16_MEMBER( isbx0_dack_r ); - DECLARE_WRITE16_MEMBER( isbx0_dack_w ); - DECLARE_READ16_MEMBER( isbx1_cs_r ); - DECLARE_WRITE16_MEMBER( isbx1_cs_w ); - DECLARE_READ16_MEMBER( isbx1_dack_r ); - DECLARE_WRITE16_MEMBER( isbx1_dack_w ); - - DECLARE_READ8_MEMBER( compis_irq_callback ); - - DECLARE_READ8_MEMBER( ppi_pb_r ); - DECLARE_WRITE8_MEMBER( ppi_pc_w ); - - DECLARE_WRITE_LINE_MEMBER( tmr0_w ); - DECLARE_WRITE_LINE_MEMBER( tmr1_w ); - DECLARE_WRITE_LINE_MEMBER( tmr2_w ); - DECLARE_WRITE_LINE_MEMBER( tmr5_w ); - - TIMER_DEVICE_CALLBACK_MEMBER( tape_tick ); - - int m_centronics_busy; - int m_centronics_select; - - DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); - DECLARE_WRITE_LINE_MEMBER(write_centronics_select); - - int m_tmr0; - int m_unk_video; - - UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels ); -}; - - - -#endif diff --git a/src/mame/includes/gba.h b/src/mame/includes/gba.h index a248140012a..efb8406778d 100644 --- a/src/mame/includes/gba.h +++ b/src/mame/includes/gba.h @@ -7,134 +7,15 @@ #include "machine/intelfsh.h" #include "bus/gba/gba_slot.h" #include "sound/dac.h" +#include "video/gba_lcd.h" -#define DISPSTAT_VBL 0x0001 -#define DISPSTAT_HBL 0x0002 -#define DISPSTAT_VCNT 0x0004 -#define DISPSTAT_VBL_IRQ_EN 0x0008 -#define DISPSTAT_HBL_IRQ_EN 0x0010 -#define DISPSTAT_VCNT_IRQ_EN 0x0020 -#define DISPSTAT_VCNT_VALUE 0xff00 -#define INT_VBL 0x0001 -#define INT_HBL 0x0002 -#define INT_VCNT 0x0004 -#define INT_TM0_OVERFLOW 0x0008 -#define INT_TM1_OVERFLOW 0x0010 -#define INT_TM2_OVERFLOW 0x0020 -#define INT_TM3_OVERFLOW 0x0040 -#define INT_SIO 0x0080 -#define INT_DMA0 0x0100 -#define INT_DMA1 0x0200 -#define INT_DMA2 0x0400 -#define INT_DMA3 0x0800 -#define INT_KEYPAD 0x1000 -#define INT_GAMEPAK 0x2000 - -#define DISPCNT_MODE 0x0007 -#define DISPCNT_FRAMESEL 0x0010 -#define DISPCNT_HBL_FREE 0x0020 - -#define DISPCNT_VRAM_MAP 0x0040 -#define DISPCNT_VRAM_MAP_2D 0x0000 -#define DISPCNT_VRAM_MAP_1D 0x0040 - -#define DISPCNT_BLANK 0x0080 -#define DISPCNT_BG0_EN 0x0100 -#define DISPCNT_BG1_EN 0x0200 -#define DISPCNT_BG2_EN 0x0400 -#define DISPCNT_BG3_EN 0x0800 -#define DISPCNT_OBJ_EN 0x1000 -#define DISPCNT_WIN0_EN 0x2000 -#define DISPCNT_WIN1_EN 0x4000 -#define DISPCNT_OBJWIN_EN 0x8000 - -#define OBJ_Y_COORD 0x00ff -#define OBJ_ROZMODE 0x0300 -#define OBJ_ROZMODE_NONE 0x0000 -#define OBJ_ROZMODE_ROZ 0x0100 -#define OBJ_ROZMODE_DISABLE 0x0200 -#define OBJ_ROZMODE_DBLROZ 0x0300 - -#define OBJ_MODE 0x0c00 -#define OBJ_MODE_NORMAL 0x0000 -#define OBJ_MODE_ALPHA 0x0400 -#define OBJ_MODE_WINDOW 0x0800 -#define OBJ_MODE_UNDEFINED 0x0c00 - -#define OBJ_MOSAIC 0x1000 - -#define OBJ_PALMODE 0x2000 -#define OBJ_PALMODE_16 0x0000 -#define OBJ_PALMODE_256 0x2000 - -#define OBJ_SHAPE 0xc000 -#define OBJ_SHAPE_SQR 0x0000 -#define OBJ_SHAPE_HORIZ 0x4000 -#define OBJ_SHAPE_VERT 0x8000 - -#define OBJ_X_COORD 0x01ff -#define OBJ_SCALE_PARAM 0x3e00 -#define OBJ_SCALE_PARAM_SHIFT 9 -#define OBJ_HFLIP 0x1000 -#define OBJ_VFLIP 0x2000 -#define OBJ_SIZE 0xc000 -#define OBJ_SIZE_8 0x0000 -#define OBJ_SIZE_16 0x4000 -#define OBJ_SIZE_32 0x8000 -#define OBJ_SIZE_64 0xc000 - -#define OBJ_TILENUM 0x03ff -#define OBJ_PRIORITY 0x0c00 -#define OBJ_PRIORITY_SHIFT 10 -#define OBJ_PALNUM 0xf000 -#define OBJ_PALNUM_SHIFT 12 - -#define BGCNT_SCREENSIZE 0xc000 -#define BGCNT_SCREENSIZE_SHIFT 14 -#define BGCNT_PALETTESET_WRAP 0x2000 -#define BGCNT_SCREENBASE 0x1f00 -#define BGCNT_SCREENBASE_SHIFT 8 -#define BGCNT_PALETTE256 0x0080 -#define BGCNT_MOSAIC 0x0040 -#define BGCNT_CHARBASE 0x003c -#define BGCNT_CHARBASE_SHIFT 2 -#define BGCNT_PRIORITY 0x0003 - -#define BLDCNT_BG0TP1 0x0001 -#define BLDCNT_BG1TP1 0x0002 -#define BLDCNT_BG2TP1 0x0004 -#define BLDCNT_BG3TP1 0x0008 -#define BLDCNT_OBJTP1 0x0010 -#define BLDCNT_BDTP1 0x0020 -#define BLDCNT_SFX 0x00c0 -#define BLDCNT_SFX_NONE 0x0000 -#define BLDCNT_SFX_ALPHA 0x0040 -#define BLDCNT_SFX_LIGHTEN 0x0080 -#define BLDCNT_SFX_DARKEN 0x00c0 -#define BLDCNT_BG0TP2 0x0100 -#define BLDCNT_BG1TP2 0x0200 -#define BLDCNT_BG2TP2 0x0400 -#define BLDCNT_BG3TP2 0x0800 -#define BLDCNT_OBJTP2 0x1000 -#define BLDCNT_BDTP2 0x2000 -#define BLDCNT_TP2_SHIFT 8 - -#define TILEOBJ_TILE 0x03ff -#define TILEOBJ_HFLIP 0x0400 -#define TILEOBJ_VFLIP 0x0800 -#define TILEOBJ_PALETTE 0xf000 - -/* driver state */ -class gba_state : public driver_device +class gba_state : public driver_device, protected gba_registers<(0x400 - 0x060) / 4, 0x060> { public: gba_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_gba_pram(*this, "gba_pram"), - m_gba_vram(*this, "gba_vram"), - m_gba_oam(*this, "gba_oam"), m_ladac(*this, "direct_a_left"), m_radac(*this, "direct_a_right"), m_lbdac(*this, "direct_b_left"), @@ -147,9 +28,6 @@ public: { } required_device m_maincpu; - required_shared_ptr m_gba_pram; - required_shared_ptr m_gba_vram; - required_shared_ptr m_gba_oam; required_device m_ladac; required_device m_radac; required_device m_lbdac; @@ -158,57 +36,15 @@ public: required_device m_cart; void request_irq(UINT32 int_type); - void dma_exec(FPTR ch); + + void dma_exec(int ch); void audio_tick(int ref); - // video-related - virtual void video_start() override; - UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - bitmap_ind16 m_bitmap; - - UINT32 m_DISPSTAT; - UINT32 m_BG2X, m_BG2Y, m_BG3X, m_BG3Y; - UINT16 m_DISPCNT, m_GRNSWAP; - UINT16 m_BG0CNT, m_BG1CNT, m_BG2CNT, m_BG3CNT; - UINT16 m_BG0HOFS, m_BG0VOFS, m_BG1HOFS, m_BG1VOFS, m_BG2HOFS, m_BG2VOFS, m_BG3HOFS, m_BG3VOFS; - UINT16 m_BG2PA, m_BG2PB, m_BG2PC, m_BG2PD, m_BG3PA, m_BG3PB, m_BG3PC, m_BG3PD; - UINT16 m_WIN0H, m_WIN1H, m_WIN0V, m_WIN1V, m_WININ, m_WINOUT; - UINT16 m_MOSAIC; - UINT16 m_BLDCNT; - UINT16 m_BLDALPHA; - UINT16 m_BLDY; - UINT8 m_SOUNDCNT_X; - UINT16 m_SOUNDCNT_H; - UINT16 m_SOUNDBIAS; - UINT16 m_SIOMULTI0, m_SIOMULTI1, m_SIOMULTI2, m_SIOMULTI3; - UINT16 m_SIOCNT, m_SIODATA8; - UINT16 m_KEYCNT; - UINT16 m_RCNT; - UINT16 m_JOYCNT; - UINT32 m_JOY_RECV, m_JOY_TRANS; - UINT16 m_JOYSTAT; - UINT16 m_IR, m_IE, m_IF, m_IME; - UINT16 m_WAITCNT; - UINT8 m_POSTFLG; - UINT8 m_HALTCNT; - - UINT8 m_windowOn; - UINT8 m_fxOn; - UINT8 m_gfxBG2Changed; - UINT8 m_gfxBG3Changed; - INT32 m_gfxBG2X; - INT32 m_gfxBG2Y; - INT32 m_gfxBG3X; - INT32 m_gfxBG3Y; - // DMA emu_timer *m_dma_timer[4]; - UINT32 m_dma_regs[16]; UINT32 m_dma_src[4]; UINT32 m_dma_dst[4]; - UINT32 m_dma_cnt[4]; - UINT32 m_dma_srcadd[4]; - UINT32 m_dma_dstadd[4]; + UINT16 m_dma_cnt[4]; // Timers UINT32 m_timer_regs[4]; @@ -216,7 +52,6 @@ public: int m_timer_recalc[4]; emu_timer *m_tmr_timer[4], *m_irq_timer; - emu_timer *m_scan_timer, *m_hbl_timer; double m_timer_hz[4]; @@ -226,7 +61,6 @@ public: int m_fifo_b_in; UINT8 m_fifo_a[20]; UINT8 m_fifo_b[20]; - UINT32 m_xferscan[7][240+2048]; UINT32 m_bios_last_address; int m_bios_protected; @@ -234,34 +68,19 @@ public: DIRECT_UPDATE_MEMBER(gba_direct); DECLARE_READ32_MEMBER(gba_io_r); DECLARE_WRITE32_MEMBER(gba_io_w); - DECLARE_WRITE32_MEMBER(gba_pram_w); - DECLARE_WRITE32_MEMBER(gba_vram_w); - DECLARE_WRITE32_MEMBER(gba_oam_w); DECLARE_READ32_MEMBER(gba_bios_r); DECLARE_READ32_MEMBER(gba_10000000_r); DECLARE_DRIVER_INIT(gbadv); + DECLARE_WRITE_LINE_MEMBER(int_hblank_callback); + DECLARE_WRITE_LINE_MEMBER(int_vblank_callback); + DECLARE_WRITE_LINE_MEMBER(int_vcount_callback); + DECLARE_WRITE_LINE_MEMBER(dma_hblank_callback); + DECLARE_WRITE_LINE_MEMBER(dma_vblank_callback); virtual void machine_start() override; virtual void machine_reset() override; - DECLARE_PALETTE_INIT(gba); TIMER_CALLBACK_MEMBER(dma_complete); TIMER_CALLBACK_MEMBER(timer_expire); TIMER_CALLBACK_MEMBER(handle_irq); - TIMER_CALLBACK_MEMBER(perform_hbl); - TIMER_CALLBACK_MEMBER(perform_scan); - - // video related - void draw_scanline(int y); - - void draw_roz_bitmap_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed, int depth); - void draw_roz_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, INT32 X, INT32 Y, INT32 PA, INT32 PB, INT32 PC, INT32 PD, INT32 *currentx, INT32 *currenty, int changed); - void draw_bg_scanline(UINT32 *scanline, int ypos, UINT32 enablemask, UINT32 ctrl, UINT32 hofs, UINT32 vofs); - void draw_gba_oam_window(UINT32 *scanline, int y); - void draw_gba_oam(UINT32 *scanline, int y); - - inline int is_in_window(int x, int window); - - inline void update_mask(UINT8* mask, int mode, int submode, UINT32* obj_win, UINT8 inwin0, UINT8 inwin1, UINT8 in0_mask, UINT8 in1_mask, UINT8 out_mask); - void draw_modes(int mode, int submode, int y, UINT32* line0, UINT32* line1, UINT32* line2, UINT32* line3, UINT32* lineOBJ, UINT32* lineOBJWin, UINT32* lineMix, int bpp); protected: required_region_ptr m_region_maincpu; @@ -269,5 +88,4 @@ protected: required_ioport m_bios_hack; }; - #endif diff --git a/src/mame/includes/maygay1b.h b/src/mame/includes/maygay1b.h index 2f789443830..9fd1087f5b5 100644 --- a/src/mame/includes/maygay1b.h +++ b/src/mame/includes/maygay1b.h @@ -23,7 +23,7 @@ #include "sound/okim6376.h" #include "machine/nvram.h" #include "sound/upd7759.h" - +#include "cpu/mcs51/mcs51.h" #include "sound/okim6295.h" class maygay1b_state : public driver_device @@ -32,6 +32,7 @@ public: maygay1b_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_mcu(*this, "mcu"), m_vfd(*this, "vfd"), m_ay(*this, "aysnd"), m_msm6376(*this, "msm6376"), @@ -53,6 +54,7 @@ public: {} required_device m_maincpu; + required_device m_mcu; optional_device m_vfd; required_device m_ay; optional_device m_msm6376; @@ -94,6 +96,7 @@ public: DECLARE_WRITE_LINE_MEMBER(reel4_optic_cb) { if (state) m_optic_pattern |= 0x10; else m_optic_pattern &= ~0x10; } DECLARE_WRITE_LINE_MEMBER(reel5_optic_cb) { if (state) m_optic_pattern |= 0x20; else m_optic_pattern &= ~0x20; } DECLARE_WRITE8_MEMBER(scanlines_w); + DECLARE_WRITE8_MEMBER(scanlines_2_w); DECLARE_WRITE8_MEMBER(lamp_data_w); DECLARE_WRITE8_MEMBER(lamp_data_2_w); DECLARE_READ8_MEMBER(kbd_r); @@ -118,6 +121,18 @@ public: DECLARE_WRITE8_MEMBER(nec_bank1_w); DECLARE_WRITE_LINE_MEMBER(duart_irq_handler); DECLARE_READ8_MEMBER(m1_duart_r); + DECLARE_WRITE8_MEMBER(mcu_port0_w); + DECLARE_WRITE8_MEMBER(mcu_port1_w); + DECLARE_WRITE8_MEMBER(mcu_port2_w); + DECLARE_WRITE8_MEMBER(mcu_port3_w); + DECLARE_READ8_MEMBER(mcu_port0_r); + DECLARE_READ8_MEMBER(mcu_port2_r); + + DECLARE_WRITE8_MEMBER(main_to_mcu_0_w); + DECLARE_WRITE8_MEMBER(main_to_mcu_1_w); + + UINT8 m_main_to_mcu; + DECLARE_DRIVER_INIT(m1); DECLARE_DRIVER_INIT(m1common); DECLARE_DRIVER_INIT(m1nec); diff --git a/src/mame/includes/mpu4.h b/src/mame/includes/mpu4.h index c31c00beaab..e2d63592d68 100644 --- a/src/mame/includes/mpu4.h +++ b/src/mame/includes/mpu4.h @@ -51,6 +51,7 @@ static const UINT8 reel_mux_table7[8]= {3,1,5,6,4,2,0,7}; static const UINT8 bwb_chr_table_common[10]= {0x00,0x04,0x04,0x0c,0x0c,0x1c,0x14,0x2c,0x5c,0x2c}; +//reel info #define STANDARD_REEL 0 // As originally designed 3/4 reels #define FIVE_REEL_5TO8 1 // Interfaces to meter port, allows some mechanical metering, but there is significant 'bounce' in the extra reel #define FIVE_REEL_8TO5 2 // Mounted backwards for space reasons, but different board @@ -60,16 +61,19 @@ static const UINT8 bwb_chr_table_common[10]= {0x00,0x04,0x04,0x0c,0x0c,0x1c,0x14 #define SEVEN_REEL 6 // Mainly club machines, significant reworking of reel hardware #define FLUTTERBOX 7 // Will you start the fans, please! A fan using a reel mux-like setup, but not actually a reel +//Lamp extension #define NO_EXTENDER 0 // As originally designed #define SMALL_CARD 1 #define LARGE_CARD_A 2 //96 Lamps #define LARGE_CARD_B 3 //96 Lamps, 16 LEDs - as used by BwB #define LARGE_CARD_C 4 //Identical to B, no built in LED support +//LED cards #define CARD_A 1 #define CARD_B 2 #define CARD_C 3 +//Hopper info #define TUBES 0 #define HOPPER_DUART_A 1 #define HOPPER_DUART_B 2 @@ -185,7 +189,26 @@ public: DECLARE_DRIVER_INIT(m4default); DECLARE_DRIVER_INIT(m4default_banks); DECLARE_DRIVER_INIT(m4default_reels); + DECLARE_DRIVER_INIT(m4_low_volt_alt); + DECLARE_DRIVER_INIT(m4_five_reel_std); + DECLARE_DRIVER_INIT(m4_five_reel_rev); + DECLARE_DRIVER_INIT(m4_five_reel_alt); + DECLARE_DRIVER_INIT(m4_six_reel_std); + DECLARE_DRIVER_INIT(m4_six_reel_alt); + DECLARE_DRIVER_INIT(m4_seven_reel); DECLARE_DRIVER_INIT(m4_small_extender); + DECLARE_DRIVER_INIT(m4_large_extender_a); + DECLARE_DRIVER_INIT(m4_large_extender_b); + DECLARE_DRIVER_INIT(m4_large_extender_c); + DECLARE_DRIVER_INIT(m4_hopper_tubes); + DECLARE_DRIVER_INIT(m4_hopper_duart_a); + DECLARE_DRIVER_INIT(m4_hopper_duart_b); + DECLARE_DRIVER_INIT(m4_hopper_duart_c); + DECLARE_DRIVER_INIT(m4_hopper_nonduart_a); + DECLARE_DRIVER_INIT(m4_hopper_nonduart_b); + DECLARE_DRIVER_INIT(m4_led_a); + DECLARE_DRIVER_INIT(m4_led_b); + DECLARE_DRIVER_INIT(m4_led_c); DECLARE_DRIVER_INIT(m4_andycp10c); DECLARE_DRIVER_INIT(m_blsbys); DECLARE_DRIVER_INIT(m_oldtmr); @@ -201,7 +224,7 @@ public: DECLARE_DRIVER_INIT(m4_showstring_big); DECLARE_DRIVER_INIT(m_grtecpss); DECLARE_DRIVER_INIT(connect4); - DECLARE_DRIVER_INIT(m4altreels); + DECLARE_DRIVER_INIT(m4altreels);//legacy, will be removed once things are sorted out DECLARE_MACHINE_START(mod2); DECLARE_MACHINE_RESET(mpu4); DECLARE_MACHINE_START(mpu4yam); @@ -287,6 +310,7 @@ protected: int m_ic23_active; int m_led_lamp; int m_link7a_connected; + int m_low_volt_detect_disable; emu_timer *m_ic24_timer; int m_expansion_latch; int m_global_volume; diff --git a/src/mame/includes/victor9k.h b/src/mame/includes/victor9k.h index c37b5a78d70..c9c4271ead2 100644 --- a/src/mame/includes/victor9k.h +++ b/src/mame/includes/victor9k.h @@ -125,6 +125,7 @@ public: DECLARE_WRITE_LINE_MEMBER( fdc_irq_w ); DECLARE_WRITE_LINE_MEMBER( ssda_irq_w ); + DECLARE_WRITE_LINE_MEMBER( ssda_sm_dtr_w ); DECLARE_WRITE_LINE_MEMBER( kbrdy_w ); DECLARE_WRITE_LINE_MEMBER( kbdata_w ); @@ -135,9 +136,12 @@ public: DECLARE_WRITE_LINE_MEMBER( mux_serial_b_w ); DECLARE_WRITE_LINE_MEMBER( mux_serial_a_w ); + DECLARE_PALETTE_INIT( victor9k ); + // video state int m_brt; int m_cont; + int m_hires; // interrupts int m_via1_irq; diff --git a/src/mame/includes/yunsung8.h b/src/mame/includes/yunsung8.h index 3d6c0e9982f..0a6f90c6528 100644 --- a/src/mame/includes/yunsung8.h +++ b/src/mame/includes/yunsung8.h @@ -13,8 +13,8 @@ class yunsung8_state : public driver_device public: yunsung8_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_audiocpu(*this, "audiocpu") , m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu") , m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette") { } @@ -32,26 +32,30 @@ public: int m_toggle; /* devices */ - required_device m_audiocpu; - - /* memory */ - UINT8 m_videoram[0x4000]; - DECLARE_WRITE8_MEMBER(yunsung8_bankswitch_w); - DECLARE_WRITE8_MEMBER(yunsung8_adpcm_w); - DECLARE_WRITE8_MEMBER(yunsung8_videobank_w); - DECLARE_READ8_MEMBER(yunsung8_videoram_r); - DECLARE_WRITE8_MEMBER(yunsung8_videoram_w); - DECLARE_WRITE8_MEMBER(yunsung8_flipscreen_w); - DECLARE_WRITE8_MEMBER(yunsung8_sound_bankswitch_w); - TILE_GET_INFO_MEMBER(get_tile_info_0); - TILE_GET_INFO_MEMBER(get_tile_info_1); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - UINT32 screen_update_yunsung8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(yunsung8_adpcm_int); required_device m_maincpu; + required_device m_audiocpu; required_device m_msm; required_device m_gfxdecode; required_device m_palette; + + /* memory */ + UINT8 m_videoram[0x4000]; + + DECLARE_WRITE8_MEMBER(bankswitch_w); + DECLARE_WRITE8_MEMBER(adpcm_w); + DECLARE_WRITE8_MEMBER(videobank_w); + DECLARE_READ8_MEMBER(videoram_r); + DECLARE_WRITE8_MEMBER(videoram_w); + DECLARE_WRITE8_MEMBER(flipscreen_w); + DECLARE_WRITE8_MEMBER(sound_bankswitch_w); + DECLARE_WRITE_LINE_MEMBER(adpcm_int); + + TILE_GET_INFO_MEMBER(get_tile_info_0); + TILE_GET_INFO_MEMBER(get_tile_info_1); + + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); }; diff --git a/src/mame/layout/mvbfree.lay b/src/mame/layout/mvbfree.lay index 29598b63efc..df7eac87fee 100644 --- a/src/mame/layout/mvbfree.lay +++ b/src/mame/layout/mvbfree.lay @@ -6,7 +6,7 @@ - + diff --git a/src/mame/layout/play_1.lay b/src/mame/layout/play_1.lay new file mode 100644 index 00000000000..09de3911e74 --- /dev/null +++ b/src/mame/layout/play_1.lay @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/play_2.lay b/src/mame/layout/play_2.lay new file mode 100644 index 00000000000..034ac3230df --- /dev/null +++ b/src/mame/layout/play_2.lay @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/play_5.lay b/src/mame/layout/play_5.lay new file mode 100644 index 00000000000..ba6ff8da055 --- /dev/null +++ b/src/mame/layout/play_5.lay @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/sag.lay b/src/mame/layout/sag.lay new file mode 100644 index 00000000000..a1a05c98512 --- /dev/null +++ b/src/mame/layout/sag.lay @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/machine/abc1600mac.cpp b/src/mame/machine/abc1600mac.cpp index 7b1dafec391..0c1642597a6 100644 --- a/src/mame/machine/abc1600mac.cpp +++ b/src/mame/machine/abc1600mac.cpp @@ -137,7 +137,7 @@ void abc1600_mac_device::device_start() // HACK fill segment RAM or abcenix won't boot memset(m_segment_ram, 0xcd, 0x400); - memset(m_page_ram, 0xcd, 0x400); + //memset(m_page_ram, 0xcd, 0x400); // state saving save_item(NAME(m_ifc2)); @@ -234,7 +234,7 @@ offs_t abc1600_mac_device::translate_address(offs_t offset, int *nonx, int *wp) *nonx = PAGE_NONX; *wp = PAGE_WP; - if (LOG_MAC) logerror("%s MAC %05x:%06x (SEGA %03x SEGD %02x PGA %03x PGD %04x NONX %u WP %u)\n", machine().describe_context(), offset, virtual_offset, sega, segd, pga, m_page_ram[pga], *nonx, *wp); + if (LOG_MAC && offset != virtual_offset) logerror("%s MAC %05x:%06x (SEGA %03x SEGD %02x PGA %03x PGD %04x NONX %u WP %u)\n", machine().describe_context(), offset, virtual_offset, sega, segd, pga, m_page_ram[pga], *nonx, *wp); return virtual_offset; } diff --git a/src/mame/machine/compiskb.cpp b/src/mame/machine/compiskb.cpp index a7d0e0f895f..82da6141872 100644 --- a/src/mame/machine/compiskb.cpp +++ b/src/mame/machine/compiskb.cpp @@ -64,7 +64,7 @@ ADDRESS_MAP_END //------------------------------------------------- static MACHINE_CONFIG_FRAGMENT( compis_keyboard ) - MCFG_CPU_ADD(I8748_TAG, I8748, XTAL_2MHz) + MCFG_CPU_ADD(I8748_TAG, I8748, 2016000) // XTAL_4_032MHz/2 ??? MCFG_CPU_IO_MAP(compis_keyboard_io) // sound hardware diff --git a/src/mame/machine/ie15_kbd.cpp b/src/mame/machine/ie15_kbd.cpp index fdc4be941c8..137ae48f15a 100644 --- a/src/mame/machine/ie15_kbd.cpp +++ b/src/mame/machine/ie15_kbd.cpp @@ -38,22 +38,22 @@ ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, const UINT8 ie15_keyboard_device::row_number(UINT32 code) { - if BIT(code,0) return 0; - if BIT(code,1) return 1; - if BIT(code,2) return 2; - if BIT(code,3) return 3; - if BIT(code,4) return 4; - if BIT(code,5) return 5; - if BIT(code,6) return 6; - if BIT(code,7) return 7; - if BIT(code,8) return 8; - if BIT(code,9) return 9; - if BIT(code,10) return 10; - if BIT(code,11) return 11; - if BIT(code,12) return 12; - if BIT(code,13) return 13; - if BIT(code,14) return 14; - if BIT(code,15) return 15; + if (BIT(code,0)) return 0; + if (BIT(code,1)) return 1; + if (BIT(code,2)) return 2; + if (BIT(code,3)) return 3; + if (BIT(code,4)) return 4; + if (BIT(code,5)) return 5; + if (BIT(code,6)) return 6; + if (BIT(code,7)) return 7; + if (BIT(code,8)) return 8; + if (BIT(code,9)) return 9; + if (BIT(code,10)) return 10; + if (BIT(code,11)) return 11; + if (BIT(code,12)) return 12; + if (BIT(code,13)) return 13; + if (BIT(code,14)) return 14; + if (BIT(code,15)) return 15; return 0; } diff --git a/src/mame/machine/kaneko_calc3.cpp b/src/mame/machine/kaneko_calc3.cpp index 79b20362875..48969f7d3ef 100644 --- a/src/mame/machine/kaneko_calc3.cpp +++ b/src/mame/machine/kaneko_calc3.cpp @@ -1338,9 +1338,9 @@ int kaneko_calc3_device::decompress_table(int tabnum, UINT8* dstram, int dstoffs { eeprom_serial_93cxx_device *eeprom = space.machine().device(":eeprom"); - for (i=0;i<0x80;i++) + for (i=0;i<0x40;i++) { - eeprom->internal_write(i, space.read_byte(m_eeprom_addr+0x200000+i)); + eeprom->internal_write(i, space.read_word(m_eeprom_addr+0x200000+2*i)); } } @@ -1674,9 +1674,9 @@ void kaneko_calc3_device::mcu_run() { eeprom_serial_93cxx_device *eeprom = space.machine().device(":eeprom"); - for (i=0;i<0x80;i++) + for (i=0;i<0x40;i++) { - space.write_byte(m_eeprom_addr+0x200000+i, eeprom->internal_read(i)); + space.write_word(m_eeprom_addr+0x200000+2*i, eeprom->internal_read(i)); } } diff --git a/src/mame/machine/kaneko_toybox.cpp b/src/mame/machine/kaneko_toybox.cpp index 0815db16863..ea0b67baab0 100644 --- a/src/mame/machine/kaneko_toybox.cpp +++ b/src/mame/machine/kaneko_toybox.cpp @@ -180,9 +180,11 @@ void kaneko_toybox_device::mcu_run() eeprom_serial_93cxx_device *eeprom = machine().device(":eeprom"); - for (int i=0;i<0x80;i++) + for (int i=0;i<0x80;i+=2) { - nvdat[i] = eeprom->internal_read(i); + UINT16 dat = eeprom->internal_read(i/2); + nvdat[i] = (dat & 0xff00) >> 8; + nvdat[i+1] = (dat & 0x00ff); } logerror("%s : MCU executed command: %04X %04X (load NVRAM settings)\n", machine().describe_context(), mcu_command, mcu_offset*2); @@ -194,9 +196,10 @@ void kaneko_toybox_device::mcu_run() { eeprom_serial_93cxx_device *eeprom = machine().device(":eeprom"); UINT8* nvdat = (UINT8*)&m_mcuram[mcu_offset]; - for (int i=0;i<0x80;i++) + for (int i=0;i<0x80;i+=2) { - eeprom->internal_write(i, nvdat[i]); + UINT16 dat = (nvdat[i] << 8) | (nvdat[i+1]); + eeprom->internal_write(i/2, dat); } logerror("%s : MCU executed command: %04X %04X (save NVRAM settings)\n", machine().describe_context(), mcu_command, mcu_offset*2); @@ -212,10 +215,12 @@ void kaneko_toybox_device::mcu_run() eeprom_serial_93cxx_device *eeprom = machine().device(":eeprom"); UINT8* nvdat = (UINT8*)&bonkadv_mcu_43[0]; - for (int i=0;i<0x80;i++) + for (int i=0;i<0x80;i+=2) { - eeprom->internal_write(i, nvdat[i]); + UINT16 dat = (nvdat[i] << 8) | (nvdat[i+1]); + eeprom->internal_write(i/2, dat); } + logerror("%s : MCU executed command: %04X %04X (restore default NVRAM settings)\n", machine().describe_context(), mcu_command, mcu_offset*2); } } diff --git a/src/mame/machine/poly88.cpp b/src/mame/machine/poly88.cpp index c158b648efc..c6421608fab 100644 --- a/src/mame/machine/poly88.cpp +++ b/src/mame/machine/poly88.cpp @@ -48,14 +48,14 @@ WRITE8_MEMBER(poly88_state::poly88_baud_rate_w) } UINT8 poly88_state::row_number(UINT8 code) { - if BIT(code,0) return 0; - if BIT(code,1) return 1; - if BIT(code,2) return 2; - if BIT(code,3) return 3; - if BIT(code,4) return 4; - if BIT(code,5) return 5; - if BIT(code,6) return 6; - if BIT(code,7) return 7; + if (BIT(code,0)) return 0; + if (BIT(code,1)) return 1; + if (BIT(code,2)) return 2; + if (BIT(code,3)) return 3; + if (BIT(code,4)) return 4; + if (BIT(code,5)) return 5; + if (BIT(code,6)) return 6; + if (BIT(code,7)) return 7; return 0; } diff --git a/src/mame/machine/pp01.cpp b/src/mame/machine/pp01.cpp index b171a21d7bd..be3b6899c2a 100644 --- a/src/mame/machine/pp01.cpp +++ b/src/mame/machine/pp01.cpp @@ -187,7 +187,7 @@ WRITE8_MEMBER(pp01_state::pp01_8255_portb_w) WRITE8_MEMBER(pp01_state::pp01_8255_portc_w) { - if BIT(data, 4) + if (BIT(data, 4)) m_key_line = data & 0x0f; else m_speaker->level_w(BIT(data, 0)); diff --git a/src/mame/machine/seibuspi.cpp b/src/mame/machine/seibuspi.cpp index 1f779b8eba7..08cf66386a8 100644 --- a/src/mame/machine/seibuspi.cpp +++ b/src/mame/machine/seibuspi.cpp @@ -121,7 +121,7 @@ static const UINT16 key_table[256]= #endif -static const UINT8 bitswap[16][16] = +static const UINT8 spi_bitswap[16][16] = { { 15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, }, { 7, 6, 5,14, 0,15, 4, 3, 2, 8, 9,10,11,12,13, 1, }, @@ -170,7 +170,7 @@ void seibuspi_sprite_decrypt(UINT8 *src, int rom_size) /* first of all, permutate 16 of the 48 bits */ - bs = bitswap[key_table[addr & 0xff]&0xf]; + bs = spi_bitswap[key_table[addr & 0xff]&0xf]; y3 = BITSWAP16(y3, bs[0],bs[1],bs[2],bs[3],bs[4],bs[5],bs[6],bs[7], bs[8],bs[9],bs[10],bs[11],bs[12],bs[13],bs[14],bs[15]); diff --git a/src/mame/machine/sorcerer.cpp b/src/mame/machine/sorcerer.cpp index eb7b971c49c..e58ebd0ccd5 100644 --- a/src/mame/machine/sorcerer.cpp +++ b/src/mame/machine/sorcerer.cpp @@ -18,7 +18,7 @@ TIMER_CALLBACK_MEMBER(sorcerer_state::sorcerer_serial_tc) Transmit and receive clocks are connected to the same clock. */ /* if rs232 is disabled, receive clock is linked to cassette hardware */ - if BIT(m_fe, 7) + if (BIT(m_fe, 7)) { /* connect to rs232 */ m_rs232->write_txd(m_uart->get_output_pin(AY31015_SO)); diff --git a/src/mame/machine/special.cpp b/src/mame/machine/special.cpp index 9f53397438e..e85bb7d4240 100644 --- a/src/mame/machine/special.cpp +++ b/src/mame/machine/special.cpp @@ -55,7 +55,7 @@ READ8_MEMBER( special_state::specialist_8255_portb_r ) if ((m_specialist_8255_portc & 0x08)==0) dat &= m_io_line11->read(); // shift key - if BIT(~m_io_line12->read(), 0) + if (BIT(~m_io_line12->read(), 0)) dat &= 0xfd; // cassette @@ -86,7 +86,7 @@ READ8_MEMBER( special_state::specimx_8255_portb_r ) if ((m_specialist_8255_portc & 0x08)==0) dat &= m_io_line11->read(); // shift key - if BIT(~m_io_line12->read(), 0) + if (BIT(~m_io_line12->read(), 0)) dat &= 0xfd; // cassette diff --git a/src/mame/machine/super80.cpp b/src/mame/machine/super80.cpp index 88b3055ee25..a4825f8f444 100644 --- a/src/mame/machine/super80.cpp +++ b/src/mame/machine/super80.cpp @@ -43,7 +43,7 @@ void super80_state::super80_cassette_motor( bool motor_state ) m_cassette->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR); /* does user want to hear the sound? */ - if BIT(m_io_config->read(), 3) + if (BIT(m_io_config->read(), 3)) m_cassette->change_state(CASSETTE_SPEAKER_ENABLED,CASSETTE_MASK_SPEAKER); else m_cassette->change_state(CASSETTE_SPEAKER_MUTED,CASSETTE_MASK_SPEAKER); @@ -247,7 +247,7 @@ QUICKLOAD_LOAD_MEMBER( super80_state, super80 ) /* is this file executable? */ if (exec_addr != 0xffff) /* check to see if autorun is on */ - if BIT(m_io_config->read(), 0) + if (BIT(m_io_config->read(), 0)) m_maincpu->set_pc(exec_addr); return image_init_result::PASS; diff --git a/src/mame/machine/victor9k_fdc.cpp b/src/mame/machine/victor9k_fdc.cpp index 0f5184b64f6..2e2affd9bcb 100644 --- a/src/mame/machine/victor9k_fdc.cpp +++ b/src/mame/machine/victor9k_fdc.cpp @@ -50,7 +50,11 @@ #define LOG 0 #define LOG_VIA 0 +#ifdef USE_SCP +#define LOG_SCP 1 +#else #define LOG_SCP 0 +#endif #define LOG_BITS 0 #define I8048_TAG "5d" @@ -70,7 +74,7 @@ // TACH = RPM / 60 * SPINDLE RATIO * MOTOR POLES // 256 = 300 / 60 * 6.4 * 8 #define SPINDLE_RATIO 6.4 -#define MOTOR_POLES 8 +#define MOTOR_POLES 8.0 // TODO wrong values here! motor speed is controlled by an LM2917, with help from the spindle TACH and a DAC0808 whose value is set by the SCP 8048 const int victor_9000_fdc_t::rpm[] = { 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 254, 255, 257, 259, 260, 262, 264, 266, 267, 269, 271, 273, 275, 276, 278, 280, 282, 284, 286, 288, 290, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 318, 320, 322, 324, 326, 328, 330, 333, 335, 337, 339, 342, 344, 346, 348, 351, 353, 355, 358, 360, 362, 365, 367, 370, 372, 375, 377, 380, 382, 385, 387, 390, 392, 395, 398, 400, 403, 406, 408, 411, 414, 416, 419, 422, 425, 428, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 482, 485, 488, 491, 494, 498, 501, 504, 508, 511, 514, 518, 521, 525, 528, 532, 535, 539, 542, 546, 550, 553, 557, 561, 564, 568, 572, 576, 579, 583, 587, 591, 595, 599, 603, 607, 611, 615, 619, 623, 627, 631, 636, 640, 644, 648, 653, 657, 661, 666, 670, 674, 679, 683, 688, 693, 697, 702, 706, 711, 716, 721, 725, 730, 735, 740, 745, 750, 755, 760, 765, 770, 775, 780, 785, 790, 796, 801, 806, 812, 817, 822, 828, 833, 839, 844, 850, 856, 861, 867, 873, 878, 884 }; @@ -242,8 +246,14 @@ victor_9000_fdc_t::victor_9000_fdc_t(const machine_config &mconfig, const char * m_tach1(0), m_rdy0(0), m_rdy1(0), - m_l0ms(0), - m_l1ms(0), + m_scp_rdy0(0), + m_scp_rdy1(0), + m_via_rdy0(1), + m_via_rdy1(1), + m_scp_l0ms(0), + m_scp_l1ms(0), + m_via_l0ms(0), + m_via_l1ms(0), m_st0(0), m_st1(0), m_stp0(0), @@ -291,8 +301,14 @@ void victor_9000_fdc_t::device_start() save_item(NAME(m_tach1)); save_item(NAME(m_rdy0)); save_item(NAME(m_rdy1)); - save_item(NAME(m_l0ms)); - save_item(NAME(m_l1ms)); + save_item(NAME(m_scp_rdy0)); + save_item(NAME(m_scp_rdy1)); + save_item(NAME(m_via_rdy0)); + save_item(NAME(m_via_rdy1)); + save_item(NAME(m_scp_l0ms)); + save_item(NAME(m_scp_l1ms)); + save_item(NAME(m_via_l0ms)); + save_item(NAME(m_via_l1ms)); save_item(NAME(m_st0)); save_item(NAME(m_st1)); save_item(NAME(m_stp0)); @@ -350,12 +366,12 @@ void victor_9000_fdc_t::device_timer(emu_timer &timer, device_timer_id id, int p case TM_TACH0: m_tach0 = !m_tach0; - if (LOG_SCP) logerror("TACH0 %u\n", m_tach0); + if (LOG_SCP) logerror("%s TACH0 %u\n", machine().time().as_string(), m_tach0); break; case TM_TACH1: m_tach1 = !m_tach1; - if (LOG_SCP) logerror("TACH1 %u\n", m_tach1); + if (LOG_SCP) logerror("%s TACH1 %u\n", machine().time().as_string(), m_tach1); break; } } @@ -382,7 +398,7 @@ READ8_MEMBER( victor_9000_fdc_t::floppy_p1_r ) */ - return (m_l1ms << 4) | m_l0ms; + return (m_via_l1ms << 4) | m_via_l0ms; } @@ -407,8 +423,8 @@ WRITE8_MEMBER( victor_9000_fdc_t::floppy_p1_w ) */ - m_l0ms = data & 0x0f; - m_l1ms = data >> 4; + m_scp_l0ms = data & 0x0f; + m_scp_l1ms = data >> 4; } @@ -435,8 +451,8 @@ READ8_MEMBER( victor_9000_fdc_t::floppy_p2_r ) UINT8 data = m_p2 & 0x3f; - data |= m_rdy0 << 6; - data |= m_rdy1 << 7; + data |= m_via_rdy0 << 6; + data |= m_via_rdy1 << 7; return data; } @@ -485,8 +501,9 @@ WRITE8_MEMBER( victor_9000_fdc_t::floppy_p2_w ) int sel1 = BIT(data, 4); if (m_sel1 != sel1) sync = true; - set_rdy0(BIT(data, 6)); - set_rdy1(BIT(data, 7)); + m_scp_rdy0 = BIT(data, 6); + m_scp_rdy1 = BIT(data, 7); + update_rdy(); if (LOG_SCP) logerror("%s %s START0/STOP0/SEL0/RDY0 %u/%u/%u/%u START1/STOP1/SEL1/RDY1 %u/%u/%u/%u\n", machine().time().as_string(), machine().describe_context(), start0, stop0, sel0, m_rdy0, start1, stop1, sel1, m_rdy1); @@ -497,12 +514,14 @@ WRITE8_MEMBER( victor_9000_fdc_t::floppy_p2_w ) m_start0 = start0; m_stop0 = stop0; m_sel0 = sel0; - //update_spindle_motor(m_floppy0->get_device(), t_tach0, m_start0, m_stop0, m_sel0, m_da0); + update_spindle_motor(m_floppy0->get_device(), t_tach0, m_start0, m_stop0, m_sel0, m_da0); + update_rpm(m_floppy0->get_device(), t_tach0, m_sel0, m_da0); m_start1 = start1; m_stop1 = stop1; m_sel1 = sel1; - //update_spindle_motor(m_floppy1->get_device(), t_tach1, m_start1, m_stop1, m_sel1, m_da1); + update_spindle_motor(m_floppy1->get_device(), t_tach1, m_start1, m_stop1, m_sel1, m_da1); + update_rpm(m_floppy1->get_device(), t_tach1, m_sel1, m_da1); checkpoint(); @@ -525,6 +544,7 @@ WRITE8_MEMBER( victor_9000_fdc_t::floppy_p2_w ) READ8_MEMBER( victor_9000_fdc_t::tach0_r ) { + if (LOG_SCP) logerror("%s %s Read TACH0 %u\n", machine().time().as_string(), machine().describe_context(), m_tach0); return m_tach0; } @@ -535,6 +555,7 @@ READ8_MEMBER( victor_9000_fdc_t::tach0_r ) READ8_MEMBER( victor_9000_fdc_t::tach1_r ) { + if (LOG_SCP) logerror("%s %s Read TACH1 %u\n", machine().time().as_string(), machine().describe_context(), m_tach1); return m_tach1; } @@ -571,38 +592,42 @@ void victor_9000_fdc_t::update_stepper_motor(floppy_image_device *floppy, int st void victor_9000_fdc_t::update_spindle_motor(floppy_image_device *floppy, emu_timer *t_tach, bool start, bool stop, bool sel, UINT8 &da) { +#ifdef USE_SCP if (start && !stop && floppy->mon_r()) { if (LOG_SCP) logerror("%s: motor start\n", floppy->tag()); floppy->mon_w(0); + t_tach->enable(true); } else if (stop && !floppy->mon_r()) { if (LOG_SCP) logerror("%s: motor stop\n", floppy->tag()); floppy->mon_w(1); - t_tach->reset(); + t_tach->enable(false); } +#endif +} +void victor_9000_fdc_t::update_rpm(floppy_image_device *floppy, emu_timer *t_tach, bool sel, UINT8 &da) +{ +#ifdef USE_SCP if (sel) { da = m_da; - if (!floppy->mon_r()) { - float tach = rpm[da] / 60 * SPINDLE_RATIO * MOTOR_POLES; - if (LOG_SCP) logerror("%s: motor speed %u rpm / tach %0.1f hz (DA %02x)\n", floppy->tag(), rpm[da], (double) tach, da); + float tach = rpm[da] / 60.0 * SPINDLE_RATIO * MOTOR_POLES; - t_tach->adjust(attotime::from_hz(tach*2), 0, attotime::from_hz(tach*2)); - floppy->set_rpm(rpm[da]); - } + if (LOG_SCP) logerror("%s: motor speed %u rpm / tach %0.1f hz %0.9f s (DA %02x)\n", floppy->tag(), rpm[da], (double) tach, 1.0/(double)tach, da); + + floppy->set_rpm(rpm[da]); + + bool enabled = t_tach->enabled(); + t_tach->adjust(attotime::from_hz(tach*2), 0, attotime::from_hz(tach*2)); + t_tach->enable(enabled); } +#endif } -void victor_9000_fdc_t::set_rdy0(int state) +void victor_9000_fdc_t::update_rdy() { - //m_rdy0 = state; - //m_via5->write_ca2(m_rdy0); -} - -void victor_9000_fdc_t::set_rdy1(int state) -{ - //m_rdy1 = state; - //m_via5->write_cb2(m_rdy1); + m_via5->write_ca2((m_via_rdy0 && m_via_rdy1) ? m_rdy0 : m_scp_rdy0); + m_via5->write_cb2((m_via_rdy0 && m_via_rdy1) ? m_rdy1 : m_scp_rdy1); } @@ -612,17 +637,14 @@ void victor_9000_fdc_t::set_rdy1(int state) WRITE8_MEMBER( victor_9000_fdc_t::da_w ) { - if (LOG_SCP) logerror("%s %s DA %02x\n", machine().time().as_string(), machine().describe_context(), data); + if (LOG_SCP) logerror("%s %s DA %02x SEL0 %u SEL1 %u\n", machine().time().as_string(), machine().describe_context(), data, m_sel0, m_sel1); - if (m_da != data) - { - live_sync(); - m_da = data; - if (m_floppy0->get_device()) update_spindle_motor(m_floppy0->get_device(), t_tach0, m_start0, m_stop0, m_sel0, m_da0); - if (m_floppy1->get_device()) update_spindle_motor(m_floppy1->get_device(), t_tach1, m_start1, m_stop1, m_sel1, m_da1); - checkpoint(); - live_run(); - } + live_sync(); + m_da = data; + if (m_floppy0->get_device()) update_rpm(m_floppy0->get_device(), t_tach0, m_sel0, m_da0); + if (m_floppy1->get_device()) update_rpm(m_floppy1->get_device(), t_tach1, m_sel1, m_da1); + checkpoint(); + live_run(); } READ8_MEMBER( victor_9000_fdc_t::via4_pa_r ) @@ -642,7 +664,7 @@ READ8_MEMBER( victor_9000_fdc_t::via4_pa_r ) */ - return m_l0ms; + return m_scp_l0ms; } WRITE8_MEMBER( victor_9000_fdc_t::via4_pa_w ) @@ -662,21 +684,23 @@ WRITE8_MEMBER( victor_9000_fdc_t::via4_pa_w ) */ - m_l0ms = data & 0x0f; + m_via_l0ms = data & 0x0f; +#ifndef USE_SCP { // HACK to bypass SCP if (m_floppy0->get_device()) { - m_floppy0->get_device()->mon_w((m_l0ms == 0xf) ? 1 : 0); + m_floppy0->get_device()->mon_w((m_via_l0ms == 0xf) ? 1 : 0); m_floppy0->get_device()->set_rpm(victor9k_format::get_rpm(m_side, m_floppy0->get_device()->get_cyl())); } - m_rdy0 = (m_l0ms == 0xf) ? 0 : 1; - m_via5->write_ca2(m_rdy0); + m_rdy0 = (m_via_l0ms == 0xf) ? 0 : 1; + update_rdy(); } +#endif UINT8 st0 = data >> 4; - if (LOG_VIA) logerror("%s %s L0MS %01x ST0 %01x\n", machine().time().as_string(), machine().describe_context(), m_l0ms, st0); + if (LOG_VIA) logerror("%s %s L0MS %01x ST0 %01x\n", machine().time().as_string(), machine().describe_context(), m_via_l0ms, st0); if (m_st0 != st0) { @@ -705,7 +729,7 @@ READ8_MEMBER( victor_9000_fdc_t::via4_pb_r ) */ - return m_l1ms; + return m_scp_l1ms; } WRITE8_MEMBER( victor_9000_fdc_t::via4_pb_w ) @@ -725,21 +749,23 @@ WRITE8_MEMBER( victor_9000_fdc_t::via4_pb_w ) */ - m_l1ms = data & 0x0f; + m_via_l1ms = data & 0x0f; +#ifndef USE_SCP { // HACK to bypass SCP if (m_floppy1->get_device()) { - m_floppy1->get_device()->mon_w((m_l1ms == 0xf) ? 1 : 0); + m_floppy1->get_device()->mon_w((m_via_l1ms == 0xf) ? 1 : 0); m_floppy1->get_device()->set_rpm(victor9k_format::get_rpm(m_side, m_floppy1->get_device()->get_cyl())); } - m_rdy1 = (m_l1ms == 0xf) ? 0 : 1; - m_via5->write_cb2(m_rdy1); + m_rdy1 = (m_via_l1ms == 0xf) ? 0 : 1; + update_rdy(); } +#endif UINT8 st1 = data >> 4; - if (LOG_VIA) logerror("%s %s L1MS %01x ST1 %01x\n", machine().time().as_string(), machine().describe_context(), m_l1ms, st1); + if (LOG_VIA) logerror("%s %s L1MS %01x ST1 %01x\n", machine().time().as_string(), machine().describe_context(), m_via_l1ms, st1); if (m_st1 != st1) { @@ -810,6 +836,8 @@ WRITE8_MEMBER( victor_9000_fdc_t::via5_pb_w ) if (LOG_VIA) logerror("%s %s WD %02x\n", machine().time().as_string(), machine().describe_context(), data); + m_via5->write_cb1(BIT(data, 7)); + if (m_wd != data) { live_sync(); @@ -921,8 +949,8 @@ READ8_MEMBER( victor_9000_fdc_t::via6_pb_r ) bit description - PB0 RDY0 - PB1 RDY1 + PB0 RDY0 from SCP + PB1 RDY1 from SCP PB2 PB3 _DS1 PB4 _DS0 @@ -935,10 +963,10 @@ READ8_MEMBER( victor_9000_fdc_t::via6_pb_r ) UINT8 data = 0; // motor speed status, drive A - data |= m_rdy0; + data |= (m_via_rdy0 && m_via_rdy1) ? m_rdy0 : m_scp_rdy0; // motor speed status, drive B - data |= m_rdy1 << 1; + data |= ((m_via_rdy0 && m_via_rdy1) ? m_rdy1 : m_scp_rdy1) << 1; // door B sense data |= ((m_floppy1->get_device() && m_floppy1->get_device()->exists()) ? 0 : 1) << 3; @@ -958,8 +986,8 @@ WRITE8_MEMBER( victor_9000_fdc_t::via6_pb_w ) bit description - PB0 RDY0 - PB1 RDY1 + PB0 RDY0 to SCP + PB1 RDY1 to SCP PB2 _SCRESET PB3 PB4 @@ -969,8 +997,9 @@ WRITE8_MEMBER( victor_9000_fdc_t::via6_pb_w ) */ - set_rdy0(BIT(data, 0)); - set_rdy1(BIT(data, 1)); + m_via_rdy0 = BIT(data, 0); + m_via_rdy1 = BIT(data, 1); + update_rdy(); // motor speed controller reset if (!BIT(data, 2)) @@ -985,6 +1014,7 @@ WRITE8_MEMBER( victor_9000_fdc_t::via6_pb_w ) // stepper enable B int stp1 = BIT(data, 7); if (m_stp1 != stp1) sync = true; + m_via6->write_cb1(stp1); if (sync) { diff --git a/src/mame/machine/victor9k_fdc.h b/src/mame/machine/victor9k_fdc.h index d40d3a7a877..1d23c015be5 100644 --- a/src/mame/machine/victor9k_fdc.h +++ b/src/mame/machine/victor9k_fdc.h @@ -165,8 +165,8 @@ private: void update_stepper_motor(floppy_image_device *floppy, int stp, int old_st, int st); void update_spindle_motor(floppy_image_device *floppy, emu_timer *t_tach, bool start, bool stop, bool sel, UINT8 &da); - void set_rdy0(int state); - void set_rdy1(int state); + void update_rpm(floppy_image_device *floppy, emu_timer *t_tach, bool sel, UINT8 &da); + void update_rdy(); image_init_result load0_cb(floppy_image_device *device); void unload0_cb(floppy_image_device *device); @@ -190,8 +190,14 @@ private: int m_tach1; int m_rdy0; int m_rdy1; - UINT8 m_l0ms; - UINT8 m_l1ms; + int m_scp_rdy0; + int m_scp_rdy1; + int m_via_rdy0; + int m_via_rdy1; + UINT8 m_scp_l0ms; + UINT8 m_scp_l1ms; + UINT8 m_via_l0ms; + UINT8 m_via_l1ms; int m_st0; int m_st1; int m_stp0; diff --git a/src/mame/machine/victor9kb.cpp b/src/mame/machine/victor9kb.cpp index ec0eaa4229e..4b0d1778595 100644 --- a/src/mame/machine/victor9kb.cpp +++ b/src/mame/machine/victor9kb.cpp @@ -687,11 +687,9 @@ WRITE8_MEMBER( victor_9000_keyboard_t::kb_p2_w ) if (!BIT(data, 0)) { m_y = m_p1 & 0x0f; + m_y12 = BIT(data, 2); } - // keyboard row 12 - m_y12 = BIT(data, 2); - // keyboard ready m_kbrdy_cb(BIT(data, 1)); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 07582df5d80..8ea3b857615 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -1044,10 +1044,13 @@ dinoeggs // mystcast // mystcasta // pstlpkr // +pstlpkr1 // punchy // +punchy3 // usafootb // wrldtour // wrldtour2 // +wrldtour3 // @source:amaticmg.cpp am_mg24 // (c) 2000 Amatic @@ -9028,6 +9031,7 @@ bsb105 // bsv100r // bsv102r // bsv103 // +bsv102 // ffv101 // ffv104 // ghv101 // @@ -9076,6 +9080,12 @@ agalletj // (c) 1996 Banpresto / Gazelle (country is in E agalletk // (c) 1996 Banpresto / Gazelle (country is in EEPROM) agallett // (c) 1996 Banpresto / Gazelle (country is in EEPROM) agalletu // (c) 1996 Banpresto / Gazelle (country is in EEPROM) +agalleta // (c) 1996 Banpresto / Gazelle (country is in EEPROM) +agalletah // (c) 1996 Banpresto / Gazelle (country is in EEPROM) +agalletaj // (c) 1996 Banpresto / Gazelle (country is in EEPROM) +agalletak // (c) 1996 Banpresto / Gazelle (country is in EEPROM) +agalletat // (c) 1996 Banpresto / Gazelle (country is in EEPROM) +agalletau // (c) 1996 Banpresto / Gazelle (country is in EEPROM) crusherm // (c) 1999 Takumi ddonpach // (c) 1997 Atlus/Cave ddonpacha // hack @@ -9362,10 +9372,12 @@ mj3evo // 2007.06 Sega Network Taisen Mahjong MJ 3 Evol ollie // 2004.03 Ollie King outr2 // 2003.12 Outrun 2 (Rev A) outr2st // 2004.12 Outrun 2 Special Tours (Rev A) +outr2stj // 2004.12 Outrun 2 Special Tours (Japan) (Rev A) scg06nt // 2005.12 Sega Golf Club 2006: Next Tours (Rev A) vcop3a // 2003.02.26 Virtua Cop 3 (Rev A) vcop3 // 2003.05.21 Virtua Cop 3 (Rev B) wangmid // 2004.07 Wangan Midnight Maximum Tune (export) (Rev B) +wangmidj // 2004.06 Wangan Midnight Maximum Tune (Japan) (Rev B) wangmid2 // 2005.10 Wangan Midnight Maximum Tune 2 (Export) (Rev A) wangmid2j // 2005.04 Wangan Midnight Maximum Tune 2 (Japan) questofd // 2004.09 Quest of D (CDV-10005C) @@ -9496,6 +9508,9 @@ firebatl // (c) 1984 Taito @source:cm1800.cpp cm1800 // +@source:cmi.cpp +cmi2x // Fairlight CMI IIx + @source:cmmb.cpp cmmb162 // @@ -10137,9 +10152,10 @@ ssf2tu // 23/03/1994 (c) 1994 (USA) ssf2tur1 // 23/02/1994 (c) 1994 (USA) ssf2u // 11/09/1993 (c) 1993 (USA) ssf2ud // -ssf2xj // 23/02/1994 (c) 1994 (Japan) -ssf2xjd // -ssf2xjr // 23/02/1994 (c) 1994 (Japan) +ssf2xj // 11/03/1994 (c) 1994 (Japan) +ssf2xjr1 // 23/02/1994 (c) 1994 (Japan) +ssf2xjr1d // +ssf2xjr1r // 23/02/1994 (c) 1994 (Japan) uecology // 03/12/1993 (c) 1994 (Japan) vampj // 05/07/1994 (c) 1994 (Japan) vampja // 05/07/1994 (c) 1994 (Japan) @@ -11843,6 +11859,7 @@ poizone // (c) 1990 Sisteme deluxe5 // (c) 2000 ESD deluxe5a // (c) 2000 ESD deluxe5b // (c) 2000 ESD +deluxe4u // (c) 2000 ESD hedpanic // (c) 2000 ESD hedpanicf // (c) 2000 ESD + Fuuki, Co. Ltd. hedpanico // (c) 1999 ESD @@ -14039,6 +14056,9 @@ mwcbaseb // Mattel packmon // Bandai pairmtch // Bandai pbqbert // Parker Brothers +sag_si2 // Entex +sag_bb4 // Entex +sag_pb // Entex tmtron // Tomy vinvader // VTech zackman // Bandai @@ -14902,6 +14922,8 @@ halleya // lortium // olympus // petaco // +petacon // +petacona // petaco2 // pimbal // @@ -16486,6 +16508,7 @@ kinstp // (c) 1994 Rare @source:kissproto.cpp kissp // +kissp2 // @source:klax.cpp klax // 136075 (c) 1989 @@ -19711,7 +19734,8 @@ mephistp1 // @source:merit.cpp bigappg // (c) 1986 Merit / Big Apple Games -casino5 // (c) 1984 Merit +casino5 // (c) 1989 Merit +casino5a // (c) 1984 Merit chkndraw // (c) 1984 Merit couple // (c) 1988 Merit couplei // (c) 1988 Merit @@ -19722,7 +19746,8 @@ dodgectyc // (c) 1986 Merit dtrvwz5 // (c) 1987 Merit iowapp // (c) 1990 Merit misdraw // (c) 1986 Merit / Big Apple Games -mpchoice // (c) 1986 Merit +mdchoice // (c) 1983 Merit +mpchoice // (c) 1983 Merit mroundup // (c) 1984 Merit phrcraze // (c) 1986 Merit phrcrazea // (c) 1986 Merit @@ -20052,6 +20077,7 @@ term2 // (c) 1992 Midway term2la1 // (c) 1992 Midway term2la2 // (c) 1992 Midway term2la3 // (c) 1992 Midway +term2lg1 // (c) 1992 Midway totcarn // (c) 1992 Midway totcarnp // (c) 1992 Midway trog // (c) 1990 Midway @@ -30047,6 +30073,7 @@ superpet // @source:peyper.cpp gamatros // +hangonp // nemesisp // odin // odin_dlx // @@ -30348,8 +30375,12 @@ megaatona // @source:play_5.cpp fldragon // +fldragona // +ironball // kz26 // +msdisco // nautilus // +phntmshp // rock2500 // sklflite // spain82 // @@ -32170,6 +32201,7 @@ hangon1 // (c) 1985 hangon2 // (c) 1985 shangonrb // (c) 1992 (but bootleg, hangon hw?) shangonro // (c) 1987 (FD1094) +shangonho // (c) 1987 (FD1094) sharrier // (c) 1985 sharrier1 // (c) 1985 @@ -33277,7 +33309,10 @@ slapshot // D71 (c) 1994 Taito Corporation (Japan) slc1 // @source:sleic.cpp +bikerace // +bikerace2 // sleicpin // +iomoon // @source:slicer.cpp slicer // 1983 Slicer Computers @@ -34918,6 +34953,7 @@ tecjmon // Talking Electronics Computer @source:techno.cpp xforce // +spcteam // @source:tecmo.cpp backfirt // bootleg [(c) 1988 Tecmo] @@ -36207,6 +36243,9 @@ wcombatk // 2002 wcombatu // 2002 xtrial // 2002 +@source:vis.cpp +vis + @source:vixen.cpp vixen // @@ -37548,3 +37587,7 @@ ts1500 // Timex Sinclair 1500 zx80 // 1980 Sinclair ZX-80 zx81 // 1981 Sinclair ZX-81 zx97 // + +@source:vgmplay.cpp +vgmplay + diff --git a/src/mame/mess.flt b/src/mame/mess.flt index d9d3e1ce422..7f29d7691d5 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -112,6 +112,7 @@ chessmst.cpp chesstrv.cpp clcd.cpp cm1800.cpp +cmi.cpp coco12.cpp coco3.cpp codata.cpp @@ -648,6 +649,7 @@ victor9k.cpp vidbrain.cpp vii.cpp vip.cpp +vis.cpp vixen.cpp vk100.cpp votrpss.cpp diff --git a/src/mame/video/aussiebyte.cpp b/src/mame/video/aussiebyte.cpp index 16c443fda7e..21c5c1754b6 100644 --- a/src/mame/video/aussiebyte.cpp +++ b/src/mame/video/aussiebyte.cpp @@ -45,9 +45,9 @@ WRITE8_MEMBER( aussiebyte_state::port35_w ) READ8_MEMBER( aussiebyte_state::port36_r ) { - if BIT(m_port34, 5) + if (BIT(m_port34, 5)) { - if BIT(m_p_attribram[m_alpha_address & 0x7ff], 7) + if (BIT(m_p_attribram[m_alpha_address & 0x7ff], 7)) return m_p_videoram[m_alpha_address]; else return m_p_videoram[m_graph_address]; @@ -85,9 +85,9 @@ WRITE8_MEMBER( aussiebyte_state::address_w ) m_alpha_address &= 0x3fff; m_graph_address = (m_alpha_address << 4) | (m_port34 & 15); - if BIT(m_port34, 5) + if (BIT(m_port34, 5)) { - if BIT(m_p_attribram[m_alpha_address & 0x7ff], 7) + if (BIT(m_p_attribram[m_alpha_address & 0x7ff], 7)) m_p_videoram[m_alpha_address] = m_port35; else m_p_videoram[m_graph_address] = m_port35; @@ -154,11 +154,11 @@ UINT8 aussiebyte_state::crt8002(UINT8 ac_ra, UINT8 ac_chr, UINT8 ac_attr, UINT16 gfx = 0xff; if (BIT(ac_attr, 6) & BIT(ac_cnt, 13)) // flash gfx = 0; - if BIT(ac_attr, 5) // blank + if (BIT(ac_attr, 5)) // blank gfx = 0; if (ac_curs && BIT(ac_cnt, 14)) // cursor gfx ^= 0xff; - if BIT(ac_attr, 4) // reverse video + if (BIT(ac_attr, 4)) // reverse video gfx ^= 0xff; return gfx; } @@ -176,7 +176,7 @@ MC6845_UPDATE_ROW( aussiebyte_state::crtc_update_row ) { mem = ma + x; attr = m_p_attribram[mem & 0x7ff]; - if BIT(attr, 7) + if (BIT(attr, 7)) chr = m_p_videoram[mem & 0x3fff]; // alpha else chr = m_p_videoram[(mem << 4) | ra]; // gfx diff --git a/src/mame/video/cps1.cpp b/src/mame/video/cps1.cpp index 4a58350a77e..67875462fde 100644 --- a/src/mame/video/cps1.cpp +++ b/src/mame/video/cps1.cpp @@ -3007,7 +3007,7 @@ UINT32 cps_state::screen_update_cps1(screen_device &screen, bitmap_ind16 &bitmap if (m_cps_version == 1) { - if BIT(m_game_config->bootleg_kludge, 7) + if (BIT(m_game_config->bootleg_kludge, 7)) cps1_build_palette(cps1_base(CPS1_PALETTE_BASE, m_palette_align)); cps1_render_layer(screen, bitmap, cliprect, l0, 0); diff --git a/src/mame/video/mbee.cpp b/src/mame/video/mbee.cpp index fa9f884ae80..79899031527 100644 --- a/src/mame/video/mbee.cpp +++ b/src/mame/video/mbee.cpp @@ -116,7 +116,7 @@ READ8_MEMBER( mbee_state::video_low_r ) WRITE8_MEMBER( mbee_state::video_low_w ) { - if BIT(m_1c, 4) + if (BIT(m_1c, 4)) { // non-premium attribute writes are discarded if (m_is_premium && BIT(m_1c, 7)) @@ -128,7 +128,7 @@ WRITE8_MEMBER( mbee_state::video_low_w ) READ8_MEMBER( mbee_state::video_high_r ) { - if BIT(m_08, 6) + if (BIT(m_08, 6)) return m_p_colorram[offset]; else return m_p_gfxram[(((m_1c & 15) + 1) << 11) | offset]; @@ -203,31 +203,27 @@ void mbee_state::oldkb_matrix_r(UINT16 offs) { if ((port == 0) || (port == 2) || (port == 3)) extra = m_io_x7->read(); - else - if (port == 7) + else if (port == 7) extra = data; if (extra) { - if BIT(extra, 0) // cursor up + if (BIT(extra, 0)) // cursor up { if( port == 7 && bit == 1 ) keydown = 1; if( port == 0 && bit == 5 ) keydown = 1; // control E } - else - if BIT(extra, 2) // cursor down + else if (BIT(extra, 2)) // cursor down { if( port == 7 && bit == 1 ) keydown = 1; if( port == 3 && bit == 0 ) keydown = 1; // control X } - else - if BIT(extra, 3) // cursor left + else if (BIT(extra, 3)) // cursor left { if( port == 7 && bit == 1 ) keydown = 1; if( port == 2 && bit == 3 ) keydown = 1; // control S } - else - if BIT(extra, 6) // cursor right + else if (BIT(extra, 6)) // cursor right { if( port == 7 && bit == 1 ) keydown = 1; if( port == 0 && bit == 4 ) keydown = 1; // control D @@ -353,14 +349,14 @@ MC6845_UPDATE_ROW( mbee_state::crtc_update_row ) mem = (ma + x) & 0x7ff; chr = m_p_videoram[mem]; - if BIT(m_1c, 7) // premium graphics enabled? + if (BIT(m_1c, 7)) // premium graphics enabled? { attr = m_p_attribram[mem]; - if BIT(chr, 7) + if (BIT(chr, 7)) chr += ((attr & 15) << 7); // bump chr to its particular pcg definition - if BIT(attr, 6) + if (BIT(attr, 6)) inv ^= 0xff; // inverse attribute if (BIT(attr, 7) & BIT(m_framecnt, 4)) // flashing attribute diff --git a/src/mame/video/super80.cpp b/src/mame/video/super80.cpp index 4a94a43f834..b396224140a 100644 --- a/src/mame/video/super80.cpp +++ b/src/mame/video/super80.cpp @@ -75,7 +75,7 @@ UINT32 super80_state::screen_update_super80(screen_device &screen, bitmap_ind16 if (screen_on) { - if BIT(options, 5) + if (BIT(options, 5)) fg = 15; /* b&w */ else fg = 5; /* green */ @@ -129,7 +129,7 @@ UINT32 super80_state::screen_update_super80d(screen_device &screen, bitmap_ind16 if (screen_on) { - if BIT(options, 5) + if (BIT(options, 5)) fg = 15; /* b&w */ else fg = 5; /* green */ @@ -177,7 +177,7 @@ UINT32 super80_state::screen_update_super80e(screen_device &screen, bitmap_ind16 if (screen_on) { - if BIT(options, 5) + if (BIT(options, 5)) fg = 15; /* b&w */ else fg = 5; /* green */ @@ -228,7 +228,7 @@ UINT32 super80_state::screen_update_super80m(screen_device &screen, bitmap_ind16 if (screen_on) { - if BIT(options, 5) + if (BIT(options, 5)) fg = 15; /* b&w */ else fg = 5; /* green */ @@ -299,7 +299,7 @@ static const UINT8 mc6845_mask[32]={0xff,0xff,0xff,0x0f,0x7f,0x1f,0x7f,0x7f,3,0x READ8_MEMBER( super80_state::super80v_low_r ) { - if BIT(m_portf0, 2) + if (BIT(m_portf0, 2)) return m_p_videoram[offset]; else return m_p_colorram[offset]; @@ -307,7 +307,7 @@ READ8_MEMBER( super80_state::super80v_low_r ) WRITE8_MEMBER( super80_state::super80v_low_w ) { - if BIT(m_portf0, 2) + if (BIT(m_portf0, 2)) m_p_videoram[offset] = data; else m_p_colorram[offset] = data; @@ -318,7 +318,7 @@ READ8_MEMBER( super80_state::super80v_high_r ) if (!BIT(m_portf0, 2)) return m_p_colorram[0x800 | offset]; else - if BIT(m_portf0, 4) + if (BIT(m_portf0, 4)) return m_p_pcgram[0x800 | offset]; else return m_p_pcgram[offset]; @@ -332,7 +332,7 @@ WRITE8_MEMBER( super80_state::super80v_high_w ) { m_p_videoram[0x800 | offset] = data; - if BIT(m_portf0, 4) + if (BIT(m_portf0, 4)) m_p_pcgram[0x800 | offset] = data; } } diff --git a/src/mame/video/yunsung8.cpp b/src/mame/video/yunsung8.cpp index fe7d7456878..dbf1b91315d 100644 --- a/src/mame/video/yunsung8.cpp +++ b/src/mame/video/yunsung8.cpp @@ -39,17 +39,17 @@ Note: if MAME_DEBUG is defined, pressing Z with: ***************************************************************************/ -WRITE8_MEMBER(yunsung8_state::yunsung8_videobank_w) +WRITE8_MEMBER(yunsung8_state::videobank_w) { m_videobank = data; } -READ8_MEMBER(yunsung8_state::yunsung8_videoram_r) +READ8_MEMBER(yunsung8_state::videoram_r) { int bank; - /* Bit 1 of the bankswitching register contols the c000-c7ff + /* Bit 1 of the bankswitching register controls the c000-c7ff area (Palette). Bit 0 controls the c800-dfff area (Tiles) */ if (offset < 0x0800) @@ -64,7 +64,7 @@ READ8_MEMBER(yunsung8_state::yunsung8_videoram_r) } -WRITE8_MEMBER(yunsung8_state::yunsung8_videoram_w) +WRITE8_MEMBER(yunsung8_state::videoram_w) { if (offset < 0x0800) // c000-c7ff Banked Palette RAM { @@ -107,7 +107,7 @@ WRITE8_MEMBER(yunsung8_state::yunsung8_videoram_w) } -WRITE8_MEMBER(yunsung8_state::yunsung8_flipscreen_w) +WRITE8_MEMBER(yunsung8_state::flipscreen_w) { machine().tilemap().set_flip_all((data & 1) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0); } @@ -163,7 +163,7 @@ TILE_GET_INFO_MEMBER(yunsung8_state::get_tile_info_1) /*************************************************************************** - Vide Hardware Init + Video Hardware Init ***************************************************************************/ @@ -186,7 +186,7 @@ void yunsung8_state::video_start() ***************************************************************************/ -UINT32 yunsung8_state::screen_update_yunsung8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 yunsung8_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int layers_ctrl = (~m_layers_ctrl) >> 4; diff --git a/src/mame/virtual.flt b/src/mame/virtual.flt new file mode 100644 index 00000000000..8373a776c00 --- /dev/null +++ b/src/mame/virtual.flt @@ -0,0 +1 @@ +vgmplay.cpp diff --git a/src/mame/virtual.lst b/src/mame/virtual.lst new file mode 100644 index 00000000000..27a3e40416c --- /dev/null +++ b/src/mame/virtual.lst @@ -0,0 +1,4 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert +@source:vgmplay.cpp +vgmplay diff --git a/src/osd/modules/debugger/debugimgui.cpp b/src/osd/modules/debugger/debugimgui.cpp index ebdf06bbe12..eb04f2d7c5c 100644 --- a/src/osd/modules/debugger/debugimgui.cpp +++ b/src/osd/modules/debugger/debugimgui.cpp @@ -20,6 +20,7 @@ #include "modules/lib/osdobj_common.h" #include "debug_module.h" #include "modules/osdmodule.h" +#include "zippath.h" class debug_area { @@ -102,7 +103,11 @@ public: m_key_char(0), m_hide(false), m_win_count(0), - m_initialised(false) + m_has_images(false), + m_initialised(false), + m_filelist_refresh(false), + m_mount_open(false), + m_selected_file(nullptr) { } @@ -116,12 +121,27 @@ public: virtual void debugger_update() override; private: + enum file_entry_type + { + DRIVE, + DIRECTORY, + FILE + }; + + struct file_entry + { + file_entry_type type; + std::string basename; + std::string fullpath; + }; + void handle_mouse(); void handle_mouse_views(); void handle_keys(); void handle_keys_views(); void handle_console(running_machine* machine); void update(); + void draw_images_menu(); void draw_console(); void add_disasm(int id); void add_memory(int id); @@ -133,6 +153,8 @@ private: void draw_bpoints(debug_area* view_ptr, bool* opened); void draw_log(debug_area* view_ptr, bool* opened); void draw_view(debug_area* view_ptr, bool exp_change); + void draw_mount_dialog(const char* label); + void mount_image(); void update_cpu_view(device_t* device); static bool get_view_source(void* data, int idx, const char** out_text); static int history_set(ImGuiTextEditCallbackData* data); @@ -150,7 +172,14 @@ private: UINT8 m_key_char; bool m_hide; int m_win_count; // number of active windows, does not decrease, used to ID individual windows + bool m_has_images; // true if current system has any image devices bool m_initialised; // true after initial views are created + device_image_interface* m_dialog_image; + bool m_filelist_refresh; // set to true to refresh mount/create dialog file lists + bool m_mount_open; // true when opening a mount dialog + std::vector m_filelist; + file_entry* m_selected_file; + char m_path[1024]; // path text field buffer }; // globals @@ -902,6 +931,163 @@ void debug_imgui::add_memory(int id) view_list_add(new_view); } +void debug_imgui::mount_image() +{ + if(m_selected_file != nullptr) + { + osd_file::error err; + switch(m_selected_file->type) + { + case file_entry_type::DRIVE: + case file_entry_type::DIRECTORY: + err = util::zippath_opendir(m_selected_file->fullpath.c_str(), nullptr); + if(err == osd_file::error::NONE) + { + m_filelist_refresh = true; + strcpy(m_path,m_selected_file->fullpath.c_str()); + } + break; + case file_entry_type::FILE: + m_dialog_image->load(m_selected_file->fullpath.c_str()); + ImGui::CloseCurrentPopup(); + break; + } + } +} + +void debug_imgui::draw_images_menu() +{ + if(ImGui::BeginMenu("Images")) + { + for (device_image_interface &img : image_interface_iterator(m_machine->root_device())) + { + std::string str = string_format("%s : %s",img.device().name(),img.exists() ? img.filename() : "[Empty slot]"); + if(ImGui::BeginMenu(str.c_str())) + { + if(ImGui::MenuItem("Mount...")) + { + m_dialog_image = &img; + m_filelist_refresh = true; + m_mount_open = true; + m_selected_file = nullptr; // start with no file selected + if (img.exists()) // use image path if one is already mounted + strcpy(m_path,util::zippath_parent(m_dialog_image->filename()).c_str()); + else + strcpy(m_path,img.working_directory().c_str()); + } + if(ImGui::MenuItem("Unmount")) + img.unload(); + ImGui::Separator(); + if(img.is_creatable()) + if(ImGui::MenuItem("Create...",NULL,false,false)) {} + // TODO: Cassette controls + ImGui::EndMenu(); + } + } + ImGui::EndMenu(); + } +} + +void debug_imgui::draw_mount_dialog(const char* label) +{ + int x; + + // render dialog + ImGui::SetNextWindowContentWidth(200.0f); + if(ImGui::BeginPopupModal(label,NULL,ImGuiWindowFlags_AlwaysAutoResize)) + { + if(m_filelist_refresh) + { + osd_file::error err; + util::zippath_directory* dir = nullptr; + const char *volume_name; + const osd::directory::entry *dirent; + + // todo + m_filelist.clear(); + m_filelist_refresh = false; + + err = util::zippath_opendir(m_path,&dir); + if(err == osd_file::error::NONE) + { + x = 0; + // add drives + while((volume_name = osd_get_volume_name(x))!=nullptr) + { + file_entry temp; + temp.type = file_entry_type::DRIVE; + temp.basename = std::string(volume_name); + temp.fullpath = std::string(volume_name); + m_filelist.emplace_back(std::move(temp)); + x++; + } + while((dirent = util::zippath_readdir(dir)) != nullptr) + { + file_entry temp; + switch(dirent->type) + { + case osd::directory::entry::entry_type::FILE: + temp.type = file_entry_type::FILE; + break; + case osd::directory::entry::entry_type::DIR: + temp.type = file_entry_type::DIRECTORY; + break; + default: + break; + } + temp.basename = std::string(dirent->name); + temp.fullpath = util::zippath_combine(m_path,dirent->name); + m_filelist.emplace_back(std::move(temp)); + } + } + if (dir != nullptr) + util::zippath_closedir(dir); + } + if(ImGui::InputText("##mountpath",m_path,1024,ImGuiInputTextFlags_EnterReturnsTrue)) + { + m_filelist_refresh = true; + } + ImGui::Separator(); + { + ImGui::ListBoxHeader("##filelist",m_filelist.size(),15); + for(std::vector::iterator f = m_filelist.begin();f != m_filelist.end();++f) + { + std::string txt_name; + bool sel = false; + switch((*f).type) + { + case file_entry_type::DRIVE: + txt_name.assign("[DRIVE] "); + break; + case file_entry_type::DIRECTORY: + txt_name.assign("[DIR] "); + break; + case file_entry_type::FILE: + txt_name.assign("[FILE] "); + break; + } + txt_name.append((*f).basename); + if(m_selected_file == &(*f)) + sel = true; + if(ImGui::Selectable(txt_name.c_str(),sel,ImGuiSelectableFlags_AllowDoubleClick)) + { + m_selected_file = &(*f); + if(ImGui::IsMouseDoubleClicked(0)) + mount_image(); + } + } + ImGui::ListBoxFooter(); + } + ImGui::Separator(); + if(ImGui::Button("Cancel##mount")) + ImGui::CloseCurrentPopup(); + ImGui::SameLine(); + if(ImGui::Button("OK##mount")) + mount_image(); + ImGui::EndPopup(); + } +} + void debug_imgui::draw_console() { rgb_t bg, fg; @@ -979,6 +1165,8 @@ void debug_imgui::draw_console() } ImGui::EndMenu(); } + if(m_has_images) + draw_images_menu(); ImGui::EndMenuBar(); } @@ -1011,6 +1199,12 @@ void debug_imgui::draw_console() view_main_console->exec_cmd = true; if ((ImGui::IsRootWindowOrAnyChildFocused() && !ImGui::IsAnyItemActive() && !ImGui::IsMouseClicked(0))) ImGui::SetKeyboardFocusHere(-1); // Auto focus previous widget + if(m_mount_open) + { + ImGui::OpenPopup("Mount Image"); + m_mount_open = false; + } + draw_mount_dialog("Mount Image"); // draw mount image dialog if open ImGui::PopItemWidth(); ImGui::EndChild(); ImGui::End(); @@ -1077,17 +1271,23 @@ void debug_imgui::update() view_list_remove(to_delete); global_free(to_delete); } + ImGui::PopStyleColor(12); } void debug_imgui::init_debugger(running_machine &machine) { - ImGuiIO& io = ImGui::GetIO(); + ImGuiIO& io = ImGui::GetIO(); m_machine = &machine; m_mouse_button = false; if(strcmp(downcast(m_machine->options()).video(),"bgfx") != 0) fatalerror("Error: ImGui debugger requires the BGFX renderer.\n"); + // check for any image devices (cassette, floppy, etc...) + image_interface_iterator iter(m_machine->root_device()); + if (iter.first() != nullptr) + m_has_images = true; + // map keys to ImGui inputs io.KeyMap[ImGuiKey_A] = ITEM_ID_A; io.KeyMap[ImGuiKey_C] = ITEM_ID_C; diff --git a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_post.sc b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_post.sc index a0d6f56772a..63800bb61d3 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_post.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/hlsl/fs_post.sc @@ -149,9 +149,13 @@ void main() float ColorBrightness = 0.299 * BaseColor.r + 0.587 * BaseColor.g + 0.114 * BaseColor.b; float ScanCoord = BaseCoord.y; - ScanCoord += u_quad_dims.y <= u_source_dims.y * 2.0f - ? 0.5f / u_quad_dims.y // uncenter scanlines if the quad is less than twice the size of the source - : 0.0f; + ScanCoord += u_swap_xy.x > 0.0 + ? u_quad_dims.x <= u_source_dims.x * 2.0 + ? 0.5 / u_quad_dims.x // uncenter scanlines if the quad is less than twice the size of the source + : 0.0 + : u_quad_dims.y <= u_source_dims.y * 2.0 + ? 0.5 / u_quad_dims.y // uncenter scanlines if the quad is less than twice the size of the source + : 0.0; ScanCoord *= u_source_dims.y * u_scanline_scale.x * 3.1415927; // PI diff --git a/src/osd/modules/sound/xaudio2_sound.cpp b/src/osd/modules/sound/xaudio2_sound.cpp index 1da4794501b..3fb02b13d54 100644 --- a/src/osd/modules/sound/xaudio2_sound.cpp +++ b/src/osd/modules/sound/xaudio2_sound.cpp @@ -596,6 +596,10 @@ void sound_xaudio2::submit_needed() XAUDIO2_VOICE_STATE state; m_sourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED); + // If we have a too many buffers on the queue, flush to resync + if (state.BuffersQueued > 2) + m_sourceVoice->FlushSourceBuffers(); + std::lock_guard lock(m_buffer_lock); // Roll the buffer diff --git a/src/osd/sdl/window.cpp b/src/osd/sdl/window.cpp index d655298fa8b..f878a283748 100644 --- a/src/osd/sdl/window.cpp +++ b/src/osd/sdl/window.cpp @@ -1104,14 +1104,25 @@ osd_dim sdl_window_info::get_max_bounds(int constrain) // construction and destruction //============================================================ -sdl_window_info::sdl_window_info(running_machine &a_machine, int index, std::shared_ptr a_monitor, +sdl_window_info::sdl_window_info( + running_machine &a_machine, + int index, + std::shared_ptr a_monitor, const osd_window_config *config) -: osd_window(*config), m_next(nullptr), m_startmaximized(0), + : osd_window(*config) + , m_next(nullptr) + , m_startmaximized(0) // Following three are used by input code to defer resizes - m_minimum_dim(0,0), - m_windowed_dim(0,0), - m_rendered_event(0, 1), m_target(nullptr), m_extra_flags(0), - m_machine(a_machine), m_monitor(a_monitor), m_fullscreen(0) + , m_minimum_dim(0, 0) + , m_windowed_dim(0, 0) + , m_rendered_event(0, 1) + , m_target(nullptr) + , m_extra_flags(0) + , m_machine(a_machine) + , m_monitor(a_monitor) + , m_fullscreen(0) + , m_mouse_captured(false) + , m_mouse_hidden(false) { m_index = index;