Previous 15994 Revisions Next

r11348 Wednesday 27th April, 2011 at 10:49:31 UTC by Robbbert
[SM1800] Modernised, add F4 displayer; [CM1800] little cleanup.
[src/mess/drivers]cm1800.c sm1800.c

src/mess/drivers/cm1800.c
r11347r11348
6767ADDRESS_MAP_END
6868
6969/* Input ports */
70INPUT_PORTS_START( cm1800 )
70static INPUT_PORTS_START( cm1800 )
7171INPUT_PORTS_END
7272
7373
r11347r11348
8181};
8282
8383static MACHINE_CONFIG_START( cm1800, cm1800_state )
84    /* basic machine hardware */
85    MCFG_CPU_ADD("maincpu",I8080, XTAL_2MHz)
86    MCFG_CPU_PROGRAM_MAP(cm1800_mem)
87    MCFG_CPU_IO_MAP(cm1800_io)   
84   /* basic machine hardware */
85   MCFG_CPU_ADD("maincpu",I8080, XTAL_2MHz)
86   MCFG_CPU_PROGRAM_MAP(cm1800_mem)
87   MCFG_CPU_IO_MAP(cm1800_io)   
8888
89    MCFG_MACHINE_RESET(cm1800)
89   MCFG_MACHINE_RESET(cm1800)
9090   
91    /* video hardware */
92    MCFG_FRAGMENT_ADD( generic_terminal )
91   /* video hardware */
92   MCFG_FRAGMENT_ADD( generic_terminal )
9393   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG,cm1800_terminal_intf)
9494MACHINE_CONFIG_END
9595
9696/* ROM definition */
9797ROM_START( cm1800 )
9898   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
99   ROM_LOAD( "cm1800.rom", 0x0000, 0x0800, CRC(85d71d25) SHA1(42dc87d2eddc2906fa26d35db88a2e29d50fb481))
99   ROM_LOAD( "cm1800.rom", 0x0000, 0x0800, CRC(85d71d25) SHA1(42dc87d2eddc2906fa26d35db88a2e29d50fb481) )
100100ROM_END
101101
102102/* Driver */
103103
104104/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT    COMPANY   FULLNAME       FLAGS */
105COMP( 1981, cm1800,  0,       0,    cm1800,    cm1800,     0,  "<unknown>",   "CM-1800",      GAME_NOT_WORKING | GAME_NO_SOUND)
105COMP( 1981, cm1800,  0,       0,    cm1800,    cm1800,    0,  "<unknown>", "CM-1800", GAME_NOT_WORKING | GAME_NO_SOUND)
106106
src/mess/drivers/sm1800.c
r11347r11348
1212            KR580VV79  programmable peripheral device, keyboard and display controller (i8279)
1313
1414****************************************************************************/
15#define ADDRESS_MAP_MODERN
1516
1617#include "emu.h"
1718#include "cpu/i8085/i8085.h"
r11347r11348
1920#include "machine/msm8251.h"
2021#include "video/i8275.h"
2122
23#define MACHINE_RESET_MEMBER(name) void name::machine_reset()
24
2225class sm1800_state : public driver_device
2326{
2427public:
2528   sm1800_state(running_machine &machine, const driver_device_config_base &config)
26      : driver_device(machine, config) { }
29      : driver_device(machine, config),
30   m_maincpu(*this, "maincpu"),
31   m_uart(*this, "i8251"),
32   m_ppi(*this, "i8255"),
33   m_crtc(*this, "i8275")
34   { }
2735
36   required_device<cpu_device> m_maincpu;
37   required_device<device_t> m_uart;
38   required_device<device_t> m_ppi;
39   required_device<device_t> m_crtc;
40   DECLARE_WRITE8_MEMBER(sm1800_8255_portb_w);
41   DECLARE_WRITE8_MEMBER(sm1800_8255_portc_w);
42   DECLARE_READ8_MEMBER(sm1800_8255_porta_r);
43   DECLARE_READ8_MEMBER(sm1800_8255_portc_r);
2844   UINT8 m_irq_state;
45   virtual void machine_reset();
2946};
3047
31static ADDRESS_MAP_START(sm1800_mem, AS_PROGRAM, 8)
48static ADDRESS_MAP_START(sm1800_mem, AS_PROGRAM, 8, sm1800_state)
3249   ADDRESS_MAP_UNMAP_HIGH
3350   AM_RANGE( 0x0000, 0x07ff ) AM_ROM
34   //AM_RANGE( 0x0fb0, 0x0fff ) AM_DEVWRITE("i8275", i8275_dack_w)
35   AM_RANGE( 0x1000, 0x17ff ) AM_RAM
51   //AM_RANGE( 0x0fb0, 0x0fff ) AM_DEVWRITE_LEGACY("i8275", i8275_dack_w)
52   AM_RANGE( 0x1000, 0x17ff ) AM_RAM // videoram looks like 1080-17FF, normal ascii
3653ADDRESS_MAP_END
3754
38static ADDRESS_MAP_START( sm1800_io , AS_IO, 8)
55static ADDRESS_MAP_START( sm1800_io, AS_IO, 8, sm1800_state)
56   ADDRESS_MAP_GLOBAL_MASK(0xff)
3957   ADDRESS_MAP_UNMAP_HIGH
40   AM_RANGE( 0x3c, 0x3d ) AM_DEVREADWRITE("i8275", i8275_r, i8275_w)
41   AM_RANGE( 0x6c, 0x6f ) AM_DEVREADWRITE_MODERN("i8255", i8255_device, read, write)
42   //AM_RANGE( 0x74, 0x75 ) AM_DEVREADWRITE("i8279", i8279_r, i8279_w)
43   AM_RANGE( 0x5c, 0x5c) AM_DEVREADWRITE("i8251", msm8251_data_r,msm8251_data_w)
44   AM_RANGE( 0x5d, 0x5d) AM_DEVREADWRITE("i8251", msm8251_status_r,msm8251_control_w)
58   AM_RANGE( 0x3c, 0x3d ) AM_DEVREADWRITE_LEGACY("i8275", i8275_r, i8275_w)
59   AM_RANGE( 0x5c, 0x5c) AM_DEVREADWRITE_LEGACY("i8251", msm8251_data_r,msm8251_data_w)
60   AM_RANGE( 0x5d, 0x5d) AM_DEVREADWRITE_LEGACY("i8251", msm8251_status_r,msm8251_control_w)
61   AM_RANGE( 0x6c, 0x6f ) AM_DEVREADWRITE("i8255", i8255_device, read, write)
62   //AM_RANGE( 0x74, 0x75 ) AM_DEVREADWRITE_LEGACY("i8279", i8279_r, i8279_w)
4563ADDRESS_MAP_END
4664
4765/* Input ports */
48INPUT_PORTS_START( sm1800 )
66static INPUT_PORTS_START( sm1800 )
4967INPUT_PORTS_END
5068
5169static IRQ_CALLBACK(sm1800_irq_callback)
r11347r11348
5371   return 0xff;
5472}
5573
56static MACHINE_RESET(sm1800)
74MACHINE_RESET_MEMBER(sm1800_state)
5775{
58   device_set_irq_callback(machine.device("maincpu"), sm1800_irq_callback);
76   device_set_irq_callback(m_maincpu, sm1800_irq_callback);
5977}
6078
6179
r11347r11348
7896{
7997   int i;
8098   bitmap_t *bitmap = device->machine().generic.tmpbitmap;
81   UINT8 *charmap = device->machine().region("gfx1")->base();
99   UINT8 *charmap = device->machine().region("chargen")->base();
82100   UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
83   if (vsp) {
101   if (vsp)
84102      pixels = 0;
85   }
86   if (lten) {
103
104   if (lten)
87105      pixels = 0xff;
88   }
89   if (rvv) {
106
107   if (rvv)
90108      pixels ^= 0xff;
91   }
92   for(i=0;i<8;i++) {
109
110   for(i=0;i<8;i++)
93111      *BITMAP_ADDR16(bitmap, y, x + i) = (pixels >> (7-i)) & 1 ? (hlgt ? 2 : 1) : 0;
94   }
95112}
113
96114const i8275_interface sm1800_i8275_interface = {
97115   "screen",
98116   8,
r11347r11348
103121};
104122
105123
106static WRITE8_DEVICE_HANDLER (sm1800_8255_portb_w )
124WRITE8_MEMBER( sm1800_state::sm1800_8255_portb_w )
107125{
108126}
109127
110static WRITE8_DEVICE_HANDLER (sm1800_8255_portc_w )
128WRITE8_MEMBER( sm1800_state::sm1800_8255_portc_w )
111129{
112130}
113131
114static READ8_DEVICE_HANDLER (sm1800_8255_porta_r )
132READ8_MEMBER( sm1800_state::sm1800_8255_porta_r )
115133{
116134   return 0xff;
117135}
118136
119static READ8_DEVICE_HANDLER (sm1800_8255_portc_r )
137READ8_MEMBER( sm1800_state::sm1800_8255_portc_r )
120138{
121139   return 0;
122140}
123141
124142I8255A_INTERFACE( sm1800_ppi8255_interface )
125143{
126   DEVCB_HANDLER(sm1800_8255_porta_r),
144   DEVCB_DRIVER_MEMBER(sm1800_state, sm1800_8255_porta_r),
127145   DEVCB_NULL,
128146   DEVCB_NULL,
129   DEVCB_HANDLER(sm1800_8255_portb_w),
130   DEVCB_HANDLER(sm1800_8255_portc_r),
131   DEVCB_HANDLER(sm1800_8255_portc_w)
147   DEVCB_DRIVER_MEMBER(sm1800_state, sm1800_8255_portb_w),
148   DEVCB_DRIVER_MEMBER(sm1800_state, sm1800_8255_portc_r),
149   DEVCB_DRIVER_MEMBER(sm1800_state, sm1800_8255_portc_w)
132150};
133151
134static const rgb_t sm1800_palette[3] = {
135   MAKE_RGB(0x00, 0x00, 0x00), // black
136   MAKE_RGB(0xa0, 0xa0, 0xa0), // white
137   MAKE_RGB(0xff, 0xff, 0xff)   // highlight
138};
139
140152static PALETTE_INIT( sm1800 )
141153{
142   palette_set_colors(machine, 0, sm1800_palette, ARRAY_LENGTH(sm1800_palette));
154   palette_set_color(machine, 0, RGB_BLACK); // black
155   palette_set_color_rgb(machine, 1, 0xa0, 0xa0, 0xa0); // white
156   palette_set_color(machine, 2, RGB_WHITE); // highlight
143157}
144158
159
160/* F4 Character Displayer */
161static const gfx_layout sm1800_charlayout =
162{
163   8, 8,               /* 8 x 8 characters */
164   256,               /* 256 characters */
165   1,               /* 1 bits per pixel */
166   { 0 },               /* no bitplanes */
167   /* x offsets */
168   { 0, 1, 2, 3, 4, 5, 6, 7 },
169   /* y offsets */
170   { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
171   8*8               /* every char takes 8 bytes */
172};
173
174static GFXDECODE_START( sm1800 )
175   GFXDECODE_ENTRY( "chargen", 0x0000, sm1800_charlayout, 0, 1 )
176GFXDECODE_END
177
178
145179static MACHINE_CONFIG_START( sm1800, sm1800_state )
146    /* basic machine hardware */
147    MCFG_CPU_ADD("maincpu",I8080, XTAL_2MHz)
148    MCFG_CPU_PROGRAM_MAP(sm1800_mem)
149    MCFG_CPU_IO_MAP(sm1800_io)
180   /* basic machine hardware */
181   MCFG_CPU_ADD("maincpu",I8080, XTAL_2MHz)
182   MCFG_CPU_PROGRAM_MAP(sm1800_mem)
183   MCFG_CPU_IO_MAP(sm1800_io)
150184   MCFG_CPU_VBLANK_INT("screen", sm1800_vblank_interrupt)
151185
152    MCFG_MACHINE_RESET(sm1800)
186   /* video hardware */
187   MCFG_SCREEN_ADD("screen", RASTER)
188   MCFG_SCREEN_REFRESH_RATE(50)
189   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
190   MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
191   MCFG_SCREEN_SIZE(640, 480)
192   MCFG_GFXDECODE(sm1800)
193   MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
194   MCFG_VIDEO_START(generic_bitmapped)
195   MCFG_SCREEN_UPDATE(sm1800)
196   MCFG_PALETTE_LENGTH(3)
197   MCFG_PALETTE_INIT(sm1800)
153198
199   /* Devices */
154200   MCFG_I8255_ADD ("i8255", sm1800_ppi8255_interface )
155201   MCFG_I8275_ADD   ("i8275", sm1800_i8275_interface)
156202   MCFG_MSM8251_ADD("i8251", default_msm8251_interface)
157    /* video hardware */
158    MCFG_SCREEN_ADD("screen", RASTER)
159    MCFG_SCREEN_REFRESH_RATE(50)
160    MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
161    MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
162    MCFG_SCREEN_SIZE(640, 480)
163    MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
164    MCFG_SCREEN_UPDATE(sm1800)
165
166    MCFG_PALETTE_LENGTH(3)
167    MCFG_PALETTE_INIT(sm1800)
168
169    MCFG_VIDEO_START(generic_bitmapped)
170203MACHINE_CONFIG_END
171204
172205/* ROM definition */
173206ROM_START( sm1800 )
174    ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
207   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
175208   ROM_LOAD( "prog.bin", 0x0000, 0x0800, CRC(55736ad5) SHA1(b77f720f1b64b208dd6a5d4f9c9521d1284028e9))
176   ROM_REGION(0x0800, "gfx1",0)
209
210   ROM_REGION(0x0800, "chargen", 0)
177211   ROM_LOAD( "font.bin", 0x0000, 0x0800, CRC(28ed9ebc) SHA1(f561136962a06a5dcb5a0436931d29e940155d24))
178212ROM_END
179213
180214/* Driver */
181215
182216/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT    COMPANY   FULLNAME       FLAGS */
183COMP( ????, sm1800,  0,       0,   sm1800,    sm1800,     0,      "<unknown>",   "SM1800",      GAME_NOT_WORKING | GAME_NO_SOUND)
217COMP( ????, sm1800,  0,       0,     sm1800,    sm1800,    0,   "<unknown>", "SM1800", GAME_NOT_WORKING | GAME_NO_SOUND)
184218

Previous 15994 Revisions Next


© 1998-2018 The MESS Team