Refactor parallel comms a bit

This commit is contained in:
2025-10-01 23:24:59 +02:00
parent 3df5b28e4e
commit 2ba1546dec
8 changed files with 116 additions and 87 deletions

View File

@@ -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);