trunk/src/mess/drivers/tandy2k.c
| r29314 | r29315 | |
| 12 | 12 | |
| 13 | 13 | TODO: |
| 14 | 14 | |
| 15 | | - video |
| 15 | - video (video RAM is at memory top - 0x1400, i.e. 0x1ec00) |
| 16 | - DMA |
| 17 | - floppy |
| 16 | 18 | - keyboard ROM |
| 17 | 19 | - hires graphics board |
| 18 | | - floppy 720K DSQD |
| 19 | | - DMA |
| 20 | 20 | - WD1010 |
| 21 | 21 | - hard disk |
| 22 | 22 | - mouse |
| r29314 | r29315 | |
| 27 | 27 | |
| 28 | 28 | // Read/Write Handlers |
| 29 | 29 | |
| 30 | void tandy2k_state::update_drq() |
| 31 | { |
| 32 | int drq0 = CLEAR_LINE; |
| 33 | int drq1 = CLEAR_LINE; |
| 34 | |
| 35 | for (int i = 0; i < 4; i++) |
| 36 | { |
| 37 | if (BIT(m_dma_mux, 0 + i)) |
| 38 | { |
| 39 | if (BIT(m_dma_mux, 4 + i)) |
| 40 | drq1 |= m_busdmarq[i]; |
| 41 | else |
| 42 | drq0 |= m_busdmarq[i]; |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | m_maincpu->drq0_w(drq0); |
| 47 | m_maincpu->drq1_w(drq1); |
| 48 | } |
| 49 | |
| 30 | 50 | void tandy2k_state::dma_request(int line, int state) |
| 31 | 51 | { |
| 52 | m_busdmarq[line] = state; |
| 53 | update_drq(); |
| 32 | 54 | } |
| 33 | 55 | |
| 34 | 56 | void tandy2k_state::speaker_update() |
| r29314 | r29315 | |
| 165 | 187 | int dme = (drq0 > 2) || (drq1 > 2); |
| 166 | 188 | |
| 167 | 189 | m_pic1->ir6_w(dme); |
| 190 | |
| 191 | update_drq(); |
| 168 | 192 | } |
| 169 | 193 | |
| 170 | 194 | READ8_MEMBER( tandy2k_state::kbint_clr_r ) |
| r29314 | r29315 | |
| 656 | 680 | |
| 657 | 681 | void tandy2k_state::machine_start() |
| 658 | 682 | { |
| 659 | | // memory banking |
| 660 | 683 | address_space &program = m_maincpu->space(AS_PROGRAM); |
| 661 | 684 | UINT8 *ram = m_ram->pointer(); |
| 662 | 685 | int ram_size = m_ram->size(); |
| r29314 | r29315 | |
| 665 | 688 | |
| 666 | 689 | m_char_ram.allocate(0x1000); |
| 667 | 690 | |
| 691 | // HACK these should be connected to FDC HLD output |
| 692 | m_floppy0->mon_w(0); |
| 693 | m_floppy1->mon_w(0); |
| 694 | |
| 668 | 695 | // register for state saving |
| 669 | 696 | save_item(NAME(m_dma_mux)); |
| 670 | 697 | save_item(NAME(m_kbdclk)); |
| r29314 | r29315 | |
| 704 | 731 | MCFG_DEVICE_ADDRESS_MAP(AS_0, vpac_mem) |
| 705 | 732 | MCFG_CRT9007_CHARACTER_WIDTH(10) |
| 706 | 733 | MCFG_CRT9007_INT_CALLBACK(DEVWRITELINE(I8259A_1_TAG, pic8259_device, ir1_w)) |
| 707 | | //MCFG_CRT9007_DMAR_CALLBACK(80186 HOLD) |
| 708 | 734 | MCFG_CRT9007_VS_CALLBACK(DEVWRITELINE(CRT9021B_TAG, crt9021_t, vsync_w)) |
| 709 | 735 | MCFG_CRT9007_VLT_CALLBACK(WRITELINE(tandy2k_state, vpac_vlt_w)) |
| 710 | 736 | MCFG_CRT9007_CURS_CALLBACK(DEVWRITELINE(CRT9021B_TAG, crt9021_t, cursor_w)) |
| r29314 | r29315 | |
| 758 | 784 | MCFG_PIC8259_ADD(I8259A_0_TAG, DEVWRITELINE(I80186_TAG, i80186_cpu_device, int0_w), VCC, NULL) |
| 759 | 785 | MCFG_PIC8259_ADD(I8259A_1_TAG, DEVWRITELINE(I80186_TAG, i80186_cpu_device, int1_w), VCC, NULL) |
| 760 | 786 | MCFG_I8272A_ADD(I8272A_TAG, true) |
| 787 | downcast<i8272a_device *>(device)->set_select_lines_connected(true); |
| 761 | 788 | MCFG_UPD765_INTRQ_CALLBACK(DEVWRITELINE(I8259A_0_TAG, pic8259_device, ir4_w)) |
| 762 | 789 | MCFG_UPD765_DRQ_CALLBACK(WRITELINE(tandy2k_state, fdc_drq)) |
| 763 | 790 | MCFG_FLOPPY_DRIVE_ADD(I8272A_TAG ":0", tandy2k_floppies, "525qd", floppy_image_device::default_floppy_formats) |