mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
114 lines
2.8 KiB
C++
114 lines
2.8 KiB
C++
// license:BSD-3-Clause
|
|
// copyright-holders:hap
|
|
/*
|
|
|
|
Rockwell B5000 MCU
|
|
|
|
*/
|
|
|
|
#ifndef MAME_CPU_RW5000_B5000_H
|
|
#define MAME_CPU_RW5000_B5000_H
|
|
|
|
#pragma once
|
|
|
|
#include "rw5000base.h"
|
|
|
|
// pinout reference (preliminary)
|
|
|
|
/*
|
|
_____ _____
|
|
VSS 1 |* \_/ | 42 NC
|
|
CLK? 2 | | 41 NC
|
|
VC? 3 | | 40 NC
|
|
NC 4 | | 39 VDD
|
|
NC 5 | | 38 STR8
|
|
NC 6 | | 37 STR7
|
|
NC 7 | | 36 STR6
|
|
NC 8 | | 35 STR5
|
|
NC 9 | | 34 STR4
|
|
NC 10 | B5000 | 33 STR3
|
|
KB3 11 | | 32 STR2
|
|
DIN1? 12 | | 31 STR1
|
|
KB1 13 | | 30 STR0
|
|
KB2 14 | | 29 SEG7
|
|
KB4 15 | | 28 SEG6
|
|
NC 16 | | 27 SEG5
|
|
NC 17 | | 26 SEG4
|
|
NC 18 | | 25 SEG3
|
|
NC 19 | | 24 SEG2
|
|
NC 20 | _ | 23 SEG1
|
|
NC 21 |_____/ \_____| 22 SEG0
|
|
|
|
*/
|
|
|
|
class b5000_cpu_device : public rw5000_base_device
|
|
{
|
|
public:
|
|
b5000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
|
|
|
protected:
|
|
b5000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
|
|
|
|
// device_disasm_interface overrides
|
|
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
|
|
|
|
// device_execute_interface overrides
|
|
virtual void execute_one() override;
|
|
|
|
virtual bool op_canskip(u8 op) override { return !op_is_tl(op); }
|
|
virtual bool op_is_tl(u8 op);
|
|
virtual bool op_is_lb(u8 op);
|
|
virtual bool op_is_atb(u8 op);
|
|
virtual void reset_pc() override { set_pc(7, 0); }
|
|
virtual u8 sr_page() { return 0; }
|
|
virtual u16 decode_digit(u8 data);
|
|
|
|
void program_448x8(address_map &map);
|
|
void data_45x4(address_map &map);
|
|
|
|
// opcode helpers
|
|
u8 ram_r();
|
|
void ram_w(u8 data);
|
|
void set_pc(u8 pu, u8 pl);
|
|
void set_bu(u8 bu);
|
|
void seg_w(u16 seg);
|
|
void op_illegal();
|
|
|
|
// opcode handlers
|
|
virtual void op_tl();
|
|
virtual void op_tra_step() override;
|
|
virtual void op_ret_step() override;
|
|
virtual void op_nop();
|
|
|
|
virtual void op_lb(u8 bl);
|
|
virtual void op_atb();
|
|
virtual void op_lda();
|
|
virtual void op_exc0();
|
|
virtual void op_excp();
|
|
virtual void op_excm();
|
|
virtual void op_sm();
|
|
virtual void op_rsm();
|
|
virtual void op_tm();
|
|
virtual void op_tam();
|
|
|
|
virtual void op_lax();
|
|
virtual void op_comp();
|
|
virtual void op_adx();
|
|
virtual void op_add();
|
|
virtual void op_sc();
|
|
virtual void op_rsc();
|
|
virtual void op_tc();
|
|
|
|
virtual void op_kseg();
|
|
virtual void op_atb_step() override;
|
|
virtual void op_tkb();
|
|
virtual void op_tkbs();
|
|
virtual void op_read();
|
|
virtual void op_tdin();
|
|
};
|
|
|
|
|
|
DECLARE_DEVICE_TYPE(B5000, b5000_cpu_device)
|
|
|
|
#endif // MAME_CPU_RW5000_B5000_H
|