22
22
#include " emu.h"
23
23
#include " a2sd.h"
24
24
25
+ #include " machine/at28c64b.h"
26
+ #include " machine/spi_sdcard.h"
27
+
25
28
#define LOG_SPI (1U << 1 )
26
29
27
- // #define VERBOSE (LOG_COMMAND )
30
+ // #define VERBOSE (LOG_GENERAL )
28
31
#define LOG_OUTPUT_FUNC osd_printf_info
29
32
30
33
#include " logmacro.h"
31
34
35
+ namespace {
36
+
32
37
/* **************************************************************************
33
38
PARAMETERS
34
39
***************************************************************************/
@@ -41,17 +46,56 @@ static constexpr u8 C0N1_TC = 0x80; // SPI transfer complete
41
46
static constexpr u8 C0N3_CD = 0x40 ; // card detect
42
47
static constexpr u8 C0N3_BIT_SS = 7 ;
43
48
44
- // **************************************************************************
45
- // GLOBAL VARIABLES
46
- // **************************************************************************
47
-
48
- DEFINE_DEVICE_TYPE (A2BUS_A2SD, a2bus_a2sd_device, " a2sd" , " Apple II SD Card" )
49
-
50
49
ROM_START ( a2sd )
51
50
ROM_REGION (0x2000 , " flash" , ROMREGION_ERASE00)
52
51
ROM_LOAD ( " appleiisd.bin" , 0x000000 , 0x000800 , CRC(e82eea8a) SHA1(7e0acef01e622eeed6f8e87893d07c701bbef016) )
53
52
ROM_END
54
53
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
+
55
99
/* **************************************************************************
56
100
FUNCTION PROTOTYPES
57
101
***************************************************************************/
@@ -64,6 +108,7 @@ void a2bus_a2sd_device::device_add_mconfig(machine_config &config)
64
108
AT28C64B (config, m_flash, 0 );
65
109
66
110
SPI_SDCARD (config, m_sdcard, 0 );
111
+ m_sdcard->set_prefer_sdhc ();
67
112
m_sdcard->spi_miso_callback ().set (FUNC (a2bus_a2sd_device::spi_miso_w));
68
113
}
69
114
@@ -277,3 +322,12 @@ void a2bus_a2sd_device::write_c800(u16 offset, u8 data)
277
322
{
278
323
m_flash->write (offset + 0x100 , data);
279
324
}
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" )
0 commit comments