]> git.sesse.net Git - pistorm/blob - platforms/amiga/pistorm-dev/pistorm_dev_amiga/pistorm_dev.c
cd3b311ef13e221a7695f5a875bf7f49e32cd78f
[pistorm] / platforms / amiga / pistorm-dev / pistorm_dev_amiga / pistorm_dev.c
1 // SPDX-License-Identifier: MIT
2
3 #include "../pistorm-dev-enums.h"
4
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>
11 #include <exec/io.h>
12 #include <exec/execbase.h>
13
14 #include <libraries/expansion.h>
15
16 #include <devices/trackdisk.h>
17 #include <devices/timer.h>
18 #include <devices/scsidisk.h>
19
20 #include <dos/filehandler.h>
21
22 #include <proto/exec.h>
23 #include <proto/disk.h>
24 #include <proto/expansion.h>
25
26 #include <stdio.h>
27
28 unsigned int pistorm_base_addr = 0xFFFFFFFF;
29
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;
33
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);
37
38 unsigned short short_val;
39
40 unsigned int pi_find_pistorm() {
41     unsigned int board_addr = 0xFFFFFFFF;
42     struct ExpansionBase *expansionbase = (struct ExpansionBase *)OpenLibrary("expansion.library", 0L);
43         
44     if (expansionbase == NULL) {
45 #ifdef HAS_STDLIB
46             printf("Failed to open expansion.library.\n");
47 #endif
48         }
49         else {
50                 struct ConfigDev* cd = NULL;
51                 cd = (struct ConfigDev*)FindConfigDev(cd, 2011, 0x6B);
52                 if (cd != NULL)
53                         board_addr = (unsigned int)cd->cd_BoardAddr;
54         CloseLibrary((struct Library *)expansionbase);
55         }
56     return board_addr;
57 }
58
59 void pi_reset_amiga(unsigned short reset_code) {
60     WRITESHORT(PI_CMD_RESET, reset_code);
61 }
62
63 #define SIMPLEREAD_SHORT(a, b) \
64     unsigned short a() { READSHORT(b, short_val); return short_val; }
65
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);