trunk/src/mess/drivers/fp200.c
| r0 | r21859 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Casio FP-200 driver |
| 4 | |
| 5 | ***************************************************************************/ |
| 6 | |
| 7 | |
| 8 | #include "emu.h" |
| 9 | #include "cpu/i8085/i8085.h" |
| 10 | |
| 11 | #define MAIN_CLOCK XTAL_5MHz |
| 12 | |
| 13 | class fp200_state : public driver_device |
| 14 | { |
| 15 | public: |
| 16 | fp200_state(const machine_config &mconfig, device_type type, const char *tag) |
| 17 | : driver_device(mconfig, type, tag), |
| 18 | m_maincpu(*this, "maincpu") |
| 19 | { } |
| 20 | |
| 21 | // devices |
| 22 | required_device<cpu_device> m_maincpu; |
| 23 | UINT8 m_io_type; |
| 24 | |
| 25 | // screen updates |
| 26 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 27 | |
| 28 | DECLARE_READ8_MEMBER(fp200_io_r); |
| 29 | DECLARE_WRITE8_MEMBER(fp200_io_w); |
| 30 | DECLARE_WRITE_LINE_MEMBER(sod_w); |
| 31 | DECLARE_READ_LINE_MEMBER(sid_r); |
| 32 | |
| 33 | protected: |
| 34 | // driver_device overrides |
| 35 | virtual void machine_start(); |
| 36 | virtual void machine_reset(); |
| 37 | |
| 38 | virtual void video_start(); |
| 39 | virtual void palette_init(); |
| 40 | }; |
| 41 | |
| 42 | void fp200_state::video_start() |
| 43 | { |
| 44 | } |
| 45 | |
| 46 | UINT32 fp200_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ) |
| 47 | { |
| 48 | return 0; |
| 49 | } |
| 50 | |
| 51 | /* |
| 52 | i/o map: |
| 53 | SOD = 0 |
| 54 | 0x10 - 0x1f Timer control (RPC05 RTC) |
| 55 | 0x20 - 0x2f AUTO-POWER OFF |
| 56 | 0x40 - 0x4f Device Code |
| 57 | 0x80 - 0xff FDD (unknown type) |
| 58 | SOD = 1 |
| 59 | 0x00 - 0x0f LCD control. |
| 60 | 0x10 - 0x1f I/O control |
| 61 | 0x20 - 0x2f Keyboard |
| 62 | 0x40 - 0x4f MT.RS-232C control |
| 63 | 0x80 - 0x8f Printer (Centronics) |
| 64 | */ |
| 65 | |
| 66 | READ8_MEMBER(fp200_state::fp200_io_r) |
| 67 | { |
| 68 | UINT8 res; |
| 69 | logerror("Unemulated I/O read %02x (%02x)\n",offset,m_io_type); |
| 70 | |
| 71 | if(m_io_type == 0) |
| 72 | { |
| 73 | res = 0; |
| 74 | } |
| 75 | else |
| 76 | { |
| 77 | res = 0; |
| 78 | } |
| 79 | |
| 80 | return res; |
| 81 | } |
| 82 | |
| 83 | WRITE8_MEMBER(fp200_state::fp200_io_w) |
| 84 | { |
| 85 | logerror("Unemulated I/O write %02x (%02x) -> %02x\n",offset,m_io_type,data); |
| 86 | if(m_io_type == 0) |
| 87 | { |
| 88 | // .... |
| 89 | } |
| 90 | else |
| 91 | { |
| 92 | // ... |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | static ADDRESS_MAP_START( fp200_map, AS_PROGRAM, 8, fp200_state ) |
| 97 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 98 | AM_RANGE(0x8000, 0x9fff) AM_RAM |
| 99 | // 0xa000, 0xffff exp RAM |
| 100 | ADDRESS_MAP_END |
| 101 | |
| 102 | static ADDRESS_MAP_START( fp200_io, AS_IO, 8, fp200_state ) |
| 103 | AM_RANGE(0x00, 0xff) AM_READWRITE(fp200_io_r,fp200_io_w) |
| 104 | ADDRESS_MAP_END |
| 105 | |
| 106 | static INPUT_PORTS_START( fp200 ) |
| 107 | /* dummy active high structure */ |
| 108 | PORT_START("SYSA") |
| 109 | PORT_DIPNAME( 0x01, 0x00, "SYSA" ) |
| 110 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 111 | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| 112 | PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) |
| 113 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 114 | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) |
| 115 | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) |
| 116 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 117 | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) |
| 118 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) |
| 119 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 120 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 121 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 122 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 123 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 124 | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) |
| 125 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 126 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 127 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) |
| 128 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 129 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 130 | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) |
| 131 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 132 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 133 | |
| 134 | /* dummy active low structure */ |
| 135 | PORT_START("DSWA") |
| 136 | PORT_DIPNAME( 0x01, 0x01, "DSWA" ) |
| 137 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
| 138 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 139 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
| 140 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) |
| 141 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 142 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) |
| 143 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) |
| 144 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 145 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) |
| 146 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) |
| 147 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 148 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) |
| 149 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) |
| 150 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 151 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) |
| 152 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) |
| 153 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 154 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) |
| 155 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) |
| 156 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 157 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
| 158 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
| 159 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
| 160 | INPUT_PORTS_END |
| 161 | |
| 162 | static const gfx_layout charlayout = |
| 163 | { |
| 164 | 8,8, |
| 165 | RGN_FRAC(1,1), |
| 166 | 1, |
| 167 | { RGN_FRAC(0,1) }, |
| 168 | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, |
| 169 | { 0, 1, 2, 3, 4, 5, 6, 7 }, |
| 170 | 8*8 |
| 171 | }; |
| 172 | |
| 173 | static GFXDECODE_START( fp200 ) |
| 174 | GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 ) |
| 175 | GFXDECODE_END |
| 176 | |
| 177 | |
| 178 | void fp200_state::machine_start() |
| 179 | { |
| 180 | } |
| 181 | |
| 182 | void fp200_state::machine_reset() |
| 183 | { |
| 184 | } |
| 185 | |
| 186 | |
| 187 | void fp200_state::palette_init() |
| 188 | { |
| 189 | } |
| 190 | |
| 191 | WRITE_LINE_MEMBER( fp200_state::sod_w ) |
| 192 | { |
| 193 | m_io_type = state; |
| 194 | } |
| 195 | |
| 196 | READ_LINE_MEMBER( fp200_state::sid_r ) |
| 197 | { |
| 198 | /* TODO: key mods */ |
| 199 | return 0; |
| 200 | } |
| 201 | |
| 202 | static I8085_CONFIG( cpu_config ) |
| 203 | { |
| 204 | DEVCB_NULL, /* STATUS changed callback */ |
| 205 | DEVCB_NULL, /* INTE changed callback */ |
| 206 | DEVCB_DRIVER_LINE_MEMBER(fp200_state, sid_r), /* SID changed callback (I8085A only) */ |
| 207 | DEVCB_DRIVER_LINE_MEMBER(fp200_state, sod_w) /* SOD changed callback (I8085A only) */ |
| 208 | }; |
| 209 | |
| 210 | static MACHINE_CONFIG_START( fp200, fp200_state ) |
| 211 | |
| 212 | /* basic machine hardware */ |
| 213 | MCFG_CPU_ADD("maincpu",I8085A,MAIN_CLOCK) |
| 214 | MCFG_CPU_PROGRAM_MAP(fp200_map) |
| 215 | MCFG_CPU_IO_MAP(fp200_io) |
| 216 | MCFG_CPU_CONFIG(cpu_config) |
| 217 | |
| 218 | /* video hardware */ |
| 219 | MCFG_SCREEN_ADD("screen", LCD) |
| 220 | MCFG_SCREEN_REFRESH_RATE(60) |
| 221 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) |
| 222 | MCFG_SCREEN_UPDATE_DRIVER(fp200_state, screen_update) |
| 223 | MCFG_SCREEN_SIZE(20*8, 8*8) |
| 224 | MCFG_SCREEN_VISIBLE_AREA(0*8, 20*8-1, 0*8, 8*8-1) |
| 225 | |
| 226 | MCFG_GFXDECODE(fp200) |
| 227 | |
| 228 | MCFG_PALETTE_LENGTH(8) |
| 229 | |
| 230 | /* sound hardware */ |
| 231 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 232 | // MCFG_SOUND_ADD("aysnd", AY8910, MAIN_CLOCK/4) |
| 233 | // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) |
| 234 | MACHINE_CONFIG_END |
| 235 | |
| 236 | |
| 237 | /*************************************************************************** |
| 238 | |
| 239 | Game driver(s) |
| 240 | |
| 241 | ***************************************************************************/ |
| 242 | |
| 243 | ROM_START( fp200 ) |
| 244 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) |
| 245 | ROM_LOAD( "fp200rom.bin", 0x0000, 0x8000, CRC(dba6e41b) SHA1(c694fa19172eb56585a9503997655bcf9d369c34) ) |
| 246 | |
| 247 | ROM_REGION( 0x10000, "gfx1", ROMREGION_ERASE00 ) |
| 248 | ROM_LOAD( "chr.bin", 0x0000, 0x800, CRC(2e6501a5) SHA1(6186e25feabe6db851ee7d61dad11e182a6d3a4a) ) |
| 249 | ROM_END |
| 250 | |
| 251 | GAME( 1982, fp200, 0, fp200, fp200, driver_device, 0, ROT0, "Casio", "FP-200", GAME_IS_SKELETON ) |