mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
quick draft/boilerplate code for the Patinho Feio CPU emulation module
This commit is contained in:
parent
93a3f1c374
commit
d1abdea08c
73
src/devices/cpu/patinhofeio/patinho_feio.cpp
Normal file
73
src/devices/cpu/patinhofeio/patinho_feio.cpp
Normal file
@ -0,0 +1,73 @@
|
||||
// license:GPL2+
|
||||
// copyright-holders:Felipe Sanches
|
||||
/*
|
||||
Patinho Feio
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "debugger.h"
|
||||
#include "patinho_feio.h"
|
||||
|
||||
#define CI m_ci //The program counter is called "contador de instrucoes" in portuguese
|
||||
#define ACC m_acc
|
||||
|
||||
#define ADDRESS_MASK_4K 0xFFF
|
||||
#define INCREMENT_CI_4K (CI = (CI+1) & ADDRESS_MASK_4K)
|
||||
|
||||
const device_type PATINHO_FEIO = &device_creator<patinho_feio_device>;
|
||||
|
||||
patinho_feio_device::patinho_feio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: cpu_device(mconfig, PATINHO_FEIO, "PATINHO FEIO", tag, owner, clock, "patinho_feio_cpu", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
void patinho_feio_device::device_start()
|
||||
{
|
||||
m_ci = 0;
|
||||
m_acc = 0;
|
||||
|
||||
m_program = &space(AS_PROGRAM);
|
||||
|
||||
save_item(NAME(m_ci));
|
||||
save_item(NAME(m_acc));
|
||||
|
||||
// Register state for debugger
|
||||
state_add( PATINHO_FEIO_PC, "CI", m_pc ).mask(0xFFF);
|
||||
state_add( PATINHO_FEIO_ACC, "ACC", m_acc ).mask(0xFF);
|
||||
}
|
||||
|
||||
|
||||
void patinho_feio_device::device_reset()
|
||||
{
|
||||
}
|
||||
/* execute instructions on this CPU until icount expires */
|
||||
void patinho_feio_device::execute_run()
|
||||
{
|
||||
do
|
||||
{
|
||||
debugger_instruction_hook(this, CI);
|
||||
|
||||
if ((! m_run)){
|
||||
m_icount = 0; /* if processor is stopped, just burn cycles */
|
||||
} else {
|
||||
execute_instruction();
|
||||
m_icount --;
|
||||
}
|
||||
}
|
||||
while (m_icount > 0);
|
||||
}
|
||||
|
||||
|
||||
/* execute one instruction */
|
||||
void patinho_feio_device::execute_instruction()
|
||||
{
|
||||
// char opcode = patinho_feio_read(CI);
|
||||
INCREMENT_CI_4K;
|
||||
}
|
||||
|
||||
offs_t patinho_feio_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
|
||||
{
|
||||
extern CPU_DISASSEMBLE( patinho_feio );
|
||||
return CPU_DISASSEMBLE_NAME(patinho_feio)(this, buffer, pc, oprom, opram, options);
|
||||
}
|
||||
|
61
src/devices/cpu/patinhofeio/patinho_feio.h
Normal file
61
src/devices/cpu/patinhofeio/patinho_feio.h
Normal file
@ -0,0 +1,61 @@
|
||||
// license:GPL2+
|
||||
// copyright-holders:Felipe Sanches
|
||||
#pragma once
|
||||
|
||||
#ifndef __PATINHOFEIO_H__
|
||||
#define __PATINHOFEIO_H__
|
||||
|
||||
/* register IDs */
|
||||
enum
|
||||
{
|
||||
PATINHOFEIO_CI=1, PATINHOFEIO_ACC
|
||||
};
|
||||
|
||||
class patinho_feio_device : public cpu_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
patinho_feio_device(const machine_config &mconfig, const char *_tag, device_t *_owner, UINT32 _clock);
|
||||
|
||||
protected:
|
||||
virtual void execute_run();
|
||||
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
|
||||
|
||||
address_space_config m_program_config;
|
||||
|
||||
/* processor registers */
|
||||
int m_acc; /* accumulator (8 bits) */
|
||||
int m_ci; /* program counter (12 bits) (CI stands for "Contador de Instrucao")*/
|
||||
|
||||
/* processor state flip-flops */
|
||||
unsigned int m_run; /* processor is running */
|
||||
|
||||
int m_address_mask; /* address mask */
|
||||
int m_ir_mask; /* IR mask */
|
||||
int m_icount;
|
||||
|
||||
address_space *m_program;
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
// device_execute_interface overrides
|
||||
virtual UINT32 execute_min_cycles() const { return 1; }
|
||||
virtual UINT32 execute_max_cycles() const { return 3; }
|
||||
|
||||
// device_memory_interface overrides
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; }
|
||||
|
||||
// device_disasm_interface overrides
|
||||
virtual UINT32 disasm_min_opcode_bytes() const { return 4; }
|
||||
virtual UINT32 disasm_max_opcode_bytes() const { return 4; }
|
||||
|
||||
private:
|
||||
void execute_instruction();
|
||||
};
|
||||
|
||||
|
||||
extern const device_type PATINHO_FEIO;
|
||||
|
||||
#endif /* __PATINHOFEIO_H__ */
|
36
src/devices/cpu/patinhofeio/patinho_feio_dasm.cpp
Normal file
36
src/devices/cpu/patinhofeio/patinho_feio_dasm.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
// license:GPL2+
|
||||
// copyright-holders:Felipe Sanches
|
||||
#include "emu.h"
|
||||
#include "cpu/patinhofeio/patinho_feio.h"
|
||||
|
||||
CPU_DISASSEMBLE( patinho_feio )
|
||||
{
|
||||
// int md;
|
||||
// int x;
|
||||
// md = oprom[1] << 8 | oprom[0];
|
||||
// x = md & 0xFFF;
|
||||
|
||||
//single-opcode instructions
|
||||
switch (oprom[0])
|
||||
{
|
||||
case 0x80:
|
||||
sprintf (buffer, "LIMPO");
|
||||
break;
|
||||
case 0x85:
|
||||
sprintf (buffer, "INC");
|
||||
break;
|
||||
case 0x96:
|
||||
sprintf (buffer, "SV 1");
|
||||
break;
|
||||
case 0x99:
|
||||
sprintf (buffer, "TRE");
|
||||
break;
|
||||
case 0x9D:
|
||||
sprintf (buffer, "PARE");
|
||||
break;
|
||||
default:
|
||||
sprintf (buffer, "illegal");
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
Loading…
Reference in New Issue
Block a user