📄 io-edit.c
字号:
}
}
move_left()
{
int x,y;
x=wherex();
y=wherey();
if(width==1&&port_bit8_value[current_port].start_x<x || width==2&&port_bit16_value[current_port].start_x<x || width==4&&port_bit32_value[current_port].start_x<x)
{
current_bit-=1;
gotoxy(x-1,y);
}
else if(current_port!=0)
{
current_port-=1;
current_bit=width*2-1;
if(width==1) gotoxy(port_bit8_value[current_port].end_x,port_bit8_value[current_port].y);
if(width==2) gotoxy(port_bit16_value[current_port].end_x,port_bit16_value[current_port].y);
if(width==4) gotoxy(port_bit32_value[current_port].end_x,port_bit32_value[current_port].y);
}
else
{
if(start_address > 16)
{
start_address-=16;
read_page();
disp_page();
gotoxy(x,y);
}
else
{
start_address=0;
read_page();
disp_page();
gotoxy(x,y);
}
}
}
move_right()
{
int x,y;
x=wherex();
y=wherey();
if(width==1&&port_bit8_value[current_port].end_x > x || width==2&&port_bit16_value[current_port].end_x > x || width==4&&port_bit32_value[current_port].end_x > x )
{
current_bit+=1;
gotoxy(x+1,y);
}
else if(current_port!=end_port)
{
current_port+=1;
current_bit=0;
if(width==1) gotoxy(port_bit8_value[current_port].start_x,port_bit8_value[current_port].y);
if(width==2) gotoxy(port_bit16_value[current_port].start_x,port_bit16_value[current_port].y);
if(width==4) gotoxy(port_bit32_value[current_port].start_x,port_bit32_value[current_port].y);
}
else if(y!=16)
{
if(end_address < 0xfff0)
{
end_address+=16;
read_page();
disp_page();
current_port=end_port;
gotoxy(end_x,end_y);
}
else
{
end_address=0xffff;
read_page();
disp_page();
current_port=end_port;
gotoxy(end_x,end_y);
}
}
else
{
if(end_address < 0xfff0)
{
start_address+=16;
end_address+=16;
read_page();
disp_page();
current_port=end_port;
gotoxy(end_x,end_y);
}
else
{
start_address+=16;
end_address=0xffff;
read_page();
disp_page();
current_port=end_port;
gotoxy(end_x,end_y);
}
}
}
unsigned int change_hex(unsigned int key_in)
{
if(key_in == 0xb30 || key_in == 0x5230) return (0);
if(key_in == 0x231 || key_in == 0x4f31) return (1);
if(key_in == 0x332 || key_in == 0x5032) return (2);
if(key_in == 0x433 || key_in == 0x5133) return (3);
if(key_in == 0x534 || key_in == 0x4b34) return (4);
if(key_in == 0x635 || key_in == 0x4c35) return (5);
if(key_in == 0x736 || key_in == 0x4d36) return (6);
if(key_in == 0x837 || key_in == 0x4737) return (7);
if(key_in == 0x938 || key_in == 0x4838) return (8);
if(key_in == 0xa39 || key_in == 0x4939) return (9);
if(key_in == 0x1e61 || key_in == 0x1e41) return (10);
if(key_in == 0x3062 || key_in == 0x3042) return (11);
if(key_in == 0x2e63 || key_in == 0x2e43) return (12);
if(key_in == 0x2064 || key_in == 0x2044) return (13);
if(key_in == 0x1265 || key_in == 0x1245) return (14);
if(key_in == 0x2166 || key_in == 0x2146) return (15);
}
unsigned int edit_reg(unsigned int key_in)
{
int x,y;
unsigned int key_in_hex,change_start_bit;
unsigned long int out_buffer,temp,temp1=0x0000000f;
change_start_bit=current_bit;
textattr(128+(BLUE<<4)+RED);
if(width==4) out_buffer=port_bit32_value[current_port].value;
if(width==2) out_buffer=port_bit16_value[current_port].value;
if(width==1) out_buffer=port_bit8_value[current_port].value;
for(temp1=0x0000000f;;)
{
x=wherex();
y=wherey();
if(key_in==0x3c00) return 0x3c00; /* 'F2' */
if(key_in==0x3f00) return 0x3f00;
if(key_in==0xb30 || key_in == 0x231 || key_in ==0x332 || key_in ==0x433 || key_in == 0x534 || key_in == 0x635 || key_in == 0x736 || key_in == 0x837 || key_in == 0x938 || key_in == 0xa39
||key_in == 0x5230 || key_in == 0x4f31 || key_in == 0x5032 || key_in == 0x5133 || key_in == 0x4b34 || key_in == 0x4c35 || key_in == 0x4d36 || key_in == 0x4737 || key_in == 0x4838 || key_in == 0x4939
||key_in == 0x1e61 || key_in == 0x3062 || key_in == 0x2e63 || key_in == 0x2064 || key_in == 0x1265 || key_in == 0x2166
||key_in == 0x1e41 || key_in == 0x3042 || key_in == 0x2e43 || key_in == 0x2044 || key_in == 0x1245 || key_in == 0x2146
)
{
key_in_hex=change_hex(key_in);
temp=key_in_hex;
out_buffer=out_buffer&~(temp1<<(width*2-1-current_bit)*4) | temp<<(width*2-1-current_bit)*4;
if(width==4) { gotoxy(port_bit32_value[current_port].start_x,port_bit32_value[current_port].y); cprintf("%08lx",out_buffer); }
if(width==2) { gotoxy(port_bit16_value[current_port].start_x,port_bit16_value[current_port].y); cprintf("%04x",out_buffer); }
if(width==1) { gotoxy(port_bit8_value[current_port].start_x,port_bit8_value[current_port].y); cprintf("%02x",out_buffer); }
if(current_bit<width*2-1) { gotoxy(x,y); move_right(); }
else
{
for(key_in=0; ; )
{
key_in=bioskey(0);
if(key_in == 0xe08 || key_in == 0x4b00 || key_in == 0x1c0d || key_in ==0x11b )
{
break;
}
}
if(key_in==0xe08 || key_in ==0x4b00) /* BackSpace || left key */
{
temp1=0x0000000f;
if(width==4)
{
out_buffer=out_buffer&~(temp1<<(width*2-current_bit-1)*4) | port_bit32_value[current_port].value & temp1<<(width*2-current_bit-1)*4;
gotoxy(port_bit32_value[current_port].start_x,port_bit32_value[current_port].y);
cprintf("%08lx",out_buffer);
}
if(width==2)
{
out_buffer=out_buffer&~(temp1<<(width*2-current_bit-1)*4) | port_bit16_value[current_port].value & temp1<<(width*2-current_bit-1)*4;
gotoxy(port_bit16_value[current_port].start_x,port_bit16_value[current_port].y);
cprintf("%04x",out_buffer);
}
if(width==1)
{
out_buffer=out_buffer&~(temp1<<(width*2-current_bit-1)*4) | port_bit8_value[current_port].value & temp1<<(width*2-current_bit-1)*4;
gotoxy(port_bit8_value[current_port].start_x,port_bit8_value[current_port].y);
cprintf("%02x",out_buffer);
}
gotoxy(x,y);
goto next_key_in;
}
if(key_in ==0x1c0d) /* Enter key */
{
if(width==4)
{
outport32(port_bit32_value[current_port].address,out_buffer);
port_bit32_value[current_port].value=inport32(port_bit32_value[current_port].address);
}
if(width==2)
{
outport(port_bit16_value[current_port].address,out_buffer);
port_bit16_value[current_port].value=inport(port_bit16_value[current_port].address);
}
if(width==1)
{
outportb(port_bit8_value[current_port].address,out_buffer);
port_bit8_value[current_port].value=inportb(port_bit8_value[current_port].address);
}
disp_page();
gotoxy(x,y);
move_right();
return 0;
}
}
}
if(key_in==0xe08 || key_in ==0x4b00) /* BackSpace || left key */
{
if(current_bit==0 || change_start_bit==current_bit) {move_left(); return 0;}
x=wherex();
y=wherey();
temp1=0x0000000f;
if(width==4)
{
out_buffer=out_buffer&~(temp1<<(width*2-current_bit)*4) | port_bit32_value[current_port].value & temp1<<(width*2-current_bit)*4;
gotoxy(port_bit32_value[current_port].start_x,port_bit32_value[current_port].y);
cprintf("%08lx",out_buffer);
}
if(width==2)
{
out_buffer=out_buffer&~(temp1<<(width*2-current_bit)*4) | port_bit16_value[current_port].value & temp1<<(width*2-current_bit)*4;
gotoxy(port_bit16_value[current_port].start_x,port_bit16_value[current_port].y);
cprintf("%04x",out_buffer);
}
if(width==1)
{
out_buffer=out_buffer&~(temp1<<(width*2-current_bit)*4) | port_bit8_value[current_port].value & temp1<<(width*2-current_bit)*4;
gotoxy(port_bit8_value[current_port].start_x,port_bit8_value[current_port].y);
cprintf("%02x",out_buffer);
}
gotoxy(x,y);
move_left();
if(current_bit==0 || change_start_bit==current_bit) {return 0;}
}
if(key_in ==0x1c0d) /* Enter key */
{
if(width==4)
{
outport32(port_bit32_value[current_port].address,out_buffer);
port_bit32_value[current_port].value=inport32(port_bit32_value[current_port].address);
}
if(width==2)
{
outport(port_bit16_value[current_port].address,out_buffer);
port_bit16_value[current_port].value=inport(port_bit16_value[current_port].address);
}
if(width==1)
{
outportb(port_bit8_value[current_port].address,out_buffer);
port_bit8_value[current_port].value=inportb(port_bit8_value[current_port].address);
}
disp_page();
gotoxy(x,y);
return 0;
}
if(key_in==0x4d00 && current_bit!=width*2-1) /* right key */
{
move_right();
}
if(key_in ==0x11b) /* Esc key */
{
disp_page();
gotoxy(x,y);
return 0;
}
next_key_in:
for(key_in=0; ; )
{
key_in=bioskey(0);
if(key_in==0xb30 || key_in == 0x231 || key_in ==0x332 || key_in ==0x433 || key_in == 0x534 || key_in == 0x635 || key_in == 0x736 || key_in == 0x837 || key_in == 0x938 || key_in == 0xa39
||key_in == 0x5230 || key_in == 0x4f31 || key_in == 0x5032 || key_in == 0x5133 || key_in == 0x4b34 || key_in == 0x4c35 || key_in == 0x4d36 || key_in == 0x4737 || key_in == 0x4838 || key_in == 0x4939
||key_in == 0x1e61 || key_in == 0x3062 || key_in == 0x2e63 || key_in == 0x2064 || key_in == 0x1265 || key_in == 0x2166
||key_in == 0x1e41 || key_in == 0x3042 || key_in == 0x2e43 || key_in == 0x2044 || key_in == 0x1245 || key_in == 0x2146
||key_in == 0xe08 || key_in == 0x4b00 || key_in == 0x1c0d || key_in ==0x11b
||key_in == 0x3c00 || key_in == 0x3f00
)
{
break;
}
}
}
}
refresh()
{
int x,y;
x=wherex();
y=wherey();
read_page();
disp_page();
gotoxy(x,y);
}
main(int argc, char *argv[])
{
unsigned int temp,data8,data16,key_in,data8_buffer,data16_buffer,x,y;
unsigned long int data32,data32_buffer;
if(argc != 1)
{
command_line(argc,argv); /* command line mode */
exit(0);
}
window(1,1,80,25);
textbackground(CYAN);
textcolor(YELLOW);
clrscr();
gotoxy(1,1);
cprintf("IO PORT Editor 1.0, Program by EMDI-RMA-FA of FOXCONN Group, 2008.07.29");
gotoxy(1,24);
cprintf("Esc=Exit F2=change the start address,end address & width\n\r");
cprintf("F5=refresh ");
window(1,3,80,23);
textbackground(BLUE);
textcolor(WHITE);
clrscr();
cprintf("start address: [0~ffff], end address: [0~ffff], width: (1, 2 or 4)");
cprintf("\n\r\n\r X : 0 1 2 3 4 5 6 7 8 9 a b c d e f");
for(temp=0;temp<16;temp++)
{
cprintf("\n\r %4x:",temp*16);
}
window(9,6,73,21);
textbackground(WHITE);
textcolor(BLACK);
clrscr();
loop:
get_start_address();
get_end_address();
for(;end_address<start_address;)
{
get_end_address();
}
get_width();
read_page();
disp_page();
gotoxy(1,1);
current_port=0;
current_bit=0;
for(key_in=bioskey(0);key_in!=0x11b;key_in=bioskey(0))
{
if(key_in==0xb30 || key_in == 0x231 || key_in ==0x332 || key_in ==0x433 || key_in == 0x534 || key_in == 0x635 || key_in == 0x736 || key_in == 0x837 || key_in == 0x938 || key_in == 0xa39
||key_in == 0x5230 || key_in == 0x4f31 || key_in == 0x5032 || key_in == 0x5133 || key_in == 0x4b34 || key_in == 0x4c35 || key_in == 0x4d36 || key_in == 0x4737 || key_in == 0x4838 || key_in == 0x4939
||key_in == 0x1e61 || key_in == 0x3062 || key_in == 0x2e63 || key_in == 0x2064 || key_in == 0x1265 || key_in == 0x2166
||key_in == 0x1e41 || key_in == 0x3042 || key_in == 0x2e43 || key_in == 0x2044 || key_in == 0x1245 || key_in == 0x2146)
{
key_in=edit_reg(key_in);
x=wherex();
y=wherey();
disp_page();
gotoxy(x,y);
}
if(key_in==0x4800) move_up();
if(key_in==0x5000) move_down();
if(key_in==0x4b00) move_left();
if(key_in==0x4d00) move_right();
if(key_in==0x3c00) goto loop; /* pause 'F2' to change start address. */
if(key_in==0x3f00) refresh(); /* pause F5 is refresh */
}
window(1,1,80,25);
system("cls");
printf("Bye-bye! If you have any opinion, please mail to \"EMDI-RMA-FA\"!");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -