fix ftpget

This commit is contained in:
2025-10-06 22:46:40 +02:00
parent 540f42b21b
commit 91cf76c251
4 changed files with 36 additions and 15 deletions

View File

@@ -28,7 +28,7 @@ stdlib.o: CFLAGS := $(filter-out -flto, $(CFLAGS))
polmon.elf: LDFLAGS += -T flat1000.ld polmon.elf: LDFLAGS += -T flat1000.ld
polmon.elf: polmon.o stdlib.o polmon.elf: polmon.o stdlib.o
polio.elf: LDFLAGS += -T flat0600.ld polio.elf: LDFLAGS += -T flat0600.ld -mprotected-mode
polio.elf: polio-main.o polio.s fat12.o paracomm.o stdlib.o polio.elf: polio-main.o polio.s fat12.o paracomm.o stdlib.o
paracli.elf: LDFLAGS += -T doscom.ld paracli.elf: LDFLAGS += -T doscom.ld

View File

@@ -5,6 +5,16 @@
#define kDefaultChunkSize 0x20 #define kDefaultChunkSize 0x20
static int recv(uint8_t* buf, uint8_t size) {
uint16_t ds = 0;
asm volatile ("push %%ds \n\t"
"mov %0, %%ds \n\t"
"pop %0 \n" : "+r"(ds));
int len = read(kLpt1, buf, size);
asm volatile ("mov %0, %%ds" :: "r"(ds));
return len;
}
int main(int argc, uint16_t argv[]) { int main(int argc, uint16_t argv[]) {
if (argc < 2) { if (argc < 2) {
return -1; return -1;
@@ -17,17 +27,26 @@ int main(int argc, uint16_t argv[]) {
chunksize = argv[2]; chunksize = argv[2];
} }
uint8_t ok = 0x42; uint8_t ack = 0x42;
int i;
for (int i = 0; i < size;) { for (i = 0; i < size;) {
runcomms(kUntilIdle);
// delay? // delay?
int len = read(kLpt1, dest + i, chunksize); int len;
for (int j = 0; j < 3; j++) {
int r = runcomms(kUntilIdle);
len = recv(dest + i, chunksize);
if (len > 0) {
break;
}
}
if (len <= 0) { if (len <= 0) {
break; break;
} }
write(kLpt1, &ok, 1); write(kLpt1, &ack, 1);
i += len; i += len;
} }
return i;
} }

View File

@@ -18,13 +18,15 @@
void dosdbt(); void dosdbt();
void int80h(); void int80h();
uint8_t parabuf[kRecvBufferSize]; static uint8_t parabuf[kRecvBufferSize];
uint8_t parasize; static uint8_t parasize;
static void paracb(const uint8_t* buf, uint8_t size) { static void paracb(const uint8_t* buf, uint8_t size) {
// we'll mercilessly erase old data with new data if (parasize + size > sizeof(parabuf)) {
memcpy(parabuf, buf, size); size = sizeof(parabuf) - parasize;
parasize = size; }
memcpy(parabuf + parasize, buf, size);
parasize += size;
} }
static void die() { static void die() {
@@ -51,7 +53,7 @@ static void __delay__(int n) {
} }
} }
uint8_t xferpara(uint8_t until_idle) { uint16_t xferpara(uint8_t until_idle) {
do { do {
uint8_t mosib = paracomm_nextbyte(); uint8_t mosib = paracomm_nextbyte();
__outb__(kParallelDataPort, mosib); __outb__(kParallelDataPort, mosib);
@@ -65,7 +67,7 @@ uint8_t xferpara(uint8_t until_idle) {
return paracomm_busy(); return paracomm_busy();
} }
uint8_t parasend(uint8_t* addr, uint8_t size) { uint16_t parasend(uint8_t* addr, uint8_t size) {
uint8_t i; uint8_t i;
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
if (paracomm_send(addr[i])) { if (paracomm_send(addr[i])) {
@@ -75,7 +77,7 @@ uint8_t parasend(uint8_t* addr, uint8_t size) {
return i; return i;
} }
uint8_t pararecv(uint8_t* buf, uint8_t size) { uint16_t pararecv(uint8_t* buf, uint8_t size) {
if (parasize == 0) { if (parasize == 0) {
return 0; return 0;
} }

View File

@@ -69,7 +69,7 @@ int runcomms(char until_idle) {
asm volatile("mov $0x07, %%ah \n\t" asm volatile("mov $0x07, %%ah \n\t"
"int $0x80 \n\t" "int $0x80 \n\t"
: "=r"(ret) : "=r"(ret)
: "r"(until_idle) : "r"(ui)
: "bx", "cx", "dx", "cc", "memory"); : "bx", "cx", "dx", "cc", "memory");
return ret; return ret;