mirror of
https://github.com/holub/mame
synced 2025-05-22 13:48:55 +03:00
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]
This commit is contained in:
parent
d15169631e
commit
59097d6646
@ -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 = <unused>
|
||||
DSW2
|
||||
<unused>
|
||||
*/
|
||||
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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user