trunk/src/emu/bus/ql/sandy_superqboard.c
| r30671 | r30672 | |
| 79 | 79 | |
| 80 | 80 | static MACHINE_CONFIG_FRAGMENT( sandy_superqboard ) |
| 81 | 81 | MCFG_DEVICE_ADD(WD1772_TAG, WD1772x, XTAL_16MHz/2) |
| 82 | | MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", sandy_superqboard_floppies, "35dd", floppy_image_device::default_floppy_formats) |
| 82 | MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", sandy_superqboard_floppies, "35hd", floppy_image_device::default_floppy_formats) |
| 83 | 83 | MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":1", sandy_superqboard_floppies, NULL, floppy_image_device::default_floppy_formats) |
| 84 | 84 | |
| 85 | 85 | MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer") |
| r30671 | r30672 | |
| 109 | 109 | //------------------------------------------------- |
| 110 | 110 | |
| 111 | 111 | sandy_superqboard_t::sandy_superqboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : |
| 112 | | device_t(mconfig, SANDY_SUPERQBOARD, "SANDY_SUPERQBOARD", tag, owner, clock, "sandy_superqboard", __FILE__), |
| 112 | device_t(mconfig, SANDY_SUPERQBOARD, "Sandy SuperQBoard", tag, owner, clock, "sandy_superqboard", __FILE__), |
| 113 | 113 | device_ql_expansion_card_interface(mconfig, *this), |
| 114 | 114 | m_fdc(*this, WD1772_TAG), |
| 115 | 115 | m_floppy0(*this, WD1772_TAG":0"), |
| r30671 | r30672 | |
| 154 | 154 | |
| 155 | 155 | UINT8 sandy_superqboard_t::read(address_space &space, offs_t offset, UINT8 data) |
| 156 | 156 | { |
| 157 | | switch ((offset >> 2) & 0x03) |
| 157 | if ((offset & 0xf0000) == 0xc0000) |
| 158 | 158 | { |
| 159 | | case 0: |
| 160 | | data = m_fdc->read(space, offset & 0x03); |
| 161 | | break; |
| 162 | | |
| 163 | | case 3: |
| 164 | | /* |
| 159 | if ((offset & 0xffc0) == 0x3fc0) |
| 160 | { |
| 161 | switch ((offset >> 2) & 0x03) |
| 162 | { |
| 163 | case 0: |
| 164 | data = m_fdc->read(space, offset & 0x03); |
| 165 | break; |
| 166 | |
| 167 | case 3: |
| 168 | /* |
| 165 | 169 | |
| 166 | | bit description |
| 170 | bit description |
| 167 | 171 | |
| 168 | | 0 BUSY |
| 169 | | 1 mouse pin 8 |
| 170 | | 2 mouse pin 1 |
| 171 | | 3 mouse pin 2 |
| 172 | | 4 mouse pin 4 flip-flop Q |
| 173 | | 5 mouse pin 3 flip-flop Q |
| 174 | | 6 INT3 |
| 175 | | 7 INT2 |
| 172 | 0 BUSY |
| 173 | 1 mouse pin 8 |
| 174 | 2 mouse pin 1 |
| 175 | 3 mouse pin 2 |
| 176 | 4 mouse pin 4 flip-flop Q |
| 177 | 5 mouse pin 3 flip-flop Q |
| 178 | 6 INT3 |
| 179 | 7 INT2 |
| 176 | 180 | |
| 177 | | */ |
| 181 | */ |
| 178 | 182 | |
| 179 | | data = m_busy; |
| 180 | | data |= m_int3 << 6; |
| 181 | | data |= m_int2 << 7; |
| 182 | | break; |
| 183 | data = m_busy; |
| 184 | data |= m_int3 << 6; |
| 185 | data |= m_int2 << 7; |
| 186 | break; |
| 187 | } |
| 188 | } |
| 189 | else |
| 190 | { |
| 191 | data = m_rom->base()[offset & 0x7fff]; |
| 192 | } |
| 183 | 193 | } |
| 184 | 194 | |
| 185 | 195 | return data; |
| r30671 | r30672 | |
| 192 | 202 | |
| 193 | 203 | void sandy_superqboard_t::write(address_space &space, offs_t offset, UINT8 data) |
| 194 | 204 | { |
| 195 | | switch ((offset >> 2) & 0x03) |
| 205 | if ((offset & 0xf0000) == 0xc0000) |
| 196 | 206 | { |
| 197 | | case 0: |
| 198 | | m_fdc->write(space, offset & 0x03, data); |
| 199 | | break; |
| 200 | | |
| 201 | | case 1: |
| 207 | if ((offset & 0xffc0) == 0x3fc0) |
| 202 | 208 | { |
| 203 | | /* |
| 209 | switch ((offset >> 2) & 0x03) |
| 210 | { |
| 211 | case 0: |
| 212 | m_fdc->write(space, offset & 0x03, data); |
| 213 | break; |
| 204 | 214 | |
| 205 | | bit description |
| 215 | case 1: |
| 216 | { |
| 217 | /* |
| 206 | 218 | |
| 207 | | 0 SIDE ONE |
| 208 | | 1 DSEL0 |
| 209 | | 2 DSEL1 |
| 210 | | 3 M ON0 |
| 211 | | 4 /DDEN |
| 212 | | 5 STROBE inverted |
| 213 | | 6 GAL pin 11 |
| 214 | | 7 GAL pin 9 |
| 219 | bit description |
| 215 | 220 | |
| 216 | | */ |
| 221 | 0 SIDE ONE |
| 222 | 1 DSEL0 |
| 223 | 2 DSEL1 |
| 224 | 3 M ON0 |
| 225 | 4 /DDEN |
| 226 | 5 STROBE inverted |
| 227 | 6 GAL pin 11 |
| 228 | 7 GAL pin 9 |
| 217 | 229 | |
| 218 | | floppy_image_device *floppy = NULL; |
| 230 | */ |
| 219 | 231 | |
| 220 | | if (BIT(data, 1)) |
| 221 | | { |
| 222 | | floppy = m_floppy0->get_device(); |
| 223 | | } |
| 224 | | else if (BIT(data, 2)) |
| 225 | | { |
| 226 | | floppy = m_floppy1->get_device(); |
| 227 | | } |
| 232 | floppy_image_device *floppy = NULL; |
| 228 | 233 | |
| 229 | | m_fdc->set_floppy(floppy); |
| 234 | if (BIT(data, 1)) |
| 235 | { |
| 236 | floppy = m_floppy0->get_device(); |
| 237 | } |
| 238 | else if (BIT(data, 2)) |
| 239 | { |
| 240 | floppy = m_floppy1->get_device(); |
| 241 | } |
| 230 | 242 | |
| 231 | | if (floppy) |
| 232 | | { |
| 233 | | floppy->ss_w(BIT(data, 0)); |
| 234 | | floppy->mon_w(BIT(data, 3)); |
| 235 | | } |
| 243 | m_fdc->set_floppy(floppy); |
| 236 | 244 | |
| 237 | | m_fdc->dden_w(BIT(data, 4)); |
| 245 | if (floppy) |
| 246 | { |
| 247 | floppy->ss_w(BIT(data, 0)); |
| 248 | floppy->mon_w(BIT(data, 3)); |
| 249 | } |
| 238 | 250 | |
| 239 | | m_centronics->write_strobe(!BIT(data, 5)); |
| 240 | | } |
| 241 | | break; |
| 251 | m_fdc->dden_w(BIT(data, 4)); |
| 242 | 252 | |
| 243 | | case 2: |
| 244 | | m_latch->write(data); |
| 245 | | break; |
| 253 | m_centronics->write_strobe(!BIT(data, 5)); |
| 254 | } |
| 255 | break; |
| 246 | 256 | |
| 247 | | case 4: |
| 248 | | m_int2 = 0; |
| 249 | | m_int3 = 0; |
| 250 | | break; |
| 257 | case 2: |
| 258 | m_latch->write(data); |
| 259 | break; |
| 251 | 260 | |
| 252 | | case 5: |
| 253 | | m_fdc->set_unscaled_clock(XTAL_16MHz >> !BIT(data, 0)); |
| 254 | | break; |
| 261 | case 4: |
| 262 | m_int2 = 0; |
| 263 | m_int3 = 0; |
| 264 | break; |
| 265 | |
| 266 | case 5: |
| 267 | m_fdc->set_unscaled_clock(XTAL_16MHz >> !BIT(data, 0)); |
| 268 | break; |
| 269 | } |
| 270 | } |
| 255 | 271 | } |
| 256 | 272 | } |