mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
pofo.xml: Dumped the File Manager/Tutorial card. [Curt Coder]
pofo: Implemented the A: credit card memory. Fixed the RTC. [Curt Coder]
This commit is contained in:
parent
c74ea067a3
commit
1317019974
@ -7,7 +7,6 @@
|
||||
Utility-Card HPC-701
|
||||
Finance-Card HPC-702
|
||||
Science-Card HPC-703
|
||||
File Manager / Tutorial HPC-704
|
||||
PowerBASIC HPC-705
|
||||
Instant Spell HPC-709
|
||||
Hyperlist HPC-713
|
||||
@ -50,4 +49,18 @@
|
||||
Timekeeper
|
||||
TIMEPAC-5
|
||||
-->
|
||||
|
||||
<software name="fileman">
|
||||
<description>File Manager/Tutorial</description>
|
||||
<year>1990</year>
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="HPC-704" />
|
||||
|
||||
<part name="card" interface="pofo_card">
|
||||
<dataarea name="rom" size="0x20000">
|
||||
<rom name="ca400702-001 rev. b" size="0x20000" crc="924ab9f5" sha1="9b0de07a28ce058fc125d4fd7ea65074440d8393" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
|
@ -15,14 +15,12 @@
|
||||
|
||||
TODO:
|
||||
|
||||
- clock is running too fast
|
||||
- create chargen ROM from tech manual
|
||||
- memory error interrupt vector
|
||||
- i/o port 8051
|
||||
- screen contrast
|
||||
- system tick frequency selection (1 or 128 Hz)
|
||||
- speaker
|
||||
- credit card memory (A:/B:)
|
||||
|
||||
*/
|
||||
|
||||
@ -38,6 +36,8 @@
|
||||
#include "sound/speaker.h"
|
||||
#include "video/hd61830.h"
|
||||
|
||||
#define LOG 0
|
||||
|
||||
#define M80C88A_TAG "u1"
|
||||
#define HD61830_TAG "hd61830"
|
||||
#define TIMER_TICK_TAG "tick"
|
||||
@ -51,6 +51,7 @@ public:
|
||||
m_maincpu(*this, M80C88A_TAG),
|
||||
m_lcdc(*this, HD61830_TAG),
|
||||
m_speaker(*this, "speaker"),
|
||||
m_card(*this, "cardslot"),
|
||||
m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG),
|
||||
m_timer_tick(*this, TIMER_TICK_TAG),
|
||||
m_rom(*this, M80C88A_TAG),
|
||||
@ -71,6 +72,7 @@ public:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<hd61830_device> m_lcdc;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_device<generic_slot_device> m_card;
|
||||
required_device<portfolio_expansion_slot_t> m_exp;
|
||||
required_device<timer_device> m_timer_tick;
|
||||
required_region_ptr<UINT8> m_rom;
|
||||
@ -100,6 +102,16 @@ public:
|
||||
INT_EXTERNAL
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
ROM_APP,
|
||||
CCM_A,
|
||||
CCM_B,
|
||||
ROM_EXT
|
||||
};
|
||||
|
||||
DECLARE_READ8_MEMBER( rom_b_r );
|
||||
|
||||
DECLARE_READ8_MEMBER( irq_status_r );
|
||||
DECLARE_READ8_MEMBER( keyboard_r );
|
||||
DECLARE_READ8_MEMBER( battery_r );
|
||||
@ -124,6 +136,8 @@ public:
|
||||
/* keyboard state */
|
||||
UINT8 m_keylatch;
|
||||
|
||||
int m_rom_b;
|
||||
|
||||
/* video state */
|
||||
required_shared_ptr<UINT8> m_contrast;
|
||||
|
||||
@ -134,7 +148,7 @@ public:
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(counter_tick);
|
||||
DECLARE_READ8_MEMBER(hd61830_rd_r);
|
||||
IRQ_CALLBACK_MEMBER(portfolio_int_ack);
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( portfolio_cart );
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( portfolio_card );
|
||||
required_device<ram_device> m_ram;
|
||||
};
|
||||
|
||||
@ -173,6 +187,8 @@ void portfolio_state::trigger_interrupt(int level)
|
||||
// set interrupt pending bit
|
||||
m_ip |= 1 << level;
|
||||
|
||||
//logerror("%s IP set %01x : %u\n", machine().time().as_string(), m_ip, level);
|
||||
|
||||
check_interrupt();
|
||||
}
|
||||
|
||||
@ -194,7 +210,8 @@ READ8_MEMBER( portfolio_state::irq_status_r )
|
||||
WRITE8_MEMBER( portfolio_state::irq_mask_w )
|
||||
{
|
||||
m_ie = data;
|
||||
//logerror("IE %02x\n", data);
|
||||
|
||||
if (LOG) logerror("IE %02x\n", data);
|
||||
|
||||
check_interrupt();
|
||||
}
|
||||
@ -224,6 +241,8 @@ IRQ_CALLBACK_MEMBER(portfolio_state::portfolio_int_ack)
|
||||
}
|
||||
}
|
||||
|
||||
//logerror("IP ack %01x\n", m_ip);
|
||||
|
||||
check_interrupt();
|
||||
|
||||
return vector;
|
||||
@ -275,7 +294,7 @@ void portfolio_state::scan_keyboard()
|
||||
else
|
||||
{
|
||||
// key released
|
||||
if (m_keylatch != 0xff)
|
||||
if (!(m_keylatch & 0x80))
|
||||
{
|
||||
m_keylatch |= 0x80;
|
||||
|
||||
@ -333,7 +352,7 @@ WRITE8_MEMBER( portfolio_state::speaker_w )
|
||||
|
||||
m_speaker->level_w(!BIT(data, 7));
|
||||
|
||||
//logerror("SPEAKER %02x\n", data);
|
||||
if (LOG) logerror("SPEAKER %02x\n", data);
|
||||
}
|
||||
|
||||
|
||||
@ -363,7 +382,7 @@ WRITE8_MEMBER( portfolio_state::power_w )
|
||||
|
||||
*/
|
||||
|
||||
//logerror("POWER %02x\n", data);
|
||||
if (LOG) logerror("POWER %02x\n", data);
|
||||
}
|
||||
|
||||
|
||||
@ -406,7 +425,15 @@ READ8_MEMBER( portfolio_state::battery_r )
|
||||
|
||||
WRITE8_MEMBER( portfolio_state::unknown_w )
|
||||
{
|
||||
//logerror("UNKNOWN %02x\n", data);
|
||||
if (LOG) logerror("UNKNOWN %02x\n", data);
|
||||
|
||||
switch (data & 0x0f)
|
||||
{
|
||||
case 3: m_rom_b = CCM_A; break;
|
||||
case 7: m_rom_b = CCM_B; break;
|
||||
case 0: m_rom_b = ROM_APP; break;
|
||||
case 2: m_rom_b = ROM_EXT; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -421,7 +448,7 @@ WRITE8_MEMBER( portfolio_state::unknown_w )
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(portfolio_state::system_tick)
|
||||
{
|
||||
trigger_interrupt(INT_TICK);
|
||||
//trigger_interrupt(INT_TICK);
|
||||
}
|
||||
|
||||
|
||||
@ -435,6 +462,40 @@ TIMER_DEVICE_CALLBACK_MEMBER(portfolio_state::counter_tick)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rom_b_r -
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( portfolio_state::rom_b_r )
|
||||
{
|
||||
UINT8 data = 0;
|
||||
|
||||
switch (m_rom_b)
|
||||
{
|
||||
case ROM_APP:
|
||||
data = m_rom[offset];
|
||||
break;
|
||||
|
||||
case CCM_A:
|
||||
if (m_card->exists())
|
||||
{
|
||||
data = m_card->read_rom(space, offset);
|
||||
}
|
||||
break;
|
||||
|
||||
case CCM_B:
|
||||
// TODO this is wired thru the expansion slot
|
||||
break;
|
||||
|
||||
case ROM_EXT:
|
||||
// TODO ???
|
||||
break;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// counter_r - counter register read
|
||||
//-------------------------------------------------
|
||||
@ -450,7 +511,7 @@ READ8_MEMBER( portfolio_state::counter_r )
|
||||
break;
|
||||
|
||||
case 1:
|
||||
data = m_counter >> 1;
|
||||
data = m_counter >> 8;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -490,7 +551,7 @@ static ADDRESS_MAP_START( portfolio_mem, AS_PROGRAM, 8, portfolio_state )
|
||||
AM_RANGE(0x00000, 0x1efff) AM_RAM AM_SHARE("nvram1")
|
||||
AM_RANGE(0x1f000, 0x9efff) AM_RAM // expansion
|
||||
AM_RANGE(0xb0000, 0xb0fff) AM_MIRROR(0xf000) AM_RAM AM_SHARE("nvram2") // video RAM
|
||||
AM_RANGE(0xc0000, 0xdffff) AM_ROM AM_REGION(M80C88A_TAG, 0) // or credit card memory
|
||||
AM_RANGE(0xc0000, 0xdffff) AM_READ(rom_b_r)
|
||||
AM_RANGE(0xe0000, 0xfffff) AM_ROM AM_REGION(M80C88A_TAG, 0x20000)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -679,12 +740,17 @@ WRITE_LINE_MEMBER( portfolio_state::eint_w )
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// DEVICE_IMAGE_LOAD( portfolio_cart )
|
||||
// DEVICE_IMAGE_LOAD( portfolio_card )
|
||||
//-------------------------------------------------
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER( portfolio_state, portfolio_cart )
|
||||
DEVICE_IMAGE_LOAD_MEMBER( portfolio_state, portfolio_card )
|
||||
{
|
||||
return image_init_result::FAIL;
|
||||
UINT32 size = m_card->common_get_size("rom");
|
||||
|
||||
m_card->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_BIG);
|
||||
m_card->common_load_rom(m_card->get_rom_base(), size, "rom");
|
||||
|
||||
return image_init_result::PASS;
|
||||
}
|
||||
|
||||
|
||||
@ -788,8 +854,9 @@ static MACHINE_CONFIG_START( portfolio, portfolio_state )
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard", portfolio_state, keyboard_tick, attotime::from_usec(2500))
|
||||
|
||||
/* cartridge */
|
||||
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "portfolio_cart")
|
||||
MCFG_GENERIC_LOAD(portfolio_state, portfolio_cart)
|
||||
MCFG_GENERIC_CARTSLOT_ADD("cardslot", generic_plain_slot, "pofo_card")
|
||||
MCFG_GENERIC_EXTENSIONS("rom,bin")
|
||||
MCFG_GENERIC_LOAD(portfolio_state, portfolio_card)
|
||||
|
||||
/* software lists */
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list", "pofo")
|
||||
|
Loading…
Reference in New Issue
Block a user