]> git.sesse.net Git - pistorm/commitdiff
Some more work on the PiSCSI interaction device
authorbeeanyew <beeanyew@gmail.com>
Fri, 23 Apr 2021 03:54:36 +0000 (05:54 +0200)
committerbeeanyew <beeanyew@gmail.com>
Fri, 23 Apr 2021 03:54:36 +0000 (05:54 +0200)
platforms/amiga/pistorm-dev/pistorm-dev-enums.h
platforms/amiga/pistorm-dev/pistorm-dev.c
platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple
platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.c
platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h
platforms/amiga/pistorm-dev/pistorm_dev_amiga/simple_interact.c

index 7c69e4945e6e746f3a2da96ea9335df67c2e7b4f..c042588ece45c7eb65cffae477cb9a368767b672 100644 (file)
@@ -9,8 +9,9 @@ enum pistorm_dev_cmds {
     PI_CMD_RESET        = 0x00, // [W] Reset the host system.
     PI_CMD_SWITCHCONFIG = 0x02, // [W] Switch config file to string at PI_STR1, if it exists.
                                 //     This will reset the Amiga if the config loads successfully.
-    PI_CMD_PISCSI_CTRL  = 0x04, // [W] Control a PiSCSI device. The command written here uses values
-                                //     From various data registers around $2000.
+    PI_CMD_PISCSI_CTRL  = 0x04, // [RW] Write: Control a PiSCSI device. The command written here uses
+                                //      values From various data registers around $2000.
+                                //      Read: Returns whether PiSCSI is enabled or not.
     PI_CMD_RTGSTATUS    = 0x06, // [RW] Read: Check RTG status Write: Set RTG status (enabled/disabled)
     PI_CMD_NETSTATUS    = 0x08, // [RW] Read: Check ETH status Write: Set ETH status (enabled/disabled)
     PI_CMD_KICKROM      = 0x0A, // [W] Map a different Kickstart ROM to the standard address using
@@ -21,8 +22,8 @@ enum pistorm_dev_cmds {
     PI_CMD_HWREV        = 0x10, // [R] Check the PiStorm hardware version/revision
     PI_CMD_SWREV        = 0x12, // [R] Check the PiStorm software version/revision
 
-    PI_CMD_QBASIC       = 0xFC, // QBasic
-    PI_CMD_NIBBLES      = 0xFE, // Nibbles
+    PI_CMD_QBASIC       = 0x0FFC, // QBasic
+    PI_CMD_NIBBLES      = 0x0FFE, // Nibbles
 
     PI_DBG_MSG          = 0x1000, // [W] Trigger debug message output to avoid slow serial kprintf.
     PI_DBG_VAL1         = 0x1010, // [RW]
index 566790d5f29a31bdf32cbf26c8377c77271b2ed7..52045d925d54bd81207086f697e61d9c5cfd4f88 100644 (file)
@@ -9,6 +9,8 @@
 #ifdef DEBUG_PISTORM_DEVICE
 #define DEBUG printf
 
+#define PIDEV_SWREV 0x0105
+
 static const char *op_type_names[4] = {
     "BYTE",
     "WORD",
@@ -22,10 +24,12 @@ static const char *op_type_names[4] = {
 extern uint32_t pistorm_dev_base;
 extern uint32_t do_reset;
 
+extern uint8_t rtg_enabled, rtg_on, pinet_enabled, piscsi_enabled;
+
 void handle_pistorm_dev_write(uint32_t addr, uint32_t val, uint8_t type) {
     switch((addr & 0xFFFF)) {
         case PI_CMD_RESET:
-            DEBUG("[PISTORM-DEV] System reset called through PiStorm interaction device, code %.4X\n", (val & 0xFFFF));
+            DEBUG("[PISTORM-DEV] System reset called through PiStorm interaction device, code %d\n", (val & 0xFFFF));
             do_reset = 1;
             break;
         default:
@@ -36,7 +40,27 @@ void handle_pistorm_dev_write(uint32_t addr, uint32_t val, uint8_t type) {
  
 uint32_t handle_pistorm_dev_read(uint32_t addr, uint8_t type) {
     switch((addr & 0xFFFF)) {
-
+        case PI_CMD_HWREV:
+            // Probably replace this with some read from the CPLD to get a simple hardware revision.
+            DEBUG("[PISTORM-DEV] %s Read from HWREV\n", op_type_names[type]);
+            return 0x0101; // 1.1
+            break;
+        case PI_CMD_SWREV:
+            DEBUG("[PISTORM-DEV] %s Read from SWREV\n", op_type_names[type]);
+            return PIDEV_SWREV;
+            break;
+        case PI_CMD_RTGSTATUS:
+            DEBUG("[PISTORM-DEV] %s Read from RTGSTATUS\n", op_type_names[type]);
+            return (rtg_on << 1) | rtg_enabled;
+            break;
+        case PI_CMD_NETSTATUS:
+            DEBUG("[PISTORM-DEV] %s Read from NETSTATUS\n", op_type_names[type]);
+            return pinet_enabled;
+            break;
+        case PI_CMD_PISCSI_CTRL:
+            DEBUG("[PISTORM-DEV] %s Read from PISCSI_CTRL\n", op_type_names[type]);
+            return piscsi_enabled;
+            break;
         default:
             DEBUG("[PISTORM-DEV] WARN: Unhandled %s register read from %.4X\n", op_type_names[type], addr - pistorm_dev_base);
             break;
index 3b8e9a513603ae4c9a2d8380e3d3b14f441a7be3..3b69ab97d1d9ebd5ee65635f3f0f983be1a4efdc 100644 (file)
Binary files a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple and b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple differ
index 96a3d4c1f7aea16a035b3deade4058f6ac70c5e0..cd3b311ef13e221a7695f5a875bf7f49e32cd78f 100644 (file)
@@ -35,6 +35,8 @@ unsigned int pistorm_base_addr = 0xFFFFFFFF;
 #define READLONG(cmd, var) var = *(volatile unsigned int *)(pistorm_base_addr + cmd);
 #define READBYTE(cmd, var) var = *(volatile unsigned short *)(pistorm_base_addr + cmd);
 
+unsigned short short_val;
+
 unsigned int pi_find_pistorm() {
     unsigned int board_addr = 0xFFFFFFFF;
     struct ExpansionBase *expansionbase = (struct ExpansionBase *)OpenLibrary("expansion.library", 0L);
@@ -56,4 +58,12 @@ unsigned int pi_find_pistorm() {
 
 void pi_reset_amiga(unsigned short reset_code) {
     WRITESHORT(PI_CMD_RESET, reset_code);
-}
\ No newline at end of file
+}
+
+#define SIMPLEREAD_SHORT(a, b) \
+    unsigned short a() { READSHORT(b, short_val); return short_val; }
+
+SIMPLEREAD_SHORT(pi_get_hw_rev, PI_CMD_HWREV);
+SIMPLEREAD_SHORT(pi_get_sw_rev, PI_CMD_SWREV);
+SIMPLEREAD_SHORT(pi_get_rtg_status, PI_CMD_RTGSTATUS);
+SIMPLEREAD_SHORT(pi_get_net_status, PI_CMD_NETSTATUS);
index e906030a72c0c932cda44aa626d3cff4e6324025..27fea4e519279cb2239b681dfa59b9d135307d06 100644 (file)
@@ -2,4 +2,9 @@
 
 unsigned long pi_find_pistorm();
 
+unsigned short pi_get_hw_rev();
+unsigned short pi_get_sw_rev();
+unsigned short pi_get_net_status();
+unsigned short pi_get_rtg_status();
+
 void pi_reset_amiga(unsigned short reset_code);
index 271963bcd06828bfb27b1fa7a5c137449b0d2cf2..3d3e4a56b7d61e5ae3554e6f6e732d8f475c1d7e 100644 (file)
@@ -71,6 +71,13 @@ int __stdargs main (int argc, char *argv[]) {
                 tmpshort = (unsigned short)atoi(argv[2]);
             pi_reset_amiga(tmpshort);
             break;
+        case PI_CMD_SWREV:
+            printf ("PiStorm ----------------------------\n");
+            printf ("Hardware revision: %d.%d\n", (pi_get_hw_rev() >> 8), (pi_get_hw_rev() & 0xFF));
+            printf ("Software revision: %d.%d\n", (pi_get_sw_rev() >> 8), (pi_get_sw_rev() & 0xFF));
+            printf ("RTG: %s - %s\n", (pi_get_rtg_status() & 0x01) ? "Enabled" : "Disabled", (pi_get_rtg_status() & 0x02) ? "In use" : "Not in use");
+            printf ("NET: %s\n", pi_get_net_status() ? "Enabled" : "Disabled");
+            break;
         default:
             printf ("Unhandled command %s.\n", argv[1]);
             return 1;
@@ -81,9 +88,12 @@ int __stdargs main (int argc, char *argv[]) {
 }
 
 int get_command(char *cmd) {
-    if (strcmp(cmd, "--restart") == 0 || strcmp(cmd, "--reboot") || strcmp(cmd, "--reset") == 0) {
+    if (strcmp(cmd, "--restart") == 0 || strcmp(cmd, "--reboot") == 0 || strcmp(cmd, "--reset") == 0) {
         return PI_CMD_RESET;
     }
+    if (strcmp(cmd, "--check") == 0 || strcmp(cmd, "--find") == 0 || strcmp(cmd, "--info") == 0) {
+        return PI_CMD_SWREV;
+    }
 
     return -1;
 }
@@ -92,7 +102,7 @@ void print_usage(char *exe) {
     printf ("Usage: %s --[command] (arguments)\n", exe);
     printf ("Example: %s --restart, --reboot or --reset\n", exe);
     printf ("         Restarts the Amiga.\n");
-    printf ("         %s --check or --find\n", exe);
+    printf ("         %s --check, --find or --info\n", exe);
     printf ("         Finds the PiStorm device and prints some data.\n");
 
     return;