📄 interface.c
字号:
#define GLB extern
#include <stdio.h>
#include <conio.h>
#include <sys\types.h>
#include <sys\timeb.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include "fas466globalvars.h"
#include "fas466defs.h"
// Functions
void Wait (unsigned long ms)
{
unsigned long count;
for (count = 0; count < (ms*0x100000); count++);
}
unsigned short IsaRead(unsigned short IoAdr)
{
unsigned short Data = _inp((unsigned short) (IoAdr+IsaBaseAdr)) & 0x0FF;
return(Data);
}
void IsaWrite(unsigned short IoAdr,unsigned short Data)
{
_outp((unsigned short) (IoAdr+IsaBaseAdr),Data & 0x0FF);
return;
}
unsigned long RegRead(unsigned int address)
{
unsigned int i;
unsigned long result = 0;
unsigned long tmpres = 0;
unsigned int addrcount;
unsigned int bytecount = 1;
addrcount = address;
bytecount = RegSizeArray[address];
if ((bytecount < 1) || (bytecount > 4))
bytecount = 1; // treat undefined registers as 2 byte
for ( i = 0; i < bytecount; i++) {
IsaWrite((unsigned short) FAS_REG_ADDR, (unsigned short) (addrcount & 0x0FF));
tmpres = IsaRead((unsigned short) FAS_REG_DATA) & 0x0FF;
result = result | (tmpres << (i * 8));
addrcount++;
}
return(result);
}
void RegWrite(unsigned int address, unsigned long data)
{
unsigned int i;
unsigned short tmpdata = 0;
unsigned int addrcount;
unsigned int bytecount = 1;
addrcount = address;
bytecount = RegSizeArray[address];
if ((bytecount < 1) || (bytecount > 4))
bytecount = 1; // treat undefined registers as 2 byte
for ( i = 0; i < bytecount; i++) {
IsaWrite((unsigned short) FAS_REG_ADDR, (unsigned short) (addrcount & 0x0FF));
tmpdata = (unsigned short) (data >> (i * 8)) & 0x0FF;
IsaWrite((unsigned short) FAS_REG_DATA, (unsigned short) tmpdata);
addrcount++;
}
}
void MemWrite(unsigned int address, unsigned char data)
{
unsigned int tmp, odd, addr;
odd = address % 2;
addr = address / 2;
IsaWrite((unsigned short) RAM_ADDR_LO, (unsigned short) (addr & 0x0FF));
IsaWrite((unsigned short) RAM_ADDR_HI, (unsigned short) ((addr & 0xFF00) >> 8));
tmp = IsaRead((unsigned short) EVAL_CONFIG);
IsaWrite((unsigned short) EVAL_CONFIG, (unsigned short) (tmp | 0x20));
IsaWrite((unsigned short) EVAL_CONFIG, (unsigned short) tmp);
if (odd == 0)
IsaWrite((unsigned short) RAM_DATA_LO, (unsigned short) data);
else
IsaWrite((unsigned short) RAM_DATA_HI, (unsigned short) data);
}
unsigned char MemRead(unsigned int address)
{
unsigned int tmp, odd, addr;
unsigned char result = 0;
odd = address % 2;
addr = (address / 2);
IsaWrite((unsigned short) RAM_ADDR_LO, (unsigned short) (addr & 0x0FF));
IsaWrite((unsigned short) RAM_ADDR_HI, (unsigned short) ((addr & 0xFF00) >> 8));
tmp = IsaRead((unsigned short) EVAL_CONFIG);
IsaWrite((unsigned short) EVAL_CONFIG, (unsigned short) (tmp | 0x20));
IsaWrite((unsigned short) EVAL_CONFIG, (unsigned short) tmp);
if (odd == 0)
result = (unsigned char) IsaRead((unsigned short) RAM_DATA_LO);
else
result = (unsigned char) IsaRead((unsigned short) RAM_DATA_HI);
return(result);
}
void BitMask(unsigned int address, unsigned int bits, unsigned int mode)
{
unsigned long tempres = 0;
tempres = RegRead(address);
if (mode == 1)
tempres |= bits;
else
tempres &= ~bits;
RegWrite(address, tempres);
}
void verify(unsigned int address, unsigned long data)
{
unsigned long tempres = 0;
tempres = RegRead(address);
if (tempres != data) {
VerifyError++;
printf(" **** VERIFY ERROR ****\n");
printf(" Expected %0x but data = %0x\n\n",data,tempres);
}
}
void verifym(unsigned int address, unsigned int mask, unsigned long data)
{
unsigned long tempres = 0;
tempres = RegRead(address) & mask;
if (tempres != data) {
VerifyError++;
printf(" **** VERIFY ERROR ****\n");
printf(" Expected %0x but data = %0x\n\n",data,tempres);
}
}
void chipreset()
{
IsaWrite((unsigned short) EVAL_CONFIG, 0x1C);
IsaWrite((unsigned short) EVAL_CONFIG, 0x1E);
IsaWrite((unsigned short) EVAL_CONFIG, 0x1C);
return;
}
void SetChkMem(unsigned int start, unsigned int end, unsigned int pattern, unsigned int type, unsigned int mode)
{
unsigned int count = 0;
unsigned int tempval, tmp;
unsigned int initial = pattern;
if (end < start)
return;
IsaWrite((unsigned short) RAM_ADDR_LO, (unsigned short) (start & 0x0FF));
IsaWrite((unsigned short) RAM_ADDR_HI, (unsigned short) ((start & 0xFF00) >> 8));
tmp = IsaRead((unsigned short) EVAL_CONFIG);
IsaWrite((unsigned short) EVAL_CONFIG, (unsigned short) (tmp | 0x20));
IsaWrite((unsigned short) EVAL_CONFIG, (unsigned short) tmp);
if (mode == 0) { // set
switch (type) {
case 0: // repeating
while ( count < (end - start + 1)) {
IsaWrite((unsigned short) RAM_DATA_LO, (unsigned short) pattern);
if (count < (end - start))
IsaWrite((unsigned short) RAM_DATA_HI, (unsigned short) pattern);
count = count + 1;
}
break;
case 1: // increamental
while ( count < (end - start + 1)) {
IsaWrite((unsigned short) RAM_DATA_LO, (unsigned short) pattern);
pattern = pattern - 1;
if (count < (end - start))
IsaWrite((unsigned short) RAM_DATA_HI, (unsigned short) pattern);
count = count + 1;
pattern = pattern - 1;
}
break;
}
}
else { // check
switch (type) {
case 0: // repeating
while ( count < (end - start + 1)) {
tempval = IsaRead((unsigned short) RAM_DATA_LO);
if (tempval != pattern) {
MemVerifyError++;
printf(" **** MEMORY VERIFY ERROR ****\n");
printf(" Expected %0x but data = %0x\n\n",pattern,tempval);
}
if (count < (end - start))
tempval = IsaRead((unsigned short) RAM_DATA_HI);
if (tempval != pattern) {
MemVerifyError++;
printf(" **** MEMORY VERIFY ERROR ****\n");
printf(" Expected %0x but data = %0x\n\n",pattern,tempval);
}
count = count + 1;
}
break;
case 1: // check incremental
while ( count < (end - start + 1)) {
tempval = IsaRead((unsigned short) RAM_DATA_LO);
if (tempval != pattern) {
MemVerifyError++;
printf(" **** MEMORY VERIFY ERROR ****\n");
printf(" Expected %0x but data = %0x\n\n",pattern,tempval);
}
pattern = pattern - 1;
if (count < (end - start))
tempval = IsaRead((unsigned short) RAM_DATA_HI);
if (tempval != pattern) {
MemVerifyError++;
printf(" **** MEMORY VERIFY ERROR ****\n");
printf(" Expected %0x but data = %0x\n\n",pattern,tempval);
}
count = count + 1;
pattern = pattern - 1;
}
break;
}
}
}
void test_finish()
{
printf("<>----------------------------------------<>\n");
printf(" | Test Complete!\n");
printf(" |\n");
printf(" | Register Verify Errors = %0d\n",VerifyError);
printf(" | Memory Verify Errors = %0d\n",MemVerifyError);
printf("<>----------------------------------------<>\n");
printf("\nHit Enter To Exit...\n");
gets(str);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -