Skip to content

Commit 0be4b63

Browse files
author
David Haywood
committed
preliminary disassembler
1 parent 84ee2b8 commit 0be4b63

File tree

7 files changed

+1407
-14
lines changed

7 files changed

+1407
-14
lines changed

hash/cassvisn_cart.xml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ The following games exist for this platform
3131
<publisher>Epoch</publisher>
3232
<part name="cart" interface="cassvisn_cart">
3333
<dataarea name="prg" size="0xfe0">
34-
<rom name="d777c005prog.bin" size="0xfe0" crc="75595fe2" sha1="74b9c9cff393fa2adff188cc48b331720f5146eb"/>
34+
<rom name="d777c005prog.bin" size="0xfe0" crc="75595fe2" sha1="74b9c9cff393fa2adff188cc48b331720f5146eb" loadflag="load16_word_swap"/>
3535
</dataarea>
3636
<dataarea name="pat" size="0x4d0">
3737
<rom name="d777c005_pat.bin" size="0x4d0" crc="bf085553" sha1="321262b6dd67789e03db8f03160cb1819529f43c"/>
@@ -45,7 +45,7 @@ The following games exist for this platform
4545
<publisher>Epoch</publisher>
4646
<part name="cart" interface="cassvisn_cart">
4747
<dataarea name="prg" size="0xfe0">
48-
<rom name="d778c_prog.bin" size="0xfe0" crc="55c13d5f" sha1="31ddc53648990fa7b5bfeca10572e6257c8da6e1"/>
48+
<rom name="d778c_prog.bin" size="0xfe0" crc="55c13d5f" sha1="31ddc53648990fa7b5bfeca10572e6257c8da6e1" loadflag="load16_word_swap"/>
4949
</dataarea>
5050
<dataarea name="pat" size="0x4d0">
5151
<rom name="d778c_pat.bin" size="0x4d0" crc="603fa141" sha1="e30f5ce85d8e2419025d52a7c733be2c127cc24f"/>
@@ -60,7 +60,7 @@ The following games exist for this platform
6060
<publisher>Epoch</publisher>
6161
<part name="cart" interface="cassvisn_cart">
6262
<dataarea name="prg" size="0xfe0">
63-
<rom name="d777c007prog.bin" size="0xfe0" crc="a91e525c" sha1="64144ce613823546825809313a19d12629dd1d31"/>
63+
<rom name="d777c007prog.bin" size="0xfe0" crc="a91e525c" sha1="64144ce613823546825809313a19d12629dd1d31" loadflag="load16_word_swap"/>
6464
</dataarea>
6565
<dataarea name="pat" size="0x4d0">
6666
<rom name="d777c007_pat.bin" size="0x4d0" crc="d343eca4" sha1="e8f0312de0d7f0934a66192c1aaa2c802532b021"/>
@@ -74,7 +74,7 @@ The following games exist for this platform
7474
<publisher>Epoch</publisher>
7575
<part name="cart" interface="cassvisn_cart">
7676
<dataarea name="prg" size="0xfe0">
77-
<rom name="d777c004prog.bin" size="0xfe0" crc="df7825cb" sha1="37b47cff161f721c32ab7bfde4d410f35da8dc54"/>
77+
<rom name="d777c004prog.bin" size="0xfe0" crc="df7825cb" sha1="37b47cff161f721c32ab7bfde4d410f35da8dc54" loadflag="load16_word_swap"/>
7878
</dataarea>
7979
<dataarea name="pat" size="0x4d0">
8080
<rom name="d777c004_pat.bin" size="0x4d0" crc="7df5eb39" sha1="c59f6febf5f51eebc0cc8d288df6b5319510ecbf"/>
@@ -89,7 +89,7 @@ The following games exist for this platform
8989
<publisher>Epoch</publisher>
9090
<part name="cart" interface="cassvisn_cart">
9191
<dataarea name="prg" size="0xfe0">
92-
<rom name="d774cprog.bin" size="0xfe0" crc="baecaf94" sha1="e46619f0bfc0c4764d16d453a7e2a889edfdd816"/>
92+
<rom name="d774cprog.bin" size="0xfe0" crc="baecaf94" sha1="e46619f0bfc0c4764d16d453a7e2a889edfdd816" loadflag="load16_word_swap"/>
9393
</dataarea>
9494
<dataarea name="pat" size="0x4d0">
9595
<rom name="d774c_pat.bin" size="0x4d0" crc="5efbc1f4" sha1="1c5774113c554e26e8d0b7002d2f7b9d79107c82"/>
@@ -103,7 +103,7 @@ The following games exist for this platform
103103
<publisher>Epoch</publisher>
104104
<part name="cart" interface="cassvisn_cart">
105105
<dataarea name="prg" size="0xfe0">
106-
<rom name="d777c008prog.bin" size="0xfe0" crc="92e18f7e" sha1="ff9a0791726056e9b69c3cb96769ced84f9a27b5"/>
106+
<rom name="d777c008prog.bin" size="0xfe0" crc="92e18f7e" sha1="ff9a0791726056e9b69c3cb96769ced84f9a27b5" loadflag="load16_word_swap"/>
107107
</dataarea>
108108
<dataarea name="pat" size="0x4d0">
109109
<rom name="d777c008_pat.bin" size="0x4d0" crc="e17f5d04" sha1="4393b21d3ef4e98ebf8d25ffb9b3f287fbbb23cb"/>
@@ -117,7 +117,7 @@ The following games exist for this platform
117117
<publisher>Epoch</publisher>
118118
<part name="cart" interface="cassvisn_cart">
119119
<dataarea name="prg" size="0xfe0">
120-
<rom name="d777c002prog.bin" size="0xfe0" crc="d37153a7" sha1="07bd9022477c4decb9a4ab62aa6f93a25be69a4f"/>
120+
<rom name="d777c002prog.bin" size="0xfe0" crc="d37153a7" sha1="07bd9022477c4decb9a4ab62aa6f93a25be69a4f" loadflag="load16_word_swap"/>
121121
</dataarea>
122122
<dataarea name="pat" size="0x4d0">
123123
<rom name="d777c002_pat.bin" size="0x4d0" crc="434209f8" sha1="e783cb265618c598ad614bf29c833f3e47ee6487"/>
@@ -131,7 +131,7 @@ The following games exist for this platform
131131
<publisher>Epoch</publisher>
132132
<part name="cart" interface="cassvisn_cart">
133133
<dataarea name="prg" size="0xfe0">
134-
<rom name="d777c009prog.bin" size="0xfe0" crc="6347a00d" sha1="7ab3a4a604868c8c1e4795115a796960f5397acb"/>
134+
<rom name="d777c009prog.bin" size="0xfe0" crc="6347a00d" sha1="7ab3a4a604868c8c1e4795115a796960f5397acb" loadflag="load16_word_swap"/>
135135
</dataarea>
136136
<dataarea name="pat" size="0x4d0">
137137
<rom name="d777c009_pat.bin" size="0x4d0" crc="75deffbd" sha1="4f4c25fa9f96a345f7128ff0b52de315117da549"/>
@@ -145,7 +145,7 @@ The following games exist for this platform
145145
<publisher>Epoch</publisher>
146146
<part name="cart" interface="cassvisn_cart">
147147
<dataarea name="prg" size="0xfe0">
148-
<rom name="d777c010prog.bin" size="0xfe0" crc="5cb25fcf" sha1="d9790faddc1b94f2c852a984008fb273b3444d62"/>
148+
<rom name="d777c010prog.bin" size="0xfe0" crc="5cb25fcf" sha1="d9790faddc1b94f2c852a984008fb273b3444d62" loadflag="load16_word_swap"/>
149149
</dataarea>
150150
<dataarea name="pat" size="0x4d0">
151151
<rom name="d777c010_pat.bin" size="0x4d0" crc="8b0c00bd" sha1="6fc01434fd92172eeaa7600742525ed69ecb90c2"/>
@@ -159,7 +159,7 @@ The following games exist for this platform
159159
<publisher>Epoch</publisher>
160160
<part name="cart" interface="cassvisn_cart">
161161
<dataarea name="prg" size="0xfe0">
162-
<rom name="d777c013prog.bin" size="0xfe0" crc="b5bc5cbf" sha1="8fc8aa1b3602974588b35bd59fb6ef5ffc690bc6"/>
162+
<rom name="d777c013prog.bin" size="0xfe0" crc="b5bc5cbf" sha1="8fc8aa1b3602974588b35bd59fb6ef5ffc690bc6" loadflag="load16_word_swap"/>
163163
</dataarea>
164164
<dataarea name="pat" size="0x4d0">
165165
<rom name="d777c013_pat.bin" size="0x4d0" crc="abf87caa" sha1="dd629bd43bea70ece9f9cd25b70eeef1caf72828"/>
@@ -173,7 +173,7 @@ The following games exist for this platform
173173
<publisher>Epoch</publisher>
174174
<part name="cart" interface="cassvisn_cart">
175175
<dataarea name="prg" size="0xfe0">
176-
<rom name="d777c015prog.bin" size="0xfe0" crc="13691241" sha1="6254351ec891ff21ff31912b0c9f6d7d39a1e64d"/>
176+
<rom name="d777c015prog.bin" size="0xfe0" crc="13691241" sha1="6254351ec891ff21ff31912b0c9f6d7d39a1e64d" loadflag="load16_word_swap"/>
177177
</dataarea>
178178
<dataarea name="pat" size="0x4d0">
179179
<rom name="d777c015_pat.bin" size="0x4d0" crc="51654eb2" sha1="e5e602a7c5dd2725b67235d401203ddd398bee9b"/>

scripts/src/cpu.lua

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3949,3 +3949,21 @@ if opt_tool(CPUS, "HT1130") then
39493949
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/ht1130/ht1130d.cpp")
39503950
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/ht1130/ht1130d.h")
39513951
end
3952+
3953+
--------------------------------------------------
3954+
-- UPD777
3955+
--@src/devices/cpu/upd777/upd777.h,CPUS["UPD777"] = true
3956+
--------------------------------------------------
3957+
3958+
if CPUS["UPD777"] then
3959+
files {
3960+
MAME_DIR .. "src/devices/cpu/upd777/upd777.cpp",
3961+
MAME_DIR .. "src/devices/cpu/upd777/upd777.h",
3962+
}
3963+
end
3964+
3965+
if opt_tool(CPUS, "UPD777") then
3966+
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/upd777/upd777dasm.cpp")
3967+
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/upd777/upd777dasm.h")
3968+
end
3969+

src/devices/cpu/upd777/upd777.cpp

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
// license:BSD-3-Clause
2+
// copyright-holders:David Haywood
3+
4+
#include "emu.h"
5+
#include "upd777.h"
6+
#include "upd777dasm.h"
7+
8+
#define LOG_UNHANDLED_OPS (1U << 1)
9+
10+
#define VERBOSE (LOG_UNHANDLED_OPS)
11+
#include "logmacro.h"
12+
13+
// device type definitions
14+
DEFINE_DEVICE_TYPE(UPD777, upd777_device, "upd777", "uPD777")
15+
16+
17+
18+
upd777_device::upd777_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, address_map_constructor data)
19+
: cpu_device(mconfig, type, tag, owner, clock)
20+
, m_space_config("program", ENDIANNESS_LITTLE, 16, 11, -1, address_map_constructor(FUNC(upd777_device::internal_map), this))
21+
, m_data_config("data", ENDIANNESS_LITTLE, 8, 8, 0, data)
22+
{
23+
}
24+
25+
upd777_device::upd777_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
26+
: upd777_device(mconfig, UPD777, tag, owner, clock, address_map_constructor(FUNC(upd777_device::internal_data_map), this))
27+
{
28+
}
29+
30+
std::unique_ptr<util::disasm_interface> upd777_device::create_disassembler()
31+
{
32+
return std::make_unique<upd777_disassembler>();
33+
}
34+
35+
device_memory_interface::space_config_vector upd777_device::memory_space_config() const
36+
{
37+
return space_config_vector{
38+
std::make_pair(AS_PROGRAM, &m_space_config),
39+
std::make_pair(AS_DATA, &m_data_config)
40+
};
41+
}
42+
43+
void upd777_device::internal_map(address_map &map)
44+
{
45+
map(0x000, 0x7ff).rom();
46+
}
47+
48+
void upd777_device::internal_data_map(address_map &map)
49+
{
50+
}
51+
52+
void upd777_device::device_start()
53+
{
54+
space(AS_PROGRAM).specific(m_space);
55+
space(AS_DATA).specific(m_data);
56+
57+
set_icountptr(m_icount);
58+
59+
state_add(UPD777_PC, "PC", m_pc);
60+
state_add(STATE_GENPC, "GENPC", m_pc).noshow();
61+
state_add(STATE_GENPCBASE, "CURPC", m_pc).noshow();
62+
63+
upd777_disassembler::populate_addr_table(m_table);
64+
65+
save_item(NAME(m_pc));
66+
save_item(NAME(m_icount));
67+
}
68+
69+
void upd777_device::device_reset()
70+
{
71+
m_pc = 0;
72+
}
73+
74+
u16 upd777_device::fetch()
75+
{
76+
return m_space.read_word(m_pc++);
77+
}
78+
79+
void upd777_device::do_op()
80+
{
81+
const u16 inst = fetch();
82+
83+
switch (inst)
84+
{
85+
default:
86+
{
87+
LOGMASKED(LOG_UNHANDLED_OPS, "<ill %04x>", inst);
88+
return;
89+
}
90+
}
91+
}
92+
93+
void upd777_device::execute_run()
94+
{
95+
while (m_icount > 0)
96+
{
97+
debugger_instruction_hook(m_pc);
98+
do_op();
99+
}
100+
}
101+
102+
void upd777_device::execute_set_input(int inputnum, int state)
103+
{
104+
}

src/devices/cpu/upd777/upd777.h

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// license:BSD-3-Clause
2+
// copyright-holders:David Haywood
3+
4+
#ifndef MAME_CPU_UPD777_UPD777_H
5+
#define MAME_CPU_UPD777_UPD777_H
6+
7+
#pragma once
8+
9+
10+
class upd777_device : public cpu_device
11+
{
12+
public:
13+
upd777_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
14+
15+
enum {
16+
UPD777_PC = 0
17+
};
18+
19+
protected:
20+
upd777_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, address_map_constructor data);
21+
22+
virtual void device_start() override;
23+
virtual void device_reset() override;
24+
25+
virtual void execute_run() override;
26+
virtual void execute_set_input(int inputnum, int state) override;
27+
28+
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
29+
30+
virtual space_config_vector memory_space_config() const override;
31+
32+
void internal_map(address_map &map);
33+
void internal_data_map(address_map &map);
34+
35+
private:
36+
address_space_config m_space_config;
37+
address_space_config m_data_config;
38+
39+
memory_access<11, 1, -1, ENDIANNESS_LITTLE>::specific m_space;
40+
memory_access<8, 0, 0, ENDIANNESS_LITTLE>::specific m_data;
41+
42+
u16 fetch();
43+
void do_op();
44+
45+
u16 m_table[0xfe0/2];
46+
47+
u32 m_pc;
48+
s32 m_icount;
49+
};
50+
51+
DECLARE_DEVICE_TYPE(UPD777, upd777_device)
52+
53+
#endif // MAME_CPU_UPD777_UPD777_H

0 commit comments

Comments
 (0)