mirror of
https://github.com/holub/mame
synced 2025-07-04 01:18:59 +03:00
srcclean in preparation for release
This commit is contained in:
parent
f56ace4df8
commit
2905b8c24a
@ -1344,8 +1344,8 @@ void axc51base_cpu_device::device_reset()
|
|||||||
|
|
||||||
m_spi_dma_addr = 0;
|
m_spi_dma_addr = 0;
|
||||||
|
|
||||||
// m_timer0->adjust(attotime::never);
|
// m_timer0->adjust(attotime::never);
|
||||||
// m_dactimer->adjust(attotime::never);
|
// m_dactimer->adjust(attotime::never);
|
||||||
|
|
||||||
|
|
||||||
m_timer0->adjust(attotime::from_hz(120), 0, attotime::from_hz(120));
|
m_timer0->adjust(attotime::from_hz(120), 0, attotime::from_hz(120));
|
||||||
@ -1378,7 +1378,7 @@ SFR_SPICON (at 0xd8)
|
|||||||
uint8_t axc51base_cpu_device::spicon_r()
|
uint8_t axc51base_cpu_device::spicon_r()
|
||||||
{
|
{
|
||||||
uint8_t result = m_sfr_regs[SFR_SPICON] | 0x80;
|
uint8_t result = m_sfr_regs[SFR_SPICON] | 0x80;
|
||||||
// LOGMASKED(LOG_UNSORTED,"%s: sfr_read SFR_SPICON %02x\n", machine().describe_context(), result);
|
// LOGMASKED(LOG_UNSORTED,"%s: sfr_read SFR_SPICON %02x\n", machine().describe_context(), result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1408,7 +1408,7 @@ uint8_t axc51base_cpu_device::uartsta_r()
|
|||||||
|
|
||||||
void axc51base_cpu_device::spicon_w(uint8_t data)
|
void axc51base_cpu_device::spicon_w(uint8_t data)
|
||||||
{
|
{
|
||||||
// LOGMASKED(LOG_UNSORTED,"%s: sfr_write SFR_SPICON %02x\n", machine().describe_context(), data);
|
// LOGMASKED(LOG_UNSORTED,"%s: sfr_write SFR_SPICON %02x\n", machine().describe_context(), data);
|
||||||
m_sfr_regs[SFR_SPICON] = data;
|
m_sfr_regs[SFR_SPICON] = data;
|
||||||
m_spi_out_dir_cb((data & 0x20) ? true : false);
|
m_spi_out_dir_cb((data & 0x20) ? true : false);
|
||||||
}
|
}
|
||||||
|
@ -393,7 +393,7 @@ void axc51base_cpu_device::inc_dptr(uint8_t r)
|
|||||||
{
|
{
|
||||||
//if (m_sfr_regs[SFR_DPCON] & 0x08) // auto-increment enabled (not used here)
|
//if (m_sfr_regs[SFR_DPCON] & 0x08) // auto-increment enabled (not used here)
|
||||||
//{
|
//{
|
||||||
// fatalerror("inc_dptr with auto-inc");
|
// fatalerror("inc_dptr with auto-inc");
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if (m_sfr_regs[SFR_DPCON] & 0x04) // auto-toggle enabled
|
if (m_sfr_regs[SFR_DPCON] & 0x04) // auto-toggle enabled
|
||||||
@ -605,7 +605,7 @@ void axc51base_cpu_device::mov_dptr_byte(uint8_t r)
|
|||||||
{
|
{
|
||||||
//if (m_sfr_regs[SFR_DPCON] & 0x08) // auto-increment enabled (not used here)
|
//if (m_sfr_regs[SFR_DPCON] & 0x08) // auto-increment enabled (not used here)
|
||||||
//{
|
//{
|
||||||
// fatalerror("mov_dptr_byte with auto-inc");
|
// fatalerror("mov_dptr_byte with auto-inc");
|
||||||
//}
|
//}
|
||||||
|
|
||||||
if (m_sfr_regs[SFR_DPCON] & 0x04) // auto-toggle enabled
|
if (m_sfr_regs[SFR_DPCON] & 0x04) // auto-toggle enabled
|
||||||
|
@ -8,14 +8,14 @@
|
|||||||
for many opcodes, as well as:
|
for many opcodes, as well as:
|
||||||
|
|
||||||
- Dedicated bank switching instructions
|
- Dedicated bank switching instructions
|
||||||
(20-bit external address bus + 3 chip select outputs, can address a total of 4MB)
|
(20-bit external address bus + 3 chip select outputs, can address a total of 4MB)
|
||||||
- Two timers, three 8-bit ports, two 8-bit ADCs
|
- Two timers, three 8-bit ports, two 8-bit ADCs
|
||||||
- Keyboard controller w/ key velocity detection
|
- Keyboard controller w/ key velocity detection
|
||||||
- MIDI UART
|
- MIDI UART
|
||||||
- 24-voice DPCM sound
|
- 24-voice DPCM sound
|
||||||
|
|
||||||
Variants include the uPD912 and GT915/uPD915.
|
Variants include the uPD912 and GT915/uPD915.
|
||||||
These were later succeeded by the uPD914.
|
These were later succeeded by the uPD914.
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ void gt913_device::map(address_map &map)
|
|||||||
/* fff0-fff5: I/O ports */
|
/* fff0-fff5: I/O ports */
|
||||||
map(0xfff0, 0xfff0).rw(m_port[0], FUNC(h8_port_device::ddr_r), FUNC(h8_port_device::ddr_w));
|
map(0xfff0, 0xfff0).rw(m_port[0], FUNC(h8_port_device::ddr_r), FUNC(h8_port_device::ddr_w));
|
||||||
// port 2 DDR - ctk601 and gz70sp both seem to use only bit 0 to indicate either all inputs or all outputs
|
// port 2 DDR - ctk601 and gz70sp both seem to use only bit 0 to indicate either all inputs or all outputs
|
||||||
// map(0xfff1, 0xfff1).rw(m_port[1], FUNC(h8_port_device::ddr_r), FUNC(h8_port_device::ddr_w));
|
// map(0xfff1, 0xfff1).rw(m_port[1], FUNC(h8_port_device::ddr_r), FUNC(h8_port_device::ddr_w));
|
||||||
map(0xfff1, 0xfff1).lw8(NAME([this](uint8_t data) { m_port[1]->ddr_w(BIT(data, 0) ? 0xff : 0x00); }));
|
map(0xfff1, 0xfff1).lw8(NAME([this](uint8_t data) { m_port[1]->ddr_w(BIT(data, 0) ? 0xff : 0x00); }));
|
||||||
map(0xfff2, 0xfff2).rw(m_port[0], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
|
map(0xfff2, 0xfff2).rw(m_port[0], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
|
||||||
map(0xfff3, 0xfff3).rw(m_port[1], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
|
map(0xfff3, 0xfff3).rw(m_port[1], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w));
|
||||||
|
@ -105,7 +105,7 @@ void ds1207_device::nvram_default()
|
|||||||
m_device_state = 0;
|
m_device_state = 0;
|
||||||
|
|
||||||
int expected_bytes = sizeof(m_unique_pattern) + sizeof(m_identification) + sizeof(m_security_match) + sizeof(m_secure_memory)
|
int expected_bytes = sizeof(m_unique_pattern) + sizeof(m_identification) + sizeof(m_security_match) + sizeof(m_secure_memory)
|
||||||
+ sizeof(m_days_left) + sizeof(m_start_time) + sizeof(m_device_state);
|
+ sizeof(m_days_left) + sizeof(m_start_time) + sizeof(m_device_state);
|
||||||
|
|
||||||
if(!m_region.found())
|
if(!m_region.found())
|
||||||
{
|
{
|
||||||
@ -266,7 +266,7 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
|||||||
if(m_bit == 24)
|
if(m_bit == 24)
|
||||||
{
|
{
|
||||||
LOGDATA("%s: DS1270 -> command %02x %02x %02x (%02x %02x)\n", machine().describe_context(),
|
LOGDATA("%s: DS1270 -> command %02x %02x %02x (%02x %02x)\n", machine().describe_context(),
|
||||||
m_command[ 0 ], m_command[ 1 ], m_command[ 2 ], m_unique_pattern[ 0 ], m_unique_pattern[ 1 ]);
|
m_command[ 0 ], m_command[ 1 ], m_command[ 2 ], m_unique_pattern[ 0 ], m_unique_pattern[ 1 ]);
|
||||||
|
|
||||||
if(m_command[ 2 ] == m_unique_pattern[ 1 ] && (m_command[ 1 ] & ~3) == m_unique_pattern[ 0 ])
|
if(m_command[ 2 ] == m_unique_pattern[ 1 ] && (m_command[ 1 ] & ~3) == m_unique_pattern[ 0 ])
|
||||||
{
|
{
|
||||||
@ -355,8 +355,8 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
|||||||
if(m_bit == 64)
|
if(m_bit == 64)
|
||||||
{
|
{
|
||||||
LOGDATA("%s: DS1270 <- identification %02x %02x %02x %02x %02x %02x %02x %02x\n", machine().describe_context(),
|
LOGDATA("%s: DS1270 <- identification %02x %02x %02x %02x %02x %02x %02x %02x\n", machine().describe_context(),
|
||||||
m_identification[ 0 ], m_identification[ 1 ], m_identification[ 2 ], m_identification[ 3 ],
|
m_identification[ 0 ], m_identification[ 1 ], m_identification[ 2 ], m_identification[ 3 ],
|
||||||
m_identification[ 4 ], m_identification[ 5 ], m_identification[ 6 ], m_identification[ 7 ]);
|
m_identification[ 4 ], m_identification[ 5 ], m_identification[ 6 ], m_identification[ 7 ]);
|
||||||
|
|
||||||
new_state(STATE_WRITE_COMPARE_REGISTER);
|
new_state(STATE_WRITE_COMPARE_REGISTER);
|
||||||
}
|
}
|
||||||
@ -368,10 +368,10 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
|||||||
if(m_bit == 64)
|
if(m_bit == 64)
|
||||||
{
|
{
|
||||||
LOGDATA("%s: DS1207 -> compare register %02x %02x %02x %02x %02x %02x %02x %02x (%02x %02x %02x %02x %02x %02x %02x %02x)\n", machine().describe_context(),
|
LOGDATA("%s: DS1207 -> compare register %02x %02x %02x %02x %02x %02x %02x %02x (%02x %02x %02x %02x %02x %02x %02x %02x)\n", machine().describe_context(),
|
||||||
m_compare_register[ 0 ], m_compare_register[ 1 ], m_compare_register[ 2 ], m_compare_register[ 3 ],
|
m_compare_register[ 0 ], m_compare_register[ 1 ], m_compare_register[ 2 ], m_compare_register[ 3 ],
|
||||||
m_compare_register[ 4 ], m_compare_register[ 5 ], m_compare_register[ 6 ], m_compare_register[ 7 ],
|
m_compare_register[ 4 ], m_compare_register[ 5 ], m_compare_register[ 6 ], m_compare_register[ 7 ],
|
||||||
m_security_match[ 0 ], m_security_match[ 1 ], m_security_match[ 2 ], m_security_match[ 3 ],
|
m_security_match[ 0 ], m_security_match[ 1 ], m_security_match[ 2 ], m_security_match[ 3 ],
|
||||||
m_security_match[ 4 ], m_security_match[ 5 ], m_security_match[ 6 ], m_security_match[ 7 ]);
|
m_security_match[ 4 ], m_security_match[ 5 ], m_security_match[ 6 ], m_security_match[ 7 ]);
|
||||||
|
|
||||||
if(memcmp(m_compare_register, m_security_match, sizeof(m_compare_register)) == 0)
|
if(memcmp(m_compare_register, m_security_match, sizeof(m_compare_register)) == 0)
|
||||||
{
|
{
|
||||||
@ -415,8 +415,8 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
|||||||
if(m_bit == 64)
|
if(m_bit == 64)
|
||||||
{
|
{
|
||||||
LOGDATA("%s: DS1207 -> identification %02x %02x %02x %02x %02x %02x %02x %02x\n", machine().describe_context(),
|
LOGDATA("%s: DS1207 -> identification %02x %02x %02x %02x %02x %02x %02x %02x\n", machine().describe_context(),
|
||||||
m_identification[ 0 ], m_identification[ 1 ], m_identification[ 2 ], m_identification[ 3 ],
|
m_identification[ 0 ], m_identification[ 1 ], m_identification[ 2 ], m_identification[ 3 ],
|
||||||
m_identification[ 4 ], m_identification[ 5 ], m_identification[ 6 ], m_identification[ 7 ]);
|
m_identification[ 4 ], m_identification[ 5 ], m_identification[ 6 ], m_identification[ 7 ]);
|
||||||
|
|
||||||
new_state(STATE_WRITE_SECURITY_MATCH);
|
new_state(STATE_WRITE_SECURITY_MATCH);
|
||||||
}
|
}
|
||||||
@ -428,8 +428,8 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
|||||||
if(m_bit == 64)
|
if(m_bit == 64)
|
||||||
{
|
{
|
||||||
LOGDATA("%s: DS1207 >- security match %02x %02x %02x %02x %02x %02x %02x %02x\n", machine().describe_context(),
|
LOGDATA("%s: DS1207 >- security match %02x %02x %02x %02x %02x %02x %02x %02x\n", machine().describe_context(),
|
||||||
m_security_match[ 0 ], m_security_match[ 1 ], m_security_match[ 2 ], m_security_match[ 3 ],
|
m_security_match[ 0 ], m_security_match[ 1 ], m_security_match[ 2 ], m_security_match[ 3 ],
|
||||||
m_security_match[ 4 ], m_security_match[ 5 ], m_security_match[ 6 ], m_security_match[ 7 ]);
|
m_security_match[ 4 ], m_security_match[ 5 ], m_security_match[ 6 ], m_security_match[ 7 ]);
|
||||||
|
|
||||||
new_state(STATE_STOP);
|
new_state(STATE_STOP);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
class generic_spi_flash_device : public device_t,
|
class generic_spi_flash_device : public device_t,
|
||||||
public device_nvram_interface
|
public device_nvram_interface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
generic_spi_flash_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock);
|
generic_spi_flash_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock);
|
||||||
|
@ -316,7 +316,7 @@ void gt913_sound_device::command_w(u16 data)
|
|||||||
}
|
}
|
||||||
else if (voicecmd == 0x6007)
|
else if (voicecmd == 0x6007)
|
||||||
{
|
{
|
||||||
// logerror("voice %u volume %u rate %u\n", voicenum, (m_data[0] >> 8), m_data[0] & 0xff);
|
// logerror("voice %u volume %u rate %u\n", voicenum, (m_data[0] >> 8), m_data[0] & 0xff);
|
||||||
|
|
||||||
voice.m_volume_data = m_data[0];
|
voice.m_volume_data = m_data[0];
|
||||||
voice.m_volume_target = (m_data[0] & 0x7f00) << 16;
|
voice.m_volume_target = (m_data[0] & 0x7f00) << 16;
|
||||||
|
@ -3,19 +3,19 @@
|
|||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
Philips SCC66470 Video and System controller.
|
Philips SCC66470 Video and System controller.
|
||||||
|
|
||||||
This does not render the image to the display. It is up to the user
|
This does not render the image to the display. It is up to the user
|
||||||
to provide their own screen_update function. Pixel (palette offset) data
|
to provide their own screen_update function. Pixel (palette offset) data
|
||||||
can be obtained by calling line( line number ) for each line.
|
can be obtained by calling line( line number ) for each line.
|
||||||
Some boards have multiple video sources, the source being displayed being
|
Some boards have multiple video sources, the source being displayed being
|
||||||
selected based on pixel value...is there a nice way of doing this other
|
selected based on pixel value...is there a nice way of doing this other
|
||||||
than leaving it to the board driver ?
|
than leaving it to the board driver ?
|
||||||
|
|
||||||
Todo:
|
Todo:
|
||||||
Add support for mosaic and RLE screens.
|
Add support for mosaic and RLE screens.
|
||||||
Add remaining pixac operations. Only BCOLOUR1/BCOLOUR2 are supported.
|
Add remaining pixac operations. Only BCOLOUR1/BCOLOUR2 are supported.
|
||||||
Add interlaced support.
|
Add interlaced support.
|
||||||
Add bep ?
|
Add bep ?
|
||||||
Verify number of cycles for each access.
|
Verify number of cycles for each access.
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
@ -98,7 +98,7 @@ struct horizontal_settings
|
|||||||
|
|
||||||
static const horizontal_settings h_table[] =
|
static const horizontal_settings h_table[] =
|
||||||
{
|
{
|
||||||
//cf1 cf2 ss st
|
//cf1 cf2 ss st
|
||||||
{ 512, 64 }, // 0 0 0 0
|
{ 512, 64 }, // 0 0 0 0
|
||||||
{ 512, 64 }, // 0 0 0 1
|
{ 512, 64 }, // 0 0 0 1
|
||||||
{ 512, 0 }, // 0 0 1 0
|
{ 512, 0 }, // 0 0 1 0
|
||||||
|
@ -57,7 +57,7 @@ enum isr_bits
|
|||||||
ISR_LRB = 0x01, // Last Received Bit
|
ISR_LRB = 0x01, // Last Received Bit
|
||||||
ISR_SSR_MASK = (ISR_MST | ISR_TRX | ISR_BB),// Mask for detecting start/stop/restart
|
ISR_SSR_MASK = (ISR_MST | ISR_TRX | ISR_BB),// Mask for detecting start/stop/restart
|
||||||
ISR_START = (ISR_MST | ISR_TRX | ISR_BB),// Start bit request
|
ISR_START = (ISR_MST | ISR_TRX | ISR_BB),// Start bit request
|
||||||
ISR_STOP = (ISR_MST | ISR_TRX) // Stop bit request
|
ISR_STOP = (ISR_MST | ISR_TRX) // Stop bit request
|
||||||
};
|
};
|
||||||
|
|
||||||
enum umr_bits
|
enum umr_bits
|
||||||
|
@ -2,15 +2,15 @@
|
|||||||
// copyright-holders:Nathan Woods
|
// copyright-holders:Nathan Woods
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
fs_fat.cpp
|
fs_fat.cpp
|
||||||
|
|
||||||
PC FAT disk images
|
PC FAT disk images
|
||||||
|
|
||||||
Current Limitations:
|
Current Limitations:
|
||||||
- Read only
|
- Read only
|
||||||
- Only supports floppy disks
|
- Only supports floppy disks
|
||||||
- No FAT32 support
|
- No FAT32 support
|
||||||
- No Long Filenames Support
|
- No Long Filenames Support
|
||||||
|
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
|
|
||||||
@ -18,125 +18,125 @@
|
|||||||
|
|
||||||
Offset Length Description
|
Offset Length Description
|
||||||
------ ------ -----------
|
------ ------ -----------
|
||||||
0 446 Boot machine code
|
0 446 Boot machine code
|
||||||
446 16 Partion #1 info
|
446 16 Partion #1 info
|
||||||
462 16 Partion #2 info
|
462 16 Partion #2 info
|
||||||
478 16 Partion #3 info
|
478 16 Partion #3 info
|
||||||
494 16 Partion #4 info
|
494 16 Partion #4 info
|
||||||
510 2 Magic bytes (0x55 0xAA)
|
510 2 Magic bytes (0x55 0xAA)
|
||||||
|
|
||||||
|
|
||||||
Partition info format:
|
Partition info format:
|
||||||
|
|
||||||
Offset Length Description
|
Offset Length Description
|
||||||
------ ------ -----------
|
------ ------ -----------
|
||||||
0 1 Active byte (0x80=active 0x00=inactive)
|
0 1 Active byte (0x80=active 0x00=inactive)
|
||||||
1 1 Starting head
|
1 1 Starting head
|
||||||
2 1 Starting sector (bits 5-0) and high bits of starting track (bits 6-5)
|
2 1 Starting sector (bits 5-0) and high bits of starting track (bits 6-5)
|
||||||
3 1 Low bits of starting track
|
3 1 Low bits of starting track
|
||||||
4 1 Partition type:
|
4 1 Partition type:
|
||||||
0x00 Unused
|
0x00 Unused
|
||||||
0x?1 FAT12 (0-15 MB)
|
0x?1 FAT12 (0-15 MB)
|
||||||
0x?2 XENIX
|
0x?2 XENIX
|
||||||
0x?4 FAT16 (16-32 MB)
|
0x?4 FAT16 (16-32 MB)
|
||||||
0x?6 FAT16` (32 MB-2 GB)
|
0x?6 FAT16` (32 MB-2 GB)
|
||||||
0x?7 HPFS or NTFS
|
0x?7 HPFS or NTFS
|
||||||
0x?A Boot Manager
|
0x?A Boot Manager
|
||||||
0x?B FAT32 (512 MB-2 TB)
|
0x?B FAT32 (512 MB-2 TB)
|
||||||
0x?C FAT32 (512 MB-2 TB LBA)
|
0x?C FAT32 (512 MB-2 TB LBA)
|
||||||
0x1? OS/2 Boot manager/Win95 hidden
|
0x1? OS/2 Boot manager/Win95 hidden
|
||||||
0xC? DR-DOS secured partition
|
0xC? DR-DOS secured partition
|
||||||
0xD? Multiuser DOS secured partition
|
0xD? Multiuser DOS secured partition
|
||||||
0xE? SpeedStor extended partition
|
0xE? SpeedStor extended partition
|
||||||
5 1 Ending head
|
5 1 Ending head
|
||||||
6 1 Ending sector (bits 5-0) and high bits of ending track (bits 6-5)
|
6 1 Ending sector (bits 5-0) and high bits of ending track (bits 6-5)
|
||||||
7 1 Low bits of ending track
|
7 1 Low bits of ending track
|
||||||
8 4 Sector index of beginning of partition
|
8 4 Sector index of beginning of partition
|
||||||
12 4 Total sectors in partition
|
12 4 Total sectors in partition
|
||||||
|
|
||||||
|
|
||||||
Boot sector format:
|
Boot sector format:
|
||||||
|
|
||||||
Offset Length Description
|
Offset Length Description
|
||||||
------ ------ -----------
|
------ ------ -----------
|
||||||
0 3 Jump instruction (to skip over header on boot)
|
0 3 Jump instruction (to skip over header on boot)
|
||||||
3 8 OEM Name
|
3 8 OEM Name
|
||||||
11 2 Bytes per sector
|
11 2 Bytes per sector
|
||||||
13 1 Sectors per cluster
|
13 1 Sectors per cluster
|
||||||
14 2 Reserved sector count (including boot sector)
|
14 2 Reserved sector count (including boot sector)
|
||||||
16 1 Number of FATs (file allocation tables)
|
16 1 Number of FATs (file allocation tables)
|
||||||
17 2 Number of root directory entries
|
17 2 Number of root directory entries
|
||||||
19 2 Total sectors (bits 0-15)
|
19 2 Total sectors (bits 0-15)
|
||||||
21 1 Media descriptor
|
21 1 Media descriptor
|
||||||
22 2 Sectors per FAT
|
22 2 Sectors per FAT
|
||||||
24 2 Sectors per track
|
24 2 Sectors per track
|
||||||
26 2 Number of heads
|
26 2 Number of heads
|
||||||
28 4 Hidden sectors
|
28 4 Hidden sectors
|
||||||
32 4 Total sectors (bits 16-47)
|
32 4 Total sectors (bits 16-47)
|
||||||
36 1 Physical drive number
|
36 1 Physical drive number
|
||||||
37 1 Current head
|
37 1 Current head
|
||||||
38 1 Signature
|
38 1 Signature
|
||||||
39 4 ID
|
39 4 ID
|
||||||
43 11 Volume Label
|
43 11 Volume Label
|
||||||
54 8 FAT file system type
|
54 8 FAT file system type
|
||||||
62 448 Boot machine code
|
62 448 Boot machine code
|
||||||
510 2 Magic bytes (0x55 0xAA)
|
510 2 Magic bytes (0x55 0xAA)
|
||||||
|
|
||||||
For more information:
|
For more information:
|
||||||
http://support.microsoft.com/kb/q140418/
|
http://support.microsoft.com/kb/q140418/
|
||||||
|
|
||||||
|
|
||||||
Directory Entry Format:
|
Directory Entry Format:
|
||||||
|
|
||||||
Offset Length Description
|
Offset Length Description
|
||||||
------ ------ -----------
|
------ ------ -----------
|
||||||
0 8 DOS File Name (padded with spaces)
|
0 8 DOS File Name (padded with spaces)
|
||||||
8 3 DOS File Extension (padded with spaces)
|
8 3 DOS File Extension (padded with spaces)
|
||||||
11 1 File Attributes
|
11 1 File Attributes
|
||||||
12 2 Unknown
|
12 2 Unknown
|
||||||
14 4 Time of Creation
|
14 4 Time of Creation
|
||||||
18 2 Last Access Time
|
18 2 Last Access Time
|
||||||
20 2 EA-Index (OS/2 stuff)
|
20 2 EA-Index (OS/2 stuff)
|
||||||
22 4 Last Modified Time
|
22 4 Last Modified Time
|
||||||
26 2 First Cluster
|
26 2 First Cluster
|
||||||
28 4 File Size
|
28 4 File Size
|
||||||
|
|
||||||
|
|
||||||
Dates and times are stored in separate words; when together, the time is
|
Dates and times are stored in separate words; when together, the time is
|
||||||
first and the date is second.
|
first and the date is second.
|
||||||
|
|
||||||
Time:
|
Time:
|
||||||
bits 15-11 Hour
|
bits 15-11 Hour
|
||||||
bits 10- 5 Minute
|
bits 10- 5 Minute
|
||||||
bits 4- 0 Second / 2
|
bits 4- 0 Second / 2
|
||||||
|
|
||||||
Date:
|
Date:
|
||||||
bits 15- 9 Year - 1980
|
bits 15- 9 Year - 1980
|
||||||
bits 8- 5 Month
|
bits 8- 5 Month
|
||||||
bits 4- 0 Day
|
bits 4- 0 Day
|
||||||
|
|
||||||
LFN Entry Format:
|
LFN Entry Format:
|
||||||
|
|
||||||
Offset Length Description
|
Offset Length Description
|
||||||
------ ------ -----------
|
------ ------ -----------
|
||||||
0 1 Sequence Number (bit 6 is set on highest sequence)
|
0 1 Sequence Number (bit 6 is set on highest sequence)
|
||||||
1 10 Name characters (five UTF-16LE chars)
|
1 10 Name characters (five UTF-16LE chars)
|
||||||
11 1 Attributes (always 0x0F)
|
11 1 Attributes (always 0x0F)
|
||||||
12 1 Reserved (always 0x00)
|
12 1 Reserved (always 0x00)
|
||||||
13 1 Checksum of short filename entry
|
13 1 Checksum of short filename entry
|
||||||
14 12 Name characters (six UTF-16LE chars)
|
14 12 Name characters (six UTF-16LE chars)
|
||||||
26 2 Entry Cluster (always 0x00)
|
26 2 Entry Cluster (always 0x00)
|
||||||
28 4 Name characters (two UTF-16LE chars)
|
28 4 Name characters (two UTF-16LE chars)
|
||||||
|
|
||||||
Valid characters in DOS file names:
|
Valid characters in DOS file names:
|
||||||
- Upper case letters A-Z
|
- Upper case letters A-Z
|
||||||
- Numbers 0-9
|
- Numbers 0-9
|
||||||
- Space (though there is no way to identify a trailing space)
|
- Space (though there is no way to identify a trailing space)
|
||||||
- ! # $ % & ( ) - @ ^ _ ` { } ~
|
- ! # $ % & ( ) - @ ^ _ ` { } ~
|
||||||
- Characters 128-255 (though the code page is indeterminate)
|
- Characters 128-255 (though the code page is indeterminate)
|
||||||
|
|
||||||
For more information:
|
For more information:
|
||||||
http://en.wikipedia.org/wiki/File_Allocation_Table
|
http://en.wikipedia.org/wiki/File_Allocation_Table
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
@ -169,27 +169,27 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string_view raw_stem() const { return std::string_view((const char *) &m_block.rodata()[m_offset + 0], 8); }
|
std::string_view raw_stem() const { return std::string_view((const char *) &m_block.rodata()[m_offset + 0], 8); }
|
||||||
std::string_view raw_ext() const { return std::string_view((const char *) &m_block.rodata()[m_offset + 8], 3); }
|
std::string_view raw_ext() const { return std::string_view((const char *) &m_block.rodata()[m_offset + 8], 3); }
|
||||||
u8 attributes() const { return m_block.r8(m_offset + 11); }
|
u8 attributes() const { return m_block.r8(m_offset + 11); }
|
||||||
u32 raw_create_datetime() const { return m_block.r32l(m_offset + 14); }
|
u32 raw_create_datetime() const { return m_block.r32l(m_offset + 14); }
|
||||||
u32 raw_modified_datetime() const { return m_block.r32l(m_offset + 22); }
|
u32 raw_modified_datetime() const { return m_block.r32l(m_offset + 22); }
|
||||||
u32 start_cluster() const { return ((u32)m_block.r16l(m_offset + 20)) << 16 | m_block.r16l(m_offset + 26); }
|
u32 start_cluster() const { return ((u32)m_block.r16l(m_offset + 20)) << 16 | m_block.r16l(m_offset + 26); }
|
||||||
u32 file_size() const { return m_block.r32l(m_offset + 28); }
|
u32 file_size() const { return m_block.r32l(m_offset + 28); }
|
||||||
|
|
||||||
bool is_read_only() const { return (attributes() & 0x01) != 0x00; }
|
bool is_read_only() const { return (attributes() & 0x01) != 0x00; }
|
||||||
bool is_hidden() const { return (attributes() & 0x02) != 0x00; }
|
bool is_hidden() const { return (attributes() & 0x02) != 0x00; }
|
||||||
bool is_system() const { return (attributes() & 0x04) != 0x00; }
|
bool is_system() const { return (attributes() & 0x04) != 0x00; }
|
||||||
bool is_volume_label() const { return (attributes() & 0x08) != 0x00; }
|
bool is_volume_label() const { return (attributes() & 0x08) != 0x00; }
|
||||||
bool is_subdirectory() const { return (attributes() & 0x10) != 0x00; }
|
bool is_subdirectory() const { return (attributes() & 0x10) != 0x00; }
|
||||||
bool is_archive() const { return (attributes() & 0x20) != 0x00; }
|
bool is_archive() const { return (attributes() & 0x20) != 0x00; }
|
||||||
|
|
||||||
std::string name() const;
|
std::string name() const;
|
||||||
meta_data metadata() const;
|
meta_data metadata() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
fsblk_t::block_t m_block;
|
fsblk_t::block_t m_block;
|
||||||
u32 m_offset;
|
u32 m_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -231,13 +231,13 @@ public:
|
|||||||
std::vector<u32> get_sectors_from_fat(const directory_entry &dirent) const;
|
std::vector<u32> get_sectors_from_fat(const directory_entry &dirent) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
fsblk_t::block_t m_boot_sector_block;
|
fsblk_t::block_t m_boot_sector_block;
|
||||||
std::vector<u8> m_file_allocation_table;
|
std::vector<u8> m_file_allocation_table;
|
||||||
u32 m_starting_sector;
|
u32 m_starting_sector;
|
||||||
u32 m_sector_count;
|
u32 m_sector_count;
|
||||||
u16 m_reserved_sector_count;
|
u16 m_reserved_sector_count;
|
||||||
u16 m_bytes_per_sector;
|
u16 m_bytes_per_sector;
|
||||||
u8 m_bits_per_fat_entry;
|
u8 m_bits_per_fat_entry;
|
||||||
|
|
||||||
// methods
|
// methods
|
||||||
std::optional<directory_entry> find_entity(const std::vector<std::string> &path) const;
|
std::optional<directory_entry> find_entity(const std::vector<std::string> &path) const;
|
||||||
@ -257,9 +257,9 @@ public:
|
|||||||
virtual std::vector<u32> get_directory_sectors() const override;
|
virtual std::vector<u32> get_directory_sectors() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const impl & m_fs;
|
const impl & m_fs;
|
||||||
u32 m_first_sector;
|
u32 m_first_sector;
|
||||||
u16 m_directory_entry_count;
|
u16 m_directory_entry_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -273,8 +273,8 @@ public:
|
|||||||
virtual std::vector<u32> get_directory_sectors() const override;
|
virtual std::vector<u32> get_directory_sectors() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const impl & m_fs;
|
const impl & m_fs;
|
||||||
directory_entry m_dirent;
|
directory_entry m_dirent;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ private:
|
|||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// validate_filename
|
// validate_filename
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -303,7 +303,7 @@ bool validate_filename(std::string_view name)
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// decode_fat_datetime
|
// decode_fat_datetime
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
util::arbitrary_datetime decode_fat_datetime(u32 dt)
|
util::arbitrary_datetime decode_fat_datetime(u32 dt)
|
||||||
@ -311,12 +311,12 @@ util::arbitrary_datetime decode_fat_datetime(u32 dt)
|
|||||||
util::arbitrary_datetime result;
|
util::arbitrary_datetime result;
|
||||||
memset(&result, 0, sizeof(result));
|
memset(&result, 0, sizeof(result));
|
||||||
|
|
||||||
result.year = ((dt >> 25) & 0x7F) + 1980;
|
result.year = ((dt >> 25) & 0x7F) + 1980;
|
||||||
result.month = (dt >> 21) & 0x0F;
|
result.month = (dt >> 21) & 0x0F;
|
||||||
result.day_of_month = (dt >> 16) & 0x1F;
|
result.day_of_month = (dt >> 16) & 0x1F;
|
||||||
result.hour = (dt >> 11) & 0x1F;
|
result.hour = (dt >> 11) & 0x1F;
|
||||||
result.minute = (dt >> 5) & 0x3F;
|
result.minute = (dt >> 5) & 0x3F;
|
||||||
result.second = ((dt >> 0) & 0x1F) * 2;
|
result.second = ((dt >> 0) & 0x1F) * 2;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,7 +324,7 @@ util::arbitrary_datetime decode_fat_datetime(u32 dt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::can_format
|
// fat_image::can_format
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
bool fs::fat_image::can_format() const
|
bool fs::fat_image::can_format() const
|
||||||
@ -334,7 +334,7 @@ bool fs::fat_image::can_format() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::can_read
|
// fat_image::can_read
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
bool fs::fat_image::can_read() const
|
bool fs::fat_image::can_read() const
|
||||||
@ -344,7 +344,7 @@ bool fs::fat_image::can_read() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::can_write
|
// fat_image::can_write
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
bool fs::fat_image::can_write() const
|
bool fs::fat_image::can_write() const
|
||||||
@ -354,7 +354,7 @@ bool fs::fat_image::can_write() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::has_rsrc
|
// fat_image::has_rsrc
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
bool fs::fat_image::has_rsrc() const
|
bool fs::fat_image::has_rsrc() const
|
||||||
@ -364,7 +364,7 @@ bool fs::fat_image::has_rsrc() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::directory_separator
|
// fat_image::directory_separator
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
char fs::fat_image::directory_separator() const
|
char fs::fat_image::directory_separator() const
|
||||||
@ -374,20 +374,20 @@ char fs::fat_image::directory_separator() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::volume_meta_description
|
// fat_image::volume_meta_description
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::vector<meta_description> fs::fat_image::volume_meta_description() const
|
std::vector<meta_description> fs::fat_image::volume_meta_description() const
|
||||||
{
|
{
|
||||||
std::vector<meta_description> results;
|
std::vector<meta_description> results;
|
||||||
results.emplace_back(meta_name::name, "UNTITLED", false, [](const meta_value &m) { return m.as_string().size() <= 11; }, "Volume name, up to 11 characters");
|
results.emplace_back(meta_name::name, "UNTITLED", false, [](const meta_value &m) { return m.as_string().size() <= 11; }, "Volume name, up to 11 characters");
|
||||||
results.emplace_back(meta_name::oem_name, "", false, [](const meta_value &m) { return m.as_string().size() <= 8; }, "OEM name, up to 8 characters");
|
results.emplace_back(meta_name::oem_name, "", false, [](const meta_value &m) { return m.as_string().size() <= 8; }, "OEM name, up to 8 characters");
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::file_meta_description
|
// fat_image::file_meta_description
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::vector<meta_description> fs::fat_image::file_meta_description() const
|
std::vector<meta_description> fs::fat_image::file_meta_description() const
|
||||||
@ -402,7 +402,7 @@ std::vector<meta_description> fs::fat_image::file_meta_description() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::directory_meta_description
|
// fat_image::directory_meta_description
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::vector<meta_description> fs::fat_image::directory_meta_description() const
|
std::vector<meta_description> fs::fat_image::directory_meta_description() const
|
||||||
@ -416,7 +416,7 @@ std::vector<meta_description> fs::fat_image::directory_meta_description() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// fat_image::mount_partition
|
// fat_image::mount_partition
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::unique_ptr<filesystem_t> fs::fat_image::mount_partition(fsblk_t &blockdev, u32 starting_sector, u32 sector_count, u8 bits_per_fat_entry)
|
std::unique_ptr<filesystem_t> fs::fat_image::mount_partition(fsblk_t &blockdev, u32 starting_sector, u32 sector_count, u8 bits_per_fat_entry)
|
||||||
@ -444,7 +444,7 @@ std::unique_ptr<filesystem_t> fs::fat_image::mount_partition(fsblk_t &blockdev,
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// directory_entry::name
|
// directory_entry::name
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::string directory_entry::name() const
|
std::string directory_entry::name() const
|
||||||
@ -458,22 +458,22 @@ std::string directory_entry::name() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// directory_entry::metadata
|
// directory_entry::metadata
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
meta_data directory_entry::metadata() const
|
meta_data directory_entry::metadata() const
|
||||||
{
|
{
|
||||||
meta_data result;
|
meta_data result;
|
||||||
result.set(meta_name::name, name());
|
result.set(meta_name::name, name());
|
||||||
result.set(meta_name::creation_date, decode_fat_datetime(raw_create_datetime()));
|
result.set(meta_name::creation_date, decode_fat_datetime(raw_create_datetime()));
|
||||||
result.set(meta_name::modification_date, decode_fat_datetime(raw_modified_datetime()));
|
result.set(meta_name::modification_date, decode_fat_datetime(raw_modified_datetime()));
|
||||||
result.set(meta_name::length, file_size());
|
result.set(meta_name::length, file_size());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl ctor
|
// impl ctor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
impl::impl(fsblk_t &blockdev, fsblk_t::block_t &&boot_sector_block, std::vector<u8> &&file_allocation_table, u32 starting_sector, u32 sector_count, u16 reserved_sector_count, u8 bits_per_fat_entry)
|
impl::impl(fsblk_t &blockdev, fsblk_t::block_t &&boot_sector_block, std::vector<u8> &&file_allocation_table, u32 starting_sector, u32 sector_count, u16 reserved_sector_count, u8 bits_per_fat_entry)
|
||||||
@ -490,20 +490,20 @@ impl::impl(fsblk_t &blockdev, fsblk_t::block_t &&boot_sector_block, std::vector<
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::volume_metadata
|
// impl::volume_metadata
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
meta_data impl::volume_metadata()
|
meta_data impl::volume_metadata()
|
||||||
{
|
{
|
||||||
meta_data results;
|
meta_data results;
|
||||||
results.set(meta_name::name, m_boot_sector_block.rstr(43, 11));
|
results.set(meta_name::name, m_boot_sector_block.rstr(43, 11));
|
||||||
results.set(meta_name::oem_name, m_boot_sector_block.rstr(3, 8));
|
results.set(meta_name::oem_name, m_boot_sector_block.rstr(3, 8));
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::metadata
|
// impl::metadata
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::pair<err_t, meta_data> impl::metadata(const std::vector<std::string> &path)
|
std::pair<err_t, meta_data> impl::metadata(const std::vector<std::string> &path)
|
||||||
@ -517,7 +517,7 @@ std::pair<err_t, meta_data> impl::metadata(const std::vector<std::string> &path)
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::directory_contents
|
// impl::directory_contents
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::pair<err_t, std::vector<dir_entry>> impl::directory_contents(const std::vector<std::string> &path)
|
std::pair<err_t, std::vector<dir_entry>> impl::directory_contents(const std::vector<std::string> &path)
|
||||||
@ -539,7 +539,7 @@ std::pair<err_t, std::vector<dir_entry>> impl::directory_contents(const std::vec
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::file_read
|
// impl::file_read
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::pair<err_t, std::vector<u8>> impl::file_read(const std::vector<std::string> &path)
|
std::pair<err_t, std::vector<u8>> impl::file_read(const std::vector<std::string> &path)
|
||||||
@ -569,7 +569,7 @@ std::pair<err_t, std::vector<u8>> impl::file_read(const std::vector<std::string>
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::get_sectors_from_fat
|
// impl::get_sectors_from_fat
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::vector<u32> impl::get_sectors_from_fat(const directory_entry &dirent) const
|
std::vector<u32> impl::get_sectors_from_fat(const directory_entry &dirent) const
|
||||||
@ -629,7 +629,7 @@ std::vector<u32> impl::get_sectors_from_fat(const directory_entry &dirent) const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::find_entity
|
// impl::find_entity
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::optional<directory_entry> impl::find_entity(const std::vector<std::string> &path) const
|
std::optional<directory_entry> impl::find_entity(const std::vector<std::string> &path) const
|
||||||
@ -649,7 +649,7 @@ std::optional<directory_entry> impl::find_entity(const std::vector<std::string>
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::find_directory
|
// impl::find_directory
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
directory_span::ptr impl::find_directory(std::vector<std::string>::const_iterator path_begin, std::vector<std::string>::const_iterator path_end) const
|
directory_span::ptr impl::find_directory(std::vector<std::string>::const_iterator path_begin, std::vector<std::string>::const_iterator path_end) const
|
||||||
@ -676,7 +676,7 @@ directory_span::ptr impl::find_directory(std::vector<std::string>::const_iterato
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::find_child
|
// impl::find_child
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::optional<directory_entry> impl::find_child(const directory_span ¤t_dir, std::string_view target) const
|
std::optional<directory_entry> impl::find_child(const directory_span ¤t_dir, std::string_view target) const
|
||||||
@ -695,7 +695,7 @@ std::optional<directory_entry> impl::find_child(const directory_span ¤t_di
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// impl::iterate_directory_entries
|
// impl::iterate_directory_entries
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void impl::iterate_directory_entries(const directory_span &dir, const std::function<bool(const directory_entry &dirent)> &callback) const
|
void impl::iterate_directory_entries(const directory_span &dir, const std::function<bool(const directory_entry &dirent)> &callback) const
|
||||||
@ -728,7 +728,7 @@ void impl::iterate_directory_entries(const directory_span &dir, const std::funct
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// root_directory_span ctor
|
// root_directory_span ctor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
root_directory_span::root_directory_span(const impl &fs, u32 first_sector, u16 directory_entry_count)
|
root_directory_span::root_directory_span(const impl &fs, u32 first_sector, u16 directory_entry_count)
|
||||||
@ -740,7 +740,7 @@ root_directory_span::root_directory_span(const impl &fs, u32 first_sector, u16 d
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// root_directory_span::get_directory_sectors
|
// root_directory_span::get_directory_sectors
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::vector<u32> root_directory_span::get_directory_sectors() const
|
std::vector<u32> root_directory_span::get_directory_sectors() const
|
||||||
@ -756,7 +756,7 @@ std::vector<u32> root_directory_span::get_directory_sectors() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// subdirectory_span ctor
|
// subdirectory_span ctor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
subdirectory_span::subdirectory_span(const impl &fs, directory_entry &&dirent)
|
subdirectory_span::subdirectory_span(const impl &fs, directory_entry &&dirent)
|
||||||
@ -767,7 +767,7 @@ subdirectory_span::subdirectory_span(const impl &fs, directory_entry &&dirent)
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// subdirectory_span::get_directory_sectors
|
// subdirectory_span::get_directory_sectors
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::vector<u32> subdirectory_span::get_directory_sectors() const
|
std::vector<u32> subdirectory_span::get_directory_sectors() const
|
||||||
@ -781,7 +781,7 @@ std::vector<u32> subdirectory_span::get_directory_sectors() const
|
|||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// pc_fat_image::name
|
// pc_fat_image::name
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
const char *fs::pc_fat_image::name() const
|
const char *fs::pc_fat_image::name() const
|
||||||
@ -791,7 +791,7 @@ const char *fs::pc_fat_image::name() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// pc_fat_image::description
|
// pc_fat_image::description
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
const char *fs::pc_fat_image::description() const
|
const char *fs::pc_fat_image::description() const
|
||||||
@ -801,7 +801,7 @@ const char *fs::pc_fat_image::description() const
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// pc_fat_image::enumerate_f
|
// pc_fat_image::enumerate_f
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
void pc_fat_image::enumerate_f(floppy_enumerator &fe, u32 form_factor, const std::vector<u32> &variants) const
|
void pc_fat_image::enumerate_f(floppy_enumerator &fe, u32 form_factor, const std::vector<u32> &variants) const
|
||||||
@ -818,7 +818,7 @@ void pc_fat_image::enumerate_f(floppy_enumerator &fe, u32 form_factor, const std
|
|||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// pc_fat_image::mount
|
// pc_fat_image::mount
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
std::unique_ptr<filesystem_t> pc_fat_image::mount(fsblk_t &blockdev) const
|
std::unique_ptr<filesystem_t> pc_fat_image::mount(fsblk_t &blockdev) const
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
// copyright-holders:Nathan Woods
|
// copyright-holders:Nathan Woods
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
fs_fat.h
|
fs_fat.h
|
||||||
|
|
||||||
PC FAT disk images
|
PC FAT disk images
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
TODO:
|
TODO:
|
||||||
- Move RBV machines (IIci/IIsi) to separate driver?
|
- Move RBV machines (IIci/IIsi) to separate driver?
|
||||||
- Move IIfx to separate driver?
|
- Move IIfx to separate driver?
|
||||||
- Rewrite this driver in the newer (maclc3/maciivx/maclc) style as macii.cpp?
|
- Rewrite this driver in the newer (maclc3/maciivx/maclc) style as macii.cpp?
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
@ -2,19 +2,19 @@
|
|||||||
// copyright-holders:SomeRandomGuyIdk
|
// copyright-holders:SomeRandomGuyIdk
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
||||||
Barcrest MPU1 (1978)
|
Barcrest MPU1 (1978)
|
||||||
|
|
||||||
Barcrest's first fruit machine platform to use a conventional CPU,
|
Barcrest's first fruit machine platform to use a conventional CPU,
|
||||||
possibly the first of it's kind. Has electromechanical reels
|
possibly the first of it's kind. Has electromechanical reels
|
||||||
instead of the usual stepper reels. The hardware features a MC6800
|
instead of the usual stepper reels. The hardware features a MC6800
|
||||||
CPU clocked at around 1 MHz, 128 bytes of RAM and two PIAs for I/O.
|
CPU clocked at around 1 MHz, 128 bytes of RAM and two PIAs for I/O.
|
||||||
The PIAs can interface with up to 13 lamps, 4 reels, 8 triacs and 12 inputs
|
The PIAs can interface with up to 13 lamps, 4 reels, 8 triacs and 12 inputs
|
||||||
(4 of these being special coin inputs). A 1-bit DAC is used for audio.
|
(4 of these being special coin inputs). A 1-bit DAC is used for audio.
|
||||||
Games are stored on cartridges that can hold up to 4K of data.
|
Games are stored on cartridges that can hold up to 4K of data.
|
||||||
Most cartridges use a common 2K mask ROM, with the remaining 2K
|
Most cartridges use a common 2K mask ROM, with the remaining 2K
|
||||||
available for the game program.
|
available for the game program.
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- Layouts (there currently aren't any...)
|
- Layouts (there currently aren't any...)
|
||||||
|
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
@ -1,117 +1,117 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Devin Acker
|
// copyright-holders:Devin Acker
|
||||||
/*
|
/*
|
||||||
Casio GT913-based keyboards and MIDI modules
|
Casio GT913-based keyboards and MIDI modules
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
Celviano AP-10 digital piano (1995)
|
Celviano AP-10 digital piano (1995)
|
||||||
|
|
||||||
Main board (JCM358-MA1M):
|
Main board (JCM358-MA1M):
|
||||||
LSI301: CPU (Casio/NEC uPD912GF)
|
LSI301: CPU (Casio/NEC uPD912GF)
|
||||||
LSI302: DSP (Hitachi HG51B277FB)
|
LSI302: DSP (Hitachi HG51B277FB)
|
||||||
LSI303: 8Mbit ROM (Macronix MX23C8100MC-12)
|
LSI303: 8Mbit ROM (Macronix MX23C8100MC-12)
|
||||||
LSI304: 64kbit SRAM for CPU (Sanyo LC3564SM-85), battery backed
|
LSI304: 64kbit SRAM for CPU (Sanyo LC3564SM-85), battery backed
|
||||||
LSI305: 256kbit SRAM for DSP (Sanyo LC333832M-70)
|
LSI305: 256kbit SRAM for DSP (Sanyo LC333832M-70)
|
||||||
LSI306: stereo DAC (NEC uPD6379GR)
|
LSI306: stereo DAC (NEC uPD6379GR)
|
||||||
X301: 24MHz crystal for CPU
|
X301: 24MHz crystal for CPU
|
||||||
X302: 16MHz ceramic for DSP
|
X302: 16MHz ceramic for DSP
|
||||||
|
|
||||||
Service manual with schematics, pinouts, etc.:
|
Service manual with schematics, pinouts, etc.:
|
||||||
https://revenant1.net/casio/manuals/upd91x/ap10.pdf
|
https://revenant1.net/casio/manuals/upd91x/ap10.pdf
|
||||||
|
|
||||||
To access the test mode (not mentioned in the service manual):
|
To access the test mode (not mentioned in the service manual):
|
||||||
Hold both pedals and "Transpose/Tune/MIDI" while turning on the keyboard, then release the button.
|
Hold both pedals and "Transpose/Tune/MIDI" while turning on the keyboard, then release the button.
|
||||||
Afterwards, press one of these buttons:
|
Afterwards, press one of these buttons:
|
||||||
- Transpose: LED test
|
- Transpose: LED test
|
||||||
- Effect: switch test (press all front panel buttons left to right)
|
- Effect: switch test (press all front panel buttons left to right)
|
||||||
- Piano: key test (press all keys left to right)
|
- Piano: key test (press all keys left to right)
|
||||||
- E.Piano: ROM test
|
- E.Piano: ROM test
|
||||||
- Organ/Strings/Song: sound volume test
|
- Organ/Strings/Song: sound volume test
|
||||||
- Record/Start/Stop: stereo test
|
- Record/Start/Stop: stereo test
|
||||||
- Demo: MIDI loopback test
|
- Demo: MIDI loopback test
|
||||||
- Harpsichord: exit test mode
|
- Harpsichord: exit test mode
|
||||||
|
|
||||||
TODO: fix backup RAM getting re-initialized on every boot.
|
TODO: fix backup RAM getting re-initialized on every boot.
|
||||||
Depends on the power switch being implemented correctly - turning the power off
|
Depends on the power switch being implemented correctly - turning the power off
|
||||||
is supposed to trigger a NMI which updates the RAM checksum, but the NMI handler
|
is supposed to trigger a NMI which updates the RAM checksum, but the NMI handler
|
||||||
always proceeds to fully start up the system as if the power is being turned on
|
always proceeds to fully start up the system as if the power is being turned on
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
General MIDI modules (1996)
|
General MIDI modules (1996)
|
||||||
|
|
||||||
- GZ-30M
|
- GZ-30M
|
||||||
Basic model, small desktop module
|
Basic model, small desktop module
|
||||||
No 5-pin MIDI jack, only mini-DIN for RS-232 or RS-422
|
No 5-pin MIDI jack, only mini-DIN for RS-232 or RS-422
|
||||||
- GZ-70SP
|
- GZ-70SP
|
||||||
MIDI module built into a pair of speakers w/ karaoke mic input
|
MIDI module built into a pair of speakers w/ karaoke mic input
|
||||||
Provides both standard MIDI and mini-DIN connectors
|
Provides both standard MIDI and mini-DIN connectors
|
||||||
- WG-130
|
- WG-130
|
||||||
WaveBlaster-style PC daughterboard
|
WaveBlaster-style PC daughterboard
|
||||||
|
|
||||||
WG-130 board:
|
WG-130 board:
|
||||||
LSI101: stereo DAC (NEC uPD6379GR)
|
LSI101: stereo DAC (NEC uPD6379GR)
|
||||||
LSI102: CPU (Casio GT913F)
|
LSI102: CPU (Casio GT913F)
|
||||||
LSI103: 16Mbit ROM (Casio GM16000N-C40)
|
LSI103: 16Mbit ROM (Casio GM16000N-C40)
|
||||||
LSI104: 64kbit SRAM (Sanyo LC3564SM-85)
|
LSI104: 64kbit SRAM (Sanyo LC3564SM-85)
|
||||||
LSI105: unpopulated, for DSP SRAM
|
LSI105: unpopulated, for DSP SRAM
|
||||||
LSI106: unpopulated, for DSP
|
LSI106: unpopulated, for DSP
|
||||||
X101: 30MHz crystal
|
X101: 30MHz crystal
|
||||||
X102: unpopulated, for DSP
|
X102: unpopulated, for DSP
|
||||||
|
|
||||||
All three of these apparently use the same mask ROM.
|
All three of these apparently use the same mask ROM.
|
||||||
This ROM was also distributed as part of Casio's SW-10 softsynth for Windows,
|
This ROM was also distributed as part of Casio's SW-10 softsynth for Windows,
|
||||||
which it released in early 1997 as part of the "LANA Lite" karaoke system.
|
which it released in early 1997 as part of the "LANA Lite" karaoke system.
|
||||||
http://web.archive.org/web/20011122112757/www.casio.co.jp/lanalite/LanaSw10.exe
|
http://web.archive.org/web/20011122112757/www.casio.co.jp/lanalite/LanaSw10.exe
|
||||||
|
|
||||||
The WG-130 (and possibly others) have unpopulated footprints for the same DSP
|
The WG-130 (and possibly others) have unpopulated footprints for the same DSP
|
||||||
used in some keyboards (e.g. the CTK-601). The ROM does actually support
|
used in some keyboards (e.g. the CTK-601). The ROM does actually support
|
||||||
using the DSP if it's present, and responds to the same sysex message used to
|
using the DSP if it's present, and responds to the same sysex message used to
|
||||||
enable reverb on the CTK-601 and similar models (F0 44 0E 09 0x F7).
|
enable reverb on the CTK-601 and similar models (F0 44 0E 09 0x F7).
|
||||||
|
|
||||||
Pulling CPU pin 53 (KI0/P24) low starts a ROM checksum test.
|
Pulling CPU pin 53 (KI0/P24) low starts a ROM checksum test.
|
||||||
The result is indicated both by sound as well as output on pin 55 (KI2/P11).
|
The result is indicated both by sound as well as output on pin 55 (KI2/P11).
|
||||||
|
|
||||||
More info and photos:
|
More info and photos:
|
||||||
https://piano.tyonmage.com/casio/gz-30m.html
|
https://piano.tyonmage.com/casio/gz-30m.html
|
||||||
https://piano.tyonmage.com/casio/gz-70sp.html
|
https://piano.tyonmage.com/casio/gz-70sp.html
|
||||||
http://www.yjfy.com/museum/sound/WG-130.htm
|
http://www.yjfy.com/museum/sound/WG-130.htm
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
CTK-601/611 / Concertmate 990 (1997)
|
CTK-601/611 / Concertmate 990 (1997)
|
||||||
|
|
||||||
Main board (JCM462-MA1M):
|
Main board (JCM462-MA1M):
|
||||||
LSI1: CPU (Casio GT913F)
|
LSI1: CPU (Casio GT913F)
|
||||||
LSI2: DSP (Casio GD277F / Hitachi HG51B277FB)
|
LSI2: DSP (Casio GD277F / Hitachi HG51B277FB)
|
||||||
LSI3: 16Mbit ROM (Macronix MX23C1610MC-12)
|
LSI3: 16Mbit ROM (Macronix MX23C1610MC-12)
|
||||||
LSI4: 256kbit SRAM for CPU (Toshiba TC55257DFL-70L)
|
LSI4: 256kbit SRAM for CPU (Toshiba TC55257DFL-70L)
|
||||||
LSI5: 256kbit SRAM for DSP (same as LSI4)
|
LSI5: 256kbit SRAM for DSP (same as LSI4)
|
||||||
LSI6: stereo DAC (NEC uPD6379GR)
|
LSI6: stereo DAC (NEC uPD6379GR)
|
||||||
X1: 30MHz crystal for CPU
|
X1: 30MHz crystal for CPU
|
||||||
X2: 20MHz ceramic for DSP
|
X2: 20MHz ceramic for DSP
|
||||||
|
|
||||||
Display board (JCM462-LCD1M):
|
Display board (JCM462-LCD1M):
|
||||||
LSI401: LCD controller (Epson SED1278F2A)
|
LSI401: LCD controller (Epson SED1278F2A)
|
||||||
|
|
||||||
Service manuals with schematics, pinouts, etc.:
|
Service manuals with schematics, pinouts, etc.:
|
||||||
https://revenant1.net/casio/manuals/upd91x/ctk601.pdf
|
https://revenant1.net/casio/manuals/upd91x/ctk601.pdf
|
||||||
https://revenant1.net/casio/manuals/upd91x/ctk611.pdf
|
https://revenant1.net/casio/manuals/upd91x/ctk611.pdf
|
||||||
|
|
||||||
To access the test mode (not mentioned in the service manual):
|
To access the test mode (not mentioned in the service manual):
|
||||||
Hold the keypad 0 button while turning on the keyboard, then release the button.
|
Hold the keypad 0 button while turning on the keyboard, then release the button.
|
||||||
"TST" will appear on the LCD. Afterwards, press one of these buttons:
|
"TST" will appear on the LCD. Afterwards, press one of these buttons:
|
||||||
- Keypad 0: switch test (press all front panel buttons in a specific order, generally left to right)
|
- Keypad 0: switch test (press all front panel buttons in a specific order, generally left to right)
|
||||||
- Keypad 1: pedal and key test
|
- Keypad 1: pedal and key test
|
||||||
- Keypad 2: ROM test
|
- Keypad 2: ROM test
|
||||||
- Keypad 4/5/6: sound volume test
|
- Keypad 4/5/6: sound volume test
|
||||||
- Keypad 7/8: stereo test
|
- Keypad 7/8: stereo test
|
||||||
- Keypad 9: MIDI loopback test
|
- Keypad 9: MIDI loopback test
|
||||||
- Keypad +: power source test
|
- Keypad +: power source test
|
||||||
- Cursor Left: LCD test (all segments at once)
|
- Cursor Left: LCD test (all segments at once)
|
||||||
- Cursor Right: LCD test (all segments individually)
|
- Cursor Right: LCD test (all segments individually)
|
||||||
- Cursor Down: power off
|
- Cursor Down: power off
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -125,16 +125,16 @@
|
|||||||
Adds pitch wheel and different selection of demo songs
|
Adds pitch wheel and different selection of demo songs
|
||||||
|
|
||||||
Main board (JCM453-MA1M / JCM456-MA1M):
|
Main board (JCM453-MA1M / JCM456-MA1M):
|
||||||
LSI1: CPU (Casio GT913F)
|
LSI1: CPU (Casio GT913F)
|
||||||
LSI2: 8Mbit ROM (OKI MSM538002E)
|
LSI2: 8Mbit ROM (OKI MSM538002E)
|
||||||
LSI3: LCD controller (HD44780 compatible)
|
LSI3: LCD controller (HD44780 compatible)
|
||||||
May be either a Samsung KS0066U-10B or Epson SED1278F2A.
|
May be either a Samsung KS0066U-10B or Epson SED1278F2A.
|
||||||
IC1: stereo DAC (NEC uPD6379GR)
|
IC1: stereo DAC (NEC uPD6379GR)
|
||||||
X1: 30MHz ceramic
|
X1: 30MHz ceramic
|
||||||
|
|
||||||
Service manuals with schematics, pinouts, etc.:
|
Service manuals with schematics, pinouts, etc.:
|
||||||
https://revenant1.net/casio/manuals/upd91x/ctk531.pdf
|
https://revenant1.net/casio/manuals/upd91x/ctk531.pdf
|
||||||
https://revenant1.net/casio/manuals/upd91x/ctk541.pdf
|
https://revenant1.net/casio/manuals/upd91x/ctk541.pdf
|
||||||
|
|
||||||
To access the test mode (not mentioned in the service manual):
|
To access the test mode (not mentioned in the service manual):
|
||||||
Hold the "Start/Stop" and keypad 0 buttons together when turning on the keyboard.
|
Hold the "Start/Stop" and keypad 0 buttons together when turning on the keyboard.
|
||||||
|
@ -544,7 +544,7 @@ void jpmsru_state::out_logicext_w(offs_t offset, uint8_t data)
|
|||||||
switch(offset)
|
switch(offset)
|
||||||
{
|
{
|
||||||
case 0: out_lamp_ext_w(m_logicext_addr, !m_logicext_data); break; /* All dumped games use solely lamps as outputs,
|
case 0: out_lamp_ext_w(m_logicext_addr, !m_logicext_data); break; /* All dumped games use solely lamps as outputs,
|
||||||
so keep things simple for now */
|
so keep things simple for now */
|
||||||
case 1: m_logicext_data = data; break;
|
case 1: m_logicext_data = data; break;
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -32,22 +32,22 @@ memory map:
|
|||||||
bit 2 = nmi enable/acknowledge
|
bit 2 = nmi enable/acknowledge
|
||||||
bit 3 = flip screen (applies to sprites only, not tilemaps)
|
bit 3 = flip screen (applies to sprites only, not tilemaps)
|
||||||
bit 4 = disable internal sprite processing
|
bit 4 = disable internal sprite processing
|
||||||
used by Devastators, TMNT, Aliens, Chequered Flag, maybe others
|
used by Devastators, TMNT, Aliens, Chequered Flag, maybe others
|
||||||
aliens sets it just after checking bit 0, and before copying
|
aliens sets it just after checking bit 0, and before copying
|
||||||
the sprite data
|
the sprite data
|
||||||
bit 5 = enable gfx ROM reading
|
bit 5 = enable gfx ROM reading
|
||||||
bit 6 = let cpu address bits 2~5 pass through CA0~3 when bit 5 is set
|
bit 6 = let cpu address bits 2~5 pass through CA0~3 when bit 5 is set
|
||||||
001 W bit 0 = invert shadow for all pens
|
001 W bit 0 = invert shadow for all pens
|
||||||
bit 1 = force shadows for pen 0x0f
|
bit 1 = force shadows for pen 0x0f
|
||||||
bit 2 = disable shadows for pen 0x0f (priority over bit 1)
|
bit 2 = disable shadows for pen 0x0f (priority over bit 1)
|
||||||
Devastators sets bit 1.
|
Devastators sets bit 1.
|
||||||
Ultraman sets the register to 0x0f.
|
Ultraman sets the register to 0x0f.
|
||||||
None of the other games I tested seem to set this register to other than 0.
|
None of the other games I tested seem to set this register to other than 0.
|
||||||
Update: Chequered Flag sets bit 0 when background should be dimmed.
|
Update: Chequered Flag sets bit 0 when background should be dimmed.
|
||||||
002-003 W selects the portion of the gfx ROMs to be read.
|
002-003 W selects the portion of the gfx ROMs to be read.
|
||||||
004 W bit 0 = OC6 when gfx ROM reading is enabled
|
004 W bit 0 = OC6 when gfx ROM reading is enabled
|
||||||
bit 1 = OC7 when gfx ROM reading is enabled
|
bit 1 = OC7 when gfx ROM reading is enabled
|
||||||
Aliens uses this to select the ROM bank to be read, but Punk Shot
|
Aliens uses this to select the ROM bank to be read, but Punk Shot
|
||||||
and TMNT don't, they use another bit of the registers above. Many
|
and TMNT don't, they use another bit of the registers above. Many
|
||||||
other games write to this register before testing.
|
other games write to this register before testing.
|
||||||
Bits 2-7 of 003 go to OC0-OC5.
|
Bits 2-7 of 003 go to OC0-OC5.
|
||||||
|
@ -84,12 +84,12 @@ private:
|
|||||||
devcb_write_line m_firq_handler;
|
devcb_write_line m_firq_handler;
|
||||||
devcb_write_line m_nmi_handler;
|
devcb_write_line m_nmi_handler;
|
||||||
|
|
||||||
uint8_t m_spriterombank[3];
|
uint8_t m_spriterombank[3];
|
||||||
uint8_t m_romoffset;
|
uint8_t m_romoffset;
|
||||||
bool m_spriteflip, m_readroms;
|
bool m_spriteflip, m_readroms;
|
||||||
uint8_t m_shadow_config;
|
uint8_t m_shadow_config;
|
||||||
bool m_inv_shadow;
|
bool m_inv_shadow;
|
||||||
bool m_nmi_enabled;
|
bool m_nmi_enabled;
|
||||||
|
|
||||||
int k051960_fetchromdata( int byte );
|
int k051960_fetchromdata( int byte );
|
||||||
};
|
};
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
on the parameters.
|
on the parameters.
|
||||||
|
|
||||||
Thunder Cross II POST checks of this chip.
|
Thunder Cross II POST checks of this chip.
|
||||||
It literally tests the chip in an unit test fashion:
|
It literally tests the chip in an unit test fashion:
|
||||||
1. zeroing all ports;
|
1. zeroing all ports;
|
||||||
2. test that status returns 0;
|
2. test that status returns 0;
|
||||||
3. ping ACX reg 0 with 0xff;
|
3. ping ACX reg 0 with 0xff;
|
||||||
|
@ -155,7 +155,7 @@ The PS2 is unaffected by the garbage byte.
|
|||||||
Endpoint 1 (IN, Bulk): Command handler, receives commands from the PS2
|
Endpoint 1 (IN, Bulk): Command handler, receives commands from the PS2
|
||||||
Endpoint 2 (OUT, Bulk): Command responses, sends responses back to the PS2
|
Endpoint 2 (OUT, Bulk): Command responses, sends responses back to the PS2
|
||||||
Endpoint 3 (IN, Interrupt): JAMMA I/O + analog I/O state response
|
Endpoint 3 (IN, Interrupt): JAMMA I/O + analog I/O state response
|
||||||
Response:
|
Response:
|
||||||
0x00 - 0x04 JAMMA I/O (IN)
|
0x00 - 0x04 JAMMA I/O (IN)
|
||||||
0x04 - 0x06 Analog I/O (ANALOG1)
|
0x04 - 0x06 Analog I/O (ANALOG1)
|
||||||
0x06 - 0x08 Analog I/O (ANALOG2)
|
0x06 - 0x08 Analog I/O (ANALOG2)
|
||||||
|
@ -180,8 +180,8 @@ license:CC0
|
|||||||
<text string="Grapes"> <bounds x="0" y="320" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Grapes"> <bounds x="0" y="320" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Orange"> <bounds x="0" y="340" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Orange"> <bounds x="0" y="340" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Plum"> <bounds x="0" y="360" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Plum"> <bounds x="0" y="360" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Pear"> <bounds x="0" y="380" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Pear"> <bounds x="0" y="380" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Triple Bar"> <bounds x="0" y="0" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Triple Bar"> <bounds x="0" y="0" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
</element>
|
</element>
|
||||||
<element name="Reel 2">
|
<element name="Reel 2">
|
||||||
<rect> <bounds x="0" y="0" width="100" height="400"/> <color alpha="0.0"/> </rect>
|
<rect> <bounds x="0" y="0" width="100" height="400"/> <color alpha="0.0"/> </rect>
|
||||||
@ -250,7 +250,7 @@ license:CC0
|
|||||||
<text string="Melon*"> <bounds x="0" y="340" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Melon*"> <bounds x="0" y="340" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Pear"> <bounds x="0" y="360" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Pear"> <bounds x="0" y="360" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="7"> <bounds x="0" y="380" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="7"> <bounds x="0" y="380" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Triple Bar"> <bounds x="0" y="0" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Triple Bar"> <bounds x="0" y="0" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
</element>
|
</element>
|
||||||
<element name="LCD" defstate="0">
|
<element name="LCD" defstate="0">
|
||||||
<led7seg>
|
<led7seg>
|
||||||
|
@ -48,7 +48,7 @@ license:CC0
|
|||||||
<text string="Pear"> <bounds x="0" y="360" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Pear"> <bounds x="0" y="360" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Bar"> <bounds x="0" y="380" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Bar"> <bounds x="0" y="380" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Plum"> <bounds x="0" y="0" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Plum"> <bounds x="0" y="0" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
<text string="Louth Coin"> <bounds x="0" y="20" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
<text string="Louth Coin"> <bounds x="0" y="20" width="100" height="20"/> <color red="0.0" green="0.0" blue="0.0"/> </text>
|
||||||
</element>
|
</element>
|
||||||
<element name="Reel 2">
|
<element name="Reel 2">
|
||||||
<rect> <bounds x="0" y="0" width="100" height="400"/> <color alpha="0.0"/> </rect>
|
<rect> <bounds x="0" y="0" width="100" height="400"/> <color alpha="0.0"/> </rect>
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
|
|
||||||
- loadsys1 core dump
|
- loadsys1 core dump
|
||||||
- short/long reset (RSTBUT)
|
- short/long reset (RSTBUT)
|
||||||
- CIO
|
- CIO
|
||||||
- optimize timers!
|
- optimize timers!
|
||||||
|
@ -1353,7 +1353,7 @@ void playch10_state::gboard_rom_switch_w(offs_t offset, u8 data)
|
|||||||
|
|
||||||
case 0x2001: // enable ram at $6000
|
case 0x2001: // enable ram at $6000
|
||||||
// ignored - we always enable it
|
// ignored - we always enable it
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x4000: // scanline counter
|
case 0x4000: // scanline counter
|
||||||
m_IRQ_count_latch = data;
|
m_IRQ_count_latch = data;
|
||||||
|
@ -1137,7 +1137,7 @@ void vs_smbbl_state::smbbl_ppu_map(address_map &map)
|
|||||||
#define VS_UNI_JOYSTICK(port_tag, player, type1, name1) \
|
#define VS_UNI_JOYSTICK(port_tag, player, type1, name1) \
|
||||||
PORT_START(port_tag) \
|
PORT_START(port_tag) \
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(player) PORT_NAME("%p A") \
|
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(player) PORT_NAME("%p A") \
|
||||||
PORT_BIT( 0X02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(player) PORT_NAME("%p B") \
|
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(player) PORT_NAME("%p B") \
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, type1 ) PORT_NAME(name1) \
|
PORT_BIT( 0x04, IP_ACTIVE_HIGH, type1 ) PORT_NAME(name1) \
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) \
|
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) \
|
||||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(player) \
|
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(player) \
|
||||||
@ -1148,7 +1148,7 @@ void vs_smbbl_state::smbbl_ppu_map(address_map &map)
|
|||||||
#define VS_DUAL_JOYSTICK(port_tag, player, type1, type2, name1, name2) \
|
#define VS_DUAL_JOYSTICK(port_tag, player, type1, type2, name1, name2) \
|
||||||
PORT_START(port_tag) \
|
PORT_START(port_tag) \
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(player) PORT_NAME("%p A") \
|
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(player) PORT_NAME("%p A") \
|
||||||
PORT_BIT( 0X02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(player) PORT_NAME("%p B") \
|
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(player) PORT_NAME("%p B") \
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, type1 ) PORT_NAME(name1) \
|
PORT_BIT( 0x04, IP_ACTIVE_HIGH, type1 ) PORT_NAME(name1) \
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, type2 ) PORT_NAME(name2) \
|
PORT_BIT( 0x08, IP_ACTIVE_HIGH, type2 ) PORT_NAME(name2) \
|
||||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(player) \
|
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(player) \
|
||||||
|
@ -54,7 +54,7 @@ The Next Tetris (dumped) -----------------------
|
|||||||
Crayon Shin-chan 3 (not dumped?) Interactive Sampler (three different versions)
|
Crayon Shin-chan 3 (not dumped?) Interactive Sampler (three different versions)
|
||||||
Nuon Games + Demos (collection from Nuon-Dome)
|
Nuon Games + Demos (collection from Nuon-Dome)
|
||||||
Nuon-Dome PhillyClassic 5 Demo Disc (give-away collection)
|
Nuon-Dome PhillyClassic 5 Demo Disc (give-away collection)
|
||||||
Motorola BlackBird Demonstration Pack
|
Motorola BlackBird Demonstration Pack
|
||||||
|
|
||||||
There were also a number of homebrew titles made available.
|
There were also a number of homebrew titles made available.
|
||||||
It was noted that only the Samsung and RCA units can run homebrew software and the Samsung DVD-N501 is the most compatible unit
|
It was noted that only the Samsung and RCA units can run homebrew software and the Samsung DVD-N501 is the most compatible unit
|
||||||
|
@ -5,15 +5,15 @@
|
|||||||
MicroART ATM (clone of Spectrum)
|
MicroART ATM (clone of Spectrum)
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
Current implementation based on ATM Turbo 2+. If anybody wants to validate ATM1, existing
|
Current implementation based on ATM Turbo 2+. If anybody wants to validate ATM1, existing
|
||||||
code must be moved to atmtb2_state not modified.
|
code must be moved to atmtb2_state not modified.
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
* ports read
|
* ports read
|
||||||
* ATM2+ (compare to ATM2) has only 1M RAM vs 512K
|
* ATM2+ (compare to ATM2) has only 1M RAM vs 512K
|
||||||
* Mem masks are hardcoded to 1M RAM
|
* Mem masks are hardcoded to 1M RAM
|
||||||
* better handling of SHADOW ports
|
* better handling of SHADOW ports
|
||||||
* validate screen timings
|
* validate screen timings
|
||||||
|
|
||||||
*******************************************************************************************/
|
*******************************************************************************************/
|
||||||
|
|
||||||
|
@ -2,19 +2,19 @@
|
|||||||
// copyright-holders:Devin Acker
|
// copyright-holders:Devin Acker
|
||||||
|
|
||||||
/*
|
/*
|
||||||
VTech Phusion (2000)
|
VTech Phusion (2000)
|
||||||
|
|
||||||
This handheld organizer/PDA runs on an unknown CR16B SoC.
|
This handheld organizer/PDA runs on an unknown CR16B SoC.
|
||||||
It's probably similar (but not identical) to the one described in glcx.cpp.
|
It's probably similar (but not identical) to the one described in glcx.cpp.
|
||||||
|
|
||||||
Main board:
|
Main board:
|
||||||
U1: Analog Integrations AIC1652CS
|
U1: Analog Integrations AIC1652CS
|
||||||
U2: 8Mbit flash (Toshiba TC58FVT800FT-85)
|
U2: 8Mbit flash (Toshiba TC58FVT800FT-85)
|
||||||
U3: Hyundai GM76FV18ALLFW70
|
U3: Hyundai GM76FV18ALLFW70
|
||||||
U10: unknown CR16B-based SoC (epoxy blob)
|
U10: unknown CR16B-based SoC (epoxy blob)
|
||||||
U11: National Semiconductor DS14C232CM
|
U11: National Semiconductor DS14C232CM
|
||||||
U12: National Semiconductor LM4882
|
U12: National Semiconductor LM4882
|
||||||
U14: 16Mbit mask ROM (Sharp LH53V16500)
|
U14: 16Mbit mask ROM (Sharp LH53V16500)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user