From 401af2013f2bd7cdd826c3846404bb9ba3af6b0e Mon Sep 17 00:00:00 2001 From: beeanyew Date: Fri, 23 Apr 2021 04:44:32 +0200 Subject: [PATCH] Add PiStorm simple interaction example application --- .../pistorm-dev/pistorm_dev_amiga/PiSimple | Bin 0 -> 11988 bytes .../pistorm-dev/pistorm_dev_amiga/build.sh | 1 + .../pistorm_dev_amiga/pistorm_dev.c | 59 +++++++++++ .../pistorm_dev_amiga/pistorm_dev.h | 5 + .../pistorm_dev_amiga/simple_interact.c | 99 ++++++++++++++++++ 5 files changed, 164 insertions(+) create mode 100644 platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple create mode 100644 platforms/amiga/pistorm-dev/pistorm_dev_amiga/build.sh create mode 100644 platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.c create mode 100644 platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h create mode 100644 platforms/amiga/pistorm-dev/pistorm_dev_amiga/simple_interact.c diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple new file mode 100644 index 0000000000000000000000000000000000000000..3b8e9a513603ae4c9a2d8380e3d3b14f441a7be3 GIT binary patch literal 11988 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 +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include + +#include +#include +#include + +#include + +unsigned int pistorm_base_addr = 0xFFFFFFFF; + +#define WRITESHORT(cmd, val) *(unsigned short *)((unsigned int)(pistorm_base_addr+cmd)) = val; +#define WRITELONG(cmd, val) *(unsigned int *)((unsigned int)(pistorm_base_addr+cmd)) = val; +#define WRITEBYTE(cmd, val) *(unsigned char *)((unsigned int)(pistorm_base_addrT+cmd)) = val; + +#define READSHORT(cmd, var) var = *(volatile unsigned short *)(pistorm_base_addr + cmd); +#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 int pi_find_pistorm() { + unsigned int board_addr = 0xFFFFFFFF; + struct ExpansionBase *expansionbase = (struct ExpansionBase *)OpenLibrary("expansion.library", 0L); + + if (expansionbase == NULL) { +#ifdef HAS_STDLIB + printf("Failed to open expansion.library.\n"); +#endif + } + else { + struct ConfigDev* cd = NULL; + cd = (struct ConfigDev*)FindConfigDev(cd, 2011, 0x6B); + if (cd != NULL) + board_addr = (unsigned int)cd->cd_BoardAddr; + CloseLibrary((struct Library *)expansionbase); + } + return board_addr; +} + +void pi_reset_amiga(unsigned short reset_code) { + WRITESHORT(PI_CMD_RESET, reset_code); +} \ No newline at end of file diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h new file mode 100644 index 0000000..e906030 --- /dev/null +++ b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.h @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT + +unsigned long pi_find_pistorm(); + +void pi_reset_amiga(unsigned short reset_code); diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/simple_interact.c b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/simple_interact.c new file mode 100644 index 0000000..271963b --- /dev/null +++ b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/simple_interact.c @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: MIT + +#include "../pistorm-dev-enums.h" +#include "pistorm_dev.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include + +#include +#include +#include + +#include +#include +#include + +#define LOADLIB(a, b) if ((a = (struct a*)OpenLibrary(b,0L))==NULL) { \ + printf("Failed to load %s.\n", b); \ + return 1; \ + } \ + +void print_usage(char *exe); +int get_command(char *cmd); + +extern unsigned int pistorm_base_addr; + +int __stdargs main (int argc, char *argv[]) { + if (argc < 2) { + print_usage(argv[0]); + return 1; + } + + int command = get_command(argv[1]); + if (command == -1) { + printf("Unknown command %s.\n", argv[1]); + return 1; + } + + pistorm_base_addr = pi_find_pistorm(); + + if (pistorm_base_addr == 0xFFFFFFFF) { + printf ("Unable to find PiStorm autoconf device.\n"); + return 1; + } + else { + printf ("PiStorm autoconf device found at $%.X\n", pistorm_base_addr); + } + + unsigned int tmpvalue = 0; + unsigned short tmpshort = 0; + + if (tmpvalue) {}; + + switch (command) { + case PI_CMD_RESET: + if (argc >= 3) + tmpshort = (unsigned short)atoi(argv[2]); + pi_reset_amiga(tmpshort); + break; + default: + printf ("Unhandled command %s.\n", argv[1]); + return 1; + break; + } + + return 0; +} + +int get_command(char *cmd) { + if (strcmp(cmd, "--restart") == 0 || strcmp(cmd, "--reboot") || strcmp(cmd, "--reset") == 0) { + return PI_CMD_RESET; + } + + return -1; +} + +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 (" Finds the PiStorm device and prints some data.\n"); + + return; +}