Previous 199869 Revisions Next

r29311 Saturday 5th April, 2014 at 12:56:23 UTC by Nathan Woods
Merge branch 'master' of ssh://mess.org/mame into new_menus
[/branches/new_menus/src/emu/video]crt9021.h crt9212.c crt9212.h
[/branches/new_menus/src/mess/drivers]tandy2k.c
[/branches/new_menus/src/mess/includes]tandy2k.h

branches/new_menus/src/emu/video/crt9212.c
r29310r29311
5151   m_oe(0),
5252   m_rclk(0),
5353   m_wclk(0),
54   m_clrcnt_edge(false),
55   m_data_latch(0),
56   m_ren_int(0),
57   m_wen_int(0),
5458   m_buffer(0),
5559   m_rac(0),
5660   m_wac(0)
r29310r29311
7983   save_item(NAME(m_oe));
8084   save_item(NAME(m_rclk));
8185   save_item(NAME(m_wclk));
86   save_item(NAME(m_clrcnt_edge));
87   save_item(NAME(m_data_latch));
88   save_item(NAME(m_ren_int));
89   save_item(NAME(m_wen_int));
8290   save_item(NAME(m_ram[0]));
8391   save_item(NAME(m_ram[1]));
8492   save_item(NAME(m_buffer));
r29310r29311
8896
8997
9098//-------------------------------------------------
99//  clrcnt_w - clear counter
100//-------------------------------------------------
101
102WRITE_LINE_MEMBER( crt9212_t::clrcnt_w )
103{
104   if (m_clrcnt && !state)
105   {
106      m_clrcnt_edge = true;
107   }
108
109   m_clrcnt = state;
110}
111
112
113//-------------------------------------------------
91114//  rclk_w - read clock
92115//-------------------------------------------------
93116
94117WRITE_LINE_MEMBER( crt9212_t::rclk_w )
95118{
96   if (m_rclk && !state)
119   if (!m_rclk && state)
97120   {
98      if (!m_clrcnt)
121      if (m_clrcnt_edge)
99122      {
123         // reset read address counter
124         m_rac = 0;
125
126         // reset read overflow
127         m_write_rof(0);
128
100129         if (!m_tog)
101130         {
102            // switch buffer
131            // switch buffers
103132            m_buffer = !m_buffer;
104133
105            // clear write address counter
134            // reset write address counter
106135            m_wac = 0;
136
137            // reset write overflow
107138            m_write_wof(0);
108139         }
109         else
110         {
111            // clear read address counter
112            m_rac = 0;
113            m_write_rof(0);
114         }
140
141         m_clrcnt_edge = false;
115142      }
116      else
143
144      if (m_ren_int && (m_rac < CRT9212_RAM_SIZE))
117145      {
118         if (m_ren && (m_rac < CRT9212_RAM_SIZE))
119         {
120            //
121            m_write_dout(m_ram[m_rac][!m_buffer]);
146         // output data
147         m_write_dout(m_ram[m_rac][!m_buffer]);
122148
123            // increment read address counter
124            m_rac++;
149         // increment read address counter
150         m_rac++;
125151
126            if (m_rac == CRT9212_RAM_SIZE)
127            {
128               // set read overflow
129               m_write_rof(1);
130            }
152         if (m_rac == CRT9212_RAM_SIZE - 1)
153         {
154            // set read overflow
155            m_write_rof(1);
131156         }
132157      }
158
159      m_ren_int = m_ren;
133160   }
134161
135162   m_rclk = state;
r29310r29311
144171{
145172   if (!m_wclk && state)
146173   {
147      if (m_wen1 && m_wen2 && (m_wac < CRT9212_RAM_SIZE))
174      if (m_wen_int && (m_wac < CRT9212_RAM_SIZE))
148175      {
149         //
150         m_ram[m_rac][m_buffer] = m_data;
176         // input data
177         m_ram[m_rac][m_buffer] = m_data_latch;
151178
152         // increment read address counter
179         // increment write address counter
153180         m_wac++;
154181
155         if (m_wac == CRT9212_RAM_SIZE)
182         if (m_wac == CRT9212_RAM_SIZE - 1)
156183         {
157184            // set write overflow
158185            m_write_wof(1);
159186         }
160187      }
188
189      if (m_wen1 && m_wen2)
190      {
191         m_data_latch = m_data;
192      }
193
194      m_wen_int = m_wen1 && m_wen2;
161195   }
162196
163197   m_wclk = state;
branches/new_menus/src/emu/video/crt9212.h
r29310r29311
4747//  INTERFACE CONFIGURATION MACROS
4848//**************************************************************************
4949
50#define MCFG_CRT9212_WEN2_VCC() \
51   crt9212_t::static_set_wen2(*device, 1);
52
5053#define MCFG_CRT9212_DOUT_CALLBACK(_write) \
5154   devcb = &crt9212_t::set_dout_wr_callback(*device, DEVCB2_##_write);
5255
r29310r29311
7073   // construction/destruction
7174   crt9212_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
7275   
76   static void static_set_wen2(device_t &device, int state) { downcast<crt9212_t &>(device).m_wen2 = state; }
77
7378   template<class _Object> static devcb2_base &set_dout_wr_callback(device_t &device, _Object object) { return downcast<crt9212_t &>(device).m_write_dout.set_callback(object); }
7479   template<class _Object> static devcb2_base &set_rof_wr_callback(device_t &device, _Object object) { return downcast<crt9212_t &>(device).m_write_rof.set_callback(object); }
7580   template<class _Object> static devcb2_base &set_wof_wr_callback(device_t &device, _Object object) { return downcast<crt9212_t &>(device).m_write_wof.set_callback(object); }
7681
7782   DECLARE_WRITE8_MEMBER( write ) { m_data = data; }
78   DECLARE_WRITE_LINE_MEMBER( clrcnt_w ) { m_clrcnt = state; }
83   DECLARE_WRITE_LINE_MEMBER( clrcnt_w );
7984   DECLARE_WRITE_LINE_MEMBER( tog_w ) { m_tog = state; }
8085   DECLARE_WRITE_LINE_MEMBER( ren_w ) { m_ren = state; }
8186   DECLARE_WRITE_LINE_MEMBER( wen1_w ) { m_wen1 = state; }
r29310r29311
105110   int m_wclk;
106111
107112   // internal state
113   bool m_clrcnt_edge;
114   UINT8 m_data_latch;
115   int m_ren_int;
116   int m_wen_int;
108117   UINT8 m_ram[CRT9212_RAM_SIZE][2];
109118   int m_buffer;
110119   int m_rac;
branches/new_menus/src/emu/video/crt9021.h
r29310r29311
6464   
6565   static void static_set_display_callback(device_t &device, crt9021_draw_character_delegate callback) { downcast<crt9021_t &>(device).m_display_cb = callback; }
6666
67   DECLARE_WRITE8_MEMBER( write ) { m_data = data; }
67   void write(UINT8 data) { m_data = data; }
68   DECLARE_WRITE8_MEMBER( write ) { write(data); }
6869   DECLARE_WRITE_LINE_MEMBER( ms0_w ) { m_ms0 = state; }
6970   DECLARE_WRITE_LINE_MEMBER( ms1_w ) { m_ms1 = state; }
7071   DECLARE_WRITE_LINE_MEMBER( revid_w ) { m_revid = state; }
branches/new_menus/src/mess/drivers/tandy2k.c
r29310r29311
1212
1313    TODO:
1414
15    - CRT9007
16    - CRT9212 Double Row Buffer
17    - CRT9021B Attribute Generator
15   - video
1816    - keyboard ROM
1917    - hires graphics board
2018    - floppy 720K DSQD
r29310r29311
2624*/
2725
2826#include "includes/tandy2k.h"
29#include "bus/rs232/rs232.h"
3027
31enum
32{
33   LPINEN = 0,
34   KBDINEN,
35   PORTINEN
36};
37
3828// Read/Write Handlers
3929
4030void tandy2k_state::dma_request(int line, int state)
r29310r29311
4434void tandy2k_state::speaker_update()
4535{
4636   int level = !(m_spkrdata & m_outspkr);
37
4738   m_speaker->level_w(level);
4839}
4940
41READ8_MEMBER( tandy2k_state::char_ram_r )
42{
43   return m_char_ram[offset];
44}
45
46WRITE8_MEMBER( tandy2k_state::char_ram_w )
47{
48   m_char_ram[offset] = data;
49}
50
5051READ8_MEMBER( tandy2k_state::videoram_r )
5152{
5253   address_space &program = m_maincpu->space(AS_PROGRAM);
r29310r29311
8081
8182   */
8283
83   return 0x80;
84   UINT8 data = 0x80;
85
86   data |= m_rs232->ri_r();
87   data |= m_rs232->dcd_r() << 1;
88
89   return data;
8490}
8591
8692WRITE8_MEMBER( tandy2k_state::enable_w )
r29310r29311
240246
241247      m_vpac->set_character_width(clkcnt ? 8 : 10);
242248      m_vpac->set_unscaled_clock(vidcclk);
243     
249
244250      m_vac->set_unscaled_clock(busdotclk);
245251
246252      m_timer_vidldsh->adjust(attotime::from_hz(vidcclk), 0, attotime::from_hz(vidcclk));
r29310r29311
261267   ADDRESS_MAP_UNMAP_HIGH
262268//  AM_RANGE(0x00000, 0xdffff) AM_RAM
263269   AM_RANGE(0xe0000, 0xf7fff) AM_RAM AM_SHARE("hires_ram")
264   AM_RANGE(0xf8000, 0xfbfff) AM_RAM AM_SHARE("char_ram")
270   AM_RANGE(0xf8000, 0xfbfff) AM_READWRITE8(char_ram_r, char_ram_w, 0x00ff)
265271   AM_RANGE(0xfc000, 0xfdfff) AM_MIRROR(0x2000) AM_ROM AM_REGION(I80186_TAG, 0)
266272ADDRESS_MAP_END
267273
r29310r29311
326332   m_drb1->wen1_w(state);
327333}
328334
335WRITE_LINE_MEMBER( tandy2k_state::vpac_cblank_w )
336{
337   m_cblank = state;
338}
339
340WRITE_LINE_MEMBER( tandy2k_state::vpac_slg_w )
341{
342   m_slg = state;
343
344   m_vac->slg_w(state);
345}
346
347WRITE_LINE_MEMBER( tandy2k_state::vpac_sld_w )
348{
349   m_sld = state;
350   
351   m_vac->sld_w(state);
352}
353
354WRITE8_MEMBER( tandy2k_state::vidla_w )
355{
356   m_vidla = data;
357}
358
329359WRITE8_MEMBER( tandy2k_state::drb_attr_w )
330360{
331361   /*
332362
333363       bit     description
334364
335       0       BLC -> DBLC
336       1       BKC -> DBKC
365       0       BLC -> DBLC (delayed 2 CCLKs)
366       1       BKC -> DBKC (delayed 2 CCLKs)
337367       2       CHABL
338368       3       MS0
339369       4       MS1
r29310r29311
343373
344374   */
345375
376   m_blc = BIT(data, 0);
377   m_bkc = BIT(data, 1);
346378   m_vac->chabl_w(BIT(data, 2));
347379   m_vac->ms0_w(BIT(data, 3));
348380   m_vac->ms1_w(BIT(data, 4));
r29310r29311
372404   m_vac->ld_sh_w(0);
373405
374406   // 1 busdotclk later
407   m_vac->blc_w(BIT(m_dblc, 0));
408   m_dblc >>= 1;
409   m_dblc |= m_blc << 2;
410
411   m_vac->bkc_w(BIT(m_dbkc, 0));
412   m_dbkc >>= 1;
413   m_dbkc |= m_bkc << 2;
414
415   m_vac->retbl_w(BIT(m_dblank, 0));
416   m_dblank >>= 1;
417   m_dblank |= m_cblank << 2;
418
419   if (!m_slg)
420   {
421      m_cgra >>= 1;
422      m_cgra |= m_sld << 3;
423   }
424
425   UINT8 vidd = m_char_ram[(m_vidla << 4) | m_cgra];
426   m_vac->write(vidd);
427
375428   m_drb0->rclk_w(1);
376429   m_drb0->wclk_w(1);
377430   m_drb1->rclk_w(1);
r29310r29311
610663
611664   program.install_ram(0x00000, ram_size - 1, ram);
612665
666   m_char_ram.allocate(0x1000);
667
613668   // register for state saving
614669   save_item(NAME(m_dma_mux));
615670   save_item(NAME(m_kbdclk));
r29310r29311
655710   MCFG_CRT9007_CURS_CALLBACK(DEVWRITELINE(CRT9021B_TAG, crt9021_t, cursor_w))
656711   MCFG_CRT9007_DRB_CALLBACK(WRITELINE(tandy2k_state, vpac_drb_w))
657712   MCFG_CRT9007_WBEN_CALLBACK(WRITELINE(tandy2k_state, vpac_wben_w))
658   MCFG_CRT9007_CBLANK_CALLBACK(DEVWRITELINE(CRT9021B_TAG, crt9021_t, retbl_w))
659   MCFG_CRT9007_SLG_CALLBACK(DEVWRITELINE(CRT9021B_TAG, crt9021_t, slg_w))
660   MCFG_CRT9007_SLD_CALLBACK(DEVWRITELINE(CRT9021B_TAG, crt9021_t, sld_w))
713   MCFG_CRT9007_CBLANK_CALLBACK(WRITELINE(tandy2k_state, vpac_cblank_w))
714   MCFG_CRT9007_SLG_CALLBACK(WRITELINE(tandy2k_state, vpac_slg_w))
715   MCFG_CRT9007_SLD_CALLBACK(WRITELINE(tandy2k_state, vpac_sld_w))
661716   MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
662717
663718   MCFG_DEVICE_ADD(CRT9212_0_TAG, CRT9212, 0)
664   MCFG_CRT9212_DOUT_CALLBACK(DEVWRITE8(CRT9021B_TAG, crt9021_t, write))
719   MCFG_CRT9212_WEN2_VCC()
720   MCFG_CRT9212_DOUT_CALLBACK(WRITE8(tandy2k_state, vidla_w))
665721
666722   MCFG_DEVICE_ADD(CRT9212_1_TAG, CRT9212, 0)
723   MCFG_CRT9212_WEN2_VCC()
667724   MCFG_CRT9212_DOUT_CALLBACK(WRITE8(tandy2k_state, drb_attr_w))
668725
669726   MCFG_DEVICE_ADD(CRT9021B_TAG, CRT9021, XTAL_16MHz*28/16)
branches/new_menus/src/mess/includes/tandy2k.h
r29310r29311
33#ifndef __TANDY2K__
44#define __TANDY2K__
55
6
76#include "emu.h"
7#include "bus/centronics/ctronics.h"
8#include "bus/rs232/rs232.h"
89#include "cpu/i86/i186.h"
910#include "cpu/mcs48/mcs48.h"
1011#include "imagedev/harddriv.h"
11#include "bus/centronics/ctronics.h"
1212#include "machine/i8255.h"
1313#include "machine/i8251.h"
1414#include "machine/pit8253.h"
r29310r29311
6161      m_ram(*this, RAM_TAG),
6262      m_floppy0(*this, I8272A_TAG ":0:525qd"),
6363      m_floppy1(*this, I8272A_TAG ":1:525qd"),
64      m_rs232(*this, RS232_TAG),
6465      m_kb(*this, TANDY2K_KEYBOARD_TAG),
6566      m_hires_ram(*this, "hires_ram"),
6667      m_char_ram(*this, "char_ram"),
67      m_kbdclk(0)
68      m_dma_mux(0),
69      m_kbdclk(0),
70      m_kbddat(0),
71      m_kbdin(0),
72      m_extclk(0),
73      m_rxrdy(0),
74      m_txrdy(0),
75      m_pb_sel(0),
76      m_vram_base(0),
77      m_vidouts(0),
78      m_clkspd(0),
79      m_clkcnt(0),
80      m_blc(0),
81      m_bkc(0),
82      m_cblank(0),
83      m_dblc(0),
84      m_dbkc(0),
85      m_dblank(0),
86      m_slg(0),
87      m_sld(0),
88      m_cgra(0),
89      m_vidla(0),
90      m_outspkr(0),
91      m_spkrdata(0),
92      m_centronics_ack(0),
93      m_centronics_fault(0),
94      m_centronics_select(0),
95      m_centronics_perror(0),
96      m_centronics_busy(0)
6897   {
6998   }
7099
r29310r29311
86115   required_device<ram_device> m_ram;
87116   required_device<floppy_image_device> m_floppy0;
88117   required_device<floppy_image_device> m_floppy1;
118   required_device<rs232_port_device> m_rs232;
89119   required_device<tandy2k_keyboard_device> m_kb;
90120   required_shared_ptr<UINT16> m_hires_ram;
91   required_shared_ptr<UINT16> m_char_ram;
121   optional_shared_ptr<UINT8> m_char_ram;
92122
93123   virtual void machine_start();
94124
95125   void speaker_update();
96126   void dma_request(int line, int state);
97127
128   DECLARE_READ8_MEMBER( char_ram_r );
129   DECLARE_WRITE8_MEMBER( char_ram_w );
98130   DECLARE_READ8_MEMBER( videoram_r );
99131   DECLARE_READ8_MEMBER( enable_r );
100132   DECLARE_WRITE8_MEMBER( enable_w );
r29310r29311
115147   DECLARE_WRITE_LINE_MEMBER( vpac_vlt_w );
116148   DECLARE_WRITE_LINE_MEMBER( vpac_drb_w );
117149   DECLARE_WRITE_LINE_MEMBER( vpac_wben_w );
150   DECLARE_WRITE_LINE_MEMBER( vpac_cblank_w );
151   DECLARE_WRITE_LINE_MEMBER( vpac_slg_w );
152   DECLARE_WRITE_LINE_MEMBER( vpac_sld_w );
153   DECLARE_WRITE8_MEMBER( vidla_w );
118154   DECLARE_WRITE8_MEMBER( drb_attr_w );
119155   DECLARE_WRITE_LINE_MEMBER( kbdclk_w );
120156   DECLARE_WRITE_LINE_MEMBER( kbddat_w );
121157   DECLARE_READ8_MEMBER( irq_callback );
122158   DECLARE_WRITE_LINE_MEMBER( fdc_drq );
159   DECLARE_WRITE_LINE_MEMBER(write_centronics_ack);
160   DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
161   DECLARE_WRITE_LINE_MEMBER(write_centronics_perror);
162   DECLARE_WRITE_LINE_MEMBER(write_centronics_select);
163   DECLARE_WRITE_LINE_MEMBER(write_centronics_fault);
123164   CRT9021_DRAW_CHARACTER_MEMBER( vac_draw_character );
124165   TIMER_DEVICE_CALLBACK_MEMBER( vidldsh_tick );
125166
167   enum
168   {
169      LPINEN = 0,
170      KBDINEN,
171      PORTINEN
172   };
173
126174   /* DMA state */
127175   UINT8 m_dma_mux;
128176
r29310r29311
144192   int m_vidouts;
145193   int m_clkspd;
146194   int m_clkcnt;
195   int m_blc;
196   int m_bkc;
197   int m_cblank;
198   UINT8 m_dblc;
199   UINT8 m_dbkc;
200   UINT8 m_dblank;
201   int m_slg;
202   int m_sld;
203   UINT8 m_cgra;
204   UINT8 m_vidla;
147205
148206   /* sound state */
149207   int m_outspkr;
r29310r29311
154212   int m_centronics_select;
155213   int m_centronics_perror;
156214   int m_centronics_busy;
157
158   DECLARE_WRITE_LINE_MEMBER(write_centronics_ack);
159   DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
160   DECLARE_WRITE_LINE_MEMBER(write_centronics_perror);
161   DECLARE_WRITE_LINE_MEMBER(write_centronics_select);
162   DECLARE_WRITE_LINE_MEMBER(write_centronics_fault);
163215};
164216
165217#endif
Property changes on: branches/new_menus
Modified: svn:mergeinfo
   Merged /trunk:r29292-29310

Previous 199869 Revisions Next


© 1997-2024 The MAME Team