summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/miniboy7.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/miniboy7.c')
-rw-r--r--src/mame/drivers/miniboy7.c314
1 files changed, 314 insertions, 0 deletions
diff --git a/src/mame/drivers/miniboy7.c b/src/mame/drivers/miniboy7.c
new file mode 100644
index 00000000000..800e0be48bc
--- /dev/null
+++ b/src/mame/drivers/miniboy7.c
@@ -0,0 +1,314 @@
+/******************************************************************************
+
+
+ MINI BOY 7
+
+ Driver by Roberto Fresca.
+
+
+ Games running on this hardware:
+
+ - Mini Boy 7. 1983, Bonanza Enterprises, Ltd.
+
+
+*******************************************************************************
+
+
+ Preliminary Notes:
+
+ This driver was made reverse-engineering the program ROMs.
+ The Mini Boy 7 dump found lacks of PCB pics, technical notes or hardware list.
+ Only one text file inside telling that ROMs mb7511, mb7311 and mb7111 are rotten,
+ typical for M5L2764K parts. The color PROM was not dumped.
+
+
+ Game Notes:
+
+ Mini Boy 7. Seven games in one, plus Ad message support.
+ http://www.arcadeflyers.com/?page=thumbs&db=videodb&id=4275
+
+ - Draw Poker.
+ - 7-Stud Poker.
+ - Black Jack.
+ - Baccarat.
+ - Hi-Lo.
+ - Double-Up.
+ - Craps.
+
+
+*******************************************************************************
+
+
+ Hardware Notes:
+
+ - CPU: 1x M6502.
+ - Video: 1x MC6845.
+ - RAM: (unknown).
+ - I/O At least 1x 6821 PIA.
+ - prg ROMs: 6x 2764 (8Kb) or similar.
+ - gfx ROMs: 1x 2732 (4Kb) or similar for text layer.
+ 4x M5L2764K (8Kb) for gfx tiles.
+ - sound: (unknown)
+ - battery backup: (unknown)
+
+
+ Still guessing...
+
+
+*******************************************************************************
+
+
+ --------------------
+ *** Memory Map ***
+ --------------------
+
+ $0000 - $00FF RAM ; Zero Page (pointers and registers)
+ $0100 - $01FF RAM ; 6502 Stack Pointer.
+ $0200 - $07FF RAM ; R/W. (settings)
+
+ $0800 - $0FFF Video RAM
+ $1000 - $17FF Color RAM
+
+ $2800 - $2801 MC6845 ; MC6845 use $2800 for register addressing and $2801 for register values.
+
+ $3000 - $3001 ????? ; R/W. AY8910?
+ $3080 - $3083 ????? ; R/W. PIA?
+ $3800 - $3800 ????? ; R.
+
+ $4000 - $FFFF ROM ; ROM space.
+
+
+ *** mc6845 init ***
+ register: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17
+ value: 0x2F 0x25 0x28 0x44 0x27 0x06 0x25 0x25 0x00 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00.
+
+
+*******************************************************************************
+
+
+ DRIVER UPDATES:
+
+
+ [2007-06-19]
+
+ - Initial release. Just a skeleton driver.
+
+
+ [2007-06-20]
+
+ - Confirmed the CPU as 6502.
+ - Confirmed the CRT controller as 6845.
+ - Corrected the total & visible area analyzing the 6845 registers.
+ - Crystal documented via #define.
+ - CPU clock derived from #defined crystal value.
+ - Decoded all gfx properly.
+ - Partially worked the GFX banks:
+ - 2 bank (1bpp) for text layers and minor graphics.
+ - 1 bank (3bpp) for cards, jokers, dices and big text graphics.
+
+
+ TODO:
+
+ - Inputs.
+ - DIP Switches.
+ - NVRAM support if applicable.
+ - Support for bottom scroll (big user message).
+ - Figure out the colors (need a color PROM dump).
+ - Figure out the sound.
+ - Final cleanup and split the driver.
+
+
+*******************************************************************************/
+
+
+#define MASTER_CLOCK 10000000 /* 10MHz */
+
+#include "driver.h"
+#include "video/crtc6845.h"
+//#include "machine/6821pia.h"
+
+
+/*************************
+* Video Hardware *
+*************************/
+
+static tilemap *bg_tilemap;
+
+static WRITE8_HANDLER( miniboy7_videoram_w )
+{
+ videoram[offset] = data;
+ tilemap_mark_tile_dirty(bg_tilemap, offset);
+}
+
+static WRITE8_HANDLER( miniboy7_colorram_w )
+{
+ colorram[offset] = data;
+ tilemap_mark_tile_dirty(bg_tilemap, offset);
+}
+
+static TILE_GET_INFO( get_bg_tile_info )
+{
+/* - bits -
+ 7654 3210
+ --xx xx-- tiles color?.
+ ---- --x- tiles bank.
+ xx-- ---x seems unused. */
+
+ int attr = colorram[tile_index];
+ int code = videoram[tile_index];
+ int bank = (attr & 0x02) >> 1; /* bit 1 switch the gfx banks */
+ int color = (attr & 0x3c); /* bits 2-3-4-5 for color? */
+
+ if (bank == 1) /* temporary hack to point to the 3rd gfx bank */
+ bank = 2;
+
+ SET_TILE_INFO(bank, code, color, 0);
+}
+
+static VIDEO_START( miniboy7 )
+{
+ bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows,
+ TILEMAP_TYPE_PEN, 8, 8, 37, 37);
+}
+
+static VIDEO_UPDATE( miniboy7 )
+{
+ tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
+ return 0;
+}
+
+
+/*************************
+* Memory Map Information *
+*************************/
+
+static ADDRESS_MAP_START( miniboy7_map, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x07ff) AM_RAM /* battery backed RAM? */
+ AM_RANGE(0x0800, 0x0fff) AM_RAM AM_WRITE(miniboy7_videoram_w) AM_BASE(&videoram)
+ AM_RANGE(0x1000, 0x17ff) AM_RAM AM_WRITE(miniboy7_colorram_w) AM_BASE(&colorram)
+ AM_RANGE(0x1800, 0x25ff) AM_RAM /* looks like videoram */
+ AM_RANGE(0x2600, 0x27ff) AM_RAM
+ AM_RANGE(0x2800, 0x2800) AM_WRITE(crtc6845_address_w)
+ AM_RANGE(0x2801, 0x2801) AM_READWRITE(crtc6845_register_r, crtc6845_register_w)
+// AM_RANGE(0x3000, 0x3001) ????? R/W
+// AM_RANGE(0x3080, 0x3083) AM_READWRITE(pia_0_r, pia_0_w)
+// AM_RANGE(0x3800, 0x3800) ????? R
+ AM_RANGE(0x4000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+
+/*************************
+* Input Ports *
+*************************/
+
+static INPUT_PORTS_START( miniboy7 )
+INPUT_PORTS_END
+
+
+/*************************
+* Graphics Layouts *
+*************************/
+
+static const gfx_layout charlayout =
+{
+ 8, 8,
+ 256,
+ 1,
+ { 0 },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8
+};
+
+static const gfx_layout tilelayout =
+{
+ 8, 8,
+ RGN_FRAC(1,3),
+ 3,
+ { 0, RGN_FRAC(1,3), RGN_FRAC(2,3) }, /* bitplanes are separated */
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8
+};
+
+
+/******************************
+* Graphics Decode Information *
+******************************/
+
+static GFXDECODE_START( miniboy7 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0x0800, charlayout, 0, 16 ) /* text layer 1 */
+ GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 16 ) /* text layer 2 */
+
+ /* 0x000 cards
+ 0x100 joker
+ 0x200 dices
+ 0x300 bigtxt */
+ GFXDECODE_ENTRY( REGION_GFX2, 0, tilelayout, 0, 16 )
+
+GFXDECODE_END
+
+
+/*************************
+* Machine Drivers *
+*************************/
+
+static MACHINE_DRIVER_START( miniboy7 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD_TAG("main", M6502, MASTER_CLOCK/16) /* guess */
+ MDRV_CPU_PROGRAM_MAP(miniboy7_map, 0)
+ MDRV_CPU_VBLANK_INT(nmi_line_pulse, 1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE((47+1)*8, (39+1)*8) /* Taken from MC6845, registers 00 & 04. Normally programmed with (value-1) */
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 37*8-1, 0*8, 37*8-1) /* Taken from MC6845, registers 01 & 06 */
+
+ MDRV_GFXDECODE(miniboy7)
+
+ MDRV_PALETTE_LENGTH(256)
+ MDRV_COLORTABLE_LENGTH(1024)
+
+ MDRV_VIDEO_START(miniboy7)
+ MDRV_VIDEO_UPDATE(miniboy7)
+MACHINE_DRIVER_END
+
+
+/*************************
+* Rom Load *
+*************************/
+
+ROM_START( miniboy7 )
+ ROM_REGION( 0x10000, REGION_CPU1, 0 )
+ ROM_LOAD( "mb7111.8a", 0x4000, 0x2000, BAD_DUMP CRC(1b7ac5f0) SHA1(a52052771fcce688afccf9f0c3e3c2b5e7cec4e4) ) /* marked as BAD for the dumper but seems OK */
+ ROM_LOAD( "mb7211.7a", 0x6000, 0x2000, CRC(ac9b66a6) SHA1(66a33e475de4fb3ffdd9a68a24932574e7d78116) )
+ ROM_LOAD( "mb7311.6a", 0x8000, 0x2000, BAD_DUMP CRC(99f2a063) SHA1(94108cdc574c7e9400fe8a249b78ba190d10502b) ) /* marked as BAD for the dumper */
+ ROM_LOAD( "mb7411.5a", 0xa000, 0x2000, CRC(99f8268f) SHA1(a4ca98dfb5df86fe45f33e291bf0c40d1f43ae7c) )
+ ROM_LOAD( "mb7511.4a", 0xc000, 0x2000, BAD_DUMP CRC(2820ae91) SHA1(70f9b3823733ae39d153948a4006a5972204f482) ) /* marked as BAD for the dumper */
+ ROM_LOAD( "mb7611.3a", 0xe000, 0x2000, CRC(ca9b9b20) SHA1(c6cd793a15948601faa051a4643b14fd3d8bda0b) )
+
+ ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE )
+ ROM_LOAD( "mb70.11d", 0x0000, 0x1000, CRC(84f78ee2) SHA1(c434e8a9b19ef1394b1dac67455f859eef299f95) ) /* text layer */
+
+ ROM_REGION( 0x6000, REGION_GFX2, ROMREGION_DISPOSE )
+ ROM_LOAD( "mb71.12d", 0x0000, 0x2000, CRC(5f3e3b93) SHA1(41ab6a42a41ddeb8b6b76f4d790bf9fb9e7c32a3) )
+ ROM_LOAD( "mb72.13d", 0x2000, 0x2000, CRC(b3362650) SHA1(603907fd3a0049c0a3e1858c4329bf9fd58137f6) )
+ ROM_LOAD( "mb73.14d", 0x4000, 0x2000, CRC(10c2bf71) SHA1(23a01625b0fc0b772054ee4bc026d2257df46a03) )
+
+ ROM_REGION( 0x0100, REGION_PROMS, 0 )
+ ROM_LOAD( "mb7_24s10n.bin", 0x0000, 0x0100, NO_DUMP) /* PROM dump needed */
+ROM_END
+
+
+/*************************
+* Game Drivers *
+*************************/
+
+/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS */
+GAME( 1983, miniboy7, 0, miniboy7, miniboy7, 0, ROT0, "Bonanza Enterprises, Ltd", "Mini Boy 7", GAME_NO_SOUND | GAME_WRONG_COLORS | GAME_NOT_WORKING )
+