Skip to content

Commit

Permalink
m68705: add preliminary support for analog input ports
Browse files Browse the repository at this point in the history
New systems marked not working
------------------------------
Video Art [hap, Sean Riddle, Phil Bennett]

New working software list items
-------------------------------
videoart: Activity Cartridge [hap, Sean Riddle, Phil Bennett], Disney Story Book [Mike Stedman]
  • Loading branch information
happppp committed Oct 24, 2023
1 parent f3f338e commit 87d3121
Show file tree
Hide file tree
Showing 7 changed files with 428 additions and 16 deletions.
47 changes: 47 additions & 0 deletions hash/videoart.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0-1.0
-->

<!--
Known released LJN Video Art Activity Cartridges (9 total):
Activity Cartridge (pack-in)
A Trip To The Zoo!
Disney Coloring Book
Disney Story Book
Looney Tunes
Marvel Super Heroes
My Dream Day
My Favorite Doll
On The Move
-->

<softwarelist name="videoart" description="LJN Video Art cartridges">

<software name="activity">
<description>Activity Cartridge</description>
<year>1987</year>
<publisher>LJN Toys</publisher>
<part name="cart" interface="videoart">
<dataarea name="rom" size="0x2000">
<rom name="ljn_act-1" size="0x2000" crc="8e3c03df" sha1="cb4e2e448eddc6a76673717f42d306cd3641dcfb" /> <!-- GI 9864DS-1217 -->
</dataarea>
</part>
</software>

<software name="disneysb">
<description>Disney Story Book</description>
<year>1987</year>
<publisher>LJN Toys</publisher>
<part name="cart" interface="videoart">
<dataarea name="rom" size="0x4000">
<rom name="ljn_story-9" size="0x4000" crc="59a02440" sha1="ea614d10f47b3955aaf07479fbe23cd3931b6e45" /> <!-- Sharp LH232659 -->
</dataarea>
</part>
</software>

</softwarelist>
39 changes: 28 additions & 11 deletions src/devices/cpu/m6805/m68705.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
*
* TODO
* - INT2 and miscellaneous register
* - A/D peripheral
* - improve A/D peripheral
* - SPI peripheral
* - multiple timer variants
*/
Expand All @@ -24,15 +24,17 @@
#define LOG_IOPORT (1U << 2)
#define LOG_TIMER (1U << 3)
#define LOG_EPROM (1U << 4)
#define LOG_AD (1U << 5)

//#define VERBOSE (LOG_GENERAL | LOG_IOPORT | LOG_TIMER | LOG_EPROM)
//#define VERBOSE (LOG_GENERAL | LOG_IOPORT | LOG_TIMER | LOG_EPROM | LOG_AD)
//#define LOG_OUTPUT_FUNC printf
#include "logmacro.h"

#define LOGINT(...) LOGMASKED(LOG_INT, __VA_ARGS__)
#define LOGIOPORT(...) LOGMASKED(LOG_IOPORT, __VA_ARGS__)
#define LOGTIMER(...) LOGMASKED(LOG_TIMER, __VA_ARGS__)
#define LOGEPROM(...) LOGMASKED(LOG_EPROM, __VA_ARGS__)
#define LOGAD(...) LOGMASKED(LOG_AD, __VA_ARGS__)


namespace {
Expand Down Expand Up @@ -223,6 +225,7 @@ m6805_hmos_device::m6805_hmos_device(machine_config const &mconfig, char const *
, m_port_ddr{ 0x00, 0x00, 0x00, 0x00 }
, m_port_cb_r(*this, 0xff)
, m_port_cb_w(*this)
, m_portan_cb_r(*this, 0xff)
, m_ram_size(ram_size)
{
}
Expand Down Expand Up @@ -319,7 +322,7 @@ template <std::size_t N> void m6805_hmos_device::port_ddr_w(u8 data)

template <std::size_t N> void m6805_hmos_device::port_cb_w()
{
u8 const data(m_port_open_drain[N] ? m_port_latch[N] | ~m_port_ddr[N] : m_port_latch[N]);
u8 const data(m_port_open_drain[N] ? (m_port_latch[N] | ~m_port_ddr[N]) : m_port_latch[N]);
u8 const mask(m_port_open_drain[N] ? (~m_port_latch[N] & m_port_ddr[N]) : m_port_ddr[N]);
m_port_cb_w[N](0, data, mask);
}
Expand Down Expand Up @@ -359,8 +362,7 @@ void m68705_device::pcr_w(u8 data)

u8 m6805_hmos_device::acr_r()
{
logerror("unsupported read ACR\n");
return 0xff;
return m_acr_mux | 0x80 | 0x78;
}

void m6805_hmos_device::acr_w(u8 data)
Expand Down Expand Up @@ -388,18 +390,27 @@ void m6805_hmos_device::acr_w(u8 data)
// on completion, ACR7 is set, result is placed in ARR, and new conversion starts
// writing to ACR aborts current conversion, clears ACR7, and starts new conversion

logerror("unsupported write ACR = %02X\n", data);
m_acr_mux = data & 7;
LOGAD("write ACR MUX = %d\n", m_acr_mux);
}

u8 m6805_hmos_device::arr_r()
{
logerror("unsupported read ARR\n");
return 0xff;
if (m_acr_mux < 4)
{
u8 val = m_portan_cb_r[m_acr_mux]();
LOGAD("read ARR AN%d = %02X\n", m_acr_mux, val);
return val;
}
else
{
logerror("unsupported read ARR VR, MUX = %d\n", m_acr_mux);
return 0xff;
}
}

void m6805_hmos_device::arr_w(u8 data)
{
logerror("unsupported write ARR = %02X\n", data);
}

void m6805_hmos_device::device_start()
Expand All @@ -409,6 +420,8 @@ void m6805_hmos_device::device_start()
save_item(NAME(m_port_input));
save_item(NAME(m_port_latch));
save_item(NAME(m_port_ddr));
save_item(NAME(m_acr_mux));
save_item(NAME(m_mr));

// initialise digital I/O
for (u8 &input : m_port_input) input = 0xff;
Expand All @@ -421,6 +434,10 @@ void m6805_hmos_device::device_start()
add_port_ddr_state<1>();
add_port_ddr_state<2>();

// initialise misc
m_acr_mux = 0;
m_mr = 0;

m_timer.start(M6805_PS);
}

Expand Down Expand Up @@ -930,15 +947,15 @@ void m6805_mrom_device::internal_map(address_map &map)

void m6805r2_device::internal_map(address_map &map)
{
m6805_hmos_device::internal_map(map);
m6805_mrom_device::internal_map(map);

map(0x000e, 0x000e).rw(FUNC(m6805r2_device::acr_r), FUNC(m6805r2_device::acr_w));
map(0x000f, 0x000f).rw(FUNC(m6805r2_device::arr_r), FUNC(m6805r2_device::arr_w));
}

void m6805r3_device::internal_map(address_map &map)
{
m6805_hmos_device::internal_map(map);
m6805_mrom_device::internal_map(map);

map(0x000e, 0x000e).rw(FUNC(m6805r3_device::acr_r), FUNC(m6805r3_device::acr_w));
map(0x000f, 0x000f).rw(FUNC(m6805r3_device::arr_r), FUNC(m6805r3_device::arr_w));
Expand Down
8 changes: 5 additions & 3 deletions src/devices/cpu/m6805/m68705.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ class m6805_hmos_device : public m6805_base_device
auto porta_w() { return m_port_cb_w[0].bind(); }
auto portb_w() { return m_port_cb_w[1].bind(); }
auto portc_w() { return m_port_cb_w[2].bind(); }
template <std::size_t N> auto portan_r() { return m_portan_cb_r[N].bind(); }

void timer_w(int state) { m_timer.timer_w(state); }

Expand Down Expand Up @@ -211,6 +212,10 @@ class m6805_hmos_device : public m6805_base_device
devcb_read8::array<PORT_COUNT> m_port_cb_r;
devcb_write8::array<PORT_COUNT> m_port_cb_w;

// analog input ports
devcb_read8::array<4> m_portan_cb_r;
u8 m_acr_mux;

// miscellaneous register
enum mr_mask : u8
{
Expand Down Expand Up @@ -317,9 +322,6 @@ class m68705u_device : public m68705_device

class m68705r_device : public m68705u_device
{
public:
// TODO: voltage inputs for ADC (shared with digital port D pins)

protected:
virtual void internal_map(address_map &map) override;

Expand Down
1 change: 0 additions & 1 deletion src/devices/video/ef9365.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -857,7 +857,6 @@ void ef9365_device::dump_bitplanes_word()
{
m_readback_latch[p] = (value >> 4) & 0xf;
}

}

m_readback_latch_pix_offset = pixel_ptr & 3;
Expand Down
2 changes: 1 addition & 1 deletion src/mame/handheld/hh_cop400.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2813,7 +2813,7 @@ SYST( 1980, h2hsoccerc, 0, 0, h2hsoccerc, h2hsoccerc, h2hbaskbc_sta

SYST( 1981, einvaderc, einvader, 0, einvaderc, einvaderc, einvaderc_state, empty_init, "Entex", "Space Invader (Entex, COP444L version)", MACHINE_SUPPORTS_SAVE )

SYST( 1980, lchicken, 0, 0, lchicken, lchicken, lchicken_state, empty_init, "LJN", "I Took a Lickin' From a Chicken", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_MECHANICAL )
SYST( 1980, lchicken, 0, 0, lchicken, lchicken, lchicken_state, empty_init, "LJN Toys", "I Took a Lickin' From a Chicken", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_MECHANICAL )

SYST( 1979, funjacks, 0, 0, funjacks, funjacks, funjacks_state, empty_init, "Mattel Electronics", "Funtronics: Jacks", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1979, funrlgl, 0, 0, funrlgl, funrlgl, funrlgl_state, empty_init, "Mattel Electronics", "Funtronics: Red Light Green Light", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
Expand Down
3 changes: 3 additions & 0 deletions src/mame/mame.lst
Original file line number Diff line number Diff line change
Expand Up @@ -31904,6 +31904,9 @@ vcombat // (c) 1993 VR8 Inc.
@source:misc/video21.cpp
video21 // Videogames GmbH 1980

@source:misc/videoart.cpp
videoart

@source:misc/videosaa.cpp
jokrlady //
ladygum //
Expand Down

0 comments on commit 87d3121

Please sign in to comment.