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

📄 interface.c

📁 基于FAS466的SCSI控制器的启动器模式的C源代码。
💻 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 + -