]> git.sesse.net Git - pistorm/commitdiff
Fix PiSCSI bug that somehow only triggered with -lstdc++
authorbeeanyew <beeanyew@gmail.com>
Sun, 16 May 2021 02:49:41 +0000 (04:49 +0200)
committerbeeanyew <beeanyew@gmail.com>
Sun, 16 May 2021 02:49:41 +0000 (04:49 +0200)
platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device
platforms/amiga/piscsi/device_driver_amiga/piscsi-amiga-2.c
platforms/amiga/piscsi/piscsi-enums.h
platforms/amiga/piscsi/piscsi.c
platforms/amiga/piscsi/piscsi.h
platforms/amiga/piscsi/piscsi.rom

index adee95905402beca29f9d15f6191d21619fa1f60..9c5553a6cf3e9e17d6a97ebc038fefbc954d6054 100644 (file)
Binary files a/platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device and b/platforms/amiga/piscsi/device_driver_amiga/pi-scsi.device differ
index 3ca91b14c83f708f6dce6e899125d6a46ebe7e98..8a28a7fff10f620bf0c1268a6994c4515f8b2cca 100644 (file)
@@ -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);
index b951f233b268646e7ecc937c8ab16a1d64b893d4..8dadf020135c2f5c42d0446461265a2789e65c9f 100644 (file)
@@ -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,
index 02717a3b223bd93e96a1737384470f953c429509..364196fc355892972e61085c30d7951122f9de9d 100644 (file)
@@ -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;
index 488f9de93d911a5b861c24fb179a389f9914ae9a..547596f126e2c5080a1fb972a6899181dca5b147 100644 (file)
@@ -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;
index 3abb62e6906fd416dd40a9fe50841d6444c038dc..481af1df80249f92fdad974f3878fbe9aec3cca8 100644 (file)
Binary files a/platforms/amiga/piscsi/piscsi.rom and b/platforms/amiga/piscsi/piscsi.rom differ