Previous 15994 Revisions Next

r15136 Thursday 10th May, 2012 at 20:36:06 UTC by Curt Coder
[VIDBRAIN] Joystick WIP. (nw)
[src/mess/drivers]vidbrain.c
[src/mess/includes]vidbrain.h
[src/mess/video]uv201.c uv201.h

src/mess/includes/vidbrain.h
r15135r15136
5050   DECLARE_WRITE8_MEMBER( f3853_w );
5151   DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
5252   DECLARE_WRITE_LINE_MEMBER( ext_int_w );
53   DECLARE_WRITE_LINE_MEMBER( hblank_w );
5354
5455   void interrupt_check();
5556
r15135r15136
6566
6667   // sound state
6768   int m_sound_clk;
69
70   // timers
71   emu_timer *m_timer_ne555;   
6872};
6973
7074//----------- defined in video/vidbrain.c -----------
src/mess/video/uv201.c
r15135r15136
107107   else
108108   {
109109      memset(&m_out_ext_int_cb, 0, sizeof(m_out_ext_int_cb));
110      memset(&m_out_hblank_cb, 0, sizeof(m_out_hblank_cb));
110111      memset(&m_in_db_cb, 0, sizeof(m_in_db_cb));
111112   }
112113}
r15135r15136
120121{
121122   // resolve callbacks
122123   m_out_ext_int_func.resolve(m_out_ext_int_cb, *this);
124   m_out_hblank_func.resolve(m_out_hblank_cb, *this);
123125   m_in_db_func.resolve(m_in_db_cb, *this);
124126
125127   // allocate timers
126128   m_timer_y_odd = timer_alloc(TIMER_Y_ODD);
127129   m_timer_y_even = timer_alloc(TIMER_Y_EVEN);
130   m_timer_hblank_on = timer_alloc(TIMER_HBLANK_ON);
131   m_timer_hblank_off = timer_alloc(TIMER_HBLANK_OFF);
128132
129133   // find devices
130134   m_screen = machine().device<screen_device>(m_screen_tag);
src/mess/video/uv201.h
r15135r15136
4747   const char *m_screen_tag;
4848   
4949   devcb_write_line      m_out_ext_int_cb;
50   devcb_write_line      m_out_hblank_cb;
5051   devcb_read8            m_in_db_cb;
5152};
5253
r15135r15136
7980   enum
8081   {
8182      TIMER_Y_ODD,
82      TIMER_Y_EVEN
83      TIMER_Y_EVEN,
84      TIMER_HBLANK_ON,
85      TIMER_HBLANK_OFF
8386   };
8487
8588   void initialize_palette();
r15135r15136
8992   void do_partial_update();
9093
9194   devcb_resolved_write_line   m_out_ext_int_func;
95   devcb_resolved_write_line   m_out_hblank_func;
9296   devcb_resolved_read8      m_in_db_func;
9397
9498   screen_device *m_screen;
r15135r15136
105109   // timers
106110   emu_timer *m_timer_y_odd;
107111   emu_timer *m_timer_y_even;
112   emu_timer *m_timer_hblank_on;
113   emu_timer *m_timer_hblank_off;
108114};
109115
110116
src/mess/drivers/vidbrain.c
r15135r15136
130130
131131   // joystick enable
132132   m_joy_enable = BIT(data, 7);
133
134   if (m_joy_enable)
135   {
136      // TODO calculate NE555 firing time based on input port values
137      //timer_set(attotime::from_msec(t), TIMER_JOYSTICK);
138   }
139133}
140134
141135
r15135r15136
307301   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("MASTER CONTROL") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) PORT_CHANGED_MEMBER(DEVICE_SELF, vidbrain_state, trigger_reset, 0)
308302
309303   PORT_START("JOY1-X")
310   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_PLAYER(1)
304   PORT_BIT( 0xff, 70, IPT_AD_STICK_X ) PORT_MINMAX(0, 139) PORT_SENSITIVITY(25) PORT_PLAYER(1)
311305
312306   PORT_START("JOY1-Y")
313   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_PLAYER(1)
307   PORT_BIT( 0xff, 70, IPT_AD_STICK_Y ) PORT_MINMAX(0, 139) PORT_SENSITIVITY(25) PORT_PLAYER(1)
314308
315309   PORT_START("JOY2-X")
316   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_PLAYER(2)
310   PORT_BIT( 0xff, 70, IPT_AD_STICK_X ) PORT_MINMAX(0, 139) PORT_SENSITIVITY(25) PORT_PLAYER(2)
317311
318312   PORT_START("JOY2-Y")
319   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_PLAYER(2)
313   PORT_BIT( 0xff, 70, IPT_AD_STICK_Y ) PORT_MINMAX(0, 139) PORT_SENSITIVITY(25) PORT_PLAYER(2)
320314
321315   PORT_START("JOY3-X")
322   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_PLAYER(3)
316   PORT_BIT( 0xff, 70, IPT_AD_STICK_X ) PORT_MINMAX(0, 139) PORT_SENSITIVITY(25) PORT_PLAYER(3)
323317
324318   PORT_START("JOY3-Y")
325   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_PLAYER(3)
319   PORT_BIT( 0xff, 70, IPT_AD_STICK_Y ) PORT_MINMAX(0, 139) PORT_SENSITIVITY(25) PORT_PLAYER(3)
326320
327321   PORT_START("JOY4-X")
328   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_PLAYER(4)
322   PORT_BIT( 0xff, 70, IPT_AD_STICK_X ) PORT_MINMAX(0, 139) PORT_SENSITIVITY(25) PORT_PLAYER(4)
329323
330324   PORT_START("JOY4-Y")
331   PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_PLAYER(4)
325   PORT_BIT( 0xff, 70, IPT_AD_STICK_Y ) PORT_MINMAX(0, 139) PORT_SENSITIVITY(25) PORT_PLAYER(4)
332326
333327   PORT_START("JOY-R")
334328   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
r15135r15136
397391   }
398392}
399393
394WRITE_LINE_MEMBER( vidbrain_state::hblank_w )
395{
396   if (state && m_joy_enable && !m_timer_ne555->enabled())
397   {
398      UINT8 joydata = 0;
399
400      if (!BIT(m_keylatch, 0)) joydata = ioport("JOY1-X")->read();
401      if (!BIT(m_keylatch, 1)) joydata = ioport("JOY1-Y")->read();
402      if (!BIT(m_keylatch, 2)) joydata = ioport("JOY2-X")->read();
403      if (!BIT(m_keylatch, 3)) joydata = ioport("JOY2-Y")->read();
404      if (!BIT(m_keylatch, 4)) joydata = ioport("JOY3-X")->read();
405      if (!BIT(m_keylatch, 5)) joydata = ioport("JOY3-Y")->read();
406      if (!BIT(m_keylatch, 6)) joydata = ioport("JOY4-X")->read();
407      if (!BIT(m_keylatch, 7)) joydata = ioport("JOY4-Y")->read();
408
409      // NE555 in monostable mode
410      // R = 3K9 + (0..140K)
411      // C = 0.003uF
412      // t = 1.1 * R * C
413      double t = 1.1 * (RES_K(3.9) + RES_K(joydata)) * 3;
414     
415      timer_set(attotime::from_nsec(t), TIMER_JOYSTICK);
416   }
417}
418
400419static UINT8 memory_read_byte(address_space *space, offs_t address) { return space->read_byte(address); }
401420
402421static UV201_INTERFACE( uv_intf )
403422{
404423   SCREEN_TAG,
405424   DEVCB_DRIVER_LINE_MEMBER(vidbrain_state, ext_int_w),
425   DEVCB_DRIVER_LINE_MEMBER(vidbrain_state, hblank_w),
406426   DEVCB_MEMORY_HANDLER(F3850_TAG, PROGRAM, memory_read_byte)
407427};
408428
r15135r15136
448468void vidbrain_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
449469{
450470   m_uv->ext_int_w(0);
471
472   m_ext_int_latch = 1;
473   interrupt_check();
451474}
452475
453476
r15135r15136
459482{
460483   // register IRQ callback
461484   device_set_irq_callback(m_maincpu, vidbrain_int_ack);
485   
486   // allocate timers
487   m_timer_ne555 = timer_alloc(TIMER_JOYSTICK);
462488
463489   // register for state saving
464490   save_item(NAME(m_vector));

Previous 15994 Revisions Next


© 1998-2018 The MESS Team