New modem basic (1) Genic Clubguide, 00-00-00 - Met toestemming overgenomen van Future Magazine #8 - N E W M O D E M B A S I C =============================== INLEIDING In MSX-land wordt het gebruik van de modem steeds interessanter voor de gebruikers. Begonnen we eerst nog met een zeer onderontwikkeld communicatieprogramma van Philips, nu is het al mogelijk om met behulp van 'New Modem Basic' uw eigen communicatieprogramma te schrijven in basic! 'New Modem Basic', de naam zegt het eigenlijk al, is een schitterende uitbreiding op de bestaande MSX-Basic. Er zijn een flink aantal extra instructies die d.m.v. een call opdracht kunnen worden gegeven. Er is al een interessant voorbeeld programma geschreven met die nieuwe instructies en dat werkt buitengewoon goed en is bovenal compatible met al uw uitbreidingen! Hieronder vindt u een beknopt overzicht van de extra commando's die mogelijk zijn in combinatie met 'New Modem Basic'. Commando + Syntax: _ANSWER(I) Wordt alleen gebruikt in een BBS-programma. Kijkt op welke snelheid de beller zit. De ANSWER routine kent 3 snelheden: I=1 er wordt gebeld op 300R/300T I=2 " "" "" "" 1200R/75T I=3 "" "" "" "" 75R/1200T Heeft I een andere waarde, dan is het geen modemgebruiker of deze zit op een onbekende snelheid. Note: Het NMS-Modem kent meerdere snelheden, maar mij is in de praktijk gebleken, dat dit door de ANSWER-routine niet herkend wordt. Belt iemand bv met Equalizer aan dan wordt dit door de ANSWER-routine gedetecteerd als zou dit een gewone snelheid zijn. _BREAK Stelt de breaktoets in. Nu kunnen bepaalde routines eventueel onderbroken worden. (MRING en DIAL) De standaard ingestelde break-toets is de CODE-toets. Dit commando mag ook achterwege gelaten worden. De break-toets staat dan ingesteld op CTRL-STOP (Niet aan te bevelen, aangezien een basic-programma zonder ONSTOPGOSUB dan afbreekt) _CARRIER(:GOSUB .) Wordt alleen gebruikt in een BBS programma. Achter GOSUB het regelnummer invullen waar naartoe gegaan moet worden als de carrier weg is. De carrier kan door onbekende oorzaak wegvallen of de beller heeft zomaar opgehangen. _CHKMDM(I) Controleer of modem aanwezig is. I = 0 : modem aanwezig, anders geen modem aanwezig. _CONNECT(I) Wordt alleen gebruikt in een Terminal-programma. Maakt verbinding op de met INIMDM ingestelde snelheid. I = 0 : error I = 2 : carrier detected. Verbinding! I = 3 : routine afgebr. via CODE-toets I = 4 : nummer is in gesprek _DTRON DTR signaal aan. DTR = Data Terminal Ready _DTROFF DTR signaal uit. _ECHOON Verstuurde tekens gaan naar de telefoon-lijn EN naar het scherm. Dit commando wordt gebruikt als het programmma fungeert als een BBS. _ECHOOFF Verstuurde tekens gaan ALLEEN naar de telefoon-lijn. Alleen binnenkomende tekens worden op het scherm gezet. Dit commando moet dus gebruikt worden als het programma fungeert als een Terminal.(Bel-programma) I=0:_FILEOUT(A$),I Verstuurt een tekstfile. A$ heeft (drive)+filenaam. I bepaalt of meer j/n aan is of uit. I = 0 meer j/n staat aan. I = 1 meer j/n staat uit. Na afloop bevat I een controle-code. 0 = tekstfile goed verzonden 3 = afgebroken via CTRL-C of C 7 = file niet gevonden. _FILEOUT kan in een terminal-programma ook gebruikt worden om een zgn. ASCII-upload te doen. De Meer j/n moet dan uiteraard UIT staan. Afbreken via CTRL-C of C _GET(I) Haalt een teken van toetsenbord en/of telefoon-lijn. Bij LINEOFF alleen van toetsenbord. De ASCII-waarde van het teken komt in I. Eventueel vertalen naar een letter via bv IN$=CHR$(I). De routine wacht op een toets en komt terug in Basic als dit gebeurt. I=3:_INIMDM(I) Stelt het modem op een bepaalde snelheid in. I mag de waarden 0 t/m 7 hebben. Zie modemsnelheden. _INITMD Stelt het communicatie-protocol in. Staat standaard op X8N1. X = Xon/Xoff protocol aan 8 = 8 data-bits N = non parity 1 = 1 stopbit _LINEON Telefoon-lijn aan. _LINEOFF Telefoon-lijn uit. Tijdens een verbinding kan dus de telefoonlijn aan en uit gezet worden. Dit heeft geen invloed op de verbinding die blijft gewoon bestaan. In een BBS-programma kan _LINEOFF worden gebruikt om als sysop lokaal even iets te doen,zonder dat de beller kan zien wat er gebeurt.Hij staat dan even op non-actief Er wordt niets naar hem toegestuurd en hij kan zelf ook niets sturen.Een _LINEON maakt dit weer ongedaan. _LO(A$) Stuurt de tekst in A$ naar scherm en/of telefoon-lijn. Afhankelijk van ECHOON/ECHOOFF en LINEON/LINEOFF. Eventueel binnenkomende tekens worden genegeerd, behalve de toetsen voor pauzeren, afbreken en weer verder. Dit houdt tevens in,dat de buffers,waar toetsen in komen, leeg blijven. Er worden geen toetsen "onthouden". Dit voorkomt als men bv in een BBS op de commandoregel staat en men drukt per ongeluk de Return toets een poosje in, dat dan de regel vele malen opnieuw wordt afgedrukt. _LO is het gebruikelijke commando om regels tekst menu's e.d. te versturen. _LB(A$) Zelfde als _LO(A$),nu is de tekst alleen te pauzeren via CTRL-S,echter niet af te breken. Binnenkomende tekens tijdens het versturen worden nu "onthouden". (Toetsenbord-buffer en modem-buffer blijven intact) Gebruik _LB ALTIJD in een input-routine om de ingetypte tekens weer terug te sturen en/of op het scherm te zetten. _LS(A$) Zelfde als _LO(A$),met dit verschil dat eventuele eindspaties niet worden afgedrukt. A$ is bv "BBS-programma." Via _LO(A$) wordt de hele string verstuurd,ook de eind-spaties.Met _LS(A$) wordt dan als laatste teken de "." verstuurd. De commando's _LO(A$) en _LS(A$) kunnen op 4 manieren gebruikt worden: 1. _LO(A$) Stuurt een Return + Linefeed mee. _LS(A$) 2. _LO(A$); Nu geen Return + Linefeed. _LS(A$); 3. _LO(A$),I Zelfde als bij 1,controle-code komt in I. _LS(A$),I I = 0 : string is geheel verzonden. I = 3 : afgebroken met CTRL-C of C. 4. _LO(A$);,I Zelfde als bij 3,nu geen Return + Linefeed. _LS(A$);,I Op commando _LB(A$) zijn alleen punt 1 en 2 van toepassing. |