Previous 15994 Revisions Next

r10862 Friday 18th March, 2011 at 15:56:31 UTC by Miodrag Milanović
[GENPC] Moved almost all to member functions
[src/mess/includes]genpc.h
[src/mess/machine]genpc.c

src/mess/machine/genpc.c
r10861r10862
5858}
5959
6060
61static WRITE_LINE_DEVICE_HANDLER( pc_dma_hrq_changed )
61WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dma_hrq_changed )
6262{
63   ibm5160_mb_device   *board  = downcast<ibm5160_mb_device *>(device->owner());
64   cpu_set_input_line(board->maincpu, INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
63   cpu_set_input_line(maincpu, INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
6564
6665   /* Assert HLDA */
67   i8237_hlda_w( device, state );
66   i8237_hlda_w( dma8237, state );
6867}
6968
7069
71static READ8_DEVICE_HANDLER( pc_dma_read_byte )
70READ8_MEMBER( ibm5160_mb_device::pc_dma_read_byte )
7271{   
73   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
74   address_space *space = board->maincpu->space(AS_PROGRAM);
75   offs_t page_offset = (((offs_t) board->dma_offset[board->dma_channel]) << 16) & 0x0F0000;
76   return space->read_byte( page_offset + offset);
72   address_space *spaceio = maincpu->space(AS_PROGRAM);
73   offs_t page_offset = (((offs_t) dma_offset[dma_channel]) << 16) & 0x0F0000;
74   return spaceio->read_byte( page_offset + offset);
7775}
7876
7977
80static WRITE8_DEVICE_HANDLER( pc_dma_write_byte )
78WRITE8_MEMBER( ibm5160_mb_device::pc_dma_write_byte )
8179{
82   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
83   address_space *space = board->maincpu->space(AS_PROGRAM);
84   offs_t page_offset = (((offs_t) board->dma_offset[board->dma_channel]) << 16) & 0x0F0000;
80   address_space *spaceio = maincpu->space(AS_PROGRAM);
81   offs_t page_offset = (((offs_t) dma_offset[dma_channel]) << 16) & 0x0F0000;
8582
86   space->write_byte( page_offset + offset, data);
83   spaceio->write_byte( page_offset + offset, data);
8784}
8885
8986
90static READ8_DEVICE_HANDLER( pc_dma8237_1_dack_r )
87READ8_MEMBER( ibm5160_mb_device::pc_dma8237_1_dack_r )
9188{
92   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
93   return board->isabus->dack_r(1);
89   return isabus->dack_r(1);
9490}
9591
96static READ8_DEVICE_HANDLER( pc_dma8237_2_dack_r )
92READ8_MEMBER( ibm5160_mb_device::pc_dma8237_2_dack_r )
9793{
98   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
99   return board->isabus->dack_r(2);
94   return isabus->dack_r(2);
10095}
10196
10297
103static READ8_DEVICE_HANDLER( pc_dma8237_3_dack_r )
98READ8_MEMBER( ibm5160_mb_device::pc_dma8237_3_dack_r )
10499{
105   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
106   return board->isabus->dack_r(3);
100   return isabus->dack_r(3);
107101}
108102
109103
110static WRITE8_DEVICE_HANDLER( pc_dma8237_1_dack_w )
104WRITE8_MEMBER( ibm5160_mb_device::pc_dma8237_1_dack_w )
111105{
112   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
113   board->isabus->dack_w(1,data);
106   isabus->dack_w(1,data);
114107}
115108
116static WRITE8_DEVICE_HANDLER( pc_dma8237_2_dack_w )
109WRITE8_MEMBER( ibm5160_mb_device::pc_dma8237_2_dack_w )
117110{
118   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
119   board->isabus->dack_w(2,data);
111   isabus->dack_w(2,data);
120112}
121113
122114
123static WRITE8_DEVICE_HANDLER( pc_dma8237_3_dack_w )
115WRITE8_MEMBER( ibm5160_mb_device::pc_dma8237_3_dack_w )
124116{
125   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
126   board->isabus->dack_w(3,data);
117   isabus->dack_w(3,data);
127118}
128119
129120
130static WRITE8_DEVICE_HANDLER( pc_dma8237_0_dack_w )
121WRITE8_MEMBER( ibm5160_mb_device::pc_dma8237_0_dack_w )
131122{
132   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
133   board->u73_q2 = 0;
134   i8237_dreq0_w( board->dma8237, board->u73_q2 );
123   u73_q2 = 0;
124   i8237_dreq0_w( dma8237, u73_q2 );
135125}
136126
137127
138static WRITE_LINE_DEVICE_HANDLER( pc_dma8237_out_eop )
128WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dma8237_out_eop )
139129{
140   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());   
141   return board->isabus->eop_w(state == ASSERT_LINE ? 0 : 1 );
130   return isabus->eop_w(state == ASSERT_LINE ? 0 : 1 );
142131}
143132
144static void set_dma_channel(device_t *device, int channel, int state)
145{
146   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
133WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack0_w ) { if (!state) dma_channel = 0; }
134WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack1_w ) { if (!state) dma_channel = 1; }
135WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack2_w ) { if (!state) dma_channel = 2; }
136WRITE_LINE_MEMBER( ibm5160_mb_device::pc_dack3_w ) { if (!state) dma_channel = 3; }
147137
148   if (!state) board->dma_channel = channel;
149}
150
151static WRITE_LINE_DEVICE_HANDLER( pc_dack0_w ) { set_dma_channel(device, 0, state); }
152static WRITE_LINE_DEVICE_HANDLER( pc_dack1_w ) { set_dma_channel(device, 1, state); }
153static WRITE_LINE_DEVICE_HANDLER( pc_dack2_w ) { set_dma_channel(device, 2, state); }
154static WRITE_LINE_DEVICE_HANDLER( pc_dack3_w ) { set_dma_channel(device, 3, state); }
155
156138I8237_INTERFACE( pc_dma8237_config )
157139{
158   DEVCB_LINE(pc_dma_hrq_changed),
159   DEVCB_LINE(pc_dma8237_out_eop),
160   DEVCB_HANDLER(pc_dma_read_byte),
161   DEVCB_HANDLER(pc_dma_write_byte),
162   { DEVCB_NULL,                     DEVCB_HANDLER(pc_dma8237_1_dack_r), DEVCB_HANDLER(pc_dma8237_2_dack_r), DEVCB_HANDLER(pc_dma8237_3_dack_r) },
163   { DEVCB_HANDLER(pc_dma8237_0_dack_w), DEVCB_HANDLER(pc_dma8237_1_dack_w), DEVCB_HANDLER(pc_dma8237_2_dack_w), DEVCB_HANDLER(pc_dma8237_3_dack_w) },
164   { DEVCB_LINE(pc_dack0_w), DEVCB_LINE(pc_dack1_w), DEVCB_LINE(pc_dack2_w), DEVCB_LINE(pc_dack3_w) }
140   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma_hrq_changed),
141   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma8237_out_eop),
142   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma_read_byte),
143   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma_write_byte),
144   
145   { DEVCB_NULL,                     
146     DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma8237_1_dack_r),
147     DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma8237_2_dack_r),
148     DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma8237_3_dack_r) },
149   
150   
151   { DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma8237_0_dack_w),
152     DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma8237_1_dack_w),
153     DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma8237_2_dack_w),
154     DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dma8237_3_dack_w) },
155   
156   // DACK's
157   { DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dack0_w),
158     DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dack1_w),
159     DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dack2_w),
160     DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_dack3_w) }
165161};
166162
167163
r10861r10862
170166 * pic8259 configuration
171167 *
172168 *************************************************************/
173static WRITE_LINE_DEVICE_HANDLER(pc_cpu_line)
169WRITE_LINE_MEMBER(ibm5160_mb_device::pc_cpu_line)
174170{
175   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
176   board->maincpu->set_input_line(INPUT_LINE_IRQ0, state);
171   maincpu->set_input_line(INPUT_LINE_IRQ0, state);
177172}
173
178174const struct pic8259_interface pc_pic8259_config =
179175{
180   DEVCB_LINE(pc_cpu_line)
176   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_cpu_line)
181177};
182178
183179
184/*************************************************************************
185 *
186 *      PC Speaker related
187 *
188 *************************************************************************/
189static WRITE_LINE_DEVICE_HANDLER(pc_speaker_set_spkrdata)
180WRITE_LINE_MEMBER(ibm5160_mb_device::pc_speaker_set_spkrdata)
190181{
191   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
192   board->pc_spkrdata = state ? 1 : 0;
193   speaker_level_w( board->speaker, board->pc_spkrdata & board->pc_input );
182   pc_spkrdata = state ? 1 : 0;
183   speaker_level_w( speaker, pc_spkrdata & pc_input );
194184}
195185
196186
r10861r10862
200190 *
201191 *************************************************************/
202192
203static WRITE_LINE_DEVICE_HANDLER( pc_pit8253_out1_changed )
193WRITE_LINE_MEMBER( ibm5160_mb_device::pc_pit8253_out1_changed )
204194{
205   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
206195   /* Trigger DMA channel #0 */
207   if ( board->out1 == 0 && state == 1 && board->u73_q2 == 0 )
196   if ( out1 == 0 && state == 1 && u73_q2 == 0 )
208197   {
209      board->u73_q2 = 1;
210      i8237_dreq0_w( board->dma8237, board->u73_q2 );
198      u73_q2 = 1;
199      i8237_dreq0_w( dma8237, u73_q2 );
211200   }
212   board->out1 = state;
201   out1 = state;
213202}
214203
215204
216static WRITE_LINE_DEVICE_HANDLER( pc_pit8253_out2_changed )
205WRITE_LINE_MEMBER( ibm5160_mb_device::pc_pit8253_out2_changed )
217206{
218   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
219   board->pc_input = state ? 1 : 0;
220   speaker_level_w( board->speaker, board->pc_spkrdata & board->pc_input );   
207   pc_input = state ? 1 : 0;
208   speaker_level_w( speaker, pc_spkrdata & pc_input );   
221209}
222210
223211
r10861r10862
231219      }, {
232220         XTAL_14_31818MHz/12,            /* dram refresh */
233221         DEVCB_NULL,
234         DEVCB_LINE(pc_pit8253_out1_changed)
222         DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_pit8253_out1_changed)
235223      }, {
236224         XTAL_14_31818MHz/12,            /* pio port c pin 4, and speaker polling enough */
237225         DEVCB_NULL,
238         DEVCB_LINE(pc_pit8253_out2_changed)
226         DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_pit8253_out2_changed)
239227      }
240228   }
241229};
r10861r10862
334322   devcb_call_write_line(&m_kb_set_data_signal_func,ppi_data_signal);
335323}
336324
337static READ8_DEVICE_HANDLER (pc_ppi_porta_r)
325READ8_MEMBER (ibm5160_mb_device::pc_ppi_porta_r)
338326{
339327   int data = 0xFF;
340   running_machine *machine = device->machine;
341   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
342
343328   /* KB port A */
344   if (board->ppi_keyboard_clear)
329   if (ppi_keyboard_clear)
345330   {
346331      /*   0  0 - no floppy drives
347332         *   1  Not used
r10861r10862
352337         *      01 - color 40x25
353338         * 6-7  The number of floppy disk drives
354339         */
355      data = input_port_read(board, "DSW0");
340      data = input_port_read(this, "DSW0");
356341   }
357342   else
358343   {
359      data = board->ppi_shift_register;
344      data = ppi_shift_register;
360345   }
361346    PIO_LOG(1,"PIO_A_r",("$%02x\n", data));
362347    return data;
363348}
364349
365350
366static READ8_DEVICE_HANDLER ( pc_ppi_portc_r )
351READ8_MEMBER ( ibm5160_mb_device::pc_ppi_portc_r )
367352{
368   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
369   int timer2_output = pit8253_get_output( board->pit8253, 2 );
353   int timer2_output = pit8253_get_output( pit8253, 2 );
370354   int data=0xff;
371   running_machine *machine = device->machine;
372355
373356   data&=~0x80; // no parity error
374357   data&=~0x40; // no error on expansion board
375358   /* KB port C: equipment flags */
376   if (board->ppi_portc_switch_high)
359   if (ppi_portc_switch_high)
377360   {
378361      /* read hi nibble of S2 */
379      data = (data & 0xf0) | ((input_port_read(board, "DSW0") >> 4) & 0x0f);
362      data = (data & 0xf0) | ((input_port_read(this, "DSW0") >> 4) & 0x0f);
380363      PIO_LOG(1,"PIO_C_r (hi)",("$%02x\n", data));
381364   }
382365   else
383366   {
384367      /* read lo nibble of S2 */
385      data = (data & 0xf0) | (input_port_read(board, "DSW0") & 0x0f);
368      data = (data & 0xf0) | (input_port_read(this, "DSW0") & 0x0f);
386369      PIO_LOG(1,"PIO_C_r (lo)",("$%02x\n", data));
387370   }
388371
389   if ( board->ppi_portb & 0x01 )
372   if ( ppi_portb & 0x01 )
390373   {
391374      data = ( data & ~0x10 ) | ( timer2_output ? 0x10 : 0x00 );
392375   }
r10861r10862
396379}
397380
398381
399static WRITE8_DEVICE_HANDLER( pc_ppi_portb_w )
382WRITE8_MEMBER( ibm5160_mb_device::pc_ppi_portb_w )
400383{
401   ibm5160_mb_device *board  = downcast<ibm5160_mb_device *>(device->owner());
402
403384   /* PPI controller port B*/
404   board->ppi_portb = data;
405   board->ppi_portc_switch_high = data & 0x08;
406   board->ppi_keyboard_clear = data & 0x80;
407   board->ppi_keyb_clock = data & 0x40;
408   pit8253_gate2_w(board->pit8253, BIT(data, 0));
409   pc_speaker_set_spkrdata( device, data & 0x02 );
385   ppi_portb = data;
386   ppi_portc_switch_high = data & 0x08;
387   ppi_keyboard_clear = data & 0x80;
388   ppi_keyb_clock = data & 0x40;
389   pit8253_gate2_w(pit8253, BIT(data, 0));
390   pc_speaker_set_spkrdata( data & 0x02 );
410391
411   board->ppi_clock_signal = ( board->ppi_keyb_clock ) ? 1 : 0;
412   devcb_call_write_line(&board->m_kb_set_clock_signal_func,board->ppi_clock_signal);
392   ppi_clock_signal = ( ppi_keyb_clock ) ? 1 : 0;
393   devcb_call_write_line(&m_kb_set_clock_signal_func,ppi_clock_signal);
413394
414395   /* If PB7 is set clear the shift register and reset the IRQ line */
415   if ( board->ppi_keyboard_clear )
396   if ( ppi_keyboard_clear )
416397   {
417      pic8259_ir1_w(board->pic8259, 0);
418      board->ppi_shift_register = 0;
419      board->ppi_shift_enable = 1;
398      pic8259_ir1_w(pic8259, 0);
399      ppi_shift_register = 0;
400      ppi_shift_enable = 1;
420401   }
421402}
422403
423404
424405I8255A_INTERFACE( pc_ppi8255_interface )
425406{
426   DEVCB_HANDLER(pc_ppi_porta_r),
407   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_ppi_porta_r),
427408   DEVCB_NULL,
428   DEVCB_HANDLER(pc_ppi_portc_r),
409   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_ppi_portc_r),
429410   DEVCB_NULL,
430   DEVCB_HANDLER(pc_ppi_portb_w),
411   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, pc_ppi_portb_w),
431412   DEVCB_NULL
432413};
433414
src/mess/includes/genpc.h
r10861r10862
109109     
110110      // interface to the keyboard
111111      DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w );
112      DECLARE_WRITE_LINE_MEMBER( keyboard_data_w );     
112      DECLARE_WRITE_LINE_MEMBER( keyboard_data_w );
113
114      DECLARE_READ8_MEMBER ( pc_ppi_porta_r );
115      DECLARE_READ8_MEMBER ( pc_ppi_portc_r );
116      DECLARE_WRITE8_MEMBER( pc_ppi_portb_w );
117
118      DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out1_changed );
119      DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out2_changed );
120     
121      DECLARE_WRITE_LINE_MEMBER( pc_dma_hrq_changed );
122      DECLARE_WRITE_LINE_MEMBER( pc_dma8237_out_eop );
123      DECLARE_READ8_MEMBER( pc_dma_read_byte );
124      DECLARE_WRITE8_MEMBER( pc_dma_write_byte );
125      DECLARE_READ8_MEMBER( pc_dma8237_1_dack_r );
126      DECLARE_READ8_MEMBER( pc_dma8237_2_dack_r );
127      DECLARE_READ8_MEMBER( pc_dma8237_3_dack_r );
128      DECLARE_WRITE8_MEMBER( pc_dma8237_1_dack_w );
129      DECLARE_WRITE8_MEMBER( pc_dma8237_2_dack_w );
130      DECLARE_WRITE8_MEMBER( pc_dma8237_3_dack_w );
131      DECLARE_WRITE8_MEMBER( pc_dma8237_0_dack_w );
132      DECLARE_WRITE_LINE_MEMBER( pc_dack0_w );
133      DECLARE_WRITE_LINE_MEMBER( pc_dack1_w );
134      DECLARE_WRITE_LINE_MEMBER( pc_dack2_w );
135      DECLARE_WRITE_LINE_MEMBER( pc_dack3_w );
136
137      DECLARE_WRITE_LINE_MEMBER( pc_cpu_line );
138      DECLARE_WRITE_LINE_MEMBER( pc_speaker_set_spkrdata );
139     
113140};
114141 
115142 

Previous 15994 Revisions Next


© 1998-2018 The MESS Team