[an error occurred while processing this directive]
, .
(: )

 - mAVR

KA 20 2003 . 16:01
: - , PCI- , , :(, !? maphin 20 2003 . 11:10

#include
#include
#include
#include
#include
#include
#include "pci.h"

// --- lokale Typdefinitionen -----------------------------------------------
typedef void (*pFunc)( void);

struct menue_entry_t {
char cKey; // der Schluessel zur Funktion
char cName[30]; // Kurzbeschreibung der Funktion
pFunc pF; // Pointer auf die Funktion
};

// --- lokale Konstanten ----------------------------------------------------
const DWORD CONST_VENDORID = 0x11AA;
const DWORD CONST_DEVICEID = 0X4321;
const WORD CONST_INIT_SIZE= (32*1024);
const DWORD CONST_MIN_MEM = 0;
const DWORD CONST_MAX_MEM = 0x3FF;
const int CONST_REGNAME = 30;
const char RegisterName[][CONST_REGNAME] = {
{"DeviceID"},
{"VendorID"},
{"Status"},
{"Command"},
{"Class Code"},
{"RevisionID"},
{"BIST / Header Type"},
{"Timer/Cache LineSize"},
{"BaseAddr Reg0 Hi"},
{"BaseAddr Reg0 Lo"},
{"BaseAddr Reg1 Hi"},
{"BaseAddr Reg1 Lo"},
{"BaseAddr Reg2 Hi"},
{"BaseAddr Reg2 Lo"},
{"BaseAddr Reg3 Hi"},
{"BaseAddr Reg3 Lo"},
{"BaseAddr Reg4 Hi"},
{"BaseAddr Reg4 Lo"},
{"BaseAddr Reg5 Hi"},
{"BaseAddr Reg5 Lo"},
{"CardBus CIS Ptr Hi"},
{"CardBus CIS Ptr Lo"},
{"SubSystemID"},
{"SubSystem VendorID"},
{"Exp. ROM BaseAddr Hi"},
{"Exp. ROM BaseAddr Lo"},
{"Reserved"},
{"Capabilies Pointer"},
{"Reserved"},
{"Reserved"},
{"Max Lat / Min Gnt"},
{"Interrupt PIN/Line"}
};

// -- Forward-Definitionen fuer Funktionen ----------------------------------
void ReadMemory( void);
void FillMemory( void);
void ReadConfigROM( void);
void FirstWindow( void);


// --- lokale Variablen -----------------------------------------------------
BYTE *Buffer = NULL;
WORD BufferSize = CONST_INIT_SIZE;
char mem_active = 0;


// --- Menuestruktur fuer das Programm --------------------------------------
struct menue_entry_t Menue[] = {
{'C', "Read Configuration ROM", ReadConfigROM},
{'M', "Read Memory", ReadMemory},
{'F', "Fill Memory", FillMemory},
{'H', "Help Screen", FirstWindow}
};


/*
* zeigt den Eroeffnungsbildschirm fuer das Programm (entspricht Help)
*/
void FirstWindow( void)
{
int i;

clrscr();
mem_active = 0;
printf( "ͻ\n");
printf( " PCI-Target-Information (C)IMG gGmbH Nordhausen - Marco Kmmerling \n");
printf( "Ķ\n");
printf( " Functions Overview \n");
printf( "Ķ\n");
for ( i = 0; i < sizeof( Menue) / sizeof( struct menue_entry_t); i++)
{
printf( " %c\t%-69s \n",
Menue[i].cKey, Menue[i].cName);
}
printf( "Ķ\n");
printf( " %c\t%-69s \n", 'E',"Exit Programm");
printf( "ͼ\n");

return ;
}


/*
* liest die Konfiguration aus und zeigt alle Eintrge in tabell. Form
*/
void ReadConfigROM( void)
{
int line;
DWORD value;

clrscr();
mem_active = 0;
printf( "ͻ\n");
printf( " Target Configuration \n");
printf( "Ķ\n");
printf( " %-20s %-6s %-6s %-20s %-6s %-6s \n",
"Register Name","Addr","Value",
"Register Name","Addr","Value");
printf( "Ķ\n");
for (line = 0; line < sizeof( RegisterName) / CONST_REGNAME; line +=2)
{
value = PCIGetConfDword(CONST_DEVICEID, CONST_VENDORID, 2 * line, 0);
printf( " %-20s 0x%04X 0x%04X ",
RegisterName[ line], line * 2, ( value >> 16));
printf( "%-20s 0x%04X 0x%04X \n",
RegisterName[ line+1], line * 2 + 2, ( value & 0xFFFF));
}
printf( "Ķ\n");
printf( " E Exit C Config M Memory F Fill H Help \n");
printf( "ͼ\n");
return ;
}


/*
* fuellt den Speicher der Karte mit einem Wert
*/
void FillMem( long start, long end, unsigned char value)
{
long i;
DWORD baseAddr;

baseAddr = PCIGetConfDword(CONST_DEVICEID, CONST_VENDORID, 0x10, 0);
if ( ( start >= CONST_MIN_MEM) &&
( start <= CONST_MAX_MEM) &&
( end >= CONST_MIN_MEM) &&
( end <= CONST_MAX_MEM) &&
( start <= end)
)
{
for( i = start; i <= end; i++)
GSPutByte( baseAddr + i, value);
}
else
{
clrscr();
gotoxy( 1, 15);
printf( " ERROR: Memory Addresse not available!\n");
printf( " Press any key to continue\n");
while ( !kbhit() )
;
getch();
}
return ;
}


/*
* Menue fuer das Fuellen des Speichers mit einem Wert
*/
void FillMemory( void)
{
char key;
char *endptr;
char valueStr[20];
int cnt;
int StartAddr;
int EndAddr;
char value;

clrscr();
gotoxy( 1,10);
printf( " ͻ\n");
printf( " Fill Memory with Value \n");
printf( " Ķ\n");
printf( " Start Addr: \n");
printf( " End Addr : \n");
printf( " Value : \n");
printf( " ͼ\n");
/*
* StartAddr lesen
*/
do
{
gotoxy( 40, 13);
gets( valueStr);
StartAddr = strtol( valueStr, &endptr, 0);
}
while ( endptr[0] != '\0');
/*
* EndAddr lesen
*/
do
{
gotoxy( 40, 14);
gets( valueStr);
EndAddr = strtol( valueStr, &endptr, 0);
}
while ( endptr[0] != '\0');
/*
* Value lesen
*/
do
{
gotoxy( 40, 15);
gets( valueStr);
value = strtol( valueStr, &endptr, 0);
}
while ( endptr[0] != '\0');

FillMem( StartAddr, EndAddr, value);
ReadMemory();

return ;
}


/*
* liest den kompletten Speicher aus dem RAM der Karte
*/
void ReadMemory( void)
{
int i, j;
DWORD MemoryBase;
BYTE value;
DWORD addr;
char key;
int page;

mem_active = 1;
MemoryBase = PCIGetConfDword(CONST_DEVICEID, CONST_VENDORID, 0x10, 0);
key = 0;
page = 0;
do
{
addr = page * 256;
clrscr();
printf( "ͻ\n");
printf( " Read Target Memory \n");
printf( "Ķ\n");
printf( " Addr 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F \n");
printf( "Ķ\n");
for (i = 0; i < 16; i++ )
{
printf( " %08X ", addr);
for ( j= 0; j < 16; j++)
{
value = GSGetByte( MemoryBase + addr + j);
if ( j == 8 )
printf( " %02X ", value);
else
printf( "%02X ", value);
}
if ( i == 0 )
{
if ( page == 0)
{
printf( "%15c\n",' ');
}
else
{
printf( "%15c\n",' ');
}
}
else if ( i == 15 )
{
if ( page == 3)
{
printf( "%15c\n",' ');
}
else
{
printf( "%15c\n",' ');
}
}
else
printf( "%15c\n",' ');

addr += 16;
}
printf( "Ķ\n");
printf( " E Exit C Config M Memory F Fill H Help \n");
printf( "ͼ\n");
key = toupper( getch());
if ( (page > 0 ) && (key == 'P') )
page--;
else if ( (page < 3) && ( key == 'N'))
page++;
} while ( (key == 'N') || (key == 'P'));
ungetch( key); // schreibt das ZEICHEN wieder in den Puffer
return ;
}

void main(int argc, char *argv[])
{
DWORD MemoryBase;
int i;
char key;

clrscr();
MemoryBase = PCIGetConfDword(CONST_DEVICEID, CONST_VENDORID, 0x10, 0);
if ( !MemoryBase) {
printf("Error: PCI Device not found\n");
while (!kbhit())
;
getch();
return;
}
InitFlatMode();
EnableA20();
FirstWindow();
while (!kbhit)
;
key = toupper( getch());
while ( (key != 'E') && (key != 27) )
{
for ( i = 0; i < sizeof( Menue) / sizeof( menue_entry_t); i++)
{
if ( Menue[i].cKey == key)
(*Menue[i].pF)();
}
key = toupper( getch());
}

return ;
}



 |||   ||| 


(): 
E-mail: 

():
:

URL: 

URL : 


 |||   |||   |||   |||   ||| 

E-mail: info@telesys.ru