trunk/src/emu/video/crt9007.c
| r29435 | r29436 | |
| 398 | 398 | |
| 399 | 399 | inline void crt9007_t::recompute_parameters() |
| 400 | 400 | { |
| 401 | | #ifdef UNUSED_FOR_NOW |
| 402 | 401 | // check that necessary registers have been loaded |
| 403 | 402 | if (!HAS_VALID_PARAMETERS) return; |
| 404 | 403 | |
| 405 | 404 | // screen dimensions |
| 406 | | int horiz_pix_total = CHARACTERS_PER_HORIZONTAL_PERIOD * m_hpixels_per_column; |
| 407 | | int vert_pix_total = SCAN_LINES_PER_FRAME; |
| 405 | //int horiz_pix_total = CHARACTERS_PER_HORIZONTAL_PERIOD * m_hpixels_per_column; |
| 406 | //int vert_pix_total = SCAN_LINES_PER_FRAME; |
| 408 | 407 | |
| 409 | 408 | // refresh rate |
| 410 | | attoseconds_t refresh = HZ_TO_ATTOSECONDS(clock()) * horiz_pix_total * vert_pix_total; |
| 409 | //attoseconds_t refresh = HZ_TO_ATTOSECONDS(clock()) * horiz_pix_total * vert_pix_total; |
| 411 | 410 | |
| 412 | 411 | // horizontal sync |
| 413 | 412 | m_hsync_start = 0; |
| r29435 | r29436 | |
| 426 | 425 | m_vsync_end = VERTICAL_SYNC_WIDTH; |
| 427 | 426 | |
| 428 | 427 | // visible area |
| 429 | | rectangle visarea; |
| 428 | //rectangle visarea; |
| 430 | 429 | |
| 431 | | visarea.set(m_hsync_end, horiz_pix_total - 1, m_vsync_end, vert_pix_total - 1); |
| 430 | //visarea.set(m_hsync_end, horiz_pix_total - 1, m_vsync_end, vert_pix_total - 1); |
| 432 | 431 | |
| 433 | | if (LOG) |
| 434 | | { |
| 435 | | logerror("CRT9007 '%s' Screen: %u x %u @ %f Hz\n", tag(), horiz_pix_total, vert_pix_total, 1 / ATTOSECONDS_TO_DOUBLE(refresh)); |
| 436 | | logerror("CRT9007 '%s' Visible Area: (%u, %u) - (%u, %u)\n", tag(), visarea.min_x, visarea.min_y, visarea.max_x, visarea.max_y); |
| 437 | | } |
| 432 | //if (LOG) |
| 433 | //{ |
| 434 | // logerror("CRT9007 '%s' Screen: %u x %u @ %f Hz\n", tag(), horiz_pix_total, vert_pix_total, 1 / ATTOSECONDS_TO_DOUBLE(refresh)); |
| 435 | // logerror("CRT9007 '%s' Visible Area: (%u, %u) - (%u, %u)\n", tag(), visarea.min_x, visarea.min_y, visarea.max_x, visarea.max_y); |
| 436 | //} |
| 438 | 437 | |
| 439 | | m_screen->configure(horiz_pix_total, vert_pix_total, visarea, refresh); |
| 438 | //m_screen->configure(horiz_pix_total, vert_pix_total, visarea, refresh); |
| 440 | 439 | |
| 441 | 440 | m_hsync_timer->adjust(m_screen->time_until_pos(0, 0)); |
| 442 | 441 | m_vsync_timer->adjust(m_screen->time_until_pos(0, 0)); |
| 443 | 442 | m_vlt_timer->adjust(m_screen->time_until_pos(0, m_vlt_start), 1); |
| 444 | 443 | m_drb_timer->adjust(m_screen->time_until_pos(0, 0)); |
| 445 | | #endif |
| 446 | 444 | } |
| 447 | 445 | |
| 448 | 446 | |
trunk/src/mess/drivers/tandy2k.c
| r29435 | r29436 | |
| 13 | 13 | - floppy |
| 14 | 14 | - HDL is also connected to WP/TS input where TS is used to detect motor status |
| 15 | 15 | - 3 second motor off delay timer |
| 16 | | - DMA |
| 17 | 16 | - video (video RAM is at memory top - 0x1400, i.e. 0x1ec00) |
| 18 | 17 | - keyboard ROM |
| 19 | 18 | - hires graphics board |
| r29435 | r29436 | |
| 25 | 24 | |
| 26 | 25 | #include "includes/tandy2k.h" |
| 27 | 26 | |
| 27 | #define LOG 1 |
| 28 | |
| 28 | 29 | // Read/Write Handlers |
| 29 | 30 | |
| 30 | 31 | void tandy2k_state::update_drq() |
| r29435 | r29436 | |
| 50 | 51 | void tandy2k_state::dma_request(int line, int state) |
| 51 | 52 | { |
| 52 | 53 | m_busdmarq[line] = state; |
| 54 | |
| 53 | 55 | update_drq(); |
| 54 | 56 | } |
| 55 | 57 | |
| r29435 | r29436 | |
| 119 | 121 | |
| 120 | 122 | 0 KBEN keyboard enable |
| 121 | 123 | 1 EXTCLK external baud rate clock |
| 122 | | 2 SPKRGATE enable periodic m_speaker output |
| 123 | | 3 SPKRDATA direct output to m_speaker |
| 124 | 2 SPKRGATE enable periodic speaker output |
| 125 | 3 SPKRDATA direct output to speaker |
| 124 | 126 | 4 RFRQGATE enable refresh and baud rate clocks |
| 125 | 127 | 5 FDCRESET* reset 8272 |
| 126 | 128 | 6 TMRIN0 enable 80186 timer 0 |
| r29435 | r29436 | |
| 128 | 130 | |
| 129 | 131 | */ |
| 130 | 132 | |
| 133 | if (LOG) logerror("ENABLE %02x\n", data); |
| 134 | |
| 131 | 135 | // keyboard enable |
| 132 | 136 | m_kb->power_w(BIT(data, 0)); |
| 133 | 137 | |
| 134 | 138 | // external baud rate clock |
| 135 | 139 | m_extclk = BIT(data, 1); |
| 136 | 140 | |
| 137 | | // m_speaker gate |
| 141 | // speaker gate |
| 138 | 142 | m_pit->write_gate0(BIT(data, 2)); |
| 139 | 143 | |
| 140 | | // m_speaker data |
| 144 | // speaker data |
| 141 | 145 | m_spkrdata = BIT(data, 3); |
| 142 | 146 | speaker_update(); |
| 143 | 147 | |
| r29435 | r29436 | |
| 146 | 150 | m_pit->write_gate2(BIT(data, 4)); |
| 147 | 151 | |
| 148 | 152 | // FDC reset |
| 149 | | if(!BIT(data, 5)) |
| 153 | if (!BIT(data, 5)) |
| 154 | { |
| 150 | 155 | m_fdc->reset(); |
| 156 | } |
| 151 | 157 | |
| 152 | 158 | // timer 0 enable |
| 153 | 159 | m_maincpu->tmrin0_w(BIT(data, 6)); |
| r29435 | r29436 | |
| 173 | 179 | |
| 174 | 180 | */ |
| 175 | 181 | |
| 182 | if (LOG) logerror("DMA MUX %02x\n", data); |
| 183 | |
| 176 | 184 | m_dma_mux = data; |
| 177 | 185 | |
| 178 | 186 | // check for DMA error |
| r29435 | r29436 | |
| 228 | 236 | |
| 229 | 237 | READ8_MEMBER( tandy2k_state::fldtc_r ) |
| 230 | 238 | { |
| 239 | if (LOG) logerror("FLDTC\n"); |
| 240 | |
| 231 | 241 | fldtc_w(space, 0, 0); |
| 232 | 242 | |
| 233 | 243 | return 0; |
| r29435 | r29436 | |
| 256 | 266 | |
| 257 | 267 | */ |
| 258 | 268 | |
| 269 | if (LOG) logerror("Address Control %02x\n", data); |
| 270 | |
| 259 | 271 | // video access |
| 260 | 272 | m_vram_base = data & 0x1f; |
| 261 | 273 | |
| r29435 | r29436 | |
| 281 | 293 | |
| 282 | 294 | // video source select |
| 283 | 295 | m_vidouts = BIT(data, 7); |
| 284 | | |
| 285 | | logerror("Address Control %02x\n", data); |
| 286 | 296 | } |
| 287 | 297 | |
| 288 | 298 | // Memory Maps |
| r29435 | r29436 | |
| 297 | 307 | |
| 298 | 308 | static ADDRESS_MAP_START( tandy2k_io, AS_IO, 16, tandy2k_state ) |
| 299 | 309 | ADDRESS_MAP_UNMAP_HIGH |
| 300 | | AM_RANGE(0x00000, 0x00001) AM_READWRITE8(enable_r, enable_w, 0x00ff) |
| 301 | | AM_RANGE(0x00002, 0x00003) AM_WRITE8(dma_mux_w, 0x00ff) |
| 302 | | AM_RANGE(0x00004, 0x00005) AM_READWRITE8(fldtc_r, fldtc_w, 0x00ff) |
| 303 | | AM_RANGE(0x00010, 0x00013) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, data_r, data_w, 0x00ff) |
| 304 | | AM_RANGE(0x00030, 0x00033) AM_DEVICE8(I8272A_TAG, i8272a_device, map, 0x00ff) |
| 305 | | AM_RANGE(0x00040, 0x00047) AM_DEVREADWRITE8(I8253_TAG, pit8253_device, read, write, 0x00ff) |
| 306 | | AM_RANGE(0x00052, 0x00053) AM_READ8(kbint_clr_r, 0x00ff) |
| 307 | | AM_RANGE(0x00050, 0x00057) AM_DEVREADWRITE8(I8255A_TAG, i8255_device, read, write, 0x00ff) |
| 308 | | AM_RANGE(0x00060, 0x00063) AM_DEVREADWRITE8(I8259A_0_TAG, pic8259_device, read, write, 0x00ff) |
| 309 | | AM_RANGE(0x00070, 0x00073) AM_DEVREADWRITE8(I8259A_1_TAG, pic8259_device, read, write, 0x00ff) |
| 310 | | AM_RANGE(0x00080, 0x00081) AM_DEVREADWRITE8(I8272A_TAG, i8272a_device, mdma_r, mdma_w, 0x00ff) |
| 310 | AM_RANGE(0x00000, 0x00001) AM_MIRROR(0x8) AM_READWRITE8(enable_r, enable_w, 0x00ff) |
| 311 | AM_RANGE(0x00002, 0x00003) AM_MIRROR(0x8) AM_WRITE8(dma_mux_w, 0x00ff) |
| 312 | AM_RANGE(0x00004, 0x00005) AM_MIRROR(0x8) AM_READWRITE8(fldtc_r, fldtc_w, 0x00ff) |
| 313 | AM_RANGE(0x00010, 0x00013) AM_MIRROR(0xc) AM_DEVREADWRITE8(I8251A_TAG, i8251_device, data_r, data_w, 0x00ff) |
| 314 | AM_RANGE(0x00030, 0x00033) AM_MIRROR(0xc) AM_DEVICE8(I8272A_TAG, i8272a_device, map, 0x00ff) |
| 315 | AM_RANGE(0x00040, 0x00047) AM_MIRROR(0x8) AM_DEVREADWRITE8(I8253_TAG, pit8253_device, read, write, 0x00ff) |
| 316 | AM_RANGE(0x00052, 0x00053) AM_MIRROR(0x8) AM_READ8(kbint_clr_r, 0x00ff) |
| 317 | AM_RANGE(0x00050, 0x00057) AM_MIRROR(0x8) AM_DEVREADWRITE8(I8255A_TAG, i8255_device, read, write, 0x00ff) |
| 318 | AM_RANGE(0x00060, 0x00063) AM_MIRROR(0xc) AM_DEVREADWRITE8(I8259A_0_TAG, pic8259_device, read, write, 0x00ff) |
| 319 | AM_RANGE(0x00070, 0x00073) AM_MIRROR(0xc) AM_DEVREADWRITE8(I8259A_1_TAG, pic8259_device, read, write, 0x00ff) |
| 320 | AM_RANGE(0x00080, 0x00081) AM_MIRROR(0xe) AM_DEVREADWRITE8(I8272A_TAG, i8272a_device, mdma_r, mdma_w, 0x00ff) |
| 311 | 321 | // AM_RANGE(0x00100, 0x0017f) AM_DEVREADWRITE8(CRT9007_TAG, crt9007_t, read, write, 0x00ff) AM_WRITE8(addr_ctrl_w, 0xff00) |
| 312 | 322 | AM_RANGE(0x00100, 0x0017f) AM_READWRITE(vpac_r, vpac_w) |
| 313 | 323 | // AM_RANGE(0x00180, 0x00180) AM_READ8(hires_status_r, 0x00ff) |
| r29435 | r29436 | |
| 516 | 526 | |
| 517 | 527 | WRITE_LINE_MEMBER( tandy2k_state::rfrqpulse_w ) |
| 518 | 528 | { |
| 529 | // memory refresh counter up |
| 519 | 530 | } |
| 520 | 531 | |
| 521 | 532 | // Intel 8255A Interface |
| r29435 | r29436 | |
| 786 | 797 | MCFG_DEVICE_ADD(CRT9021B_TAG, CRT9021, XTAL_16MHz*28/20) |
| 787 | 798 | MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) |
| 788 | 799 | |
| 789 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("vidldsh", tandy2k_state, vidldsh_tick, attotime::from_hz(XTAL_16MHz*28/20/8)) |
| 800 | MCFG_TIMER_DRIVER_ADD("vidldsh", tandy2k_state, vidldsh_tick) |
| 790 | 801 | |
| 791 | 802 | // sound hardware |
| 792 | 803 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| r29435 | r29436 | |
| 806 | 817 | MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL) |
| 807 | 818 | MCFG_RS232_RXD_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd)) |
| 808 | 819 | MCFG_RS232_DSR_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_dsr)) |
| 820 | // TODO pin 15 external transmit clock |
| 821 | // TODO pin 17 external receiver clock |
| 809 | 822 | |
| 810 | 823 | MCFG_DEVICE_ADD(I8253_TAG, PIT8253, 0) |
| 811 | 824 | MCFG_PIT8253_CLK0(XTAL_16MHz/16) |
| 812 | 825 | MCFG_PIT8253_OUT0_HANDLER(WRITELINE(tandy2k_state, outspkr_w)) |
| 813 | 826 | MCFG_PIT8253_CLK1(XTAL_16MHz/8) |
| 814 | 827 | MCFG_PIT8253_OUT1_HANDLER(WRITELINE(tandy2k_state, intbrclk_w)) |
| 815 | | MCFG_PIT8253_CLK2(XTAL_16MHz/8) |
| 816 | | MCFG_PIT8253_OUT2_HANDLER(WRITELINE(tandy2k_state, rfrqpulse_w)) |
| 828 | //MCFG_PIT8253_CLK2(XTAL_16MHz/8) |
| 829 | //MCFG_PIT8253_OUT2_HANDLER(WRITELINE(tandy2k_state, rfrqpulse_w)) |
| 817 | 830 | |
| 818 | 831 | MCFG_PIC8259_ADD(I8259A_0_TAG, DEVWRITELINE(I80186_TAG, i80186_cpu_device, int0_w), VCC, NULL) |
| 819 | 832 | |