/* * Basic low-level modem functions for big board. */ #include "yam.h" userinit() { setbaud(1200); outp(SPORT, 4); /* select SIO reg 4 */ outp(SPORT, R16CLCK | R1STOP); /* default config. */ outp(SPORT, 3); /* select SIO reg 3 */ outp(SPORT, R8BIT | RENABLE); outp(SPORT, 5); /* select SIO reg 5 */ outp(SPORT, XDTR | X8BIT | XENABLE | XRTS); } setbaud(nbaud) unsigned nbaud; { unsigned baudchar; switch(nbaud) { case 50: baudchar = 0; break; case 75: baudchar = 1; break; case 110: baudchar = 2; break; case 150: baudchar = 4; break; case 300: baudchar = 5; break; case 600: baudchar = 6; break; case 1200: baudchar = 7; break; case 1800: baudchar = 8; break; case 2000: baudchar = 9; break; case 2400: baudchar = 10; break; case 3600: baudchar = 11; break; case 4800: baudchar = 12; break; case 7200: baudchar = 13; break; case 9600: baudchar = 14; break; case 19200: baudchar = 15; break; default: printf("Default is 1200\n"); baudchar = 7; } outp (BAUDPORT, baudchar); } sendbrk() { outp(SPORT,XDTR | XENABLE | X8BIT | XRTS | XBREAK); sleep(10); outp(SPORT,XDTR | XENABLE | X8BIT | XRTS ); } bye() { onhook(); } setparams() { } onhook() { outp(SPORT,5); /* SIO reg 5 */ outp(SPORT, 0); /* set all xmit vars to 0 (reset DTR to off)*/ } offhook() { userinit(); } wait10(times) int times; { } readline(decisecs) { if(MIREADY) goto getit; while(--decisecs>=0) { if(MIREADY) goto getit; if(CDO) return TIMEOUT; if(MIREADY) goto getit; if(CIREADY) { CICHAR; /* dismiss character */ return TIMEOUT; } if(MIREADY) goto getit; for(Timeout=T1pause; --Timeout; ) if(MIREADY) { getit: return MICHAR; } } return TIMEOUT; } sendline(data) char data; { while(!MOREADY) ; outp(MODATA, data); } purgeline() { while(MIREADY) MICHAR; } readbaud() { } dial() { }