📄 kernelmsg.h
字号:
#pragma once
//"kernelmsg.h"
//核心消息类,为了效率,本模拟器内核是单线程的,因此其他部件不能直接调用核心函数,为了使
//其它部件能够使用内核来完成自身的功能,添加内核消息类,用来支持其他部件给处理器内核发送消息,
//初步定义,支持函数调用消息,事件消息
#include "GlobalVar.h"
#include "memory.h"
//内存监控HOOK必须是全局的,必须符合C语言的函数指针调用习惯
void CheckOutABit(BYTE VarNum,int mode,BYTE data);//读PSW0时计算寄存器A的奇偶效验
void CheckOutAIdata(BYTE VarNum,int mode,BYTE data);
typedef void (*AllMemHook)(BYTE VarNum,int mode,BYTE data);//mode表示HOOK到操作是读还是写,data要操作的数据
typedef void (*ClockHook)(BYTE VarNum,unsigned short Clocknum);
#define CodeSpace 0
#define BitSpace 1
#define IdataSpace 2
#define XdataSpace 3
/*typedef void (*CodeMemHook)(BYTE VarNum,int mode,BYTE data);
typedef void (*IdataMemHook)(BYTE VarNum,int mode,BYTE data);
typedef void (*IdataBitMemHook)(BYTE VarNum,int mode,BYTE data);*/
struct EVENT_ON_ONECLOCK
{
unsigned char TOP;//队列顶部,指向第一个可用的HOOK
ClockHook EVENTHOOKFUNQUEUE[256];
unsigned char BOT;//队列底部,指向一个新的可用于填充新的HOOK函数
};
struct USEABLE_EVENT//可用的事件队列
{
unsigned char TOP;
EVENT_ON_ONECLOCK * USEABLEEVENT[256];
unsigned char BOT;
};
struct EVENT_POS
{
unsigned short CLOCK_POS;//时钟队列中的位置
unsigned char EVENT_QUEUE_POS;//时间事件队列中的位置
};
class kernelMsg
{
public:
void ClockCallHook(EVENT_ON_ONECLOCK *eventpos);
unsigned short GetCurrentClockpos();
int CallBackAfterUtterlyClock(ClockHook CallBackFun,EVENT_POS * pos);
//Clock指定周期,CallBackFun指定HOOK函数pos用于填充HOOK被安装的位置以提供设备卸载HOOK用
//CallBackAfterRelativeClock安装相对时钟HOOK,CallBackAfterUtterlyClock安装绝对时钟HOOK
int CallBackAfterRelativeClock(ClockHook CallBackFun,EVENT_POS * pos);
int CancelCallBackByClocknum(EVENT_POS * pos);// Clock个周期后调用回调例程
int UtterlyCancelCallBackByClocknum(EVENT_POS * pos);
AllMemHook SetupMemHook(DWORD addr,BYTE MemSpace,BYTE mode,AllMemHook Fun);//安装内存HOOK,返回原来的HOOK函数
//addr要HOOK的地址,MemSpace 定义要操作的内存, mode Read?Write? Fun HOOK函数指针
int init();
memory * mem;
EVENT_ON_ONECLOCK KERNEL_EVENT[256];//256个时间事件队列
EVENT_ON_ONECLOCK * EBUF;//零时计算用缓冲
USEABLE_EVENT USEABLEEVENT;
unsigned char EVENTBANK;//索引下一个空的时间事件队列
unsigned short Clockpos;
// AllMemHook CheckOutABackBit,CheckOutABackIdata;
kernelMsg(void);
~kernelMsg(void);
private:
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -