machine/k573dio.cpp: Documented more registers and updated PCB diagram. (#9112)

* Stubbed registers for network communication.
* Implemented mp3 start/end address read.
This commit is contained in:
987123879113 2022-01-09 00:31:30 +09:00 committed by GitHub
parent aeb7f95099
commit 9473344260
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 75 additions and 15 deletions

View File

@ -49,7 +49,7 @@
| AK4309B CN18 29.450MHz MAS3507D |
| |
| CN3 |
| HYC24855 RCA-L/R |
| HYC2485S RCA-1/2 |
|-----------------------------------------------|
Notes:
@ -73,8 +73,8 @@
CN18 - 6 pin connector
MAS3507D - IM MAS3507D D8 9173 51 HM U 072953.000 ES MPEG 1/2 Layer 2/3 Audio Decoder
CN3 - Connector joining this PCB to the MAIN PCB
HYC24855 - ?
RCA-L/R - RCA connectors for left/right audio output
HYC2485S - RS485 transceiver
RCA-1/2 - RCA connectors for network communication
*/
@ -89,11 +89,12 @@ void k573dio_device::amap(address_map &map)
map(0x0a, 0x0b).r(FUNC(k573dio_device::a0a_r));
map(0x10, 0x11).w(FUNC(k573dio_device::a10_w));
map(0x80, 0x81).r(FUNC(k573dio_device::a80_r));
map(0xc4, 0xc5).r(FUNC(k573dio_device::ac4_r));
map(0xa0, 0xa1).w(FUNC(k573dio_device::mpeg_start_adr_high_w));
map(0xa2, 0xa3).w(FUNC(k573dio_device::mpeg_start_adr_low_w));
map(0xa4, 0xa5).w(FUNC(k573dio_device::mpeg_end_adr_high_w));
map(0xa6, 0xa7).w(FUNC(k573dio_device::mpeg_end_adr_low_w));
map(0x90, 0x91).w(FUNC(k573dio_device::network_id_w));
//map(0x92, 0x93).w(FUNC(k573dio_device::network_unk_w));
map(0xa0, 0xa1).rw(FUNC(k573dio_device::mpeg_start_adr_high_r), FUNC(k573dio_device::mpeg_start_adr_high_w));
map(0xa2, 0xa3).rw(FUNC(k573dio_device::mpeg_start_adr_low_r), FUNC(k573dio_device::mpeg_start_adr_low_w));
map(0xa4, 0xa5).rw(FUNC(k573dio_device::mpeg_end_adr_high_r), FUNC(k573dio_device::mpeg_end_adr_high_w));
map(0xa6, 0xa7).rw(FUNC(k573dio_device::mpeg_end_adr_low_r), FUNC(k573dio_device::mpeg_end_adr_low_w));
map(0xa8, 0xa9).rw(FUNC(k573dio_device::mpeg_key_1_r), FUNC(k573dio_device::mpeg_key_1_w));
map(0xaa, 0xab).r(FUNC(k573dio_device::mpeg_ctrl_r));
map(0xac, 0xad).rw(FUNC(k573dio_device::mas_i2c_r), FUNC(k573dio_device::mas_i2c_w));
@ -103,6 +104,10 @@ void k573dio_device::amap(address_map &map)
map(0xb4, 0xb5).rw(FUNC(k573dio_device::ram_r), FUNC(k573dio_device::ram_w));
map(0xb6, 0xb7).w(FUNC(k573dio_device::ram_read_adr_high_w));
map(0xb8, 0xb9).w(FUNC(k573dio_device::ram_read_adr_low_w));
map(0xc0, 0xc1).rw(FUNC(k573dio_device::network_r), FUNC(k573dio_device::network_w));
map(0xc2, 0xc3).r(FUNC(k573dio_device::network_output_buf_size_r));
map(0xc4, 0xc5).r(FUNC(k573dio_device::network_input_buf_size_r));
//map(0xc8, 0xc9).w(FUNC(k573dio_device::network_unk2_w));
map(0xca, 0xcb).r(FUNC(k573dio_device::mp3_counter_high_r));
map(0xcc, 0xcd).rw(FUNC(k573dio_device::mp3_counter_low_r), FUNC(k573dio_device::mp3_counter_low_w));
map(0xce, 0xcf).r(FUNC(k573dio_device::mp3_counter_diff_r));
@ -139,6 +144,7 @@ void k573dio_device::device_start()
save_item(NAME(output_data));
save_item(NAME(is_ddrsbm_fpga));
save_item(NAME(crypto_key1));
save_item(NAME(network_id));
k573fpga->set_ddrsbm_fpga(is_ddrsbm_fpga);
}
@ -148,6 +154,7 @@ void k573dio_device::device_reset()
ram_adr = 0;
ram_read_adr = 0;
crypto_key1 = 0;
network_id = 0;
std::fill(std::begin(output_data), std::end(output_data), 0);
}
@ -211,24 +218,28 @@ void k573dio_device::a10_w(uint16_t data)
LOGUNKNOWNREG("%s: a10_w: %04x (%s)\n", tag(), data, machine().describe_context());
}
uint16_t k573dio_device::ac4_r()
{
LOGUNKNOWNREG("%s: ac4_r (%s)\n", tag(), machine().describe_context());
return 0;
}
uint16_t k573dio_device::a80_r()
{
LOGUNKNOWNREG("%s: a80_r (%s)\n", tag(), machine().describe_context());
return 0x1234;
}
uint16_t k573dio_device::mpeg_start_adr_high_r()
{
return k573fpga->get_mp3_start_addr() >> 16;
}
void k573dio_device::mpeg_start_adr_high_w(uint16_t data)
{
LOGMP3("FPGA MPEG start address high %04x\n", data);
k573fpga->set_mp3_start_addr((k573fpga->get_mp3_start_addr() & 0x0000ffff) | (data << 16)); // high
}
uint16_t k573dio_device::mpeg_start_adr_low_r()
{
return k573fpga->get_mp3_start_addr() & 0xffff;
}
void k573dio_device::mpeg_start_adr_low_w(uint16_t data)
{
LOGMP3("FPGA MPEG start address low %04x\n", data);
@ -238,12 +249,22 @@ void k573dio_device::mpeg_start_adr_low_w(uint16_t data)
k573fpga->set_crypto_key3(0);
}
uint16_t k573dio_device::mpeg_end_adr_high_r()
{
return k573fpga->get_mp3_end_addr() >> 16;
}
void k573dio_device::mpeg_end_adr_high_w(uint16_t data)
{
LOGMP3("FPGA MPEG end address high %04x\n", data);
k573fpga->set_mp3_end_addr((k573fpga->get_mp3_end_addr() & 0x0000ffff) | (data << 16)); // high
}
uint16_t k573dio_device::mpeg_end_adr_low_r()
{
return k573fpga->get_mp3_end_addr() & 0xffff;
}
void k573dio_device::mpeg_end_adr_low_w(uint16_t data)
{
LOGMP3("FPGA MPEG end address low %04x\n", data);
@ -436,3 +457,32 @@ void k573dio_device::output(int offset, uint16_t data)
}
output_data[offset] = data;
}
uint16_t k573dio_device::network_r()
{
// Return a byte from the input buffer
return 0;
}
void k573dio_device::network_w(uint16_t data)
{
// Write a byte to the output buffer
}
uint16_t k573dio_device::network_output_buf_size_r()
{
// Number of bytes in the output buffer waiting to be sent
return 0;
}
uint16_t k573dio_device::network_input_buf_size_r()
{
// Number of bytes in the input buffer waiting to be read
return 0;
}
void k573dio_device::network_id_w(uint16_t data)
{
// The network ID configured in the operator menu
network_id = data;
}

View File

@ -25,11 +25,14 @@ public:
uint16_t a0a_r();
void a10_w(uint16_t data);
uint16_t a80_r();
uint16_t ac4_r();
uint16_t mpeg_start_adr_high_r();
void mpeg_start_adr_high_w(uint16_t data);
uint16_t mpeg_start_adr_low_r();
void mpeg_start_adr_low_w(uint16_t data);
uint16_t mpeg_end_adr_high_r();
void mpeg_end_adr_high_w(uint16_t data);
uint16_t mpeg_end_adr_low_r();
void mpeg_end_adr_low_w(uint16_t data);
uint16_t mpeg_key_1_r();
void mpeg_key_1_w(uint16_t data);
@ -61,6 +64,11 @@ public:
void output_4_w(uint16_t data);
void output_2_w(uint16_t data);
void output_5_w(uint16_t data);
uint16_t network_r();
void network_w(uint16_t data);
uint16_t network_output_buf_size_r();
uint16_t network_input_buf_size_r();
void network_id_w(uint16_t data);
protected:
virtual void device_start() override;
@ -82,6 +90,8 @@ private:
bool is_ddrsbm_fpga;
u16 crypto_key1;
uint16_t network_id;
};
DECLARE_DEVICE_TYPE(KONAMI_573_DIGITAL_IO_BOARD, k573dio_device)