1 // SPDX-License-Identifier: MIT
3 #include "../pistorm-dev-enums.h"
5 #include <exec/resident.h>
6 #include <exec/errors.h>
7 #include <exec/memory.h>
8 #include <exec/lists.h>
9 #include <exec/alerts.h>
10 #include <exec/tasks.h>
12 #include <exec/execbase.h>
14 #include <libraries/expansion.h>
16 #include <devices/trackdisk.h>
17 #include <devices/timer.h>
18 #include <devices/scsidisk.h>
20 #include <dos/filehandler.h>
22 #include <proto/exec.h>
23 #include <proto/disk.h>
24 #include <proto/expansion.h>
28 unsigned int pistorm_base_addr = 0xFFFFFFFF;
30 #define WRITESHORT(cmd, val) *(unsigned short *)((unsigned int)(pistorm_base_addr+cmd)) = val;
31 #define WRITELONG(cmd, val) *(unsigned int *)((unsigned int)(pistorm_base_addr+cmd)) = val;
32 #define WRITEBYTE(cmd, val) *(unsigned char *)((unsigned int)(pistorm_base_addrT+cmd)) = val;
34 #define READSHORT(cmd, var) var = *(volatile unsigned short *)(pistorm_base_addr + cmd);
35 #define READLONG(cmd, var) var = *(volatile unsigned int *)(pistorm_base_addr + cmd);
36 #define READBYTE(cmd, var) var = *(volatile unsigned short *)(pistorm_base_addr + cmd);
38 unsigned short short_val;
40 unsigned int pi_find_pistorm() {
41 unsigned int board_addr = 0xFFFFFFFF;
42 struct ExpansionBase *expansionbase = (struct ExpansionBase *)OpenLibrary("expansion.library", 0L);
44 if (expansionbase == NULL) {
46 printf("Failed to open expansion.library.\n");
50 struct ConfigDev* cd = NULL;
51 cd = (struct ConfigDev*)FindConfigDev(cd, 2011, 0x6B);
53 board_addr = (unsigned int)cd->cd_BoardAddr;
54 CloseLibrary((struct Library *)expansionbase);
59 void pi_reset_amiga(unsigned short reset_code) {
60 WRITESHORT(PI_CMD_RESET, reset_code);
63 #define SIMPLEREAD_SHORT(a, b) \
64 unsigned short a() { READSHORT(b, short_val); return short_val; }
66 SIMPLEREAD_SHORT(pi_get_hw_rev, PI_CMD_HWREV);
67 SIMPLEREAD_SHORT(pi_get_sw_rev, PI_CMD_SWREV);
68 SIMPLEREAD_SHORT(pi_get_rtg_status, PI_CMD_RTGSTATUS);
69 SIMPLEREAD_SHORT(pi_get_net_status, PI_CMD_NETSTATUS);