From: beeanyew Date: Tue, 16 Feb 2021 21:48:23 +0000 (+0100) Subject: PiSCSI boot ROM+custom file systems working X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=7f741a460bb22e5748729d4fc0763768dd69675c;p=pistorm PiSCSI boot ROM+custom file systems working --- diff --git a/data/README.md b/data/README.md new file mode 100644 index 0000000..9e24c98 --- /dev/null +++ b/data/README.md @@ -0,0 +1,3 @@ +# Data directory + +This is the directory used for storing emulator-related volatile and non-volatile items such as temporary files (volatile) and the CDTV/CD32 SRAM (non-volatile). diff --git a/platforms/amiga/piscsi/device_driver_amiga/bootrom b/platforms/amiga/piscsi/device_driver_amiga/bootrom index fe3d33a..ab7cf16 100644 Binary files a/platforms/amiga/piscsi/device_driver_amiga/bootrom and b/platforms/amiga/piscsi/device_driver_amiga/bootrom differ diff --git a/platforms/amiga/piscsi/device_driver_amiga/bootrom.s b/platforms/amiga/piscsi/device_driver_amiga/bootrom.s index 0696d83..a0603d1 100644 --- a/platforms/amiga/piscsi/device_driver_amiga/bootrom.s +++ b/platforms/amiga/piscsi/device_driver_amiga/bootrom.s @@ -310,21 +310,21 @@ PartitionLoop: EndPartitions: - move.l #8,PiSCSIDebugMe + move.l #8,PiSCSIDebugMe move.l a6,a1 - move.l #800,PiSCSIDebugMe + move.l #800,PiSCSIDebugMe movea.l 4,a6 - move.l #801,PiSCSIDebugMe + move.l #801,PiSCSIDebugMe jsr CloseLibrary(a6) - move.l #802,PiSCSIDebugMe + move.l #802,PiSCSIDebugMe - move.l (a7)+,a6 ; Pop A6 from stack - move.l #803,PiSCSIDebugMe + move.l (a7)+,a6 ; Pop A6 from stack + move.l #803,PiSCSIDebugMe move.w #$80B8,$dff09a ; Re-enable interrupts - move.l #804,PiSCSIDebugMe + move.l #804,PiSCSIDebugMe moveq.l #1,d0 ; indicate "success" - move.l #805,PiSCSIDebugMe + move.l #805,PiSCSIDebugMe rts align 4 diff --git a/platforms/amiga/piscsi/piscsi.c b/platforms/amiga/piscsi/piscsi.c index 2cec2f6..c78650c 100644 --- a/platforms/amiga/piscsi/piscsi.c +++ b/platforms/amiga/piscsi/piscsi.c @@ -258,8 +258,9 @@ skip_fs_load_lseg:; read(d->fd, fhb_block, 512); } - if (!fs_found) + if (!fs_found) { DEBUG("[!!!FSHD] No file systems found on hard drive!\n"); + } fs_done:; if (fhb_block) @@ -372,8 +373,9 @@ void print_piscsi_debug_message(int index) { DEBUG("[PISCSI] Initializing devices.\n"); break; case DBG_OPENDEV: - if (piscsi_dbg[0] != 255) + if (piscsi_dbg[0] != 255) { DEBUG("[PISCSI] Opening device %d (%d). Flags: %d (%.2X)\n", piscsi_dbg[0], piscsi_dbg[2], piscsi_dbg[1], piscsi_dbg[1]); + } break; case DBG_CLEANUP: DEBUG("[PISCSI] Cleaning up.\n"); @@ -559,8 +561,9 @@ void handle_piscsi_write(uint32_t addr, uint32_t val, uint8_t type) { if (piscsi_cur_drive > NUM_UNITS) piscsi_cur_drive = 255; - if (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_DEBUGME: piscsi_debugme(val); @@ -679,17 +682,18 @@ skip_disk:; DEBUG("[PISCSI] Partition DOSType is %c%c%c/%d\n", dosID[0], dosID[1], dosID[2], dosID[3]); for (i = 0; i < piscsi_num_fs; i++) { if (rom_partition_dostype[rom_cur_partition] == filesystems[i].FS_ID) { - node->dn_SegList = htobe32(filesystems[i].handler); + node->dn_SegList = htobe32((filesystems[i].handler >> 2)); + node->dn_GlobalVec = 0xFFFFFFFF; goto fs_found; } } DEBUG("[!!!PISCSI] Found no handler for file system!\n"); fs_found:; - DEBUG("[FS-HANDLER] Next: %d Type: %d\n", BE(node->dn_Next), BE(node->dn_Type)); + DEBUG("[FS-HANDLER] Next: %d Type: %.8X\n", BE(node->dn_Next), BE(node->dn_Type)); DEBUG("[FS-HANDLER] Task: %d Lock: %d\n", BE(node->dn_Task), BE(node->dn_Lock)); DEBUG("[FS-HANDLER] Handler: %d Stacksize: %d\n", BE((uint32_t)node->dn_Handler), BE(node->dn_StackSize)); DEBUG("[FS-HANDLER] Priority: %d Startup: %d\n", BE((uint32_t)node->dn_Priority), BE(node->dn_Startup)); - DEBUG("[FS-HANDLER] SegList: %d GlobalVec: %d\n", BE((uint32_t)node->dn_SegList), BE(node->dn_GlobalVec)); + DEBUG("[FS-HANDLER] SegList: %.8X GlobalVec: %d\n", BE((uint32_t)node->dn_SegList), BE(node->dn_GlobalVec)); DEBUG("[PISCSI] Handler for partition %.8X set to %.8X (%.8X).\n", BE((uint32_t)node->dn_Name), filesystems[i].FS_ID, filesystems[i].handler); } break; diff --git a/platforms/amiga/piscsi/readme.md b/platforms/amiga/piscsi/readme.md index 9e57c34..600083d 100644 --- a/platforms/amiga/piscsi/readme.md +++ b/platforms/amiga/piscsi/readme.md @@ -14,6 +14,10 @@ Physical drives can also be mounted using their mount point files on Linux, such You can mount up to 7 disk images using setvar `piscsi0` through `piscsi6`. +If you want EVEN MORE speed, either adjust the size of your hard drive image so that it gets properly detected with 16 heads in HDToolBox or manually edit the Cylinders/Heads settings when setting up your drive. + +(The trackdisk device on the Amiga seems to enable transfers bigger than 512 bytes (one sector) only if the drive is identified as having more than one drive head/surface.) + # Making changes to the driver If you make changes to the driver, you can always test these on the Amiga as a regular file in `DEVS:`, but the Z2 device has to be disabled for this to work properly.