#include #include #include #include"..\lib\7188.h" void RunCmd(char *cmd); void main(void) { int quit=0; int key; char cmd[80]; int idx=0; char *Prompt="\nDemo9>"; unsigned int id; InitLib(); printf("\nDemo9 for FlashRom byte write,sector Erase."); printf("\nCommand: Erase --> Erase 0xE0000-0xEFFFF to 0xFF"); printf("\n W offset(Hex) data(Hex) --> Write byte E000:offset"); printf("\n D offset(Hex) --> Dump data(64 bytes) from E000:offset"); printf("\n Enter --> Dump next 64 bytes"); printf("\n 'u','U' --> Dump Last 64 bytes"); printf("\n 'q','Q' --> quit to ROM-DOS"); id=FlashReadId(); printf("\nFlash ID=%X",id); if(id==0xB001) printf("--> size=256K"); else printf("--> Unknown type"); printf(Prompt); while(!quit){ while(!kbhit()) ; key=getch(); printf("%c",key); if(key=='\r'){ printf("\n"); cmd[idx]=0; if(cmd[0]=='q' || cmd[0]=='Q') return; RunCmd(cmd); idx=0; printf(Prompt); } else if(key=='\b'){ if(idx) cmd[--idx]=0; } else { cmd[idx++]=key; } } } /* if you want write to segment 0xD000 --> set base 0xD000, but must make sure your ROM-DISK.IMG size <= 64K bytes or when you erase sector 0xD000,ROM Disk(A:) will be damaged. ** base can be 0xD000 or 0xE000. */ unsigned base=0xE000; unsigned offset=0; void Dump(void) { int i,j; unsigned char far *data; for(j=0;j<4;j++){ /* data=(unsigned char far *)((((long)base)<<16)+offset); */ data=(unsigned char far *)_MK_FP(base,offset); printf("[E000:%04X] ",offset); for(i=0;i<16;i++){ printf("%02X ",*(data+i)); } printf(" "); for(i=0;i<16;i++){ printf("%c",*(data+i)<0x20 ? '.':*(data+i)); } offset+=16; printf("\n"); } } void RunCmd(char *cmd) { unsigned dataoffset; unsigned data; switch(cmd[0]){ case 0: Dump(); break; case 'd': case 'D': sscanf(cmd+1,"%x",&offset); Dump(); break; case 'w': case 'W': sscanf(cmd+1,"%x %x",&dataoffset,&data); printf("\nBefore write:%04X:%04X=%02X",base,dataoffset,FlashRead(base,dataoffset)); FlashWrite(base,dataoffset,data); printf("\nAfter write:%04X:%04X=%02X",base,dataoffset,FlashRead(base,dataoffset)); break; case 'u': case 'U': offset-=128; Dump(); break; case 'E': case 'e': if(!stricmp(cmd,"ERASE")){ FlashErase(base); } break; } }