From 59097d6646a83a2f2324b653af5c5f11a529127e Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Sun, 9 Nov 2008 23:38:09 +0000 Subject: [PATCH] Hooked up properly several PC-based devices in Filetto,game now works without sound. New games added or promoted from NOT_WORKING status --------------------------------------------------- Filetto [Angelo Salese] --- src/mame/drivers/filetto.c | 378 ++++++++++++++++++++++++------------- 1 file changed, 245 insertions(+), 133 deletions(-) diff --git a/src/mame/drivers/filetto.c b/src/mame/drivers/filetto.c index 903bd997092..2a1ae5f0b91 100644 --- a/src/mame/drivers/filetto.c +++ b/src/mame/drivers/filetto.c @@ -5,17 +5,18 @@ Filetto (c) 1990 Novarmatic driver by Angelo Salese & Chris Hardy TODO: -- Move the emulation of the VGA/CGA/EGA in a proper file,various old arcade games uses them, - namely several Mega-Touch type games... -- The current emulation hasn't any PC-specific chip hooked-up,it just have the minimum - requirements & some kludges to let this boot. -- Can't reset (currently for "Duplicate save state function (0, 0x41b900)"),pit8253 issue - probably. +- Use the MESS implementation of the CGA video emulation; +- Add a proper FDC device,if you enable it will give a boot error,probably because it + expects that in the floppy drive shouldn't be anything,there's currently a kludge that + does the trick; +- Add sound,"buzzer" PC sound plus the UM5100 sound chip,might be connected to the + prototyping card; ******************************************************************************************** HW notes: -The PCB is a (un?)modified IBM-PC with a CGA adapter & a prototyping card that controls the -interface between the pc and the Jamma connectors. +The PCB is a un-modified IBM-PC with a CGA adapter & a prototyping card that controls the +interface between the pc and the Jamma connectors.Additionally there's also a UM5100 sound +chip for the sound. PCB Part Number: S/N 90289764 NOVARXT PCB Contents: 1x UMC 8923S-UM5100 voice processor (upper board) @@ -26,6 +27,7 @@ PCB Contents: 1x UMC 8928LP-UM8272A floppy disk controller (lower board) 1x UMC 8935CS-UM82C11 Printer Adapter Interface (lower board) 1x UMC 8936CS-UM8250B Programmable asynchronous communications element (lower board) +There isn't any keyboard found connected to the pcb. ******************************************************************************************** SW notes: The software of this game can be extracted with a normal Windows program extractor. @@ -49,7 +51,7 @@ Vector & irq notes (Mainly a memo for me): 7c69 -> int $13 (FDC check),done 7c6c -16ef9 -> read dsw? +16ef9 -> read dsw 159cd [] [2361c] 12eae @@ -66,6 +68,10 @@ AH #include "video/generic.h" #include "machine/pit8253.h" #include "machine/8255ppi.h" +#include "machine/8237dma.h" +#include "machine/pic8259.h" +#include "machine/mc146818.h" +#include "sound/hc55516.h" #define SET_VISIBLE_AREA(_x_,_y_) \ { \ @@ -110,7 +116,7 @@ static READ8_HANDLER( vga_hvretrace_r ) return (hv_blank); } - +//was using magenta/cyan/white instead of red/green/brown /*Basic Graphic mode */ static void cga_graphic_bitmap(running_machine *machine,bitmap_t *bitmap,const rectangle *cliprect,UINT16 size,UINT32 map_offs) { @@ -288,7 +294,10 @@ static WRITE8_HANDLER( vga_regs_w ) if(offset == 1) { if(video_index <= 0x18) + { video_regs[video_index] = data; + //logerror("write %02x to video register [%02x]",data,video_index); + } else logerror("(PC=%05x) Warning: Undefined VGA reg port write (I=%02x D=%02x)\n",activecpu_get_pc(),video_index,data); } @@ -299,13 +308,24 @@ static WRITE8_HANDLER( vga_vram_w ) vga_vram[offset] = data; } +/*end of Video HW file*/ + +static struct { + const device_config *pit8254; + const device_config *pic8259_1; + const device_config *pic8259_2; + const device_config *dma8237_1; + const device_config *dma8237_2; +} filetto_devices; + + static UINT8 disk_data[2]; static READ8_HANDLER( disk_iobank_r ) { - printf("Read Prototyping card [%02x] @ PC=%05x\n",offset,activecpu_get_pc()); - if(offset == 1) - return input_port_read(machine, "DSW"); + //printf("Read Prototyping card [%02x] @ PC=%05x\n",offset,activecpu_get_pc()); + //if(offset == 0) return input_port_read(machine, "DSW"); + if(offset == 1) return input_port_read(machine, "IN1"); return disk_data[offset]; } @@ -334,7 +354,7 @@ static WRITE8_HANDLER( disk_iobank_w ) */ int newbank = 0; - printf("bank %d set to %02X\n", offset,data); +// printf("bank %d set to %02X\n", offset,data); if (data == 0xF0) { @@ -352,7 +372,7 @@ static WRITE8_HANDLER( disk_iobank_w ) newbank = 3; } - printf("newbank = %d\n", newbank); +// printf("newbank = %d\n", newbank); if (newbank != bank) { @@ -365,31 +385,13 @@ static WRITE8_HANDLER( disk_iobank_w ) disk_data[offset] = data; } - -/*RTC?*/ -static READ8_HANDLER( undefined_r ) -{ - logerror("(PC=%05x) Warning: Undefined read\n",activecpu_get_pc()); - return 0x00; -} - -static WRITE8_HANDLER( nmi_enable_w ) -{ - //if(data & 0x80) - //cpunum_set_input_line(machine, 0, INPUT_LINE_NMI,ASSERT_LINE); - //if(!(data & 0x80)) - //cpunum_set_input_line(machine, 0, INPUT_LINE_NMI,CLEAR_LINE); -} - -static READ8_HANDLER( kludge_r ) -{ - return mame_rand(machine); -} +/********************************* +Pit8253 +*********************************/ static PIT8253_OUTPUT_CHANGED( pc_timer0_w ) { - //if (state) - // pic8259_0_issue_irq(0); + pic8259_set_irq_line(filetto_devices.pic8259_1, 0, state); } static const struct pit8253_config pc_pit8253_config = @@ -408,15 +410,6 @@ static const struct pit8253_config pc_pit8253_config = } }; -static UINT8 drive_data; - -static WRITE8_HANDLER( drive_selection_w ) -{ - drive_data = data; - /*Write to this area then expects that location [43e] has the bit 7 activated*/ - work_ram[0x3e] = 0x80; -} - static UINT8 port_b_data; static UINT8 wss1_data,wss2_data; @@ -436,7 +429,7 @@ static READ8_DEVICE_HANDLER( port_a_r ) } else//keyboard emulation { - cpunum_set_input_line(device->machine, 0,1,PULSE_LINE); + //cpunum_set_input_line(device->machine, 0,1,PULSE_LINE); return 0x00;//Keyboard is disconnected //return 0xaa;//Keyboard code } @@ -452,9 +445,12 @@ static READ8_DEVICE_HANDLER( port_c_r ) return wss2_data;//??? } +/*'buzzer' sound routes here*/ static WRITE8_DEVICE_HANDLER( port_b_w ) { port_b_data = data; +// hc55516_digit_w(0, data); +// popmessage("%02x",data); } static WRITE8_DEVICE_HANDLER( wss_1_w ) @@ -493,19 +489,6 @@ static const ppi8255_interface filetto_ppi8255_intf[2] = } }; -static UINT8 irq_data[2]; - -static READ8_HANDLER( irq_ctrl_8259_r ) -{ - return irq_data[offset]; -} - -static WRITE8_HANDLER( irq_ctrl_8259_w ) -{ -// usrintf_showmessage("Write to irq device %02x %02x\n",offset,data); - irq_data[offset] = data; -} - /*Floppy Disk Controller 765 device*/ /*Currently we only emulate it at a point that the BIOS will pass the checks*/ static UINT8 status; @@ -517,7 +500,7 @@ static UINT8 status; static READ8_HANDLER( fdc765_status_r ) { static UINT8 tmp,clr_status; - popmessage("Read FDC status @ PC=%05x",activecpu_get_pc()); +// popmessage("Read FDC status @ PC=%05x",activecpu_get_pc()); tmp = status | 0x80; clr_status++; if(clr_status == 0x10) @@ -539,34 +522,157 @@ static WRITE8_HANDLER( fdc765_data_w ) status = (FDC_WRITE); } +static UINT8 drive_data; + +static WRITE8_HANDLER( drive_selection_w ) +{ + drive_data = data; + /*write to this area then expects that location [43e] has the bit 7 activated*/ + work_ram[0x3e] = 0x80; +} + +/****************** +DMA8237 Controller +******************/ + +static UINT8 dma_offset[2][4]; +static UINT8 at_pages[0x10]; + +static DMA8237_MEM_READ( pc_dma_read_byte ) +{ + UINT8 result; + offs_t page_offset = (((offs_t) dma_offset[0][channel]) << 16) + & 0xFF0000; + + cpuintrf_push_context(0); + result = program_read_byte(page_offset + offset); + cpuintrf_pop_context(); + + return result; +} + + +static DMA8237_MEM_WRITE( pc_dma_write_byte ) +{ + offs_t page_offset = (((offs_t) dma_offset[0][channel]) << 16) + & 0xFF0000; + + cpuintrf_push_context(0); + program_write_byte(page_offset + offset, data); + cpuintrf_pop_context(); +} + +static READ8_HANDLER(dma_page_select_r) +{ + UINT8 data = at_pages[offset % 0x10]; + + switch(offset % 8) { + case 1: + data = dma_offset[(offset / 8) & 1][2]; + break; + case 2: + data = dma_offset[(offset / 8) & 1][3]; + break; + case 3: + data = dma_offset[(offset / 8) & 1][1]; + break; + case 7: + data = dma_offset[(offset / 8) & 1][0]; + break; + } + return data; +} + + +static WRITE8_HANDLER(dma_page_select_w) +{ + at_pages[offset % 0x10] = data; + + switch(offset % 8) { + case 1: + dma_offset[(offset / 8) & 1][2] = data; + break; + case 2: + dma_offset[(offset / 8) & 1][3] = data; + break; + case 3: + dma_offset[(offset / 8) & 1][1] = data; + break; + case 7: + dma_offset[(offset / 8) & 1][0] = data; + break; + } +} + + +static const struct dma8237_interface dma8237_1_config = +{ + 0, + 1.0e-6, // 1us + + pc_dma_read_byte, + pc_dma_write_byte, + + { 0, 0, NULL, NULL }, + { 0, 0, NULL, NULL }, + NULL +}; + +/****************** +8259 IRQ controller +******************/ + +static PIC8259_SET_INT_LINE( pic8259_1_set_int_line ) { + cpunum_set_input_line(device->machine, 0, 0, interrupt ? HOLD_LINE : CLEAR_LINE); +} + +static const struct pic8259_interface pic8259_1_config = { + pic8259_1_set_int_line +}; + +static PIC8259_SET_INT_LINE( pic8259_2_set_int_line ) { + pic8259_set_irq_line( filetto_devices.pic8259_1, 2, interrupt); +} + +static const struct pic8259_interface pic8259_2_config = { + pic8259_2_set_int_line +}; + +static IRQ_CALLBACK(irq_callback) +{ + int r = 0; + r = pic8259_acknowledge(filetto_devices.pic8259_2); + if (r==0) + { + r = pic8259_acknowledge(filetto_devices.pic8259_1); + } + return r; +} + static ADDRESS_MAP_START( filetto_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x00000, 0x003ff) AM_RAM //irq vectors AM_RANGE(0x00400, 0x007ff) AM_RAM AM_BASE(&work_ram) AM_RANGE(0x00800, 0x9ffff) AM_RAM //work RAM 640KB -// AM_RANGE(0xa0000, 0xb7fff) AM_RAM //VGA RAM AM_RANGE(0xa0000, 0xbffff) AM_READWRITE(SMH_RAM,vga_vram_w) AM_BASE(&vga_vram)//VGA RAM AM_RANGE(0xc0000, 0xcffff) AM_READ(SMH_BANK1) - AM_RANGE(0xf0000, 0xfffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( filetto_io, ADDRESS_SPACE_IO, 8 ) - AM_RANGE(0x0000, 0x000f) AM_RAM //AM_READWRITE(dma8237_0_r,dma8237_0_w) //8237 DMA Controller - AM_RANGE(0x0020, 0x0021) AM_READWRITE(irq_ctrl_8259_r,irq_ctrl_8259_w)//AM_READWRITE(pic8259_0_r,pic8259_0_w) //8259 Interrupt control - AM_RANGE(0x0040, 0x0043) AM_READ(kludge_r) //AM_READWRITE(pit8253_0_r,pit8253_0_w) //8253 PIT - AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r,ppi8255_w) //PPI 8255 - AM_RANGE(0x0064, 0x0066) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r,ppi8255_w) //PPI 8255 - AM_RANGE(0x0073, 0x0073) AM_READ(undefined_r) - AM_RANGE(0x0080, 0x0087) AM_RAM //AM_READWRITE(dma_page_select_r,dma_page_select_w) - AM_RANGE(0x00a0, 0x00a0) AM_WRITE(nmi_enable_w) - //AM_RANGE(0x0200, 0x020f) AM_RAM //game port + AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE(DMA8237, "dma8237_1", dma8237_r, dma8237_w ) //8237 DMA Controller + AM_RANGE(0x0020, 0x002f) AM_DEVREADWRITE(PIC8259, "pic8259_1", pic8259_r, pic8259_w ) //8259 Interrupt control + AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE(PIT8253, "pit8253", pit8253_r, pit8253_w) //8253 PIT + AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE(PPI8255, "ppi8255_0", ppi8255_r, ppi8255_w) //PPI 8255 + AM_RANGE(0x0064, 0x0066) AM_DEVREADWRITE(PPI8255, "ppi8255_1", ppi8255_r, ppi8255_w) //PPI 8255 + AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port_r,mc146818_port_w) + AM_RANGE(0x0080, 0x0087) AM_READWRITE(dma_page_select_r,dma_page_select_w) + AM_RANGE(0x00a0, 0x00af) AM_DEVREADWRITE(PIC8259, "pic8259_2", pic8259_r, pic8259_w ) +// AM_RANGE(0x0200, 0x020f) AM_RAM //game port + AM_RANGE(0x0201, 0x0201) AM_READ_PORT("COIN") //game port AM_RANGE(0x0278, 0x027f) AM_RAM //printer (parallel) port latch AM_RANGE(0x02f8, 0x02ff) AM_RAM //Modem port - - AM_RANGE(0x0310, 0x0311) AM_READWRITE(disk_iobank_r,disk_iobank_w) //Prototyping card (???) - AM_RANGE(0x0312, 0x0312) AM_READ_PORT("IN0") - -// AM_RANGE(0x0300, 0x031f) AM_RAM //Prototyping card (???) + AM_RANGE(0x0310, 0x0311) AM_READWRITE(disk_iobank_r,disk_iobank_w) //Prototyping card + AM_RANGE(0x0312, 0x0312) AM_READ_PORT("IN0") //Prototyping card,read only AM_RANGE(0x0378, 0x037f) AM_RAM //printer (parallel) port AM_RANGE(0x03bc, 0x03bf) AM_RAM //printer port AM_RANGE(0x03b4, 0x03b5) AM_READWRITE(vga_regs_r,vga_regs_w) //various VGA/CGA/EGA regs @@ -582,50 +688,36 @@ ADDRESS_MAP_END static INPUT_PORTS_START( filetto ) PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) //START1 + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) //START2 + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - /* - DSW1 - bit 0 = coinage (0=1co/1cr, 1= 2co/1cr) - bit 1 = demo_sounds (0=no,1=yes) - bit 2 = extra play (0=no extra play,1=play at 6th match reached) - bit 3 = difficulty (0=normal,1=hard) - bit 4-7 = - DSW2 - - */ - PORT_START("DSW") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_START("IN1") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Extra Play" ) + PORT_DIPSETTING( 0x04, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, "Play at 6th match reached" ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("COIN") + PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static const gfx_layout dos_chars = @@ -669,7 +761,6 @@ BROWN = 6 LIGHT GRAY = 7 */ - static PALETTE_INIT(filetto) { /*Note:palette colors are 6bpp... @@ -698,20 +789,20 @@ static PALETTE_INIT(filetto) palette_set_color(machine, 29+2,MAKE_RGB(0xff,0xff,0xff)); palette_set_color(machine, 0xf0,MAKE_RGB(0x00,0x00,0x00)); - palette_set_color(machine, 0xf1,MAKE_RGB(0x00,0x00,0x9f)); - palette_set_color(machine, 0xf2,MAKE_RGB(0x00,0x9f,0x00)); - palette_set_color(machine, 0xf3,MAKE_RGB(0x00,0x9f,0x9f)); - palette_set_color(machine, 0xf4,MAKE_RGB(0x9f,0x00,0x00)); - palette_set_color(machine, 0xf5,MAKE_RGB(0x9f,0x00,0x9f)); - palette_set_color(machine, 0xf6,MAKE_RGB(0x9f,0x9f,0x00)); - palette_set_color(machine, 0xf7,MAKE_RGB(0x9f,0x9f,0x9f)); - palette_set_color(machine, 0xf8,MAKE_RGB(0x3f,0x3f,0x3f)); - palette_set_color(machine, 0xf9,MAKE_RGB(0x3f,0x3f,0xff)); - palette_set_color(machine, 0xfa,MAKE_RGB(0x3f,0xff,0x3f)); - palette_set_color(machine, 0xfb,MAKE_RGB(0x3f,0xff,0xff)); - palette_set_color(machine, 0xfc,MAKE_RGB(0xff,0x3f,0x10)); - palette_set_color(machine, 0xfd,MAKE_RGB(0xff,0x3f,0xff)); - palette_set_color(machine, 0xfe,MAKE_RGB(0xff,0xff,0x3f)); + palette_set_color(machine, 0xf1,MAKE_RGB(0x00,0x00,0xaa)); + palette_set_color(machine, 0xf2,MAKE_RGB(0x00,0xaa,0x00)); + palette_set_color(machine, 0xf3,MAKE_RGB(0x00,0xaa,0xaa)); + palette_set_color(machine, 0xf4,MAKE_RGB(0xaa,0x00,0x00)); + palette_set_color(machine, 0xf5,MAKE_RGB(0xaa,0x00,0xaa)); + palette_set_color(machine, 0xf6,MAKE_RGB(0xaa,0xaa,0x00)); + palette_set_color(machine, 0xf7,MAKE_RGB(0xaa,0xaa,0xaa)); + palette_set_color(machine, 0xf8,MAKE_RGB(0x55,0x55,0x55)); + palette_set_color(machine, 0xf9,MAKE_RGB(0x55,0x55,0xff)); + palette_set_color(machine, 0xfa,MAKE_RGB(0x55,0xff,0x55)); + palette_set_color(machine, 0xfb,MAKE_RGB(0x55,0xff,0xff)); + palette_set_color(machine, 0xfc,MAKE_RGB(0xff,0x55,0x55)); + palette_set_color(machine, 0xfd,MAKE_RGB(0xff,0x55,0xff)); + palette_set_color(machine, 0xfe,MAKE_RGB(0xff,0xff,0x55)); palette_set_color(machine, 0xff,MAKE_RGB(0xff,0xff,0xff)); } @@ -721,7 +812,7 @@ static PALETTE_INIT(filetto) #define VBLANK_1 if(!(hv_blank & 8)) hv_blank^= 8; #define VBLANK_0 if(hv_blank & 8) hv_blank^= 8; -static INTERRUPT_GEN( filetto_irq ) +static INTERRUPT_GEN( filetto_vblank ) { /*TODO: Timings are guessed*/ /*H-Blank*/ @@ -739,13 +830,19 @@ static MACHINE_RESET( filetto ) bank = -1; lastvalue = -1; hv_blank = 0; + cpunum_set_irq_callback(0, irq_callback); + filetto_devices.pit8254 = device_list_find_by_tag( machine->config->devicelist, PIT8254, "pit8254" ); + filetto_devices.pic8259_1 = device_list_find_by_tag( machine->config->devicelist, PIC8259, "pic8259_1" ); + filetto_devices.pic8259_2 = device_list_find_by_tag( machine->config->devicelist, PIC8259, "pic8259_2" ); + filetto_devices.dma8237_1 = device_list_find_by_tag( machine->config->devicelist, DMA8237, "dma8237_1" ); + filetto_devices.dma8237_2 = device_list_find_by_tag( machine->config->devicelist, DMA8237, "dma8237_2" ); } static MACHINE_DRIVER_START( filetto ) MDRV_CPU_ADD("main", I8088, 8000000) MDRV_CPU_PROGRAM_MAP(filetto_map,0) MDRV_CPU_IO_MAP(filetto_io,0) - MDRV_CPU_VBLANK_INT_HACK(filetto_irq,200) + MDRV_CPU_VBLANK_INT_HACK(filetto_vblank,200) MDRV_MACHINE_RESET( filetto ) @@ -755,6 +852,15 @@ static MACHINE_DRIVER_START( filetto ) MDRV_PPI8255_ADD( "ppi8255_0", filetto_ppi8255_intf[0] ) MDRV_PPI8255_ADD( "ppi8255_1", filetto_ppi8255_intf[1] ) + MDRV_DEVICE_ADD( "dma8237_1", DMA8237 ) + MDRV_DEVICE_CONFIG( dma8237_1_config ) + + MDRV_DEVICE_ADD( "pic8259_1", PIC8259 ) + MDRV_DEVICE_CONFIG( pic8259_1_config ) + + MDRV_DEVICE_ADD( "pic8259_2", PIC8259 ) + MDRV_DEVICE_CONFIG( pic8259_2_config ) + MDRV_GFXDECODE(filetto) MDRV_SCREEN_ADD("main", RASTER) @@ -770,12 +876,19 @@ static MACHINE_DRIVER_START( filetto ) MDRV_VIDEO_START(filetto) MDRV_VIDEO_UPDATE(filetto) + + /*Sound Hardware*/ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD("voice", HC55516, 8000000/4)//8923S-UM5100 is a HC55536 with ROM hook-up + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60) + +// PC "buzzer" sound MACHINE_DRIVER_END ROM_START( filetto ) ROM_REGION( 0x100000, "main", 0 ) - ROM_LOAD("u49.bin", 0xfc000, 0x2000, CRC(1be6948a) SHA1(9c433f63d347c211ee4663f133e8417221bc4bf0)) ROM_RELOAD( 0xf8000, 0x2000 ) ROM_RELOAD( 0xf4000, 0x2000 ) @@ -785,7 +898,6 @@ ROM_START( filetto ) ROM_RELOAD( 0xf6000, 0x2000 ) ROM_RELOAD( 0xf2000, 0x2000 ) - ROM_REGION( 0x40000, "user1", 0 ) // program data ROM_LOAD( "m0.u1", 0x00000, 0x10000, CRC(2408289d) SHA1(eafc144a557a79b58bcb48545cb9c9778e61fcd3) ) ROM_LOAD( "m1.u2", 0x10000, 0x10000, CRC(5b623114) SHA1(0d9a14e6b7f57ce4fa09762343b610a973910f58) ) @@ -795,7 +907,7 @@ ROM_START( filetto ) ROM_REGION( 0x2000, "gfx1", ROMREGION_DISPOSE ) ROM_LOAD("u67.bin", 0x0000, 0x2000, CRC(09710122) SHA1(de84bdd9245df287bbd3bb808f0c3531d13a3545) ) - ROM_REGION( 0x40000, "user2", ROMREGION_DISPOSE ) // unknown + ROM_REGION( 0x40000, "user2", ROMREGION_DISPOSE ) // UM5100 sample roms? ROM_LOAD16_BYTE("v1.u15", 0x00000, 0x20000, CRC(613ddd07) SHA1(ebda3d559315879819cb7034b5696f8e7861fe42) ) ROM_LOAD16_BYTE("v2.u14", 0x00001, 0x20000, CRC(427e012e) SHA1(50514a6307e63078fe7444a96e39d834684db7df) ) ROM_END @@ -805,5 +917,5 @@ static DRIVER_INIT( filetto ) //... } -GAME( 1990, filetto, 0, filetto, filetto, filetto, ROT0, "Novarmatic", "Filetto (v1.05 901009)",GAME_NOT_WORKING|GAME_NO_SOUND ) +GAME( 1990, filetto, 0, filetto, filetto, filetto, ROT0, "Novarmatic", "Filetto (v1.05 901009)",GAME_NO_SOUND | GAME_IMPERFECT_COLORS)