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>
30 unsigned int pistorm_base_addr = 0xFFFFFFFF;
32 #define WRITESHORT(cmd, val) *(unsigned short *)((unsigned int)(pistorm_base_addr+cmd)) = val;
33 #define WRITELONG(cmd, val) *(unsigned int *)((unsigned int)(pistorm_base_addr+cmd)) = val;
34 #define WRITEBYTE(cmd, val) *(unsigned char *)((unsigned int)(pistorm_base_addr+cmd)) = val;
36 #define READSHORT(cmd, var) var = *(volatile unsigned short *)(pistorm_base_addr + cmd);
37 #define READLONG(cmd, var) var = *(volatile unsigned int *)(pistorm_base_addr + cmd);
38 #define READBYTE(cmd, var) var = *(volatile unsigned short *)(pistorm_base_addr + cmd);
40 unsigned short short_val;
42 unsigned int pi_find_pistorm() {
43 unsigned int board_addr = 0xFFFFFFFF;
44 struct ExpansionBase *expansionbase = (struct ExpansionBase *)OpenLibrary("expansion.library", 0L);
46 if (expansionbase == NULL) {
48 printf("Failed to open expansion.library.\n");
52 struct ConfigDev* cd = NULL;
53 cd = (struct ConfigDev*)FindConfigDev(cd, 2011, 0x6B);
55 board_addr = (unsigned int)cd->cd_BoardAddr;
56 CloseLibrary((struct Library *)expansionbase);
61 void pi_reset_amiga(unsigned short reset_code) {
62 WRITESHORT(PI_CMD_RESET, reset_code);
65 void pi_handle_config(unsigned char cmd, char *str) {
66 if (cmd == PICFG_LOAD) {
67 WRITELONG(PI_STR1, (unsigned int)str);
69 WRITESHORT(PI_CMD_SWITCHCONFIG, cmd);
72 #define SIMPLEREAD_SHORT(a, b) \
73 unsigned short a() { READSHORT(b, short_val); return short_val; }
75 SIMPLEREAD_SHORT(pi_get_hw_rev, PI_CMD_HWREV);
76 SIMPLEREAD_SHORT(pi_get_sw_rev, PI_CMD_SWREV);
77 SIMPLEREAD_SHORT(pi_get_rtg_status, PI_CMD_RTGSTATUS);
78 SIMPLEREAD_SHORT(pi_get_net_status, PI_CMD_NETSTATUS);