⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 micronet.c

📁 一个C style Assembler的source code
💻 C
字号:
#include <stdio.h>#include <bios.h>#include <dos.h>#include <math.h>#include <float.h>#include "Port.h"#include "Com.h"#include "Micronet.h"void SendCmd(int Addr, int Tx) {   SetTx();   Send((Addr << 6)&0300 | Tx&077);   SetRx();}int GetStats(int Counter, byte *Buf, int Bytes) {   int Header, Size, I, Rx, Sum;   int Addr = (Counter >= 6)? 2: 1;   SendCmd(Addr, Counter%6); if (Status) return -1;   if ((Header = Recv()) == -1) return -1;   if (Header != '#') { Status |= BAD_HEADER; return -1; }   if ((Size = Recv()) == -1) return -1;   if (Size == 0) Size = 0x100;   for (I = 0, Sum = 0; I < Size; I++) {      if ((Rx = Recv()) == -1) return -1;      if (I >= Bytes) { Status |= PACKET_OVER; return -1; }      Buf[I] = (byte)Rx;      Sum = (Sum + Rx)&0xff;   }   if ((Rx = Recv()) == -1) return -1;   if (Rx != Sum) Status |= BAD_SUM;   return I;}#define NAK   033#define ACK   034#define ABORT 037int GetDump(int Counter, byte *Buf, int Bytes) {   int Header, Size, Bot, Top, Rx, Sum, Retries;   int Addr = (Counter >= 6)? 2: 1;   SendCmd(Addr, 010 | (Counter%6));   Bot = 0;NextPacket:   Retries = 0;RecvPacket:   if (Status) return -1;   if ((Header = Recv()) == -1) return -1;   switch (Header) {      case '.': return Bot;      case ':': break;      default: Status |= BAD_HEADER; return -1;   }   if ((Size = Recv()) == -1) return -1;   if (Size == 0) Size = 0x100;   for (Top = Bot, Sum = 0; Top < Bot + Size; Top++) {      if ((Rx = Recv()) == -1) return -1;      if (Top >= Bytes) { Status |= PACKET_OVER; return -1; }      Buf[Top] = (byte)Rx; Sum = (Sum + Rx)&0xff;   }   if ((Rx = Recv()) == -1) return -1;   if (Rx != Sum) {      if (++Retries == 10) {         FlushPort(); SendCmd(Addr, ABORT); Status |= BAD_SUM; return -1;      }      SendCmd(Addr, NAK); Top = Bot; goto RecvPacket;   } else {      SendCmd(Addr, ACK); Bot = Top; goto NextPacket;   }}int SendStatus(int Unit) {   int Rx;   switch (Unit) {      case 0: SendCmd(1, 020); break;      case 1: SendCmd(2, 020); break;   }   if (Status) return -1;   Rx = Recv(); if (Status) return -1;   return Rx;}void SendAbort(int Unit) {   FlushPort();   switch (Unit) {      case 0:  SendCmd(1, ABORT); break;      case 1:  SendCmd(2, ABORT); break;      default: SendCmd(3, ABORT); break;   }} void SendTest(int Unit) {   switch (Unit) {      case 0:  SendCmd(1, 030); break;      case 1:  SendCmd(2, 030); break;      default: SendCmd(3, 030); break;   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -