@@ -45,7 +45,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
4545#include " devrelay/commands/Open.h"
4646#include " devrelay/commands/ReadBlock.h"
4747#include " devrelay/commands/Read.h"
48- #include " devrelay/commands/Reset.h"
4948#include " devrelay/commands/Status.h"
5049#include " devrelay/commands/WriteBlock.h"
5150#include " devrelay/commands/Write.h"
@@ -70,7 +69,6 @@ SmartPortOverSlip::SmartPortOverSlip(const UINT slot) : Card(CT_SmartPortOverSli
7069 active_instances++;
7170
7271 LogFileOutput (" SmartPortOverSlip ctor, slot: %d\n " , slot);
73- // SmartPortOverSlip::Reset(true);
7472}
7573
7674SmartPortOverSlip::~SmartPortOverSlip ()
@@ -82,15 +80,6 @@ SmartPortOverSlip::~SmartPortOverSlip()
8280void SmartPortOverSlip::Reset (const bool powerCycle)
8381{
8482 LogFileOutput (" SmartPortOverSlip Bridge Initialization, reset called\n " );
85- if (powerCycle)
86- {
87- // send RESET to all devices
88- const auto connections = GetCommandListener ().get_all_connections ();
89- for (const auto &id_and_connection : connections)
90- {
91- reset (id_and_connection.first , id_and_connection.second );
92- }
93- }
9483}
9584
9685void SmartPortOverSlip::handle_smartport_call ()
@@ -146,38 +135,35 @@ void SmartPortOverSlip::handle_smartport_call()
146135 break ;
147136 case CMD_READ_BLOCK:
148137 // TODO: fix the fact params_loc has changed from +4 to +2
149- read_block (device_id, connection, sp_payload_loc, params_loc + 2 );
138+ read_block (device_id, connection, sp_payload_loc, param_count, params_loc + 2 );
150139 break ;
151140 case CMD_WRITE_BLOCK:
152141 // TODO: fix the fact params_loc has changed from +4 to +2
153- write_block (device_id, connection, sp_payload_loc, params_loc + 2 );
142+ write_block (device_id, connection, sp_payload_loc, param_count, params_loc + 2 );
154143 break ;
155144 case CMD_FORMAT:
156- format (device_id, connection);
145+ format (device_id, connection, param_count );
157146 break ;
158147 case CMD_CONTROL:
159148 // TODO: fix the fact params_loc has changed from +4 to +2
160149 control (device_id, connection, sp_payload_loc, param_count, params_loc);
161150 break ;
162151 case CMD_INIT:
163- init (device_id, connection);
152+ init (device_id, connection, param_count );
164153 break ;
165154 case CMD_OPEN:
166- open (device_id, connection);
155+ open (device_id, connection, param_count );
167156 break ;
168157 case CMD_CLOSE:
169- close (device_id, connection);
158+ close (device_id, connection, param_count );
170159 break ;
171160 case CMD_READ:
172161 // TODO: fix the fact params_loc has changed from +4 to +2
173- read (device_id, connection, sp_payload_loc, params_loc + 2 );
162+ read (device_id, connection, sp_payload_loc, param_count, params_loc + 2 );
174163 break ;
175164 case CMD_WRITE:
176165 // TODO: fix the fact params_loc has changed from +4 to +2
177- write (device_id, connection, sp_payload_loc, params_loc + 2 );
178- break ;
179- case CMD_RESET:
180- reset (device_id, connection);
166+ write (device_id, connection, sp_payload_loc, param_count, params_loc + 2 );
181167 break ;
182168 default :
183169 break ;
@@ -334,7 +320,7 @@ void SmartPortOverSlip::handle_prodos_read(uint8_t drive_num, std::pair<int, int
334320 auto id_connection = GetCommandListener ().find_connection_with_device (device_id);
335321
336322 // Do a ReadRequest, and shove the 512 byte block into the required memory
337- ReadBlockRequest request (Requestor::next_request_number (), id_connection.first );
323+ ReadBlockRequest request (Requestor::next_request_number (), 3 , id_connection.first );
338324 // $46-47 = Block Number
339325 request.set_block_number_from_bytes (mem[0x46 ], mem[0x47 ], 0 );
340326 auto response = Requestor::send_request (request, id_connection.second .get ());
@@ -360,7 +346,7 @@ void SmartPortOverSlip::handle_prodos_write(uint8_t drive_num, std::pair<int, in
360346 auto device_id = drive_num == 1 ? disk_devices.first : disk_devices.second ;
361347 auto id_connection = GetCommandListener ().find_connection_with_device (device_id);
362348
363- WriteBlockRequest request (Requestor::next_request_number (), id_connection.first );
349+ WriteBlockRequest request (Requestor::next_request_number (), 3 , id_connection.first );
364350 // $46-47 = Block Number
365351 request.set_block_number_from_bytes (mem[0x46 ], mem[0x47 ], 0 );
366352 // put data into the request we're sending
@@ -418,9 +404,9 @@ void SmartPortOverSlip::device_count(const WORD sp_payload_loc)
418404 set_processor_status (AF_ZERO);
419405}
420406
421- void SmartPortOverSlip::read_block (const BYTE unit_number, Connection *connection, const WORD buffer_location, const WORD block_count_address)
407+ void SmartPortOverSlip::read_block (const BYTE unit_number, Connection *connection, const WORD buffer_location, const BYTE params_count, const WORD block_count_address)
422408{
423- ReadBlockRequest request (Requestor::next_request_number (), unit_number);
409+ ReadBlockRequest request (Requestor::next_request_number (), params_count, unit_number);
424410 // Assume that (cmd_list_loc + 4 == block_count_address) holds 3 bytes for the block number. If it's in the payload, this is wrong and will have to be fixed.
425411 request.set_block_number_from_ptr (mem, block_count_address);
426412 auto response = Requestor::send_request (request, connection);
@@ -438,9 +424,9 @@ void SmartPortOverSlip::read_block(const BYTE unit_number, Connection *connectio
438424 });
439425}
440426
441- void SmartPortOverSlip::write_block (const BYTE unit_number, Connection *connection, const WORD sp_payload_loc, const WORD params_loc)
427+ void SmartPortOverSlip::write_block (const BYTE unit_number, Connection *connection, const WORD sp_payload_loc, const BYTE params_count, const WORD params_loc)
442428{
443- WriteBlockRequest request (Requestor::next_request_number (), unit_number);
429+ WriteBlockRequest request (Requestor::next_request_number (), params_count, unit_number);
444430 // Assume that (cmd_list_loc + 4 == params_loc) holds 3 bytes for the block number. The payload contains the data to write
445431 request.set_block_number_from_ptr (mem, params_loc);
446432 request.set_block_data_from_ptr (mem, sp_payload_loc);
@@ -449,9 +435,9 @@ void SmartPortOverSlip::write_block(const BYTE unit_number, Connection *connecti
449435 handle_simple_response<WriteBlockResponse>(std::move (response));
450436}
451437
452- void SmartPortOverSlip::read (const BYTE unit_number, Connection *connection, const WORD sp_payload_loc, const WORD params_loc)
438+ void SmartPortOverSlip::read (const BYTE unit_number, Connection *connection, const WORD sp_payload_loc, const BYTE params_count, const WORD params_loc)
453439{
454- ReadRequest request (Requestor::next_request_number (), unit_number);
440+ ReadRequest request (Requestor::next_request_number (), params_count, unit_number);
455441 request.set_byte_count_from_ptr (mem, params_loc);
456442 request.set_address_from_ptr (mem, params_loc + 2 ); // move along by byte_count size. would be better to get its size rather than hard code it here.
457443 auto response = Requestor::send_request (request, connection);
@@ -472,9 +458,9 @@ void SmartPortOverSlip::read(const BYTE unit_number, Connection *connection, con
472458 });
473459}
474460
475- void SmartPortOverSlip::write (const BYTE unit_number, Connection *connection, const WORD sp_payload_loc, const WORD params_loc)
461+ void SmartPortOverSlip::write (const BYTE unit_number, Connection *connection, const WORD sp_payload_loc, const BYTE params_count, const WORD params_loc)
476462{
477- WriteRequest request (Requestor::next_request_number (), unit_number);
463+ WriteRequest request (Requestor::next_request_number (), params_count, unit_number);
478464 request.set_byte_count_from_ptr (mem, params_loc);
479465 request.set_address_from_ptr (mem, params_loc + 2 ); // move along by byte_count size. would be better to get its size rather than hard code it here.
480466 const auto byte_count = request.get_byte_count ();
@@ -489,7 +475,7 @@ void SmartPortOverSlip::status_sp(const BYTE unit_number, Connection *connection
489475{
490476 const BYTE status_code = mem[params_loc + 2 ];
491477 const BYTE network_unit = params_count > 3 ? mem[params_loc + 3 ] : 0 ;
492- auto response = status (unit_number, connection, status_code, network_unit);
478+ auto response = status (unit_number, connection, params_count, status_code, network_unit);
493479 handle_response<StatusResponse>(std::move (response), [sp_payload_loc](const StatusResponse *sr) {
494480 const auto response_size = sr->get_data ().size ();
495481 memcpy (mem + sp_payload_loc, sr->get_data ().data (), response_size);
@@ -506,16 +492,16 @@ void SmartPortOverSlip::status_sp(const BYTE unit_number, Connection *connection
506492 });
507493}
508494
509- std::unique_ptr<Response> SmartPortOverSlip::status (const BYTE unit_number, Connection *connection, const BYTE status_code, const BYTE network_unit)
495+ std::unique_ptr<Response> SmartPortOverSlip::status (const BYTE unit_number, Connection *connection, const BYTE params_count, const BYTE status_code, const BYTE network_unit)
510496{
511497 // see https://www.1000bit.it/support/manuali/apple/technotes/smpt/tn.smpt.2.html
512- const StatusRequest request (Requestor::next_request_number (), unit_number, status_code, network_unit);
498+ const StatusRequest request (Requestor::next_request_number (), params_count, unit_number, status_code, network_unit);
513499 return Requestor::send_request (request, connection);
514500}
515501
516502std::unique_ptr<StatusResponse> SmartPortOverSlip::status_pd (const BYTE unit_number, Connection *connection, const BYTE status_code)
517503{
518- auto response = status (unit_number, connection, status_code, 0 );
504+ auto response = status (unit_number, connection, status_code, 3 , 0 );
519505
520506 // Cast the Response to a StatusResponse. We need to release ownership. As ChatGPT explains:
521507 /*
@@ -534,42 +520,35 @@ void SmartPortOverSlip::control(const BYTE unit_number, Connection *connection,
534520 uint8_t *start_ptr = &mem[sp_payload_loc];
535521 std::vector<uint8_t > payload (start_ptr, start_ptr + length);
536522
537- const ControlRequest request (Requestor::next_request_number (), unit_number, control_code, network_unit, payload);
523+ const ControlRequest request (Requestor::next_request_number (), params_count, unit_number, control_code, network_unit, payload);
538524 auto response = Requestor::send_request (request, connection);
539525 handle_simple_response<ControlResponse>(std::move (response));
540526}
541527
542- void SmartPortOverSlip::init (const BYTE unit_number, Connection *connection)
528+ void SmartPortOverSlip::init (const BYTE unit_number, Connection *connection, const BYTE params_count )
543529{
544- const InitRequest request (Requestor::next_request_number (), unit_number);
530+ const InitRequest request (Requestor::next_request_number (), params_count, unit_number);
545531 auto response = Requestor::send_request (request, connection);
546532 handle_simple_response<InitResponse>(std::move (response));
547533}
548534
549- void SmartPortOverSlip::open (const BYTE unit_number, Connection *connection)
535+ void SmartPortOverSlip::open (const BYTE unit_number, Connection *connection, const BYTE params_count )
550536{
551- const OpenRequest request (Requestor::next_request_number (), unit_number);
537+ const OpenRequest request (Requestor::next_request_number (), params_count, unit_number);
552538 auto response = Requestor::send_request (request, connection);
553539 handle_simple_response<OpenResponse>(std::move (response));
554540}
555541
556- void SmartPortOverSlip::close (const BYTE unit_number, Connection *connection)
542+ void SmartPortOverSlip::close (const BYTE unit_number, Connection *connection, const BYTE params_count )
557543{
558- const CloseRequest request (Requestor::next_request_number (), unit_number);
544+ const CloseRequest request (Requestor::next_request_number (), params_count, unit_number);
559545 auto response = Requestor::send_request (request, connection);
560546 handle_simple_response<CloseResponse>(std::move (response));
561547}
562548
563- void SmartPortOverSlip::reset (const BYTE unit_number, Connection *connection)
564- {
565- const ResetRequest request (Requestor::next_request_number (), unit_number);
566- auto response = Requestor::send_request (request, connection);
567- handle_simple_response<ResetResponse>(std::move (response));
568- }
569-
570- void SmartPortOverSlip::format (const BYTE unit_number, Connection *connection)
549+ void SmartPortOverSlip::format (const BYTE unit_number, Connection *connection, const BYTE params_count)
571550{
572- const FormatRequest request (Requestor::next_request_number (), unit_number);
551+ const FormatRequest request (Requestor::next_request_number (), params_count, unit_number);
573552 auto response = Requestor::send_request (request, connection);
574553 handle_simple_response<FormatResponse>(std::move (response));
575554}
0 commit comments