summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/stv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/stv.c')
-rw-r--r--src/mame/drivers/stv.c78
1 files changed, 39 insertions, 39 deletions
diff --git a/src/mame/drivers/stv.c b/src/mame/drivers/stv.c
index 52b2916220d..72e3db7ff5d 100644
--- a/src/mame/drivers/stv.c
+++ b/src/mame/drivers/stv.c
@@ -498,7 +498,7 @@ static void stv_SMPC_w8 (const address_space *space, int offset, UINT8 data)
if(offset == 0x75)
{
- running_device *device = devtag_get_device(space->machine, "eeprom");
+ eeprom_device *device = space->machine->device<eeprom_device>("eeprom");
eeprom_set_clock_line(device, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
eeprom_write_bit(device, data & 0x10);
eeprom_set_cs_line(device, (data & 0x04) ? CLEAR_LINE : ASSERT_LINE);
@@ -2654,9 +2654,9 @@ SCU register[40] is for IRQ masking.
It's not tested much either, but I'm aware that timer 1 doesn't work with this for whatever reason ... */
static TIMER_CALLBACK( stv_irq_callback )
{
- int hpos = video_screen_get_hpos(machine->primary_screen);
- int vpos = video_screen_get_vpos(machine->primary_screen);
- rectangle visarea = *video_screen_get_visible_area(machine->primary_screen);
+ int hpos = machine->primary_screen->hpos();
+ int vpos = machine->primary_screen->vpos();
+ rectangle visarea = *machine->primary_screen->visible_area();
h_sync = visarea.max_x+1;//horz
v_sync = visarea.max_y+1;//vert
@@ -2664,12 +2664,12 @@ static TIMER_CALLBACK( stv_irq_callback )
if(vpos == v_sync && hpos == 0)
VBLANK_IN_IRQ;
if(hpos == 0 && vpos == 0)
- VBLANK_OUT_IRQ;
+ VBLANK_OUT_IRQ(timer->machine);
if(hpos == h_sync)
- TIMER_0_IRQ;
+ TIMER_0_IRQ(timer->machine);
if(hpos == h_sync && (vpos != 0 && vpos != v_sync))
{
- HBLANK_IN_IRQ;
+ HBLANK_IN_IRQ(timer->machine);
timer_0++;
}
@@ -2679,28 +2679,28 @@ static TIMER_CALLBACK( stv_irq_callback )
VDP1_IRQ;
if(hpos == timer_1)
- TIMER_1_IRQ;
+ TIMER_1_IRQ(timer->machine);
if(hpos <= h_sync)
- timer_adjust_oneshot(scan_timer, video_screen_get_time_until_pos(machine->primary_screen, vpos, hpos+1), 0);
+ scan_timer->adjust(machine->primary_screen->time_until_pos(vpos, hpos+1));
else if(vpos <= v_sync)
- timer_adjust_oneshot(scan_timer, video_screen_get_time_until_pos(machine->primary_screen, vpos+1, 0), 0);
+ scan_timer->adjust(machine->primary_screen->time_until_pos(vpos+1));
else
- timer_adjust_oneshot(scan_timer, video_screen_get_time_until_pos(machine->primary_screen, 0, 0), 0);
+ scan_timer->adjust(machine->primary_screen->time_until_pos(0));
}
#endif
-static running_device *vblank_out_timer,*scan_timer,*t1_timer;
+static timer_device *vblank_out_timer,*scan_timer,*t1_timer;
static int h_sync,v_sync;
static int cur_scan;
-#define VBLANK_OUT_IRQ \
+#define VBLANK_OUT_IRQ(m) \
timer_0 = 0; \
{ \
/*if(LOG_IRQ) logerror ("Interrupt: VBlank-OUT Vector 0x41 Level 0x0e\n");*/ \
- cputag_set_input_line_and_vector(timer->machine, "maincpu", 0xe, (stv_irq.vblank_out) ? HOLD_LINE : CLEAR_LINE , 0x41); \
+ cputag_set_input_line_and_vector(m, "maincpu", 0xe, (stv_irq.vblank_out) ? HOLD_LINE : CLEAR_LINE , 0x41); \
} \
#define VBLANK_IN_IRQ \
@@ -2709,34 +2709,34 @@ timer_0 = 0; \
cputag_set_input_line_and_vector(device->machine, "maincpu", 0xf, (stv_irq.vblank_in) ? HOLD_LINE : CLEAR_LINE , 0x40); \
} \
-#define HBLANK_IN_IRQ \
+#define HBLANK_IN_IRQ(m) \
timer_1 = stv_scu[37] & 0x1ff; \
{ \
/*if(LOG_IRQ) logerror ("Interrupt: HBlank-In at scanline %04x, Vector 0x42 Level 0x0d\n",scanline);*/ \
- cputag_set_input_line_and_vector(timer->machine, "maincpu", 0xd, (stv_irq.hblank_in) ? HOLD_LINE : CLEAR_LINE, 0x42); \
+ cputag_set_input_line_and_vector(m, "maincpu", 0xd, (stv_irq.hblank_in) ? HOLD_LINE : CLEAR_LINE, 0x42); \
} \
-#define TIMER_0_IRQ \
+#define TIMER_0_IRQ(m) \
if(timer_0 == (stv_scu[36] & 0x3ff)) \
{ \
/*if(LOG_IRQ) logerror ("Interrupt: Timer 0 at scanline %04x, Vector 0x43 Level 0x0c\n",scanline);*/ \
- cputag_set_input_line_and_vector(timer->machine, "maincpu", 0xc, (stv_irq.timer_0) ? HOLD_LINE : CLEAR_LINE, 0x43 ); \
+ cputag_set_input_line_and_vector(m, "maincpu", 0xc, (stv_irq.timer_0) ? HOLD_LINE : CLEAR_LINE, 0x43 ); \
} \
-#define TIMER_1_IRQ \
+#define TIMER_1_IRQ(m) \
if((stv_scu[38] & 1)) \
{ \
if(!(stv_scu[38] & 0x80)) \
{ \
/*if(LOG_IRQ) logerror ("Interrupt: Timer 1 at point %04x, Vector 0x44 Level 0x0b\n",point);*/ \
- cputag_set_input_line_and_vector(timer->machine, "maincpu", 0xb, (stv_irq.timer_1) ? HOLD_LINE : CLEAR_LINE, 0x44 ); \
+ cputag_set_input_line_and_vector(m, "maincpu", 0xb, (stv_irq.timer_1) ? HOLD_LINE : CLEAR_LINE, 0x44 ); \
} \
else \
{ \
if((timer_0) == (stv_scu[36] & 0x3ff)) \
{ \
/*if(LOG_IRQ) logerror ("Interrupt: Timer 1 at point %04x, Vector 0x44 Level 0x0b\n",point);*/ \
- cputag_set_input_line_and_vector(timer->machine, "maincpu", 0xb, (stv_irq.timer_1) ? HOLD_LINE : CLEAR_LINE, 0x44 ); \
+ cputag_set_input_line_and_vector(m, "maincpu", 0xb, (stv_irq.timer_1) ? HOLD_LINE : CLEAR_LINE, 0x44 ); \
} \
} \
} \
@@ -2750,20 +2750,20 @@ static TIMER_DEVICE_CALLBACK( hblank_in_irq )
{
int scanline = param;
-// h = video_screen_get_height(timer->machine->primary_screen);
-// w = video_screen_get_width(timer->machine->primary_screen);
+// h = timer.machine->primary_screen->height();
+// w = timer.machine->primary_screen->width();
- HBLANK_IN_IRQ;
- TIMER_0_IRQ;
+ HBLANK_IN_IRQ(timer.machine);
+ TIMER_0_IRQ(timer.machine);
if(scanline+1 < v_sync)
{
if(stv_irq.hblank_in || stv_irq.timer_0)
- timer_device_adjust_oneshot(scan_timer, video_screen_get_time_until_pos(timer->machine->primary_screen, scanline+1, h_sync), scanline+1);
+ scan_timer->adjust(timer.machine->primary_screen->time_until_pos(scanline+1, h_sync), scanline+1);
/*set the first Timer-1 event*/
cur_scan = scanline+1;
if(stv_irq.timer_1)
- timer_device_adjust_oneshot(t1_timer, video_screen_get_time_until_pos(timer->machine->primary_screen, scanline+1, timer_1), scanline+1);
+ t1_timer->adjust(timer.machine->primary_screen->time_until_pos(scanline+1, timer_1), scanline+1);
}
timer_0++;
@@ -2773,10 +2773,10 @@ static TIMER_DEVICE_CALLBACK( timer1_irq )
{
int scanline = param;
- TIMER_1_IRQ;
+ TIMER_1_IRQ(timer.machine);
if(stv_irq.timer_1)
- timer_device_adjust_oneshot(t1_timer, video_screen_get_time_until_pos(timer->machine->primary_screen, scanline+1, timer_1), scanline+1);
+ t1_timer->adjust(timer.machine->primary_screen->time_until_pos(scanline+1, timer_1), scanline+1);
}
static TIMER_CALLBACK( vdp1_irq )
@@ -2786,14 +2786,14 @@ static TIMER_CALLBACK( vdp1_irq )
static TIMER_DEVICE_CALLBACK( vblank_out_irq )
{
- VBLANK_OUT_IRQ;
+ VBLANK_OUT_IRQ(timer.machine);
}
/*V-Blank-IN event*/
static INTERRUPT_GEN( stv_interrupt )
{
// scanline = 0;
- rectangle visarea = *video_screen_get_visible_area(device->machine->primary_screen);
+ rectangle visarea = device->machine->primary_screen->visible_area();
h_sync = visarea.max_x+1;//horz
v_sync = visarea.max_y+1;//vert
@@ -2802,14 +2802,14 @@ static INTERRUPT_GEN( stv_interrupt )
/*Next V-Blank-OUT event*/
if(stv_irq.vblank_out)
- timer_device_adjust_oneshot(vblank_out_timer,video_screen_get_time_until_pos(device->machine->primary_screen, 0, 0), 0);
+ vblank_out_timer->adjust(device->machine->primary_screen->time_until_pos(0));
/*Set the first Hblank-IN event*/
if(stv_irq.hblank_in || stv_irq.timer_0 || stv_irq.timer_1)
- timer_device_adjust_oneshot(scan_timer, video_screen_get_time_until_pos(device->machine->primary_screen, 0, h_sync), 0);
+ scan_timer->adjust(device->machine->primary_screen->time_until_pos(0, h_sync));
/*TODO: timing of this one (related to the VDP1 speed)*/
/* (NOTE: value shouldn't be at h_sync/v_sync position (will break shienryu))*/
- timer_set(device->machine, video_screen_get_time_until_pos(device->machine->primary_screen,0,0), NULL, 0, vdp1_irq);
+ timer_set(device->machine, device->machine->primary_screen->time_until_pos(0), NULL, 0, vdp1_irq);
}
static MACHINE_RESET( stv )
@@ -2835,11 +2835,11 @@ static MACHINE_RESET( stv )
stvcd_reset(machine);
/* set the first scanline 0 timer to go off */
- scan_timer = devtag_get_device(machine, "scan_timer");
- t1_timer = devtag_get_device(machine, "t1_timer");
- vblank_out_timer = devtag_get_device(machine, "vbout_timer");
- timer_device_adjust_oneshot(vblank_out_timer,video_screen_get_time_until_pos(machine->primary_screen, 0, 0), 0);
- timer_device_adjust_oneshot(scan_timer, video_screen_get_time_until_pos(machine->primary_screen, 224, 352), 0);
+ scan_timer = machine->device<timer_device>("scan_timer");
+ t1_timer = machine->device<timer_device>("t1_timer");
+ vblank_out_timer = machine->device<timer_device>("vbout_timer");
+ vblank_out_timer->adjust(machine->primary_screen->time_until_pos(0));
+ scan_timer->adjust(machine->primary_screen->time_until_pos(224, 352));
timer_adjust_periodic(stv_rtc_timer, attotime_zero, 0, ATTOTIME_IN_SEC(1));
}