📄 funcdevman.c
字号:
#include "includes.h"
#include "device.h"
#define MAX_DEV_NUM 20
#define MAX_DEV_ID 64
#pragma romdata EXTRAM
DCBI SYS_DCB[MAX_DEV_NUM];
INT8U rom dev_id_map[MAX_DEV_ID];
void sysdev_init(void){
INT8U i;
for(i=0;i<MAX_DEV_NUM; i++){
SYS_DCB[i].dev = (DEV_HEADER *)NULL_PTR;
SYS_DCB[i].state = 0;
}
for(i=0;i<MAX_DEV_ID; i++){
dev_id_map[i] = 0xff;
}
}
INT16U sysdev_load(DEV_HEADER * dev){
INT8U i;
INT16U (*dev_init)(void);
//Find a idle DCB
for(i=0; i<MAX_DEV_NUM;i++){
if(SYS_DCB[i].dev == (DEV_HEADER *)NULL_PTR){
break;
}
}
if(i == MAX_DEV_NUM){
return(1);
}
SYS_DCB[i].dev = dev;
SYS_DCB[i].state = 0;
dev_id_map[dev->ID] = i;
dev_init = dev->dev_init;
(*dev_init)();
return(0);
}
INT16U sysdev_open(INT8U dev_id){
INT8U i;
INT16U(*dev_open)(void);
if(dev_id>MAX_DEV_ID) return(0xff);
i=dev_id_map[dev_id];
if(i == 0xff) return(0xff);
dev_open = SYS_DCB[i].dev->dev_open;
(*dev_open)();
return(i);
}
INT16U sysdev_write(INT8U dev_hdl, INT8U rom * pd, INT16U len){
if(dev_hdl >MAX_DEV_NUM) return(0xff);
(*(SYS_DCB[dev_hdl].dev->dev_write))(pd,len);
return(0);
}
INT16U sysdev_read(INT8U dev_hdl, INT8U rom * pd, INT16U len){
INT16U i;
if(dev_hdl >MAX_DEV_NUM) return(0);
i=(*(SYS_DCB[dev_hdl].dev->dev_read))(pd, len);
return(i);
}
INT16U sysdev_ioctl(INT8U dev_hdl, INT8U cmd, INT24U arg){
INT8U i;
if(dev_hdl >MAX_DEV_NUM) return(0);
i = (*(SYS_DCB[dev_hdl].dev->dev_ioctl))(cmd, arg);
return(i);
}
INT16U FNull_1(void){
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -