Skip to content

Commit f40c987

Browse files
committed
-machine/spi_sdcard.cpp: Generate appropriate CSD for mounted image.
* The Linux/4004 firmware gets very upset if the CSD looks like an SDHC Card but the card acts like an SD Card or vice versa. -machine/spi_psram.cpp: Added SPI ram device compatible with SPI SRAM and Pseudo-SRAM chips for small transfers. Additional functionality will be added as use cases arise. -cpu/mcs40: Don't log messages about NOP aliases for the 4004 (the Linux/4004 firmware uses these for instrumentation points).
1 parent fa02c26 commit f40c987

28 files changed

+1093
-502
lines changed

scripts/src/machine.lua

+11
Original file line numberDiff line numberDiff line change
@@ -4571,6 +4571,17 @@ if (MACHINES["SMARTMEDIA"]~=null) then
45714571
}
45724572
end
45734573

4574+
---------------------------------------------------
4575+
--
4576+
--@src/devices/machine/spi_psram.h,MACHINES["SPIPSRAM"] = true
4577+
---------------------------------------------------
4578+
if (MACHINES["SPIPSRAM"]~=null) then
4579+
files {
4580+
MAME_DIR .. "src/devices/machine/spi_psram.cpp",
4581+
MAME_DIR .. "src/devices/machine/spi_psram.h",
4582+
}
4583+
end
4584+
45744585
---------------------------------------------------
45754586
--
45764587
--@src/devices/machine/spi_sdcard.h,MACHINES["SPISDCARD"] = true

src/devices/bus/a2bus/a2sd.cpp

+61-7
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,18 @@
2222
#include "emu.h"
2323
#include "a2sd.h"
2424

25+
#include "machine/at28c64b.h"
26+
#include "machine/spi_sdcard.h"
27+
2528
#define LOG_SPI (1U << 1)
2629

27-
//#define VERBOSE (LOG_COMMAND)
30+
//#define VERBOSE (LOG_GENERAL)
2831
#define LOG_OUTPUT_FUNC osd_printf_info
2932

3033
#include "logmacro.h"
3134

35+
namespace {
36+
3237
/***************************************************************************
3338
PARAMETERS
3439
***************************************************************************/
@@ -41,17 +46,56 @@ static constexpr u8 C0N1_TC = 0x80; // SPI transfer complete
4146
static constexpr u8 C0N3_CD = 0x40; // card detect
4247
static constexpr u8 C0N3_BIT_SS = 7;
4348

44-
//**************************************************************************
45-
// GLOBAL VARIABLES
46-
//**************************************************************************
47-
48-
DEFINE_DEVICE_TYPE(A2BUS_A2SD, a2bus_a2sd_device, "a2sd", "Apple II SD Card")
49-
5049
ROM_START( a2sd )
5150
ROM_REGION(0x2000, "flash", ROMREGION_ERASE00)
5251
ROM_LOAD( "appleiisd.bin", 0x000000, 0x000800, CRC(e82eea8a) SHA1(7e0acef01e622eeed6f8e87893d07c701bbef016) )
5352
ROM_END
5453

54+
//**************************************************************************
55+
// TYPE DEFINITIONS
56+
//**************************************************************************
57+
58+
class a2bus_a2sd_device:
59+
public device_t,
60+
public device_a2bus_card_interface
61+
{
62+
public:
63+
// construction/destruction
64+
a2bus_a2sd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
65+
66+
protected:
67+
a2bus_a2sd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
68+
69+
virtual void device_start() override ATTR_COLD;
70+
virtual void device_reset() override ATTR_COLD;
71+
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
72+
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
73+
74+
// overrides of standard a2bus slot functions
75+
virtual u8 read_c0nx(u8 offset) override;
76+
virtual void write_c0nx(u8 offset, u8 data) override;
77+
virtual u8 read_cnxx(u8 offset) override;
78+
virtual void write_cnxx(u8 offset, u8 data) override;
79+
virtual u8 read_c800(uint16_t offset) override;
80+
virtual void write_c800(uint16_t offset, u8 data) override;
81+
82+
// SPI 4-wire interface
83+
void spi_miso_w(int state) { m_in_bit = state; }
84+
85+
TIMER_CALLBACK_MEMBER(shift_tick);
86+
87+
private:
88+
required_device<at28c64b_device> m_flash;
89+
required_device<spi_sdcard_device> m_sdcard;
90+
91+
u8 m_datain, m_in_latch, m_out_latch;
92+
u8 m_c0n1, m_c0n3;
93+
int m_in_bit;
94+
95+
int m_shift_count;
96+
emu_timer *m_shift_timer;
97+
};
98+
5599
/***************************************************************************
56100
FUNCTION PROTOTYPES
57101
***************************************************************************/
@@ -64,6 +108,7 @@ void a2bus_a2sd_device::device_add_mconfig(machine_config &config)
64108
AT28C64B(config, m_flash, 0);
65109

66110
SPI_SDCARD(config, m_sdcard, 0);
111+
m_sdcard->set_prefer_sdhc();
67112
m_sdcard->spi_miso_callback().set(FUNC(a2bus_a2sd_device::spi_miso_w));
68113
}
69114

@@ -277,3 +322,12 @@ void a2bus_a2sd_device::write_c800(u16 offset, u8 data)
277322
{
278323
m_flash->write(offset + 0x100, data);
279324
}
325+
326+
} // anonymous namespace
327+
328+
329+
//**************************************************************************
330+
// GLOBAL VARIABLES
331+
//**************************************************************************
332+
333+
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_A2SD, device_a2bus_card_interface, a2bus_a2sd_device, "a2sd", "Apple II SD Card")

src/devices/bus/a2bus/a2sd.h

+1-48
Original file line numberDiff line numberDiff line change
@@ -14,54 +14,7 @@
1414
#pragma once
1515

1616
#include "a2bus.h"
17-
#include "machine/at28c64b.h"
18-
#include "machine/spi_sdcard.h"
1917

20-
//**************************************************************************
21-
// TYPE DEFINITIONS
22-
//**************************************************************************
23-
24-
class a2bus_a2sd_device:
25-
public device_t,
26-
public device_a2bus_card_interface
27-
{
28-
public:
29-
// construction/destruction
30-
a2bus_a2sd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
31-
32-
protected:
33-
a2bus_a2sd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
34-
35-
virtual void device_start() override ATTR_COLD;
36-
virtual void device_reset() override ATTR_COLD;
37-
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
38-
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
39-
40-
// overrides of standard a2bus slot functions
41-
virtual u8 read_c0nx(u8 offset) override;
42-
virtual void write_c0nx(u8 offset, u8 data) override;
43-
virtual u8 read_cnxx(u8 offset) override;
44-
virtual void write_cnxx(u8 offset, u8 data) override;
45-
virtual u8 read_c800(uint16_t offset) override;
46-
virtual void write_c800(uint16_t offset, u8 data) override;
47-
48-
// SPI 4-wire interface
49-
void spi_miso_w(int state) { m_in_bit = state; }
50-
51-
TIMER_CALLBACK_MEMBER(shift_tick);
52-
private:
53-
required_device<at28c64b_device> m_flash;
54-
required_device<spi_sdcard_device> m_sdcard;
55-
56-
u8 m_datain, m_in_latch, m_out_latch;
57-
u8 m_c0n1, m_c0n3;
58-
int m_in_bit;
59-
60-
int m_shift_count;
61-
emu_timer *m_shift_timer;
62-
};
63-
64-
// device type definition
65-
DECLARE_DEVICE_TYPE(A2BUS_A2SD, a2bus_a2sd_device)
18+
DECLARE_DEVICE_TYPE(A2BUS_A2SD, device_a2bus_card_interface)
6619

6720
#endif // MAME_BUS_A2BUS_A2SD_H

src/devices/bus/bbc/cart/mastersd.cpp

+65-3
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,64 @@
1212
#include "emu.h"
1313
#include "mastersd.h"
1414

15+
#include "machine/spi_sdcard.h"
16+
17+
18+
namespace {
1519

1620
//**************************************************************************
17-
// DEVICE DEFINITIONS
21+
// TYPE DEFINITIONS
1822
//**************************************************************************
1923

20-
DEFINE_DEVICE_TYPE(BBC_MASTERSD, bbc_mastersd_device, "bbc_mastersd", "MasterSD BBC Master SD Cartridge")
21-
DEFINE_DEVICE_TYPE(BBC_MASTERSDR2, bbc_mastersdr2_device, "bbc_mastersdr2", "MasterSD R2 BBC Master SD Cartridge")
24+
// ======================> bbc_mastersd_device
25+
26+
class bbc_mastersd_device : public device_t, public device_bbc_cart_interface
27+
{
28+
public:
29+
// construction/destruction
30+
bbc_mastersd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
31+
32+
protected:
33+
bbc_mastersd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
34+
35+
// device_t implementation
36+
virtual void device_start() override ATTR_COLD;
37+
virtual void device_reset() override ATTR_COLD;
38+
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
39+
40+
// device_bbc_cart_interface implementation
41+
virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
42+
virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
43+
44+
TIMER_CALLBACK_MEMBER(spi_clock);
45+
46+
required_device<spi_sdcard_device> m_sdcard;
47+
48+
emu_timer *m_spi_clock;
49+
bool m_spi_clock_state;
50+
bool m_spi_clock_sysclk;
51+
int m_spi_clock_cycles;
52+
int m_in_bit;
53+
uint8_t m_in_latch;
54+
uint8_t m_out_latch;
55+
56+
std::unique_ptr<uint8_t[]> m_ram;
57+
};
58+
59+
60+
// ======================> bbc_mastersdr2_device
61+
62+
class bbc_mastersdr2_device : public bbc_mastersd_device
63+
{
64+
public:
65+
// construction/destruction
66+
bbc_mastersdr2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
67+
68+
protected:
69+
// device_bbc_cart_interface implementation
70+
virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
71+
virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
72+
};
2273

2374

2475
//-------------------------------------------------
@@ -28,6 +79,7 @@ DEFINE_DEVICE_TYPE(BBC_MASTERSDR2, bbc_mastersdr2_device, "bbc_mastersdr2", "Mas
2879
void bbc_mastersd_device::device_add_mconfig(machine_config &config)
2980
{
3081
SPI_SDCARD(config, m_sdcard, 0);
82+
m_sdcard->set_prefer_sdhc();
3183
m_sdcard->spi_miso_callback().set([this](int state) { m_in_bit = state; });
3284
}
3385

@@ -245,3 +297,13 @@ TIMER_CALLBACK_MEMBER(bbc_mastersd_device::spi_clock)
245297
m_spi_clock->adjust(attotime::never);
246298
}
247299
}
300+
301+
} // anonymous namespace
302+
303+
304+
//**************************************************************************
305+
// DEVICE DEFINITIONS
306+
//**************************************************************************
307+
308+
DEFINE_DEVICE_TYPE_PRIVATE(BBC_MASTERSD, device_bbc_cart_interface, bbc_mastersd_device, "bbc_mastersd", "MasterSD BBC Master SD Cartridge")
309+
DEFINE_DEVICE_TYPE_PRIVATE(BBC_MASTERSDR2, device_bbc_cart_interface, bbc_mastersdr2_device, "bbc_mastersdr2", "MasterSD R2 BBC Master SD Cartridge")

src/devices/bus/bbc/cart/mastersd.h

+4-63
Original file line numberDiff line numberDiff line change
@@ -9,71 +9,12 @@
99
#ifndef MAME_BUS_BBC_CART_MASTERSD_H
1010
#define MAME_BUS_BBC_CART_MASTERSD_H
1111

12-
#include "slot.h"
13-
#include "machine/spi_sdcard.h"
14-
15-
16-
//**************************************************************************
17-
// TYPE DEFINITIONS
18-
//**************************************************************************
19-
20-
// ======================> bbc_mastersd_device
21-
22-
class bbc_mastersd_device : public device_t, public device_bbc_cart_interface
23-
{
24-
public:
25-
// construction/destruction
26-
bbc_mastersd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
27-
28-
protected:
29-
bbc_mastersd_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
30-
31-
// device-level overrides
32-
virtual void device_start() override ATTR_COLD;
33-
virtual void device_reset() override ATTR_COLD;
34-
35-
// optional information overrides
36-
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
37-
38-
// electron_cart_interface overrides
39-
virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
40-
virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
41-
42-
required_device<spi_sdcard_device> m_sdcard;
43-
44-
TIMER_CALLBACK_MEMBER(spi_clock);
45-
46-
emu_timer *m_spi_clock;
47-
bool m_spi_clock_state;
48-
bool m_spi_clock_sysclk;
49-
int m_spi_clock_cycles;
50-
int m_in_bit;
51-
uint8_t m_in_latch;
52-
uint8_t m_out_latch;
53-
54-
std::unique_ptr<uint8_t[]> m_ram;
55-
};
56-
57-
58-
// ======================> bbc_mastersdr2_device
59-
60-
class bbc_mastersdr2_device : public bbc_mastersd_device
61-
{
62-
public:
63-
// construction/destruction
64-
bbc_mastersdr2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
65-
66-
protected:
67-
// electron_cart_interface overrides
68-
virtual uint8_t read(offs_t offset, int infc, int infd, int romqa, int oe, int oe2) override;
69-
virtual void write(offs_t offset, uint8_t data, int infc, int infd, int romqa, int oe, int oe2) override;
70-
};
71-
12+
#pragma once
7213

14+
#include "slot.h"
7315

74-
// device type definition
75-
DECLARE_DEVICE_TYPE(BBC_MASTERSD, bbc_mastersd_device)
76-
DECLARE_DEVICE_TYPE(BBC_MASTERSDR2, bbc_mastersdr2_device)
7716

17+
DECLARE_DEVICE_TYPE(BBC_MASTERSD, device_bbc_cart_interface)
18+
DECLARE_DEVICE_TYPE(BBC_MASTERSDR2, device_bbc_cart_interface)
7819

7920
#endif // MAME_BUS_BBC_CART_MASTERSD_H

0 commit comments

Comments
 (0)