Previous 199869 Revisions Next

r21103 Friday 15th February, 2013 at 20:15:58 UTC by Sandro Ronco
(MESS) cybiko: cleanup. (nw)
[src/mess/drivers]cybiko.c
[src/mess/includes]cybiko.h
[src/mess/machine]cybiko.c
[src/mess/video]hd66421.c hd66421.h

trunk/src/mess/machine/cybiko.c
r21102r21103
1717
1818#define RAMDISK_SIZE (512 * 1024)
1919
20/////////////////////////
21// FUNCTION PROTOTYPES //
22/////////////////////////
2320
24// state->m_rs232
25static void cybiko_rs232_init(running_machine &machine);
26static void cybiko_rs232_exit(void);
27static void cybiko_rs232_reset(void);
28
2921////////////////////////
3022// DRIVER INIT & EXIT //
3123////////////////////////
3224
33static void init_ram_handler(running_machine &machine, offs_t start, offs_t size, offs_t mirror)
25DRIVER_INIT_MEMBER(cybiko_state,cybiko)
3426{
35   machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(start, start + size - 1, 0, mirror - size, "bank1");
36   machine.device("maincpu")->memory().space(AS_PROGRAM).install_write_bank(start, start + size - 1, 0, mirror - size, "bank1");
37   machine.root_device().membank( "bank1" )->set_base( machine.device<ram_device>(RAM_TAG)->pointer());
38}
39
40DRIVER_INIT_MEMBER(cybiko_state,cybikov1)
41{
4227   _logerror( 0, ("init_cybikov1\n"));
43   init_ram_handler(machine(), 0x200000, machine().device<ram_device>(RAM_TAG)->size(), 0x200000);
28   m_maincpu->space(AS_PROGRAM).install_ram(0x200000, 0x200000 + m_ram->size() - 1, 0, 0x200000 - m_ram->size(), m_ram->pointer());
4429}
4530
46DRIVER_INIT_MEMBER(cybiko_state,cybikov2)
47{
48   _logerror( 0, ("init_cybikov2\n"));
49   init_ram_handler(machine(), 0x200000, machine().device<ram_device>(RAM_TAG)->size(), 0x200000);
50}
51
5231DRIVER_INIT_MEMBER(cybiko_state,cybikoxt)
5332{
5433   _logerror( 0, ("init_cybikoxt\n"));
55   init_ram_handler(machine(), 0x400000, machine().device<ram_device>(RAM_TAG)->size(), 0x200000);
34   m_maincpu->space(AS_PROGRAM).install_ram(0x400000, 0x400000 + m_ram->size() - 1, 0, 0x200000 - m_ram->size(), m_ram->pointer());
5635}
5736
5837///////////////////
5938// MACHINE START //
6039///////////////////
6140
62static emu_file *nvram_system_fopen( running_machine &machine, UINT32 openflags, const char *name)
41NVRAM_HANDLER( cybikoxt )
6342{
64   file_error filerr;
65   astring fname(machine.system().name, PATH_SEPARATOR, name, ".nv");
66   emu_file *file = global_alloc(emu_file(machine.options().nvram_directory(), openflags));
67   filerr = file->open(fname.cstr());
68   if (filerr == FILERR_NONE)
69      return file;
43   address_space &space =  machine.driver_data<cybiko_state>()->m_maincpu->space(AS_PROGRAM);
44   UINT8 *buffer = global_alloc_array(UINT8, RAMDISK_SIZE);
7045
71   global_free(file);
72   return NULL;
73}
74
75typedef void (nvram_load_func)(running_machine &machine, emu_file *file);
76
77static int nvram_system_load( running_machine &machine, const char *name, nvram_load_func _nvram_load, int required)
78{
79   emu_file *file;
80   file = nvram_system_fopen( machine, OPEN_FLAG_READ, name);
81   if (!file)
46   if (read_or_write)
8247   {
83      if (required) mame_printf_error( "nvram load failed (%s)\n", name);
84      return FALSE;
85   }
86   (*_nvram_load)(machine, file);
87   global_free(file);
88   return TRUE;
89}
48      for (offs_t offs = 0; offs < RAMDISK_SIZE; offs++)
49         buffer[offs] = space.read_byte(0x400000 + offs);
9050
91typedef void (nvram_save_func)(running_machine &machine, emu_file *file);
92
93static int nvram_system_save( running_machine &machine, const char *name, nvram_save_func _nvram_save)
94{
95   emu_file *file;
96   file = nvram_system_fopen( machine, OPEN_FLAG_CREATE | OPEN_FLAG_WRITE | OPEN_FLAG_CREATE_PATHS, name);
97   if (!file)
98   {
99      mame_printf_error( "nvram save failed (%s)\n", name);
100      return FALSE;
51      file->write(buffer, RAMDISK_SIZE);
10152   }
102   (*_nvram_save)(machine, file);
103   global_free(file);
104   return TRUE;
105}
106
107static void cybiko_ramdisk_load(running_machine &machine, emu_file *file)
108{
109   UINT8 *ram = machine.device<ram_device>(RAM_TAG)->pointer();
110#ifdef LSB_FIRST
111   UINT8 *temp = (UINT8*)malloc( RAMDISK_SIZE);
112   file->read( temp, RAMDISK_SIZE);
113   for (int i = 0; i < RAMDISK_SIZE; i += 2)
53   else
11454   {
115      ram[i+0] = temp[i+1];
116      ram[i+1] = temp[i+0];
117   }
118   free( temp);
119#else
120   file->read( ram, RAMDISK_SIZE);
121#endif
122}
55      if (file)
56         file->read(buffer, RAMDISK_SIZE);
57      else
58         memset(buffer, 0, RAMDISK_SIZE);
12359
124static void cybiko_ramdisk_save(running_machine &machine, emu_file *file)
125{
126   UINT8 *ram = machine.device<ram_device>(RAM_TAG)->pointer();
127#ifdef LSB_FIRST
128   UINT8 *temp = (UINT8*)malloc( RAMDISK_SIZE);
129   for (int i = 0; i < RAMDISK_SIZE; i += 2)
130   {
131      temp[i+0] = ram[i+1];
132      temp[i+1] = ram[i+0];
60      for (offs_t offs = 0; offs < RAMDISK_SIZE; offs++)
61         space.write_byte(0x400000 + offs, buffer[offs]);
13362   }
134   file->write( temp, RAMDISK_SIZE);
135   free( temp);
136#else
137   file->write( ram, RAMDISK_SIZE);
138#endif
63
64   global_free(buffer);
13965}
14066
14167void cybiko_state::machine_start()
14268{
14369   _logerror( 0, ("machine_start_cybikov1\n"));
14470   // serial port
145   cybiko_rs232_init(machine());
71   cybiko_rs232_init();
14672   // other
147   machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(cybiko_state::machine_stop_cybikov1),this));
73   machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(cybiko_state::machine_stop_cybiko),this));
14874}
14975
150MACHINE_START_MEMBER(cybiko_state,cybikov2)
151{
152   _logerror( 0, ("machine_start_cybikov2\n"));
153   // serial port
154   cybiko_rs232_init(machine());
155   // other
156   machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(cybiko_state::machine_stop_cybikov2),this));
157}
158
159MACHINE_START_MEMBER(cybiko_state,cybikoxt)
160{
161   _logerror( 0, ("machine_start_cybikoxt\n"));
162   // ramdisk
163   nvram_system_load( machine(), "ramdisk", cybiko_ramdisk_load, 0);
164   // serial port
165   cybiko_rs232_init(machine());
166   // other
167   machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(cybiko_state::machine_stop_cybikoxt),this));
168}
169
17076///////////////////
17177// MACHINE RESET //
17278///////////////////
r21102r21103
17783   cybiko_rs232_reset();
17884}
17985
180MACHINE_RESET_MEMBER(cybiko_state,cybikov2)
181{
182   _logerror( 0, ("machine_reset_cybikov2\n"));
183   cybiko_rs232_reset();
184}
185
186MACHINE_RESET_MEMBER(cybiko_state,cybikoxt)
187{
188   _logerror( 0, ("machine_reset_cybikoxt\n"));
189   cybiko_rs232_reset();
190}
191
19286//////////////////
19387// MACHINE STOP //
19488//////////////////
19589
196void cybiko_state::machine_stop_cybikov1()
90void cybiko_state::machine_stop_cybiko()
19791{
19892   _logerror( 0, ("machine_stop_cybikov1\n"));
19993   // serial port
20094   cybiko_rs232_exit();
20195}
20296
203void cybiko_state::machine_stop_cybikov2()
204{
205   _logerror( 0, ("machine_stop_cybikov2\n"));
206   // serial port
207   cybiko_rs232_exit();
208}
209
210void cybiko_state::machine_stop_cybikoxt()
211{
212   _logerror( 0, ("machine_stop_cybikoxt\n"));
213   // ramdisk
214   nvram_system_save( machine(), "ramdisk", cybiko_ramdisk_save);
215   // serial port
216   cybiko_rs232_exit();
217}
218
21997///////////
22098// RS232 //
22199///////////
222100
223101
224static void cybiko_rs232_init(running_machine &machine)
102void cybiko_state::cybiko_rs232_init()
225103{
226   cybiko_state *state = machine.driver_data<cybiko_state>();
227104   _logerror( 0, ("cybiko_rs232_init\n"));
228   memset( &state->m_rs232, 0, sizeof( state->m_rs232));
229//  machine.scheduler().timer_pulse(TIME_IN_HZ( 10), FUNC(rs232_timer_callback));
105   memset( &m_rs232, 0, sizeof(m_rs232));
106//  machine().scheduler().timer_pulse(TIME_IN_HZ( 10), FUNC(rs232_timer_callback));
230107}
231108
232static void cybiko_rs232_exit()
109void cybiko_state::cybiko_rs232_exit()
233110{
234111   _logerror( 0, ("cybiko_rs232_exit\n"));
235112}
236113
237static void cybiko_rs232_reset()
114void cybiko_state::cybiko_rs232_reset()
238115{
239116   _logerror( 0, ("cybiko_rs232_reset\n"));
240117}
trunk/src/mess/includes/cybiko.h
r21102r21103
4646public:
4747   cybiko_state(const machine_config &mconfig, device_type type, const char *tag)
4848      : driver_device(mconfig, type, tag),
49   m_maincpu(*this, "maincpu"),
4950   m_crtc(*this, "hd66421"),
5051   m_speaker(*this, SPEAKER_TAG),
5152   m_rtc(*this, "rtc"),
53   m_ram(*this, RAM_TAG),
5254   m_flash1(*this, "flash1"),
5355   m_flash2(*this, "flash2"),
5456   m_flashxt(*this, "flashxt")
r21102r21103
7577   void cybiko_rs232_pin_txd(int data);
7678   int cybiko_rs232_pin_rxd();
7779   int cybiko_rs232_rx_queue();
80   void cybiko_rs232_init();
81   void cybiko_rs232_exit();
82   void cybiko_rs232_reset();
7883
84   required_device<cpu_device> m_maincpu;
7985   required_device<hd66421_device> m_crtc;
8086   required_device<speaker_sound_device> m_speaker;
8187   required_device<pcf8593_device> m_rtc;
88   required_device<ram_device> m_ram;
8289   optional_device<at45db041_device> m_flash1;
8390   optional_device<intelfsh8_device> m_flash2;
8491   optional_device<intelfsh16_device> m_flashxt;
8592   DECLARE_DRIVER_INIT(cybikoxt);
86   DECLARE_DRIVER_INIT(cybikov1);
87   DECLARE_DRIVER_INIT(cybikov2);
93   DECLARE_DRIVER_INIT(cybiko);
8894   virtual void machine_start();
8995   virtual void machine_reset();
9096   virtual void palette_init();
91   DECLARE_MACHINE_START(cybikov2);
92   DECLARE_MACHINE_RESET(cybikov2);
93   DECLARE_MACHINE_START(cybikoxt);
94   DECLARE_MACHINE_RESET(cybikoxt);
95   UINT32 screen_update_cybiko(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
96   void machine_stop_cybikov1();
97   void machine_stop_cybikov2();
98   void machine_stop_cybikoxt();
97   void machine_stop_cybiko();
9998};
10099
100NVRAM_HANDLER( cybikoxt );
101
101102#endif /* CYBIKO_H_ */
trunk/src/mess/video/hd66421.c
r21102r21103
203203   bitmap.pix16(y, x) = (UINT16)color;
204204}
205205
206void hd66421_device::update_screen(bitmap_ind16 &bitmap, const rectangle &cliprect)
206UINT32 hd66421_device::update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
207207{
208208   pen_t pen[4];
209209
r21102r21103
251251      rectangle rect(0, HD66421_WIDTH - 1, 0, HD66421_HEIGHT - 1);
252252      bitmap.fill(get_white_pen(machine()), rect);
253253   }
254   
255   return 0;
254256}
trunk/src/mess/video/hd66421.h
r21102r21103
4949   DECLARE_READ8_MEMBER( reg_dat_r );
5050   DECLARE_WRITE8_MEMBER( reg_dat_w );
5151
52   void update_screen(bitmap_ind16 &bitmap, const rectangle &cliprect);
52   UINT32 update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
5353
5454protected:
5555   // device-level overrides
trunk/src/mess/drivers/cybiko.c
r21102r21103
296296}
297297
298298////////////////////
299// SCREEN UPDATE  //
300////////////////////
301
302UINT32 cybiko_state::screen_update_cybiko(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
303{
304   hd66421_device *hd66421 = machine().device<hd66421_device>( "hd66421" );
305   hd66421->update_screen(bitmap, cliprect);
306   return 0;
307}
308
309
310////////////////////
311299// MACHINE DRIVER //
312300////////////////////
313301
314302static MACHINE_CONFIG_START( cybikov1, cybiko_state )
315303   // cpu
316   MCFG_CPU_ADD( "maincpu", H8S2241, 11059200 )
304   MCFG_CPU_ADD( "maincpu", H8S2241, XTAL_11_0592MHz )
317305   MCFG_CPU_PROGRAM_MAP( cybikov1_mem )
318306   MCFG_CPU_IO_MAP( cybikov1_io )
319307   // screen
r21102r21103
321309   MCFG_SCREEN_REFRESH_RATE( 60 )
322310   MCFG_SCREEN_SIZE( HD66421_WIDTH, HD66421_HEIGHT )
323311   MCFG_SCREEN_VISIBLE_AREA( 0, HD66421_WIDTH - 1, 0, HD66421_HEIGHT - 1 )
324   MCFG_SCREEN_UPDATE_DRIVER(cybiko_state, screen_update_cybiko)
312   MCFG_SCREEN_UPDATE_DEVICE("hd66421", hd66421_device, update_screen)
325313
326314   // video
327315   MCFG_HD66421_ADD("hd66421")
r21102r21103
344332
345333static MACHINE_CONFIG_DERIVED( cybikov2, cybikov1)
346334   // cpu
347   MCFG_CPU_REPLACE("maincpu", H8S2246, 11059200)
335   MCFG_CPU_REPLACE("maincpu", H8S2246, XTAL_11_0592MHz)
348336   MCFG_CPU_PROGRAM_MAP(cybikov2_mem )
349337   MCFG_CPU_IO_MAP(cybikov2_io )
350338   // machine
351   MCFG_MACHINE_START_OVERRIDE(cybiko_state,cybikov2)
352   MCFG_MACHINE_RESET_OVERRIDE(cybiko_state,cybikov2)
353339   MCFG_SST_39VF020_ADD("flash2")
354340
355341   /* internal ram */
r21102r21103
360346
361347static MACHINE_CONFIG_DERIVED( cybikoxt, cybikov1)
362348   // cpu
363   MCFG_CPU_REPLACE("maincpu", H8S2323, 18432000)
349   MCFG_CPU_REPLACE("maincpu", H8S2323, XTAL_18_432MHz)
364350   MCFG_CPU_PROGRAM_MAP(cybikoxt_mem )
365351   MCFG_CPU_IO_MAP(cybikoxt_io )
366352   // machine
367   MCFG_MACHINE_START_OVERRIDE(cybiko_state,cybikoxt)
368   MCFG_MACHINE_RESET_OVERRIDE(cybiko_state,cybikoxt)
369353   MCFG_DEVICE_REMOVE("flash1")
370354   MCFG_SST_39VF400A_ADD("flashxt")
371355
356   MCFG_NVRAM_HANDLER( cybikoxt )
357
372358   /* internal ram */
373359   MCFG_RAM_MODIFY(RAM_TAG)
374360   MCFG_RAM_DEFAULT_SIZE("2M")
r21102r21103
421407//////////////
422408
423409/*    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT     INIT        COMPANY       FULLNAME                FLAGS */
424COMP( 2000, cybikov1,   0,          0,      cybikov1,   cybiko, cybiko_state,   cybikov1,   "Cybiko Inc", "Cybiko Classic (V1)",  GAME_IMPERFECT_SOUND )
425COMP( 2000, cybikov2,   cybikov1,   0,      cybikov2,   cybiko, cybiko_state,   cybikov2,   "Cybiko Inc", "Cybiko Classic (V2)",  GAME_IMPERFECT_SOUND )
410COMP( 2000, cybikov1,   0,          0,      cybikov1,   cybiko, cybiko_state,   cybiko  ,   "Cybiko Inc", "Cybiko Classic (V1)",  GAME_IMPERFECT_SOUND )
411COMP( 2000, cybikov2,   cybikov1,   0,      cybikov2,   cybiko, cybiko_state,   cybiko  ,   "Cybiko Inc", "Cybiko Classic (V2)",  GAME_IMPERFECT_SOUND )
426412COMP( 2001, cybikoxt,   cybikov1,   0,      cybikoxt,   cybikoxt, cybiko_state, cybikoxt,   "Cybiko Inc", "Cybiko Xtreme",        GAME_IMPERFECT_SOUND )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team