⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 io-edit.c

📁 在DOS下进行IO端口查看的小软件
💻 C
📖 第 1 页 / 共 2 页
字号:
   }
}

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 + -