1 #include <clib/exec_protos.h>
2 #include <clib/intuition_protos.h>
3 #include <clib/utility_protos.h>
4 #include <clib/graphics_protos.h>
6 #include <exec/types.h>
7 #include <exec/resident.h>
8 #include <exec/errors.h>
9 #include <exec/memory.h>
10 #include <exec/lists.h>
11 #include <exec/alerts.h>
12 #include <exec/tasks.h>
14 #include <exec/execbase.h>
16 #include <intuition/intuition.h>
17 #include <intuition/screens.h>
19 #include <graphics/displayinfo.h>
20 #include "pistorm_dev.h"
21 #include "../pistorm-dev-enums.h"
26 struct ExecBase *SysBase;
31 void (*oldCopyMem)(unsigned char *asm("a0"), unsigned char *asm("a1"), unsigned int asm("d0"));
32 void (*oldCopyMemQuick)(unsigned char *asm("a0"), unsigned char *asm("a1"), unsigned int asm("d0"));
34 APTR oldCopyMemQuickPtr;
36 struct Screen *(*oldOpenScreenTagList)(struct NewScreen *n asm("a0"), struct TagItem *asm("a1"));
37 struct Screen *(*oldOpenScreen)(struct NewScreen *asm("a0"));
39 #define NORM_MONITOR_ID ((options.bits.norm_mon==1)?(PAL_MONITOR_ID):((options.bits.norm_mon==2)?(NTSC_MONITOR_ID):(DEFAULT_MONITOR_ID)))
40 #define AUTO_MONITOR_ID ((options.bits.auto_mon==0)?(PAL_MONITOR_ID):((options.bits.auto_mon==1)?(NTSC_MONITOR_ID):(DEFAULT_MONITOR_ID)))
42 extern unsigned int pistorm_base_addr;
43 #define WRITELONG(cmd, val) *(volatile unsigned int *)((unsigned int)(pistorm_base_addr+cmd)) = val;
45 void pi_CopyMem(unsigned char *src asm("a0"), unsigned char *dst asm("a1"), unsigned int size asm("d0")) {
46 WRITELONG(PI_PTR1, (unsigned int)src);
47 WRITELONG(PI_PTR2, (unsigned int)dst);
48 WRITELONG(PI_CMD_MEMCPY, size);
51 void pi_CopyMemQuick(unsigned char *src asm("a0"), unsigned char *dst asm("a1"), unsigned int size asm("d0")) {
52 WRITELONG(PI_PTR1, (unsigned int)src);
53 WRITELONG(PI_PTR2, (unsigned int)dst);
54 WRITELONG(PI_CMD_MEMCPY_Q, size);
60 task->tc_Node.ln_Name = oldtaskname;
65 ULONG pistorm_addr = 0xFFFFFFFF;
67 int main(int argc,char *argv[])
69 char *task_name = "PiMems ";
70 SysBase = *(struct ExecBase **)4L;
72 unsigned char no_quit = 1;
74 task = (struct Task *)FindTask((STRPTR)&task_name);
79 task = (struct Task *)FindTask(NULL);
80 oldtaskname = task->tc_Node.ln_Name;
83 task->tc_Node.ln_Name = (char *)&task_name;
86 pistorm_addr = pi_find_pistorm();
87 if (pistorm_addr == 0xFFFFFFFF) {
91 pistorm_base_addr = pistorm_addr;
94 oldCopyMemPtr = (APTR)SetFunction((struct Library *)SysBase, -0x270, pi_CopyMem);
96 oldCopyMemQuickPtr = (APTR)SetFunction((struct Library *)SysBase, -0x276, pi_CopyMemQuick);
97 //oldCopyMemQuickPtr = (APTR)SetFunction((struct Library *)SysBase, -0x276, pi_CopyMem);
101 Wait(SIGBREAKF_CTRL_C);