1 // license:BSD-3-Clause 2 // copyright-holders:R. Belmont, ElSemi 3 4 #include "machine/bankdev.h" 5 #include "machine/namcomcu.h" 6 #include "machine/timer.h" 7 #include "screen.h" 8 #include "video/namco_c123tmap.h" 9 #include "video/namco_c116.h" 10 #include "video/namco_c169roz.h" 11 #include "video/namco_c355spr.h" 12 #include "emupal.h" 13 14 class namcofl_state : public driver_device 15 { 16 public: namcofl_state(const machine_config & mconfig,device_type type,const char * tag)17 namcofl_state(const machine_config &mconfig, device_type type, const char *tag) : 18 driver_device(mconfig, type, tag), 19 m_maincpu(*this, "maincpu"), 20 m_mainbank(*this, "mainbank_%u", 1U), 21 m_c116(*this, "c116"), 22 m_screen(*this, "screen"), 23 m_c123tmap(*this, "c123tmap"), 24 m_c169roz(*this, "c169roz"), 25 m_c355spr(*this, "c355spr"), 26 m_mcu(*this, "mcu"), 27 m_in0(*this, "IN0"), 28 m_in1(*this, "IN1"), 29 m_in2(*this, "IN2"), 30 m_misc(*this, "MISC"), 31 m_accel(*this, "ACCEL"), 32 m_brake(*this, "BRAKE"), 33 m_wheel(*this, "WHEEL"), 34 m_workram(*this, "workram"), 35 m_shareram(*this, "shareram", 32) { } 36 37 void namcofl(machine_config &config); 38 39 void driver_init() override; 40 41 private: 42 required_device<cpu_device> m_maincpu; 43 required_device_array<address_map_bank_device, 2> m_mainbank; 44 required_device<namco_c116_device> m_c116; 45 required_device<screen_device> m_screen; 46 required_device<namco_c123tmap_device> m_c123tmap; 47 required_device<namco_c169roz_device> m_c169roz; 48 required_device<namco_c355spr_device> m_c355spr; 49 required_device<m37710_cpu_device> m_mcu; 50 required_ioport m_in0; 51 required_ioport m_in1; 52 required_ioport m_in2; 53 required_ioport m_misc; 54 optional_ioport m_accel; 55 optional_ioport m_brake; 56 optional_ioport m_wheel; 57 emu_timer *m_raster_interrupt_timer; 58 emu_timer *m_vblank_interrupt_timer; 59 emu_timer *m_network_interrupt_timer; 60 required_shared_ptr<uint32_t> m_workram; 61 required_shared_ptr<uint16_t> m_shareram; 62 uint8_t m_mcu_port6; 63 uint32_t m_sprbank; 64 set_bank(unsigned bank)65 inline void set_bank(unsigned bank) 66 { 67 bank &= 1; 68 m_mainbank[0]->set_bank(bank); // ROM, RAM 69 m_mainbank[1]->set_bank(bank ^ 1); // RAM, ROM 70 } 71 72 uint32_t unk1_r(); 73 uint32_t network_r(); 74 uint32_t sysreg_r(); 75 void sysreg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); 76 void c116_w(offs_t offset, uint8_t data); 77 void mcu_shared_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 78 uint8_t port6_r(); 79 void port6_w(uint8_t data); 80 uint8_t port7_r(); 81 uint8_t dac7_r(); 82 uint8_t dac6_r(); 83 uint8_t dac5_r(); 84 uint8_t dac4_r(); 85 uint8_t dac3_r(); 86 uint8_t dac2_r(); 87 uint8_t dac1_r(); 88 uint8_t dac0_r(); 89 void spritebank_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); 90 DECLARE_MACHINE_START(namcofl); 91 DECLARE_MACHINE_RESET(namcofl); 92 DECLARE_VIDEO_START(namcofl); 93 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 94 TIMER_CALLBACK_MEMBER(network_interrupt_callback); 95 TIMER_CALLBACK_MEMBER(vblank_interrupt_callback); 96 TIMER_CALLBACK_MEMBER(raster_interrupt_callback); 97 TIMER_DEVICE_CALLBACK_MEMBER(mcu_irq0_cb); 98 TIMER_DEVICE_CALLBACK_MEMBER(mcu_irq2_cb); 99 int FLobjcode2tile(int code); 100 void TilemapCB(uint16_t code, int *tile, int *mask); 101 void RozCB(uint16_t code, int *tile, int *mask, int which); 102 void namcoc75_am(address_map &map); 103 void namcofl_mem(address_map &map); 104 void namcofl_bank_mem(address_map &map); 105 }; 106