📄 hw_acces.c
字号:
/*
** Kenobi2 version 1.3
**
** ** This code has been made to check/learn the 1161 functionalities **
** ** Release 25-Feb-2002 **
**
** OKANO, Akifumi
**
** Computing Segment, Semisonductors Div, Philips Japan Ltd.
** akifumi.okano@philips.com
** +81-3-3740-4668
*/
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include "hc_comm.h"
#include "hw_acces.h"
#include "ui.h"
unsigned int g_ISA_base_address;
unsigned int g_1161_command_address;
unsigned int g_1161_data_address;
/*
** Hardware related : x86-ISA-1161 address
*/
unsigned int get_ISA_base_address( void );
unsigned int get_ISA_base_address( void )
{
return ( g_ISA_base_address );
}
void read_register_burst_char( unsigned short register_address, unsigned char *data, unsigned short length )
{
unsigned short tmp;
int i;
int odd;
odd = length & 0x0001;
if ( odd )
length &= ~0x1;
disable();
outport( g_1161_command_address, register_address );
for ( i = 0; i < length; i += 2 )
{
tmp = inport( g_1161_data_address );
*(data + i + 1) = tmp >> 8;
*(data + i + 0) = tmp & 0x00FF;
}
if ( odd )
{
tmp = inport( g_1161_data_address );
*(data + i + 0) = tmp & 0x00FF;
}
enable();
}
void write_register_burst_char( unsigned short register_address, unsigned char *data, unsigned short length )
{
unsigned short tmp;
int i;
register_address += 0x80;
disable();
outport( g_1161_command_address, register_address );
for ( i = 0; i < length; i += 2 )
{
tmp = (*(data + i + 1) << 8) | *(data + i); /* swap bytes */
/*
if ( !(i % 16) )
mprintf( LIGHTGRAY, CONTINUE, "\r\nwr:%04d > ", i );
mprintf( LIGHTGRAY, CONTINUE, " 0x%04X", tmp );
*/
outport( g_1161_data_address, tmp );
}
enable();
}
void read_register_burst_int( unsigned short register_address, unsigned char *data, unsigned short length )
{
int i;
disable();
outport( g_1161_command_address, register_address );
for ( i = 0; i < length; i++ )
*data++ = inport( g_1161_data_address );
enable();
}
void write_register_burst_int( unsigned short register_address, unsigned short *data, unsigned short length )
{
int i;
register_address += 0x80;
disable();
outport( g_1161_command_address, register_address );
for ( i = 0; i < length; i++ )
outport( g_1161_data_address, *data++ );
enable();
}
unsigned long read_register32( unsigned short register_address )
{
unsigned long tmp;
disable();
outport( g_1161_command_address, register_address );
tmp = inport( g_1161_data_address );
tmp |= (unsigned long)inport( g_1161_data_address ) << 16;
enable();
return ( tmp );
}
void write_register32( unsigned short register_address, unsigned long value )
{
register_address += 0x80;
disable();
outport( g_1161_command_address, register_address );
outport( g_1161_data_address, (unsigned short)(value & 0x0000FFFF) );
outport( g_1161_data_address, (unsigned short)(value >> 16) );
enable();
}
unsigned short read_register16( unsigned short register_address )
{
unsigned short tmp;
disable();
outport( g_1161_command_address, register_address );
tmp = inport( g_1161_data_address );
enable();
return ( tmp );
}
void write_register16( unsigned short register_address, unsigned short value )
{
register_address += 0x80;
disable();
outport( g_1161_command_address, register_address );
outport( g_1161_data_address, value );
enable();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -