Refactor parallel comms a bit
This commit is contained in:
40
polio-main.c
40
polio-main.c
@@ -1,4 +1,6 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "fat12.h"
|
||||
#include "paracomm.h"
|
||||
@@ -11,21 +13,18 @@
|
||||
#define kParallelStatusPort 0x3bd
|
||||
#define kParallelControlPort 0x3be
|
||||
#define kParaDelay 400
|
||||
#define kRecvBufferSize 256
|
||||
|
||||
void dosdbt();
|
||||
void int80h();
|
||||
|
||||
uint8_t* parabuf;
|
||||
uint8_t parabuf[kRecvBufferSize];
|
||||
uint8_t parasize;
|
||||
|
||||
static void paracb(const uint8_t* buf, uint8_t size) {
|
||||
if (size > parasize) {
|
||||
return paracb(buf, parasize);
|
||||
}
|
||||
for (int i = 0; i < size; i++) {
|
||||
parabuf[i] = buf[i];
|
||||
}
|
||||
parasize = 0;
|
||||
// we'll mercilessly erase old data with new data
|
||||
memcpy(parabuf, buf, size);
|
||||
parasize = size;
|
||||
}
|
||||
|
||||
static void die() {
|
||||
@@ -52,7 +51,7 @@ static void __delay__(int n) {
|
||||
}
|
||||
}
|
||||
|
||||
static void paraxfer() {
|
||||
uint8_t xferpara() {
|
||||
uint8_t mosib = paracomm_nextbyte();
|
||||
__outb__(kParallelDataPort, mosib);
|
||||
__outb__(kParallelControlPort, 1);
|
||||
@@ -61,30 +60,23 @@ static void paraxfer() {
|
||||
__delay__(kParaDelay);
|
||||
uint8_t mison = __inb__(kParallelStatusPort) >> 4;
|
||||
paracomm_feed(mison);
|
||||
|
||||
return paracomm_busy();
|
||||
}
|
||||
|
||||
void pararecv(uint8_t* addr, uint8_t size) {
|
||||
parabuf = addr;
|
||||
parasize = size;
|
||||
for (int i = 0; i < 1 + 2 + size * 2; i++) {
|
||||
if (!parasize) {
|
||||
uint8_t parasend(uint8_t* addr, uint8_t size) {
|
||||
uint8_t i;
|
||||
for (i = 0; i < size; i++) {
|
||||
if (paracomm_send(addr[i])) {
|
||||
break;
|
||||
}
|
||||
paraxfer();
|
||||
}
|
||||
}
|
||||
|
||||
void parasend(uint8_t* addr, uint8_t size) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
paracomm_send(addr[i]);
|
||||
}
|
||||
for (int i = 0; i < size + 2; i++) {
|
||||
paraxfer();
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
int main() {
|
||||
dosdbt();
|
||||
parasize = 0;
|
||||
paracomm_init(paracb);
|
||||
|
||||
fat12_init(kFatAddr, kRootDirAddr);
|
||||
|
Reference in New Issue
Block a user