Previous 15994 Revisions Next

r5877 Thursday 24th September, 2009 at 11:36:55 UTC by Miodrag Milanović
[4004CLK] Added save state
[src/mess/drivers]4004clk.c

src/mess/drivers/4004clk.c
r5876r5877
1111#include "sound/dac.h"
1212#include "4004clk.lh"
1313
14static UINT16 nixie[6];
15static UINT16 nixie_temp[16];
14typedef struct __4004clk_state _4004clk_state;
15struct __4004clk_state
16{
17   UINT16 nixie[16];
18   UINT8 timer;
19   const device_config *dac;
20};
1621
1722static READ8_HANDLER(data_r)
1823{
r5876r5877
4449   output_set_indexed_value("neon", index, value);
4550}
4651
47static void update_nixie(void)
52static void update_nixie(running_machine *machine)
4853{
49   nixie[0] = ((nixie_temp[2] & 3)<<8) | (nixie_temp[1] << 4) | nixie_temp[0];
50   nixie[1] = (nixie_temp[4] << 6) | (nixie_temp[3] << 2) | (nixie_temp[2] >>2);
51   nixie[2] = ((nixie_temp[7] & 3)<<8) | (nixie_temp[6] << 4) | nixie_temp[5];
52   nixie[3] = (nixie_temp[9] << 6) | (nixie_temp[8] << 2) | (nixie_temp[7] >>2);     
53   nixie[4] = ((nixie_temp[12] & 3)<<8) | (nixie_temp[11] << 4) | nixie_temp[10];
54   nixie[5] = (nixie_temp[14] << 6) | (nixie_temp[13] << 2) | (nixie_temp[12] >>2);
55   
56   output_set_nixie_value(0,nixie_to_num(nixie[5]));
57   output_set_nixie_value(1,nixie_to_num(nixie[4]));
58   output_set_nixie_value(2,nixie_to_num(nixie[3]));
59   output_set_nixie_value(3,nixie_to_num(nixie[2]));
60   output_set_nixie_value(4,nixie_to_num(nixie[1]));
61   output_set_nixie_value(5,nixie_to_num(nixie[0]));
54   _4004clk_state *state = machine->driver_data;
55
56   output_set_nixie_value(5,nixie_to_num(((state->nixie[2] & 3)<<8) | (state->nixie[1] << 4) | state->nixie[0]));
57   output_set_nixie_value(4,nixie_to_num((state->nixie[4] << 6) | (state->nixie[3] << 2) | (state->nixie[2] >>2)));
58   output_set_nixie_value(3,nixie_to_num(((state->nixie[7] & 3)<<8) | (state->nixie[6] << 4) | state->nixie[5]));
59   output_set_nixie_value(2,nixie_to_num((state->nixie[9] << 6) | (state->nixie[8] << 2) | (state->nixie[7] >>2)));
60   output_set_nixie_value(1,nixie_to_num(((state->nixie[12] & 3)<<8) | (state->nixie[11] << 4) | state->nixie[10]));
61   output_set_nixie_value(0,nixie_to_num((state->nixie[14] << 6) | (state->nixie[13] << 2) | (state->nixie[12] >>2)));
6262}
6363
6464static WRITE8_HANDLER(nixie_w)
6565{
66   nixie_temp[offset] = data;
67   update_nixie();
66   _4004clk_state *state = space->machine->driver_data;
67   state->nixie[offset] = data;
68   update_nixie(space->machine);
6869}
6970
7071static WRITE8_HANDLER(neon_w)
r5876r5877
7677}
7778
7879static WRITE8_HANDLER(relays_w)
79{
80   const device_config *dac_device = devtag_get_device(space->machine, "dac");
81   dac_data_w(dac_device, (data & 1) ? 0x80 : 0x40); //tick - tock   
80{   
81   _4004clk_state *state = space->machine->driver_data;
82   dac_data_w(state->dac, (data & 1) ? 0x80 : 0x40); //tick - tock   
8283}
8384
8485static ADDRESS_MAP_START(4004clk_rom, ADDRESS_SPACE_PROGRAM, 8)
r5876r5877
111112         PORT_CONFSETTING( 0x08, "60 Hz" )
112113INPUT_PORTS_END
113114
114static UINT8 timer = 0;
115
116115/*
117116      16ms Int generator
118117        __  __
r5876r5877
123122
124123static TIMER_CALLBACK(timer_callback)
125124{
126   i4004_set_test(cputag_get_cpu(machine, "maincpu"),timer);
127   timer^=1;
125   _4004clk_state *state = machine->driver_data;
126   i4004_set_test(cputag_get_cpu(machine, "maincpu"),state->timer);
127   state->timer^=1;
128128}
129129
130static MACHINE_RESET(4004clk)
130static MACHINE_START(4004clk)
131131{
132   timer = 0;
132   _4004clk_state *state = machine->driver_data;
133   state->timer = 0;
134   state->dac = devtag_get_device(machine, "dac");
135
133136   timer_pulse(machine, ATTOTIME_IN_HZ(120), NULL, 0, timer_callback);
137   
138   /* register for state saving */
139   state_save_register_global(machine, state->timer);
140   state_save_register_global_pointer(machine, state->nixie, 6);
134141}
135142
136143static MACHINE_DRIVER_START( 4004clk )
144   MDRV_DRIVER_DATA(_4004clk_state)
137145    /* basic machine hardware */
138146    MDRV_CPU_ADD("maincpu",I4004, XTAL_5MHz / 8)
139147    MDRV_CPU_PROGRAM_MAP(4004clk_rom)
140148    MDRV_CPU_DATA_MAP(4004clk_mem)
141149    MDRV_CPU_IO_MAP(4004clk_io)   
142150
143    MDRV_MACHINE_RESET(4004clk)
151    MDRV_MACHINE_START(4004clk)
144152   
145153   /* video hardware */
146154   MDRV_DEFAULT_LAYOUT(layout_4004clk)   
r5876r5877
175183/* Driver */
176184
177185/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT    CONFIG  COMPANY               FULLNAME             FLAGS */
178COMP( 2008, 4004clk,  0,    0,       4004clk,    4004clk,  0,      0,      "John L. Weinrich",   "4004 Nixie Clock", 0)
186COMP( 2008, 4004clk,  0,    0,       4004clk,    4004clk,  0,      0,      "John L. Weinrich",   "4004 Nixie Clock", GAME_SUPPORTS_SAVE)
179187

Previous 15994 Revisions Next


© 1998-2018 The MESS Team