mirror of
https://github.com/holub/mame
synced 2025-07-03 09:06:08 +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_timer0->adjust(attotime::never);
|
||||
// m_dactimer->adjust(attotime::never);
|
||||
// m_timer0->adjust(attotime::never);
|
||||
// m_dactimer->adjust(attotime::never);
|
||||
|
||||
|
||||
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 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;
|
||||
}
|
||||
|
||||
@ -1408,7 +1408,7 @@ uint8_t axc51base_cpu_device::uartsta_r()
|
||||
|
||||
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_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)
|
||||
//{
|
||||
// fatalerror("inc_dptr with auto-inc");
|
||||
// fatalerror("inc_dptr with auto-inc");
|
||||
//}
|
||||
|
||||
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)
|
||||
//{
|
||||
// fatalerror("mov_dptr_byte with auto-inc");
|
||||
// fatalerror("mov_dptr_byte with auto-inc");
|
||||
//}
|
||||
|
||||
if (m_sfr_regs[SFR_DPCON] & 0x04) // auto-toggle enabled
|
||||
|
@ -8,14 +8,14 @@
|
||||
for many opcodes, as well as:
|
||||
|
||||
- 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
|
||||
- Keyboard controller w/ key velocity detection
|
||||
- MIDI UART
|
||||
- 24-voice DPCM sound
|
||||
|
||||
Variants include the uPD912 and GT915/uPD915.
|
||||
These were later succeeded by the uPD914.
|
||||
Variants include the uPD912 and GT915/uPD915.
|
||||
These were later succeeded by the uPD914.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -81,7 +81,7 @@ void gt913_device::map(address_map &map)
|
||||
/* fff0-fff5: I/O ports */
|
||||
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
|
||||
// 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(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));
|
||||
|
@ -105,7 +105,7 @@ void ds1207_device::nvram_default()
|
||||
m_device_state = 0;
|
||||
|
||||
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())
|
||||
{
|
||||
@ -266,7 +266,7 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
||||
if(m_bit == 24)
|
||||
{
|
||||
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 ])
|
||||
{
|
||||
@ -355,8 +355,8 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
||||
if(m_bit == 64)
|
||||
{
|
||||
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[ 4 ], m_identification[ 5 ], m_identification[ 6 ], m_identification[ 7 ]);
|
||||
m_identification[ 0 ], m_identification[ 1 ], m_identification[ 2 ], m_identification[ 3 ],
|
||||
m_identification[ 4 ], m_identification[ 5 ], m_identification[ 6 ], m_identification[ 7 ]);
|
||||
|
||||
new_state(STATE_WRITE_COMPARE_REGISTER);
|
||||
}
|
||||
@ -368,10 +368,10 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
||||
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(),
|
||||
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_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_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_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 ]);
|
||||
|
||||
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)
|
||||
{
|
||||
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[ 4 ], m_identification[ 5 ], m_identification[ 6 ], m_identification[ 7 ]);
|
||||
m_identification[ 0 ], m_identification[ 1 ], m_identification[ 2 ], m_identification[ 3 ],
|
||||
m_identification[ 4 ], m_identification[ 5 ], m_identification[ 6 ], m_identification[ 7 ]);
|
||||
|
||||
new_state(STATE_WRITE_SECURITY_MATCH);
|
||||
}
|
||||
@ -428,8 +428,8 @@ WRITE_LINE_MEMBER(ds1207_device::write_clk)
|
||||
if(m_bit == 64)
|
||||
{
|
||||
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[ 4 ], m_security_match[ 5 ], m_security_match[ 6 ], m_security_match[ 7 ]);
|
||||
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 ]);
|
||||
|
||||
new_state(STATE_STOP);
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
#pragma once
|
||||
|
||||
class generic_spi_flash_device : public device_t,
|
||||
public device_nvram_interface
|
||||
public device_nvram_interface
|
||||
{
|
||||
public:
|
||||
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)
|
||||
{
|
||||
// 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_target = (m_data[0] & 0x7f00) << 16;
|
||||
|
@ -3,19 +3,19 @@
|
||||
/***************************************************************************
|
||||
Philips SCC66470 Video and System controller.
|
||||
|
||||
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
|
||||
can be obtained by calling line( line number ) for each line.
|
||||
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
|
||||
than leaving it to the board driver ?
|
||||
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
|
||||
can be obtained by calling line( line number ) for each line.
|
||||
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
|
||||
than leaving it to the board driver ?
|
||||
|
||||
Todo:
|
||||
Add support for mosaic and RLE screens.
|
||||
Add remaining pixac operations. Only BCOLOUR1/BCOLOUR2 are supported.
|
||||
Add interlaced support.
|
||||
Add bep ?
|
||||
Verify number of cycles for each access.
|
||||
Todo:
|
||||
Add support for mosaic and RLE screens.
|
||||
Add remaining pixac operations. Only BCOLOUR1/BCOLOUR2 are supported.
|
||||
Add interlaced support.
|
||||
Add bep ?
|
||||
Verify number of cycles for each access.
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
@ -98,7 +98,7 @@ struct horizontal_settings
|
||||
|
||||
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 1
|
||||
{ 512, 0 }, // 0 0 1 0
|
||||
|
@ -57,7 +57,7 @@ enum isr_bits
|
||||
ISR_LRB = 0x01, // Last Received Bit
|
||||
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_STOP = (ISR_MST | ISR_TRX) // Stop bit request
|
||||
ISR_STOP = (ISR_MST | ISR_TRX) // Stop bit request
|
||||
};
|
||||
|
||||
enum umr_bits
|
||||
|
@ -2,15 +2,15 @@
|
||||
// copyright-holders:Nathan Woods
|
||||
/***************************************************************************
|
||||
|
||||
fs_fat.cpp
|
||||
fs_fat.cpp
|
||||
|
||||
PC FAT disk images
|
||||
PC FAT disk images
|
||||
|
||||
Current Limitations:
|
||||
- Read only
|
||||
- Only supports floppy disks
|
||||
- No FAT32 support
|
||||
- No Long Filenames Support
|
||||
Current Limitations:
|
||||
- Read only
|
||||
- Only supports floppy disks
|
||||
- No FAT32 support
|
||||
- No Long Filenames Support
|
||||
|
||||
*****************************************************************************
|
||||
|
||||
@ -18,125 +18,125 @@
|
||||
|
||||
Offset Length Description
|
||||
------ ------ -----------
|
||||
0 446 Boot machine code
|
||||
446 16 Partion #1 info
|
||||
462 16 Partion #2 info
|
||||
478 16 Partion #3 info
|
||||
494 16 Partion #4 info
|
||||
510 2 Magic bytes (0x55 0xAA)
|
||||
0 446 Boot machine code
|
||||
446 16 Partion #1 info
|
||||
462 16 Partion #2 info
|
||||
478 16 Partion #3 info
|
||||
494 16 Partion #4 info
|
||||
510 2 Magic bytes (0x55 0xAA)
|
||||
|
||||
|
||||
Partition info format:
|
||||
|
||||
Offset Length Description
|
||||
------ ------ -----------
|
||||
0 1 Active byte (0x80=active 0x00=inactive)
|
||||
1 1 Starting head
|
||||
2 1 Starting sector (bits 5-0) and high bits of starting track (bits 6-5)
|
||||
3 1 Low bits of starting track
|
||||
4 1 Partition type:
|
||||
0x00 Unused
|
||||
0x?1 FAT12 (0-15 MB)
|
||||
0x?2 XENIX
|
||||
0x?4 FAT16 (16-32 MB)
|
||||
0x?6 FAT16` (32 MB-2 GB)
|
||||
0x?7 HPFS or NTFS
|
||||
0x?A Boot Manager
|
||||
0x?B FAT32 (512 MB-2 TB)
|
||||
0x?C FAT32 (512 MB-2 TB LBA)
|
||||
0x1? OS/2 Boot manager/Win95 hidden
|
||||
0xC? DR-DOS secured partition
|
||||
0xD? Multiuser DOS secured partition
|
||||
0xE? SpeedStor extended partition
|
||||
5 1 Ending head
|
||||
6 1 Ending sector (bits 5-0) and high bits of ending track (bits 6-5)
|
||||
7 1 Low bits of ending track
|
||||
8 4 Sector index of beginning of partition
|
||||
12 4 Total sectors in partition
|
||||
0 1 Active byte (0x80=active 0x00=inactive)
|
||||
1 1 Starting head
|
||||
2 1 Starting sector (bits 5-0) and high bits of starting track (bits 6-5)
|
||||
3 1 Low bits of starting track
|
||||
4 1 Partition type:
|
||||
0x00 Unused
|
||||
0x?1 FAT12 (0-15 MB)
|
||||
0x?2 XENIX
|
||||
0x?4 FAT16 (16-32 MB)
|
||||
0x?6 FAT16` (32 MB-2 GB)
|
||||
0x?7 HPFS or NTFS
|
||||
0x?A Boot Manager
|
||||
0x?B FAT32 (512 MB-2 TB)
|
||||
0x?C FAT32 (512 MB-2 TB LBA)
|
||||
0x1? OS/2 Boot manager/Win95 hidden
|
||||
0xC? DR-DOS secured partition
|
||||
0xD? Multiuser DOS secured partition
|
||||
0xE? SpeedStor extended partition
|
||||
5 1 Ending head
|
||||
6 1 Ending sector (bits 5-0) and high bits of ending track (bits 6-5)
|
||||
7 1 Low bits of ending track
|
||||
8 4 Sector index of beginning of partition
|
||||
12 4 Total sectors in partition
|
||||
|
||||
|
||||
Boot sector format:
|
||||
|
||||
Offset Length Description
|
||||
------ ------ -----------
|
||||
0 3 Jump instruction (to skip over header on boot)
|
||||
3 8 OEM Name
|
||||
11 2 Bytes per sector
|
||||
13 1 Sectors per cluster
|
||||
14 2 Reserved sector count (including boot sector)
|
||||
16 1 Number of FATs (file allocation tables)
|
||||
17 2 Number of root directory entries
|
||||
19 2 Total sectors (bits 0-15)
|
||||
21 1 Media descriptor
|
||||
22 2 Sectors per FAT
|
||||
24 2 Sectors per track
|
||||
26 2 Number of heads
|
||||
28 4 Hidden sectors
|
||||
32 4 Total sectors (bits 16-47)
|
||||
36 1 Physical drive number
|
||||
37 1 Current head
|
||||
38 1 Signature
|
||||
39 4 ID
|
||||
43 11 Volume Label
|
||||
54 8 FAT file system type
|
||||
62 448 Boot machine code
|
||||
510 2 Magic bytes (0x55 0xAA)
|
||||
0 3 Jump instruction (to skip over header on boot)
|
||||
3 8 OEM Name
|
||||
11 2 Bytes per sector
|
||||
13 1 Sectors per cluster
|
||||
14 2 Reserved sector count (including boot sector)
|
||||
16 1 Number of FATs (file allocation tables)
|
||||
17 2 Number of root directory entries
|
||||
19 2 Total sectors (bits 0-15)
|
||||
21 1 Media descriptor
|
||||
22 2 Sectors per FAT
|
||||
24 2 Sectors per track
|
||||
26 2 Number of heads
|
||||
28 4 Hidden sectors
|
||||
32 4 Total sectors (bits 16-47)
|
||||
36 1 Physical drive number
|
||||
37 1 Current head
|
||||
38 1 Signature
|
||||
39 4 ID
|
||||
43 11 Volume Label
|
||||
54 8 FAT file system type
|
||||
62 448 Boot machine code
|
||||
510 2 Magic bytes (0x55 0xAA)
|
||||
|
||||
For more information:
|
||||
http://support.microsoft.com/kb/q140418/
|
||||
http://support.microsoft.com/kb/q140418/
|
||||
|
||||
|
||||
Directory Entry Format:
|
||||
|
||||
Offset Length Description
|
||||
------ ------ -----------
|
||||
0 8 DOS File Name (padded with spaces)
|
||||
8 3 DOS File Extension (padded with spaces)
|
||||
11 1 File Attributes
|
||||
12 2 Unknown
|
||||
14 4 Time of Creation
|
||||
18 2 Last Access Time
|
||||
20 2 EA-Index (OS/2 stuff)
|
||||
22 4 Last Modified Time
|
||||
26 2 First Cluster
|
||||
28 4 File Size
|
||||
0 8 DOS File Name (padded with spaces)
|
||||
8 3 DOS File Extension (padded with spaces)
|
||||
11 1 File Attributes
|
||||
12 2 Unknown
|
||||
14 4 Time of Creation
|
||||
18 2 Last Access Time
|
||||
20 2 EA-Index (OS/2 stuff)
|
||||
22 4 Last Modified Time
|
||||
26 2 First Cluster
|
||||
28 4 File Size
|
||||
|
||||
|
||||
Dates and times are stored in separate words; when together, the time is
|
||||
first and the date is second.
|
||||
|
||||
Time:
|
||||
bits 15-11 Hour
|
||||
bits 10- 5 Minute
|
||||
bits 4- 0 Second / 2
|
||||
Time:
|
||||
bits 15-11 Hour
|
||||
bits 10- 5 Minute
|
||||
bits 4- 0 Second / 2
|
||||
|
||||
Date:
|
||||
bits 15- 9 Year - 1980
|
||||
bits 8- 5 Month
|
||||
bits 4- 0 Day
|
||||
Date:
|
||||
bits 15- 9 Year - 1980
|
||||
bits 8- 5 Month
|
||||
bits 4- 0 Day
|
||||
|
||||
LFN Entry Format:
|
||||
|
||||
Offset Length Description
|
||||
------ ------ -----------
|
||||
0 1 Sequence Number (bit 6 is set on highest sequence)
|
||||
1 10 Name characters (five UTF-16LE chars)
|
||||
11 1 Attributes (always 0x0F)
|
||||
12 1 Reserved (always 0x00)
|
||||
13 1 Checksum of short filename entry
|
||||
14 12 Name characters (six UTF-16LE chars)
|
||||
26 2 Entry Cluster (always 0x00)
|
||||
28 4 Name characters (two UTF-16LE chars)
|
||||
0 1 Sequence Number (bit 6 is set on highest sequence)
|
||||
1 10 Name characters (five UTF-16LE chars)
|
||||
11 1 Attributes (always 0x0F)
|
||||
12 1 Reserved (always 0x00)
|
||||
13 1 Checksum of short filename entry
|
||||
14 12 Name characters (six UTF-16LE chars)
|
||||
26 2 Entry Cluster (always 0x00)
|
||||
28 4 Name characters (two UTF-16LE chars)
|
||||
|
||||
Valid characters in DOS file names:
|
||||
- Upper case letters A-Z
|
||||
- Numbers 0-9
|
||||
- Space (though there is no way to identify a trailing space)
|
||||
- ! # $ % & ( ) - @ ^ _ ` { } ~
|
||||
- Characters 128-255 (though the code page is indeterminate)
|
||||
- Upper case letters A-Z
|
||||
- Numbers 0-9
|
||||
- Space (though there is no way to identify a trailing space)
|
||||
- ! # $ % & ( ) - @ ^ _ ` { } ~
|
||||
- Characters 128-255 (though the code page is indeterminate)
|
||||
|
||||
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_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); }
|
||||
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 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); }
|
||||
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); }
|
||||
u8 attributes() const { return m_block.r8(m_offset + 11); }
|
||||
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 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); }
|
||||
|
||||
bool is_read_only() const { return (attributes() & 0x01) != 0x00; }
|
||||
bool is_hidden() const { return (attributes() & 0x02) != 0x00; }
|
||||
bool is_system() const { return (attributes() & 0x04) != 0x00; }
|
||||
bool is_volume_label() const { return (attributes() & 0x08) != 0x00; }
|
||||
bool is_subdirectory() const { return (attributes() & 0x10) != 0x00; }
|
||||
bool is_archive() const { return (attributes() & 0x20) != 0x00; }
|
||||
bool is_read_only() const { return (attributes() & 0x01) != 0x00; }
|
||||
bool is_hidden() const { return (attributes() & 0x02) != 0x00; }
|
||||
bool is_system() const { return (attributes() & 0x04) != 0x00; }
|
||||
bool is_volume_label() const { return (attributes() & 0x08) != 0x00; }
|
||||
bool is_subdirectory() const { return (attributes() & 0x10) != 0x00; }
|
||||
bool is_archive() const { return (attributes() & 0x20) != 0x00; }
|
||||
|
||||
std::string name() const;
|
||||
meta_data metadata() const;
|
||||
|
||||
private:
|
||||
fsblk_t::block_t m_block;
|
||||
u32 m_offset;
|
||||
fsblk_t::block_t m_block;
|
||||
u32 m_offset;
|
||||
};
|
||||
|
||||
|
||||
@ -231,13 +231,13 @@ public:
|
||||
std::vector<u32> get_sectors_from_fat(const directory_entry &dirent) const;
|
||||
|
||||
private:
|
||||
fsblk_t::block_t m_boot_sector_block;
|
||||
std::vector<u8> m_file_allocation_table;
|
||||
u32 m_starting_sector;
|
||||
u32 m_sector_count;
|
||||
u16 m_reserved_sector_count;
|
||||
u16 m_bytes_per_sector;
|
||||
u8 m_bits_per_fat_entry;
|
||||
fsblk_t::block_t m_boot_sector_block;
|
||||
std::vector<u8> m_file_allocation_table;
|
||||
u32 m_starting_sector;
|
||||
u32 m_sector_count;
|
||||
u16 m_reserved_sector_count;
|
||||
u16 m_bytes_per_sector;
|
||||
u8 m_bits_per_fat_entry;
|
||||
|
||||
// methods
|
||||
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;
|
||||
|
||||
private:
|
||||
const impl & m_fs;
|
||||
u32 m_first_sector;
|
||||
u16 m_directory_entry_count;
|
||||
const impl & m_fs;
|
||||
u32 m_first_sector;
|
||||
u16 m_directory_entry_count;
|
||||
};
|
||||
|
||||
|
||||
@ -273,8 +273,8 @@ public:
|
||||
virtual std::vector<u32> get_directory_sectors() const override;
|
||||
|
||||
private:
|
||||
const impl & m_fs;
|
||||
directory_entry m_dirent;
|
||||
const impl & m_fs;
|
||||
directory_entry m_dirent;
|
||||
};
|
||||
|
||||
|
||||
@ -286,7 +286,7 @@ private:
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// validate_filename
|
||||
// validate_filename
|
||||
//-------------------------------------------------
|
||||
|
||||
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)
|
||||
@ -311,12 +311,12 @@ util::arbitrary_datetime decode_fat_datetime(u32 dt)
|
||||
util::arbitrary_datetime result;
|
||||
memset(&result, 0, sizeof(result));
|
||||
|
||||
result.year = ((dt >> 25) & 0x7F) + 1980;
|
||||
result.month = (dt >> 21) & 0x0F;
|
||||
result.day_of_month = (dt >> 16) & 0x1F;
|
||||
result.hour = (dt >> 11) & 0x1F;
|
||||
result.minute = (dt >> 5) & 0x3F;
|
||||
result.second = ((dt >> 0) & 0x1F) * 2;
|
||||
result.year = ((dt >> 25) & 0x7F) + 1980;
|
||||
result.month = (dt >> 21) & 0x0F;
|
||||
result.day_of_month = (dt >> 16) & 0x1F;
|
||||
result.hour = (dt >> 11) & 0x1F;
|
||||
result.minute = (dt >> 5) & 0x3F;
|
||||
result.second = ((dt >> 0) & 0x1F) * 2;
|
||||
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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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> 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::oem_name, "", false, [](const meta_value &m) { return m.as_string().size() <= 8; }, "OEM name, up to 8 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");
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// fat_image::file_meta_description
|
||||
// fat_image::file_meta_description
|
||||
//-------------------------------------------------
|
||||
|
||||
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
|
||||
@ -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)
|
||||
@ -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
|
||||
@ -458,22 +458,22 @@ std::string directory_entry::name() const
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// directory_entry::metadata
|
||||
// directory_entry::metadata
|
||||
//-------------------------------------------------
|
||||
|
||||
meta_data directory_entry::metadata() const
|
||||
{
|
||||
meta_data result;
|
||||
result.set(meta_name::name, name());
|
||||
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::length, file_size());
|
||||
result.set(meta_name::name, name());
|
||||
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::length, file_size());
|
||||
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)
|
||||
@ -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 results;
|
||||
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::name, m_boot_sector_block.rstr(43, 11));
|
||||
results.set(meta_name::oem_name, m_boot_sector_block.rstr(3, 8));
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// impl::metadata
|
||||
// impl::metadata
|
||||
//-------------------------------------------------
|
||||
|
||||
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)
|
||||
@ -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)
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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)
|
||||
@ -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
|
||||
@ -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)
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
|
@ -2,9 +2,9 @@
|
||||
// copyright-holders:Nathan Woods
|
||||
/***************************************************************************
|
||||
|
||||
fs_fat.h
|
||||
fs_fat.h
|
||||
|
||||
PC FAT disk images
|
||||
PC FAT disk images
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
TODO:
|
||||
- Move RBV machines (IIci/IIsi) 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
|
||||
/**********************************************************************
|
||||
|
||||
Barcrest MPU1 (1978)
|
||||
Barcrest MPU1 (1978)
|
||||
|
||||
Barcrest's first fruit machine platform to use a conventional CPU,
|
||||
possibly the first of it's kind. Has electromechanical reels
|
||||
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.
|
||||
The PIAs can interface with up to 13 lamps, 4 reels, 8 triacs and 12 inputs
|
||||
Barcrest's first fruit machine platform to use a conventional CPU,
|
||||
possibly the first of it's kind. Has electromechanical reels
|
||||
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.
|
||||
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.
|
||||
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
|
||||
available for the game program.
|
||||
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
|
||||
available for the game program.
|
||||
|
||||
TODO:
|
||||
TODO:
|
||||
- Layouts (there currently aren't any...)
|
||||
|
||||
**********************************************************************/
|
||||
|
@ -1,117 +1,117 @@
|
||||
// license:BSD-3-Clause
|
||||
// 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):
|
||||
LSI301: CPU (Casio/NEC uPD912GF)
|
||||
LSI302: DSP (Hitachi HG51B277FB)
|
||||
LSI303: 8Mbit ROM (Macronix MX23C8100MC-12)
|
||||
LSI304: 64kbit SRAM for CPU (Sanyo LC3564SM-85), battery backed
|
||||
LSI305: 256kbit SRAM for DSP (Sanyo LC333832M-70)
|
||||
LSI306: stereo DAC (NEC uPD6379GR)
|
||||
X301: 24MHz crystal for CPU
|
||||
X302: 16MHz ceramic for DSP
|
||||
Main board (JCM358-MA1M):
|
||||
LSI301: CPU (Casio/NEC uPD912GF)
|
||||
LSI302: DSP (Hitachi HG51B277FB)
|
||||
LSI303: 8Mbit ROM (Macronix MX23C8100MC-12)
|
||||
LSI304: 64kbit SRAM for CPU (Sanyo LC3564SM-85), battery backed
|
||||
LSI305: 256kbit SRAM for DSP (Sanyo LC333832M-70)
|
||||
LSI306: stereo DAC (NEC uPD6379GR)
|
||||
X301: 24MHz crystal for CPU
|
||||
X302: 16MHz ceramic for DSP
|
||||
|
||||
Service manual with schematics, pinouts, etc.:
|
||||
https://revenant1.net/casio/manuals/upd91x/ap10.pdf
|
||||
Service manual with schematics, pinouts, etc.:
|
||||
https://revenant1.net/casio/manuals/upd91x/ap10.pdf
|
||||
|
||||
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.
|
||||
Afterwards, press one of these buttons:
|
||||
- Transpose: LED test
|
||||
- Effect: switch test (press all front panel buttons left to right)
|
||||
- Piano: key test (press all keys left to right)
|
||||
- E.Piano: ROM test
|
||||
- Organ/Strings/Song: sound volume test
|
||||
- Record/Start/Stop: stereo test
|
||||
- Demo: MIDI loopback test
|
||||
- Harpsichord: exit test mode
|
||||
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.
|
||||
Afterwards, press one of these buttons:
|
||||
- Transpose: LED test
|
||||
- Effect: switch test (press all front panel buttons left to right)
|
||||
- Piano: key test (press all keys left to right)
|
||||
- E.Piano: ROM test
|
||||
- Organ/Strings/Song: sound volume test
|
||||
- Record/Start/Stop: stereo test
|
||||
- Demo: MIDI loopback test
|
||||
- Harpsichord: exit test mode
|
||||
|
||||
TODO: fix backup RAM getting re-initialized on every boot.
|
||||
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
|
||||
always proceeds to fully start up the system as if the power is being turned on
|
||||
TODO: fix backup RAM getting re-initialized on every boot.
|
||||
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
|
||||
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
|
||||
Basic model, small desktop module
|
||||
- GZ-30M
|
||||
Basic model, small desktop module
|
||||
No 5-pin MIDI jack, only mini-DIN for RS-232 or RS-422
|
||||
- GZ-70SP
|
||||
MIDI module built into a pair of speakers w/ karaoke mic input
|
||||
Provides both standard MIDI and mini-DIN connectors
|
||||
- WG-130
|
||||
WaveBlaster-style PC daughterboard
|
||||
- GZ-70SP
|
||||
MIDI module built into a pair of speakers w/ karaoke mic input
|
||||
Provides both standard MIDI and mini-DIN connectors
|
||||
- WG-130
|
||||
WaveBlaster-style PC daughterboard
|
||||
|
||||
WG-130 board:
|
||||
LSI101: stereo DAC (NEC uPD6379GR)
|
||||
LSI102: CPU (Casio GT913F)
|
||||
LSI103: 16Mbit ROM (Casio GM16000N-C40)
|
||||
LSI104: 64kbit SRAM (Sanyo LC3564SM-85)
|
||||
LSI105: unpopulated, for DSP SRAM
|
||||
LSI106: unpopulated, for DSP
|
||||
X101: 30MHz crystal
|
||||
X102: unpopulated, for DSP
|
||||
WG-130 board:
|
||||
LSI101: stereo DAC (NEC uPD6379GR)
|
||||
LSI102: CPU (Casio GT913F)
|
||||
LSI103: 16Mbit ROM (Casio GM16000N-C40)
|
||||
LSI104: 64kbit SRAM (Sanyo LC3564SM-85)
|
||||
LSI105: unpopulated, for DSP SRAM
|
||||
LSI106: unpopulated, for DSP
|
||||
X101: 30MHz crystal
|
||||
X102: unpopulated, for DSP
|
||||
|
||||
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,
|
||||
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
|
||||
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,
|
||||
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
|
||||
|
||||
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
|
||||
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).
|
||||
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
|
||||
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).
|
||||
|
||||
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).
|
||||
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).
|
||||
|
||||
More info and photos:
|
||||
https://piano.tyonmage.com/casio/gz-30m.html
|
||||
https://piano.tyonmage.com/casio/gz-70sp.html
|
||||
http://www.yjfy.com/museum/sound/WG-130.htm
|
||||
More info and photos:
|
||||
https://piano.tyonmage.com/casio/gz-30m.html
|
||||
https://piano.tyonmage.com/casio/gz-70sp.html
|
||||
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):
|
||||
LSI1: CPU (Casio GT913F)
|
||||
LSI2: DSP (Casio GD277F / Hitachi HG51B277FB)
|
||||
LSI3: 16Mbit ROM (Macronix MX23C1610MC-12)
|
||||
LSI4: 256kbit SRAM for CPU (Toshiba TC55257DFL-70L)
|
||||
LSI5: 256kbit SRAM for DSP (same as LSI4)
|
||||
LSI6: stereo DAC (NEC uPD6379GR)
|
||||
X1: 30MHz crystal for CPU
|
||||
X2: 20MHz ceramic for DSP
|
||||
Main board (JCM462-MA1M):
|
||||
LSI1: CPU (Casio GT913F)
|
||||
LSI2: DSP (Casio GD277F / Hitachi HG51B277FB)
|
||||
LSI3: 16Mbit ROM (Macronix MX23C1610MC-12)
|
||||
LSI4: 256kbit SRAM for CPU (Toshiba TC55257DFL-70L)
|
||||
LSI5: 256kbit SRAM for DSP (same as LSI4)
|
||||
LSI6: stereo DAC (NEC uPD6379GR)
|
||||
X1: 30MHz crystal for CPU
|
||||
X2: 20MHz ceramic for DSP
|
||||
|
||||
Display board (JCM462-LCD1M):
|
||||
LSI401: LCD controller (Epson SED1278F2A)
|
||||
Display board (JCM462-LCD1M):
|
||||
LSI401: LCD controller (Epson SED1278F2A)
|
||||
|
||||
Service manuals with schematics, pinouts, etc.:
|
||||
https://revenant1.net/casio/manuals/upd91x/ctk601.pdf
|
||||
https://revenant1.net/casio/manuals/upd91x/ctk611.pdf
|
||||
Service manuals with schematics, pinouts, etc.:
|
||||
https://revenant1.net/casio/manuals/upd91x/ctk601.pdf
|
||||
https://revenant1.net/casio/manuals/upd91x/ctk611.pdf
|
||||
|
||||
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.
|
||||
"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 1: pedal and key test
|
||||
- Keypad 2: ROM test
|
||||
- Keypad 4/5/6: sound volume test
|
||||
- Keypad 7/8: stereo test
|
||||
- Keypad 9: MIDI loopback test
|
||||
- Keypad +: power source test
|
||||
- Cursor Left: LCD test (all segments at once)
|
||||
- Cursor Right: LCD test (all segments individually)
|
||||
- Cursor Down: power off
|
||||
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.
|
||||
"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 1: pedal and key test
|
||||
- Keypad 2: ROM test
|
||||
- Keypad 4/5/6: sound volume test
|
||||
- Keypad 7/8: stereo test
|
||||
- Keypad 9: MIDI loopback test
|
||||
- Keypad +: power source test
|
||||
- Cursor Left: LCD test (all segments at once)
|
||||
- Cursor Right: LCD test (all segments individually)
|
||||
- Cursor Down: power off
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
@ -125,16 +125,16 @@
|
||||
Adds pitch wheel and different selection of demo songs
|
||||
|
||||
Main board (JCM453-MA1M / JCM456-MA1M):
|
||||
LSI1: CPU (Casio GT913F)
|
||||
LSI2: 8Mbit ROM (OKI MSM538002E)
|
||||
LSI3: LCD controller (HD44780 compatible)
|
||||
May be either a Samsung KS0066U-10B or Epson SED1278F2A.
|
||||
IC1: stereo DAC (NEC uPD6379GR)
|
||||
X1: 30MHz ceramic
|
||||
LSI1: CPU (Casio GT913F)
|
||||
LSI2: 8Mbit ROM (OKI MSM538002E)
|
||||
LSI3: LCD controller (HD44780 compatible)
|
||||
May be either a Samsung KS0066U-10B or Epson SED1278F2A.
|
||||
IC1: stereo DAC (NEC uPD6379GR)
|
||||
X1: 30MHz ceramic
|
||||
|
||||
Service manuals with schematics, pinouts, etc.:
|
||||
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):
|
||||
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)
|
||||
{
|
||||
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 2:
|
||||
case 3:
|
||||
|
@ -32,22 +32,22 @@ memory map:
|
||||
bit 2 = nmi enable/acknowledge
|
||||
bit 3 = flip screen (applies to sprites only, not tilemaps)
|
||||
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
|
||||
the sprite data
|
||||
bit 5 = enable gfx ROM reading
|
||||
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
|
||||
bit 1 = force shadows for pen 0x0f
|
||||
bit 2 = disable shadows for pen 0x0f (priority over bit 1)
|
||||
Devastators sets bit 1.
|
||||
bit 1 = force shadows for pen 0x0f
|
||||
bit 2 = disable shadows for pen 0x0f (priority over bit 1)
|
||||
Devastators sets bit 1.
|
||||
Ultraman sets the register to 0x0f.
|
||||
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.
|
||||
002-003 W selects the portion of the gfx ROMs to be read.
|
||||
004 W bit 0 = OC6 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
|
||||
bit 1 = OC7 when gfx ROM reading is enabled
|
||||
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
|
||||
other games write to this register before testing.
|
||||
Bits 2-7 of 003 go to OC0-OC5.
|
||||
|
@ -84,12 +84,12 @@ private:
|
||||
devcb_write_line m_firq_handler;
|
||||
devcb_write_line m_nmi_handler;
|
||||
|
||||
uint8_t m_spriterombank[3];
|
||||
uint8_t m_romoffset;
|
||||
bool m_spriteflip, m_readroms;
|
||||
uint8_t m_spriterombank[3];
|
||||
uint8_t m_romoffset;
|
||||
bool m_spriteflip, m_readroms;
|
||||
uint8_t m_shadow_config;
|
||||
bool m_inv_shadow;
|
||||
bool m_nmi_enabled;
|
||||
bool m_inv_shadow;
|
||||
bool m_nmi_enabled;
|
||||
|
||||
int k051960_fetchromdata( int byte );
|
||||
};
|
||||
|
@ -10,7 +10,7 @@
|
||||
on the parameters.
|
||||
|
||||
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;
|
||||
2. test that status returns 0;
|
||||
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 2 (OUT, Bulk): Command responses, sends responses back to the PS2
|
||||
Endpoint 3 (IN, Interrupt): JAMMA I/O + analog I/O state response
|
||||
Response:
|
||||
Response:
|
||||
0x00 - 0x04 JAMMA I/O (IN)
|
||||
0x04 - 0x06 Analog I/O (ANALOG1)
|
||||
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="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="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="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>
|
||||
</element>
|
||||
<element name="Reel 2">
|
||||
<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="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="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 name="LCD" defstate="0">
|
||||
<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="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="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 name="Reel 2">
|
||||
<rect> <bounds x="0" y="0" width="100" height="400"/> <color alpha="0.0"/> </rect>
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
TODO:
|
||||
|
||||
- loadsys1 core dump
|
||||
- loadsys1 core dump
|
||||
- short/long reset (RSTBUT)
|
||||
- CIO
|
||||
- optimize timers!
|
||||
|
@ -1353,7 +1353,7 @@ void playch10_state::gboard_rom_switch_w(offs_t offset, u8 data)
|
||||
|
||||
case 0x2001: // enable ram at $6000
|
||||
// ignored - we always enable it
|
||||
break;
|
||||
break;
|
||||
|
||||
case 0x4000: // scanline counter
|
||||
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) \
|
||||
PORT_START(port_tag) \
|
||||
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( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) \
|
||||
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) \
|
||||
PORT_START(port_tag) \
|
||||
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( 0x08, IP_ACTIVE_HIGH, type2 ) PORT_NAME(name2) \
|
||||
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)
|
||||
Nuon Games + Demos (collection from Nuon-Dome)
|
||||
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.
|
||||
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)
|
||||
|
||||
NOTES:
|
||||
Current implementation based on ATM Turbo 2+. If anybody wants to validate ATM1, existing
|
||||
code must be moved to atmtb2_state not modified.
|
||||
Current implementation based on ATM Turbo 2+. If anybody wants to validate ATM1, existing
|
||||
code must be moved to atmtb2_state not modified.
|
||||
|
||||
TODO:
|
||||
* ports read
|
||||
* ATM2+ (compare to ATM2) has only 1M RAM vs 512K
|
||||
* Mem masks are hardcoded to 1M RAM
|
||||
* better handling of SHADOW ports
|
||||
* validate screen timings
|
||||
* ports read
|
||||
* ATM2+ (compare to ATM2) has only 1M RAM vs 512K
|
||||
* Mem masks are hardcoded to 1M RAM
|
||||
* better handling of SHADOW ports
|
||||
* validate screen timings
|
||||
|
||||
*******************************************************************************************/
|
||||
|
||||
|
@ -2,19 +2,19 @@
|
||||
// copyright-holders:Devin Acker
|
||||
|
||||
/*
|
||||
VTech Phusion (2000)
|
||||
VTech Phusion (2000)
|
||||
|
||||
This handheld organizer/PDA runs on an unknown CR16B SoC.
|
||||
It's probably similar (but not identical) to the one described in glcx.cpp.
|
||||
This handheld organizer/PDA runs on an unknown CR16B SoC.
|
||||
It's probably similar (but not identical) to the one described in glcx.cpp.
|
||||
|
||||
Main board:
|
||||
U1: Analog Integrations AIC1652CS
|
||||
U2: 8Mbit flash (Toshiba TC58FVT800FT-85)
|
||||
U3: Hyundai GM76FV18ALLFW70
|
||||
U10: unknown CR16B-based SoC (epoxy blob)
|
||||
U11: National Semiconductor DS14C232CM
|
||||
U12: National Semiconductor LM4882
|
||||
U14: 16Mbit mask ROM (Sharp LH53V16500)
|
||||
Main board:
|
||||
U1: Analog Integrations AIC1652CS
|
||||
U2: 8Mbit flash (Toshiba TC58FVT800FT-85)
|
||||
U3: Hyundai GM76FV18ALLFW70
|
||||
U10: unknown CR16B-based SoC (epoxy blob)
|
||||
U11: National Semiconductor DS14C232CM
|
||||
U12: National Semiconductor LM4882
|
||||
U14: 16Mbit mask ROM (Sharp LH53V16500)
|
||||
|
||||
*/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user