diff options
author | angelosa <salese_corp_ltd@email.it> | 2016-06-15 03:51:52 +0200 |
---|---|---|
committer | angelosa <salese_corp_ltd@email.it> | 2016-06-15 03:51:52 +0200 |
commit | 6df371a0f10fb57820e7d1ee08a3344372a27246 (patch) | |
tree | 25c12953615cae15d971ed9c0e2d34bbe9aa5143 /src/devices/machine | |
parent | b82d7c4aef44eac0c4752b7db3c29306610a84ac (diff) |
romload.cpp: added ROMX_FILL, passing a ROM_SKIP(param_value) will fill and skip just like a ROM_LOAD16_BYTE macro [Angelo Salese]
Added line blinking and overlay opacity selectors for esh.cpp [Angelo Salese]
Some minor improvements for LDP-1000 (nw)
Diffstat (limited to 'src/devices/machine')
-rw-r--r-- | src/devices/machine/ldp1000.cpp | 51 | ||||
-rw-r--r-- | src/devices/machine/ldp1000.h | 8 |
2 files changed, 42 insertions, 17 deletions
diff --git a/src/devices/machine/ldp1000.cpp b/src/devices/machine/ldp1000.cpp index 415a4581097..abfa23913b0 100644 --- a/src/devices/machine/ldp1000.cpp +++ b/src/devices/machine/ldp1000.cpp @@ -15,6 +15,7 @@ #include "machine/ldp1000.h" #define DUMP_BCD 1 +#define FIFO_MAX 0x10 ROM_START( ldp1000 ) ROM_REGION( 0x2000, "ldp1000", 0 ) @@ -70,6 +71,9 @@ void sony_ldp1000_device::device_start() void sony_ldp1000_device::device_reset() { laserdisc_device::device_reset(); + + for(int i=0;i<0x10;i++) + m_internal_bcd[i] = 0; } @@ -119,11 +123,10 @@ READ8_MEMBER( sony_ldp1000_device::status_r ) return res; } -void sony_ldp1000_device::set_new_player_state(ldp1000_player_state which, UINT8 fifo_size) +void sony_ldp1000_device::set_new_player_state(ldp1000_player_state which) { m_player_state = which; m_index_state = 0; - m_index_size = fifo_size; printf("set new player state\n"); } @@ -132,18 +135,36 @@ void sony_ldp1000_device::set_new_player_bcd(UINT8 data) { m_internal_bcd[m_index_state] = data; m_index_state ++; - if(m_index_state >= m_index_size) + if(m_index_state >= FIFO_MAX) + throw emu_fatalerror("FIFO MAX reached"); + + m_status = stat_ack; +} + +UINT32 sony_ldp1000_device::bcd_to_raw() +{ + UINT32 res = 0; + for(int i=0;i<6;i++) + res |= (m_internal_bcd[i] & 0xf) << i*4; + return res; +} + +void sony_ldp1000_device::exec_enter_cmd() +{ + //const UINT32 saved_frame = bcd_to_raw(); + + switch(m_player_state) { - #if DUMP_BCD - for(int i=0;i<m_index_size;i++) - printf("%02x ",m_internal_bcd[i]); + case player_standby: + throw emu_fatalerror("Unimplemented standby state detected"); - printf("[size = %02x]\n",m_index_size); - #endif - m_status = stat_ack; + case player_search: + // TODO: move to timer + //advance_slider(1); + //set_slider_speed(saved_frame); + break; } - else - m_status = stat_ack; + m_player_state = player_standby; } @@ -154,7 +175,7 @@ WRITE8_MEMBER( sony_ldp1000_device::command_w ) // 0x30 to 0x69 range causes an ACK, anything else is invalid m_command = data; - if((m_command & 0xf0) == 0x30) + if((m_command & 0xf0) == 0x30 && (m_command & 0xf) < 0x0a) { set_new_player_bcd(data); return; @@ -162,11 +183,13 @@ WRITE8_MEMBER( sony_ldp1000_device::command_w ) switch(m_command) { - case 0x40: // enter bcd command, todo + case 0x40: // enter, process BCD command + exec_enter_cmd(); + m_status = stat_ack; break; case 0x43: // search - set_new_player_state(player_search,5); + set_new_player_state(player_search); m_status = stat_ack; break; diff --git a/src/devices/machine/ldp1000.h b/src/devices/machine/ldp1000.h index b7cf9cbeea4..142886da936 100644 --- a/src/devices/machine/ldp1000.h +++ b/src/devices/machine/ldp1000.h @@ -72,12 +72,14 @@ private: ldp1000_status m_status; ldp1000_player_state m_player_state; bool m_audio_enable[2]; - // TODO: sub-class - void set_new_player_state(ldp1000_player_state which, UINT8 fifo_size); + // TODO: sub-class into a specific internal player state + void set_new_player_state(ldp1000_player_state which); void set_new_player_bcd(UINT8 data); + UINT32 bcd_to_raw(); + void exec_enter_cmd(); UINT8 m_internal_bcd[0x10]; UINT8 m_index_state; - UINT8 m_index_size; + }; |