Knowledge Base Detail

KB00321: Windows Drivers for PC/104 SyncClock

Below is a source code example modifying DOS curtime.c example to use free IODLL library.

Web link for IODLL is

There is also a product called TVicHW32:

// curtime.cpp : Defines the entry point for the console application.

// curtime.c 13nov95 demonstrates reading current time from PC104-SG

#define BASE 0x300

#include "stdafx.h"

#include "104sgdef.h"

#include "sgdpdef.h"





#define MAXMODULE 50

typedef void (WINAPI*cccfunc)(short int Port,char Data);

typedef char (WINAPI*ccfunc)(short int Port);

ccfunc PortIn;

cccfunc PortOut;

/* void PortOut(short int Port, char Data);

void PortWordOut(short int Port, short int Data);

void PortDWordOut(short int Port, int Data);

char PortIn(short int Port); */

short int PortWordIn(short int Port);

int PortDWordIn(short int Port);

void SetPortBit(short int Port, char Bit);

void ClrPortBit(short int Port, char Bit);

void NotPortBit(short int Port, char Bit);

short int GetPortBit(short int Port, char Bit);

short int RightPortShift(short int Port, short int Val);

short int LeftPortShift(short int Port, short int Val);

short int IsDriverInstalled();

int Read_Dual_Port_RAM(char addr);

int main(int argc, char* argv[])


#define BASE 0x300

int i;int timechar[9];

HINSTANCE hLib=LoadLibrary("IO.DLL");

if(hLib==NULL) {

cout << "Unable to load library!" << endl;




char mod[MAXMODULE];

GetModuleFileName((HMODULE)hLib, (LPTSTR)mod, MAXMODULE);

cout << "Library loaded: " << mod << endl;

PortIn=(ccfunc)GetProcAddress((HMODULE)hLib, "PortIn");

PortOut=(cccfunc)GetProcAddress((HMODULE)hLib, "PortOut");

if((PortIn==NULL) || (PortOut==NULL)) {

cout << "Unable to load function(s)." << endl;




while (1)


for (i=0;i<=8;i++)

/* always read Usec1_Nsec100_Port first, latching hi-order ports */

/* Then, other current time ports can be read */

/* partially or completely in any order */

/* this example reads ALL the current time ports, and then displays them */


for (i=8;i>=0;i--)

{printf("%02x " ,timechar[i]&0x0ff);}


printf("DP Extd status: %2x \n",i);



return (0);


int Read_Dual_Port_RAM(char addr)

#define BASE 0x300


char response;

response=PortIn(BASE+Dual_Port_Data_Port); /* clear response flag */

PortOut((short int)(BASE+Dual_Port_Address_Port) ,addr);

while ((PortIn(BASE+Extended_Status_Port)&Response_Ready) ==0) {;}


return response;


About Brandywine Communications

Brandywine Communications Inc. offers superior products to the time and frequency marketplace. Our mission is to provide the finest equipment coupled with excellent before and after sale service.

Find Out More...

Contact Us

Brandywine Communications
Ultra-Precision Time & Frequency

1153 Warner Ave
Tustin, CA 92780
Phone: 714.755.1050