From: beeanyew Date: Sun, 16 May 2021 02:49:41 +0000 (+0200) Subject: Fix PiSCSI bug that somehow only triggered with -lstdc++ X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=5291e047a1f54dfc049eee474ed51d0ca879dd28;p=pistorm Fix PiSCSI bug that somehow only triggered with -lstdc++ --- diff --git a/platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device b/platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device index adee959..9c5553a 100644 Binary files a/platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device and b/platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device differ diff --git a/platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c b/platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c index 3ca91b1..8a28a7f 100644 --- a/platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c +++ b/platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c @@ -224,7 +224,7 @@ uint8_t piscsi_rw(struct piscsi_unit *u, struct IORequest *io) { data = iotd->iotd_Req.io_Data; len = iotd->iotd_Req.io_Length; - WRITESHORT(PISCSI_CMD_DRVNUM, u->unit_num); + WRITESHORT(PISCSI_CMD_DRVNUMX, u->unit_num); READLONG(PISCSI_CMD_BLOCKSIZE, block_size); if (data == 0) { @@ -308,7 +308,7 @@ uint8_t piscsi_scsi(struct piscsi_unit *u, struct IORequest *io) uint8_t write = 0; uint32_t block_size = 512; - WRITESHORT(PISCSI_CMD_DRVNUM, u->unit_num); + WRITESHORT(PISCSI_CMD_DRVNUMX, u->unit_num); READLONG(PISCSI_CMD_BLOCKSIZE, block_size); debugval(PISCSI_DBG_VAL1, iostd->io_Length); diff --git a/platforms/amiga/piscsi/piscsi-enums.h b/platforms/amiga/piscsi/piscsi-enums.h index b951f23..8dadf02 100644 --- a/platforms/amiga/piscsi/piscsi-enums.h +++ b/platforms/amiga/piscsi/piscsi-enums.h @@ -48,6 +48,7 @@ enum piscsi_cmds { PISCSI_CMD_BLOCKSIZE = 0x74, PISCSI_CMD_READBYTES = 0x78, PISCSI_CMD_WRITEBYTES = 0x7C, + PISCSI_CMD_DRVNUMX = 0x80, PISCSI_DBG_MSG = 0x1000, PISCSI_DBG_VAL1 = 0x1010, PISCSI_DBG_VAL2 = 0x1014, diff --git a/platforms/amiga/piscsi/piscsi.c b/platforms/amiga/piscsi/piscsi.c index 02717a3..364196f 100644 --- a/platforms/amiga/piscsi/piscsi.c +++ b/platforms/amiga/piscsi/piscsi.c @@ -651,18 +651,22 @@ void handle_piscsi_write(uint32_t addr, uint32_t val, uint8_t type) { break; } case PISCSI_CMD_DRVNUM: - //printf("%d ", val); - if (val % 10 != 0) + if (val % 10 != 0) { piscsi_cur_drive = 255; + } else piscsi_cur_drive = val / 10; - if (piscsi_cur_drive > NUM_UNITS) + if (piscsi_cur_drive > NUM_UNITS) { piscsi_cur_drive = 255; - + } if (piscsi_cur_drive != 255) { DEBUG("[PISCSI] (%s) Drive number set to %d (%d)\n", op_type_names[type], piscsi_cur_drive, val); } break; + case PISCSI_CMD_DRVNUMX: + piscsi_cur_drive = val; + DEBUG("[PISCSI] DRVNUMX: %d.\n", val); + break; case PISCSI_CMD_DEBUGME: piscsi_debugme(val); break; diff --git a/platforms/amiga/piscsi/piscsi.h b/platforms/amiga/piscsi/piscsi.h index 488f9de..547596f 100644 --- a/platforms/amiga/piscsi/piscsi.h +++ b/platforms/amiga/piscsi/piscsi.h @@ -90,6 +90,7 @@ struct piscsi_fs { // .long 0 /* device file name */ // .long 0 /* unit */ // .long 0 /* flags */ +#pragma pack(4) struct DosEnvec { uint32_t de_TableSize; /* Size of Environment vector */ uint32_t de_SizeBlock; /* in longwords: standard value is 128 */ @@ -116,6 +117,7 @@ struct DosEnvec { }; +#pragma pack(4) struct pihd_dosnode_data { uint32_t name_ptr; uint32_t dev_name_ptr; @@ -140,6 +142,7 @@ struct pihd_dosnode_data { uint32_t dostype; }; +#pragma pack(4) struct RigidDiskBlock { uint32_t rdb_ID; uint32_t rdb_SummedLongs; @@ -183,6 +186,7 @@ struct RigidDiskBlock { char rdb_DriveInitName[40]; }; +#pragma pack(4) struct DeviceNode { uint32_t dn_Next; uint32_t dn_Type; @@ -197,6 +201,7 @@ struct DeviceNode { uint8_t *dn_Name; }; +#pragma pack(4) struct PartitionBlock { uint32_t pb_ID; uint32_t pb_SummedLongs; @@ -212,6 +217,7 @@ struct PartitionBlock { uint32_t pb_EReserved[12]; }; +#pragma pack(4) struct SCSICmd_ModeSense6 { uint8_t opcode; uint8_t reserved_dbd; @@ -221,6 +227,7 @@ struct SCSICmd_ModeSense6 { uint8_t control; }; +#pragma pack(4) struct SCSICmd_RW10 { uint8_t opcode; uint8_t rdprotect_flags; @@ -230,6 +237,7 @@ struct SCSICmd_RW10 { uint8_t control; }; +#pragma pack(4) struct FileSysHeaderBlock { uint32_t fhb_ID; uint32_t fhb_SummedLongs; diff --git a/platforms/amiga/piscsi/piscsi.rom b/platforms/amiga/piscsi/piscsi.rom index 3abb62e..481af1d 100644 Binary files a/platforms/amiga/piscsi/piscsi.rom and b/platforms/amiga/piscsi/piscsi.rom differ