1 // license:BSD-3-Clause 2 // copyright-holders:Nathan Woods, R. Belmont 3 /***************************************************************************** 4 * 5 * includes/bebox.h 6 * 7 * BeBox 8 * 9 ****************************************************************************/ 10 11 #ifndef MAME_INCLUDES_BEBOX_H 12 #define MAME_INCLUDES_BEBOX_H 13 14 #include "cpu/powerpc/ppc.h" 15 16 #include "imagedev/floppy.h" 17 #include "machine/53c810.h" 18 #include "machine/am9517a.h" 19 #include "machine/idectrl.h" 20 #include "machine/ins8250.h" 21 #include "machine/pic8259.h" 22 #include "machine/pit8253.h" 23 #include "machine/ram.h" 24 #include "machine/upd765.h" 25 #include "machine/intelfsh.h" 26 #include "video/pc_vga.h" 27 28 #include "bus/lpci/pci.h" 29 30 31 class bebox_state : public driver_device 32 { 33 public: 34 enum 35 { 36 TIMER_GET_DEVICES 37 }; 38 bebox_state(const machine_config & mconfig,device_type type,const char * tag)39 bebox_state(const machine_config &mconfig, device_type type, const char *tag) 40 : driver_device(mconfig, type, tag) 41 , m_ppc(*this, "ppc%u", 1U) 42 , m_lsi53c810(*this, "lsi53c810") 43 , m_dma8237(*this, "dma8237_%u", 1U) 44 , m_pic8259(*this, "pic8259_%u", 1U) 45 , m_pit8254(*this, "pit8254") 46 , m_ram(*this, RAM_TAG) 47 , m_smc37c78(*this, "smc37c78") 48 , m_flash(*this, "flash") 49 , m_pcibus(*this, "pcibus") 50 , m_vga(*this, "vga") 51 { 52 } 53 54 required_device_array<ppc_device, 2> m_ppc; 55 required_device<lsi53c810_device> m_lsi53c810; 56 required_device_array<am9517a_device, 2> m_dma8237; 57 required_device_array<pic8259_device, 2> m_pic8259; 58 required_device<pit8254_device> m_pit8254; 59 required_device<ram_device> m_ram; 60 required_device<smc37c78_device> m_smc37c78; 61 required_device<fujitsu_29f016a_device> m_flash; 62 required_device<pci_bus_device> m_pcibus; 63 required_device<vga_device> m_vga; 64 uint32_t m_cpu_imask[2]; 65 uint32_t m_interrupts; 66 uint32_t m_crossproc_interrupts; 67 int m_dma_channel; 68 uint16_t m_dma_offset[2][4]; 69 uint8_t m_at_pages[0x10]; 70 uint32_t m_scsi53c810_data[0x100 / 4]; 71 void init_bebox(); 72 virtual void machine_start() override; 73 virtual void machine_reset() override; 74 DECLARE_WRITE_LINE_MEMBER(bebox_pic8259_master_set_int_line); 75 DECLARE_WRITE_LINE_MEMBER(bebox_pic8259_slave_set_int_line); 76 DECLARE_WRITE_LINE_MEMBER(bebox_dma_hrq_changed); 77 DECLARE_WRITE_LINE_MEMBER(bebox_dma8237_out_eop); 78 DECLARE_WRITE_LINE_MEMBER(pc_dack0_w); 79 DECLARE_WRITE_LINE_MEMBER(pc_dack1_w); 80 DECLARE_WRITE_LINE_MEMBER(pc_dack2_w); 81 DECLARE_WRITE_LINE_MEMBER(pc_dack3_w); 82 DECLARE_WRITE_LINE_MEMBER(bebox_timer0_w); 83 uint64_t bebox_cpu0_imask_r(); 84 uint64_t bebox_cpu1_imask_r(); 85 uint64_t bebox_interrupt_sources_r(); 86 uint64_t bebox_crossproc_interrupts_r(address_space &space); 87 uint64_t bebox_interrupt_ack_r(); 88 uint8_t bebox_page_r(offs_t offset); 89 uint8_t bebox_80000480_r(); 90 uint8_t bebox_flash_r(offs_t offset); 91 92 void bebox_cpu0_imask_w(offs_t offset, uint64_t data, uint64_t mem_mask = ~0); 93 void bebox_cpu1_imask_w(offs_t offset, uint64_t data, uint64_t mem_mask = ~0); 94 void bebox_crossproc_interrupts_w(offs_t offset, uint64_t data, uint64_t mem_mask = ~0); 95 void bebox_processor_resets_w(uint64_t data); 96 void bebox_page_w(offs_t offset, uint8_t data); 97 void bebox_80000480_w(offs_t offset, uint8_t data); 98 void bebox_flash_w(offs_t offset, uint8_t data); 99 uint8_t at_dma8237_1_r(offs_t offset); 100 void at_dma8237_1_w(offs_t offset, uint8_t data); 101 uint8_t bebox_dma_read_byte(offs_t offset); 102 void bebox_dma_write_byte(offs_t offset, uint8_t data); 103 uint64_t scsi53c810_r(offs_t offset, uint64_t mem_mask = ~0); 104 void scsi53c810_w(offs_t offset, uint64_t data, uint64_t mem_mask = ~0); 105 uint64_t bb_slave_64be_r(offs_t offset, uint64_t mem_mask = ~0); 106 107 DECLARE_WRITE_LINE_MEMBER(bebox_ide_interrupt); 108 109 DECLARE_WRITE_LINE_MEMBER(bebox_keyboard_interrupt); 110 111 DECLARE_WRITE_LINE_MEMBER( fdc_interrupt ); 112 DECLARE_FLOPPY_FORMATS( floppy_formats ); 113 114 uint32_t scsi_fetch(uint32_t dsp); 115 void scsi_irq_callback(int state); 116 void scsi_dma_callback(uint32_t src, uint32_t dst, int length, int byteswap); 117 118 void bebox_set_irq_bit(unsigned int interrupt_bit, int val); 119 void bebox_update_interrupts(); 120 121 void mpc105_config(device_t *device); 122 void cirrus_config(device_t *device); 123 124 pci_connector_device & add_pci_slot(machine_config &config, const char *tag, size_t index, const char *default_tag); 125 void bebox_peripherals(machine_config &config); 126 void bebox(machine_config &config); 127 void bebox2(machine_config &config); 128 129 void main_mem(address_map &map); 130 void slave_mem(address_map &map); 131 protected: 132 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 133 134 #ifdef UNUSED_LEGACY_CODE 135 uint32_t scsi53c810_pci_read(int function, int offset, uint32_t mem_mask); 136 void scsi53c810_pci_write(int function, int offset, uint32_t data, uint32_t mem_mask); 137 #endif 138 }; 139 140 141 #endif // MAME_INCLUDES_BEBOX_H 142