/*
|
/*
|
* output.c -- output to file on host system
|
* output.c -- output to file on host system
|
*/
|
*/
|
|
|
|
|
#include <stdio.h>
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <stdlib.h>
|
#include <string.h>
|
#include <string.h>
|
|
|
#include "common.h"
|
#include "common.h"
|
#include "console.h"
|
#include "console.h"
|
#include "error.h"
|
#include "error.h"
|
#include "output.h"
|
#include "output.h"
|
|
|
|
|
static FILE *outputFile;
|
static FILE *outputFile;
|
|
|
|
|
Word outputRead(Word addr) {
|
Word outputRead(Word addr) {
|
if (outputFile == NULL) {
|
if (outputFile == NULL) {
|
/* output device not installed */
|
/* output device not installed */
|
error("output device not installed");
|
error("output device not installed");
|
}
|
}
|
/* output device always returns 0 on read */
|
/* output device always returns 0 on read */
|
return 0;
|
return 0;
|
}
|
}
|
|
|
|
|
void outputWrite(Word addr, Word data) {
|
void outputWrite(Word addr, Word data) {
|
char c;
|
char c;
|
|
|
if (outputFile == NULL) {
|
if (outputFile == NULL) {
|
/* output device not installed */
|
/* output device not installed */
|
error("output device not installed");
|
error("output device not installed");
|
}
|
}
|
c = data;
|
c = data;
|
if (fwrite(&c, 1, 1, outputFile) != 1) {
|
if (fwrite(&c, 1, 1, outputFile) != 1) {
|
error("write error on output device");
|
error("write error on output device");
|
}
|
}
|
}
|
}
|
|
|
|
|
void outputReset(void) {
|
void outputReset(void) {
|
if (outputFile == NULL) {
|
if (outputFile == NULL) {
|
/* output device not installed */
|
/* output device not installed */
|
return;
|
return;
|
}
|
}
|
cPrintf("Resetting output device...\n");
|
cPrintf("Resetting Output Device...\n");
|
fseek(outputFile, 0, SEEK_SET);
|
fseek(outputFile, 0, SEEK_SET);
|
}
|
}
|
|
|
|
|
void outputInit(char *outputFileName) {
|
void outputInit(char *outputFileName) {
|
if (outputFileName == NULL) {
|
if (outputFileName == NULL) {
|
/* do not install output device */
|
/* do not install output device */
|
outputFile = NULL;
|
outputFile = NULL;
|
} else {
|
} else {
|
/* try to install output device */
|
/* try to install output device */
|
outputFile = fopen(outputFileName, "wb");
|
outputFile = fopen(outputFileName, "wb");
|
if (outputFile == NULL) {
|
if (outputFile == NULL) {
|
error("cannot open output device file '%s'", outputFileName);
|
error("cannot open output device file '%s'", outputFileName);
|
}
|
}
|
setvbuf(outputFile, NULL, _IONBF, 0);
|
setvbuf(outputFile, NULL, _IONBF, 0);
|
}
|
}
|
outputReset();
|
outputReset();
|
}
|
}
|
|
|
|
|
void outputExit(void) {
|
void outputExit(void) {
|
if (outputFile == NULL) {
|
if (outputFile == NULL) {
|
/* output device not installed */
|
/* output device not installed */
|
return;
|
return;
|
}
|
}
|
fclose(outputFile);
|
fclose(outputFile);
|
}
|
}
|
|
|