Skip to content

Instantly share code, notes, and snippets.

@pereztr5
Last active August 29, 2015 14:15
Show Gist options
  • Save pereztr5/30611dca066136e74b12 to your computer and use it in GitHub Desktop.
Save pereztr5/30611dca066136e74b12 to your computer and use it in GitHub Desktop.
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include "miniat/miniat.h"
#define M_HIGH 1
#define M_LOW 0
typedef struct
{
int connected;
m_uword address;
m_bus *bus;
}p_simple_kb;
typedef struct
{
int connected;
m_uword address;
m_bus *bus;
}p_simple_term;
void p_simple_kb_clock(p_simple_kb *k);
void p_simple_term_clock(p_simple_term *t);
static void cleanup();
miniat *iMiniAT = NULL;
p_simple_kb *keyboard = NULL;
p_simple_term *terminal = NULL;
int main(int argc, char *argv[])
{
m_bus *bus_state;
char data;
if (argc != 2) {
fprintf(stderr, "You must specify a bin file name to run");
THROW(m_error_num_illegal_argument);
}
atexit(cleanup);
iMiniAT = miniat_file_new(argv[1]);
bus_state = miniat_conector_bus_get(iMiniAT);
terminal = malloc(sizeof(p_simple_term));
terminal->bus = (m_bus *)malloc(sizeof(m_bus));
terminal -> address = 0x4002;
terminal -> connected = 0;
printf("This is a demo for the Edison Jr.!\n");
while(1)
{
miniat_clock(iMiniAT);
if(bus_state->req && (bus_state->address == 0x4002) && bus_state->rW && !bus_state->ack)
{
bus_state->ack = M_HIGH;
printf("%c", (char)bus_state->data);
fflush(stdout);
}
else if(bus_state->ack && (bus_state->address == 0x4002))
{
bus_state->ack = M_LOW;
}
}
miniat_free(iMiniAT);
if(!terminal->connected) {
free(terminal->bus);
}
free(terminal);
return 0;
}
static void cleanup() {
if(iMiniAT) {
miniat_free(iMiniAT);
}
if(terminal) {
if(!terminal->connected) {
free(terminal->bus);
}
free(terminal);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment