Previous 199869 Revisions Next

r19511 Thursday 13th December, 2012 at 08:42:10 UTC by Miodrag Milanović
b2m : Made proper halting of CPU in order to sync with floppy and select proper fdc (no whatsnew)
it's still doesn't boot since not all is in perfect sync.
[src/mess/drivers]b2m.c
[src/mess/includes]b2m.h
[src/mess/machine]b2m.c

trunk/src/mess/machine/b2m.c
r19510r19511
200200   DEVCB_DRIVER_MEMBER(b2m_state,b2m_8255_portc_w)
201201};
202202
203void b2m_state::b2m_fdc_drq(bool state)
204{
205   /* Clears HALT state of CPU when data is ready to read */
206   if(state==1) {
207      m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
208   }
209}
203210
204211
205212WRITE8_MEMBER(b2m_state::b2m_ext_8255_portc_w)
r19510r19511
215222
216223   floppy->mon_w(0);
217224   m_fdc->set_floppy(floppy);
225   m_fdc->setup_drq_cb(fd1793_t::line_cb(FUNC(b2m_state::b2m_fdc_drq), this));
218226   if (m_b2m_drive!=drive) {
219227      m_b2m_drive = drive;
220228   }
r19510r19511
222230   if (m_b2m_side!=side) {
223231      m_b2m_side = side;
224232   }
233   /*
234      When bit 5 is set CPU is in HALT state and stay there until
235      DRQ is triggered from floppy side
236   */
237   if (BIT(data,5) && m_first_start==0 && m_cnt <=0) {
238      m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
239   }
240   m_first_start = 0;
241   if (BIT(data,5)) m_cnt--;
242
225243}
226244
227245I8255A_INTERFACE( b2m_ppi8255_interface_2 )
r19510r19511
312330void b2m_state::machine_start()
313331{
314332   m_pic = machine().device("pic8259");
315   m_fdc = machine().device<wd1773_t>("wd1793");
333   m_fdc = machine().device<fd1793_t>("fd1793");
316334   m_speaker = machine().device(SPEAKER_TAG);
317335
318336   /* register for state saving */
r19510r19511
358376
359377   machine().device("maincpu")->execute().set_irq_acknowledge_callback(b2m_irq_callback);
360378   b2m_set_bank(machine(), 7);
379   m_first_start = 1;
380   m_cnt = 2;
361381}
trunk/src/mess/includes/b2m.h
r19510r19511
1818{
1919public:
2020   b2m_state(const machine_config &mconfig, device_type type, const char *tag)
21      : driver_device(mconfig, type, tag) { }
21      : driver_device(mconfig, type, tag),
22        m_first_start(1),
23        m_cnt(3),
24        m_maincpu(*this, "maincpu") { }
2225
2326   UINT8 m_b2m_8255_porta;
2427   UINT8 m_b2m_video_scroll;
r19510r19511
3437   UINT8 m_b2m_color[4];
3538   UINT8 m_b2m_localmachine;
3639   UINT8 m_vblank_state;
40   int  m_first_start;
41   int m_cnt;
42   required_device<cpu_device> m_maincpu;
3743
3844   /* devices */
39   wd1773_t *m_fdc;
45   fd1793_t *m_fdc;
4046   device_t *m_pic;
4147   device_t *m_speaker;
4248   DECLARE_READ8_MEMBER(b2m_keyboard_r);
r19510r19511
6167   DECLARE_WRITE8_MEMBER(b2m_romdisk_portb_w);
6268   DECLARE_WRITE8_MEMBER(b2m_romdisk_portc_w);
6369   DECLARE_WRITE_LINE_MEMBER(b2m_pic_set_int_line);
70   void b2m_fdc_drq(bool state);   
6471};
6572
6673/*----------- defined in machine/b2m.c -----------*/
trunk/src/mess/drivers/b2m.c
r19510r19511
3838   AM_RANGE(0x14, 0x15) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w )
3939   AM_RANGE(0x18, 0x18) AM_DEVREADWRITE("uart", i8251_device, data_r, data_w)
4040   AM_RANGE(0x19, 0x19) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
41   AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("wd1793", wd1773_t, read, write)
41   AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("fd1793", fd1793_t, read, write)
4242ADDRESS_MAP_END
4343
4444static ADDRESS_MAP_START( b2m_rom_io, AS_IO, 8, b2m_state )
r19510r19511
224224   /* uart */
225225   MCFG_I8251_ADD("uart", default_i8251_interface)
226226
227   MCFG_WD1773x_ADD("wd1793", XTAL_8MHz )
227   MCFG_FD1793x_ADD("fd1793", XTAL_8MHz / 8)
228228
229229   MCFG_FLOPPY_DRIVE_ADD("fd0", b2m_floppies, "525dd", 0, floppy_image_device::default_floppy_formats)
230230   MCFG_FLOPPY_DRIVE_ADD("fd1", b2m_floppies, "525dd", 0, floppy_image_device::default_floppy_formats)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team