HANDLEIDING COMMUNICATIEPROGRAMMA'S PC <-> MSX 3 april 1986 De programma's die bij deze handleiding horen, kunnen bestanden oversturen van een ibm compatibele pc naar een msx computer en vice versa. Wie verstand heeft van hexadecimale notatie, poortnummers, machinecode en TTL spanningsniveaus, is bij het opbouwen en eventuele troebelschieten zonder meer in het voordeel. Het is echter bepaald niet uitgesloten dat een betrekkelijke leek de zaak toch aan de praat kan krijgen. Hardwaar Voordat de programma's aan het werk kunnen, moet eerst een verbinding tussen de twee computers worden aangelegd. Hiervoor worden van beide computers de (parallelle) printeraansluitingen gebruikt. Deze zijn van het zogenaamde centronics type. De verbinding bestaat uit drie draden, voor het gemak geven we die aan als een blauwe, een rode en een zwarte. Aan de msx kant is een plug nodig, een veertienpolig amphenol mannetje. Deze is te koop bij elektronica-hobbywinkels. Bedenk wel dat er woekerprijzen voor worden gevraagd: bij Radio Piet in Arnhem kost zo'n plug achtentwintig gulden! In de Elektuur van april 1986 stond echter een advertentie van Meek-it/Goris Elektronika Delft/Den Haag (die van de abonneeteeveedecoders) waarin dergelijke pluggen Ÿ7,95 kosten. Soldeer de draden aan de msx kant aan de plug. Aan de pc kant kunnen de draden, eventueel via een verdikkend pennetje, zo in de gaatjes worden gestoken. Wie zich te rijk voelt voor solderen, kan bij de Kwantum Hallen voor Ÿ40 een msx printerkabel aanschaffen, de grote connector ervan afknippen, uitzoeken welke draad in het lint bij welk contact hoort, en de juiste draden afgestript en afgesplitst in de juiste pc gaatjes wurmen. Hoe dan ook, de draden moeten als volgt komen te zitten: "blauw" aarde msx contact 14 linksonder pc gat 25 linksonder "rood" pc -> msx msx contact 11 middenonder pc gat 2 rechtsboven op 1 na "zwart" msx -> pc msx contact 2 rechtsboven op 1 na pc gat 11 linksboven op 2 na De plaatsaanduidingen zijn hier kijkend van de kabel naar de computer. Wanneer u maar ‚‚n kant op wilt communiceren, hoeft u maar twee draden te leggen (zwart of rood weglaten). Werking Wie dit hoofdstukje niet begrijpt, hoeft zich geen zorgen te maken. Het is alleen bedoeld voor elektrische liefhebbers. Dat via de printerpoort gegevens kunnen worden uitgevoerd, zal iedereen duidelijk zijn. De invoer loopt via de pen (nummer 11) waarover normaal de printer meldt, of hij al dan niet nog bezig is. De zachtwaar stuurt gegevens over in een soort morsecode. Hierbij is een bit nul een streep en een bit ‚‚n een punt. Een streep is tweemaal zo lang als een punt. Een nog veel langere streep wordt gebruikt om aan te geven dat de computer klaar is met zenden. Naast deze codering punt/streep moeten we weten welke elektrische spanning (hoog of laag) een punt of streep aangeeft en welke een tussenruimte. Dit is zo gedaan, dat de ontvangende computer een tussenruimte ziet, wanneer de kabel doorgeknipt is of de zendende computer uitstaat. Dit uitgangspunt leidde ertoe dat de punt/streep-spanning verschillend is voor de twee communicatierichtingen. Het zaakje heeft gewerkt tussen een Corona PPC als pc en een Mitsubishi ML-F80 als msx. Aan beide kanten kunnen zogenaamde klonen verschillen, onder andere in snelheid. Om de snelheid te ijken begint de communicatie met een ijkbyte, dat evenveel enen als nullen bevat. Een dergelijk byte is 170 decimaal of 15 decimaal. Ga maar na. Het is mogelijk dat de ijking niet lukt, wanneer de snelheden van de computers ten opzichte van elkaar heel erg afwijken van de verhouding bij het paar waarop de programma's geprobeerd zijn. Het overzenden van ieder byte begint aan de minst significante kant. Er zijn geen start- of stopbits. Als tijdens het overzenden een bit of een tussenruimte door storing onderbroken zou worden, is alles dat hierna ontvangen wordt een volslagen puinhoop. Om dit te voorkomen doet u er goed aan tijdens het overzenden geen elektrische vonken te maken en geen SL lampen aan of uit te doen. Het cassettemotorrelais in de msx kan geen kwaad. De snelheid van communicatie is behoorlijk hoog. De cassette aan de msx kant is de traagste schakel in het geheel. Zachtwaar Behalve deze gebruiksaanwijzing staan er vier programma's op deze diskette: voor elke computer een zend- en een ontvangprogramma. PCMSX GBR 13254 2- 4-86 3:39p gebruiksaanwijzing ZENDER MSX 1858 1- 4-86 8:36p zendprogramma msx ZENDER COM 256 22- 3-86 3:50p zendprogramma pc ONTVANGR MSX 2150 1- 4-86 8:39p ontvangprogramma msx ONTVANGR COM 256 1- 4-86 12:33p ontvangprogramma pc De zendprogramma's versturen per keer een heel bestand. Bij de pc komt het bestand van diskette, bij de msx in beginsel van cassette. Bij het wegschrijven door het ontvangprogramma geldt hetzelfde. De computers vangen de tekst eerst in haar geheel op in het geheugen. De msx (32 of 64 K) kan ongeveer 24 K opslaan bij ontvangen. De pc kan in beginsel bijna 64 K ontvangen. De programma's zijn niet uitgeprobeerd op een 16 K msxje. Daarop zou 8 K op te vangen moeten zijn, maar het ontvangprogramma zal pas werken na een aantal veranderingen: &H9000 moet overal &HD000 worden en in regel 1870 moet de voorlaatste code van 90 worden veranderd in D0. Nogmaals: dit is niet uitgeprobeerd! De 64 K reuzemsx kan in theorie 56 K opvangen, maar daarvoor zouden wel heel ingrijpende veranderingen nodig zijn. Wat er gebeurt op de nieuwe msx-2, valt niet te zeggen. De bestanden die heen en weer gaan, moeten de ascii-vorm hebben, met andere woorden bestaan uit programmatekst of andere tekst. Zachtwaartechnisch gezegd is de beperking dat de regelvoeding (10 decimaal), de wagenterug (13) en het pc-bestandseinde (26) vaste rollen zijn toebedeeld. Het zal niet al te moeilijk zijn de programma's zo te veranderen dat de beperking tot ascii wordt opgeheven. De .com programma's worden op de pc gestart door op de gebruikelijke manier de diskette en de naam te typen achter de dos-aansporing. De .msx programma's draaien niet op de pc, maar zijn basicprogramma's voor de msx. Het msx-ontvangprogramma zal via het toetsenbord van de msx computer moeten worden ingetypt en vervolgens op cassette moeten worden gezet. Dit ontvangprogramma kan vervolgens via de verbinding het msx-zendprogramma in ontvangst nemen en dat op cassette zetten. Bedenk dat het msx-ontvangprogramma de ontvangen bestanden in ascii vorm op cassette schrijft. Programma's moeten dan ter uitvoering worden geladen met een opdracht load"cas:naam" en niet met het gangbaarder cload"naam"! Bij het overzenden moeten we altijd beginnen met het ontvangprogramma. Het is normaal dat tijdens het hele gebeuren de diskette blijft doorsnorren. *** Van pc naar msx Stel dat deze diskette in de b: drive van de pc zit en dat we het tekstbestand b:zender.msx (het msx zendprogramma) naar de msx computer willen sturen. Het msx ontvangprogramma staat op een cassette in ascii vorm, onder de naam ontvan. We beginnen op de msx met: load"cas:ontvan" (niet in ascii vorm dan cload"ontvan") run De msx geeft aan, wanneer we het zendprogramma op de pc kunnen starten. We wenden ons dan tot het toetsenbord van de pc en zorgen voor de opdracht: A>b:zender b:zender.msx Na het overzenden geeft de msx het ontvangene op het scherm weer, waarna hij ons vraagt om een naam voor de wegschrijving van het ontvangene op cassette. Het antwoord kan zijn cas:zender Het ontvangprogramma blokkeert een groot deel van het geheugen. Het is daarom verstandig dit te ontzetten door uit en weer aan zetten van de msx, of door het bedrijven van een eventuele resetknop, zodra het ontvangprogramma niet meer nodig is. Vervolgens kan het ontvangen programma van cassette worden geladen met load"cas:zender" Tijdens het voorafgaande moet ook op de cassetterecorder het nodige toetsen-, verwissel- en kabelwerk worden verricht, maar dat zult u wel kennen. Run op de msx kan snel met (hoofdletter-) F5. *** Van msx naar pc Stel we willen het ascii-bestand naarpc op msx cassette naar de pc sturen en het daar b:vanmsx.bas noemen. Op de pc zit deze diskette in de b: drive. We beginnen nu op de pc met A>b:ontvangr b:vanmsx.bas Dan wenden we ons tot het msx toetsenbord, waarop we ingeven load"cas:zender" run Op de vraag van het zendprogramma zeggen we cas:naarpc Vervolgens verschijnen de regels hiervan stuk voor stuk op het msx scherm. Op de pc keert uiteindelijk de dos-aansporing A> terug. We doen er goed aan hierachter ter controle de opdracht te geven type b:vanmsx.bas Als er geen vonken zijn opgetreden, ziet u nu de resultaten van het wonder. *** Basicprogramma's uitwisselen Wanneer een basicprogramma verzonden moet worden, moet het eerst in ascii-vorm op cassette of diskette worden gezet. Op de msx gaat dit met save"cas:naam",a Op de pc is de opdracht van onder gwbasic save"b:naam.bas",a In beide gevallen dus anders dan wat meestal gedaan wordt. In de verscheidenheid die bestaat aan basicdialekten, liggen het gwbasic van de pc en msx basic nog vrij dicht bij elkaar. Meestal moeten er echter best wel aanpassingen gemaakt worden. Het zou veel te ver voeren al het venijn van de verschillen tussen de dialekten hier uiteen te zetten. We beperken ons tot het belangrijkste. De pc bekijkt van de namen van variabelen alle tekens, de msx alleen de eerste twee. Een van de variabelen HORIZONTAAL en HOTELDEBOTEL moet op de msx dus een heel andere naam krijgen. Op de pc komt de cursor op de positie horizontaal,vertikaal met de opdracht LOCATE VERTIKAAL,HORIZONTAAL. Op de msx is dit LOCATE HORIZONTAAL,VERTIKAAL. Verder is de linkerbovenhoek van het scherm op de pc 1,1. Op de msx is deze thuispositie 0,0. Dat het pc scherm in de breedte tot en met positie 80 loopt en het msx scherm tot en met 39, wist u natuurlijk al. De OPEN opdracht voor bestanden is op de twee computers geheel verschillend opgebouwd. Raadpleeg hierover de handboeken. Tot slot de disassemblage van de snelle zend- en ontvangroutines voor de machinetaalliefhebbers. --------------------------------------------------------------------------- Disassemblage ontvangprogramma msx <- pc F000 00 nop subroutine: ontvang een bit F001 210000 ld hl,0000 F004 DB90 in a,90 F006 D6FD sub FD F008 CA04F0 jp z,F004 F00B 23 inc hl F00C DB90 in a,90 F00E D6FF sub FF F010 CA0BF0 jp z,F00B F013 C9 ret F014 00 nop F015 00 nop F016 00 nop F017 F3 di <- ingangspunt F018 3E08 ld a,08 F01A 210000 ld hl,0000 F01D 08 ex af,af' F01E EB ex de,hl F01F CD00F0 call F000 F022 EB ex de,hl F023 19 add hl,de F024 08 ex af,af' F025 3D dec a F026 C21DF0 jp nz,F01D F029 7C ld a,h F02A 1F rra F02B 7D ld a,l F02C 1F rra F02D CB3F srl a F02F CB3F srl a F031 3246F0 ld (F046),a F034 210090 ld hl,9000 F037 0601 ld b,01 F039 AF xor a F03A EB ex de,hl F03B 08 ex af,af' F03C CD00F0 call F000 F03F 7C ld a,h F040 A7 and a F041 C25EF0 jp nz,F05E F044 7D ld a,l F045 FE23 cp 23 F047 D24DF0 jp nc,F04D F04A 08 ex af,af' F04B 80 add a,b F04C 08 ex af,af' F04D 78 ld a,b F04E 07 rlca F04F 47 ld b,a F050 D23CF0 jp nc,F03C F053 08 ex af,af' F054 EB ex de,hl F055 77 ld (hl),a F056 23 inc hl F057 7C ld a,h F058 D60F sub 0F F05A C239F0 jp nz,F039 F05D EB ex de,hl F05E EB ex de,hl F05F 22FAF0 ld (F0FA),hl F062 FB ei F063 C9 ret --------------------------------------------------------------------------- Disassemblage zendprogramma msx -> pc F000 F3 di F001 2A00F1 ld hl,(F100) F004 5E ld e,(hl) F005 23 inc hl F006 7E ld a,(hl) F007 23 inc hl F008 66 ld h,(hl) F009 6F ld l,a F00A 7E ld a,(hl) F00B 0E08 ld c,08 F00D 08 ex af,af' F00E 08 ex af,af' F00F 0610 ld b,10 F011 1F rra F012 DA17F0 jp c,F017 F015 CB20 sla b F017 08 ex af,af' F018 AF xor a F019 D391 out 91,a F01B 05 dec b F01C AF xor a F01D B8 cp b F01E C218F0 jp nz,F018 F021 3EFF ld a,FF F023 D391 out 91,a F025 0D dec c F026 AF xor a F027 B9 cp c F028 C20EF0 jp nz,F00E F02B 23 inc hl F02C 1D dec e F02D AF xor a F02E BB cp e F02F C20AF0 jp nz,F00A F032 FB ei F033 C9 ret --------------------------------------------------------------------------- Disassemblage ontvangprogramma pc <- msx 0AA5:0100 E9B500 JMP 01B8 neem het ijkteken in ontvangst 0AA5:01B8 BB0800 MOV BX,0008 0AA5:01BB BA0000 MOV DX,0000 0AA5:01BE 52 PUSH DX 0AA5:01BF FA CLI 0AA5:01C0 E840FF CALL 0103 0AA5:0103 BF0002 MOV DI,0200 0AA5:0106 BABD03 MOV DX,03BD 0AA5:0109 B90000 MOV CX,0000 0AA5:010C ED IN AX,DX 0AA5:010D 2480 AND AL,80 0AA5:010F 3C00 CMP AL,00 0AA5:0111 74F9 JZ 010C 0AA5:0113 41 INC CX 0AA5:0114 ED IN AX,DX 0AA5:0115 2480 AND AL,80 0AA5:0117 3C80 CMP AL,80 0AA5:0119 74F8 JZ 0113 0AA5:011B 890E2801 MOV [0128],CX 0AA5:011F C3 RET 0AA5:01C3 5A POP DX 0AA5:01C4 90 NOP 0AA5:01C5 01CA ADD DX,CX 0AA5:01C7 4B DEC BX 0AA5:01C8 83FB00 CMP BX,+00 0AA5:01CB 75F1 JNZ 01BE 0AA5:01CD D1EA SHR DX,1 0AA5:01CF D1EA SHR DX,1 0AA5:01D1 D1EA SHR DX,1 0AA5:01D3 88164501 MOV [0145],DL 0AA5:01D7 E956FF JMP 0130 ontvang het bestand 0AA5:0130 BF0002 MOV DI,0200 0AA5:0133 BB0100 MOV BX,0001 0AA5:0136 B90000 MOV CX,0000 0AA5:0139 57 PUSH DI 0AA5:013A 51 PUSH CX 0AA5:013B E8C8FF CALL 0106 0AA5:0106 BABD03 MOV DX,03BD 0AA5:0109 B90000 MOV CX,0000 0AA5:010C ED IN AX,DX 0AA5:010D 2480 AND AL,80 0AA5:010F 3C00 CMP AL,00 0AA5:0111 74F9 JZ 010C 0AA5:0113 41 INC CX 0AA5:0114 ED IN AX,DX 0AA5:0115 2480 AND AL,80 0AA5:0117 3C80 CMP AL,80 0AA5:0119 74F8 JZ 0113 0AA5:011B 890E2801 MOV [0128],CX 0AA5:011F C3 RET 0AA5:013E 80FD00 CMP CH,00 0AA5:0141 7517 JNZ 015A 0AA5:0143 80F918 CMP CL,18 0AA5:0146 7F04 JG 014C 0AA5:0148 59 POP CX 0AA5:0149 01D9 ADD CX,BX 0AA5:014B 51 PUSH CX 0AA5:014C D1C3 ROL BX,1 0AA5:014E 80FF00 CMP BH,00 0AA5:0151 74E8 JZ 013B 0AA5:0153 59 POP CX 0AA5:0154 5F POP DI 0AA5:0155 880D MOV [DI],CL 0AA5:0157 47 INC DI 0AA5:0158 EBD9 JMP 0133 schrijf het bestand naar diskette 0AA5:015A FB STI 0AA5:015B 59 POP CX 0AA5:015C 5F POP DI 0AA5:015D B01A MOV AL,1A 0AA5:015F 8805 MOV [DI],AL 0AA5:0161 90 NOP 0AA5:0162 89F8 MOV AX,DI 0AA5:0164 2DFF01 SUB AX,01FF 0AA5:0167 89C1 MOV CX,AX 0AA5:0169 BB0000 MOV BX,0000 0AA5:016C BA5C00 MOV DX,005C 0AA5:016F B416 MOV AH,16 0AA5:0171 CD21 INT 21 0AA5:0173 891E7C00 MOV [007C],BX 0AA5:0177 891E7E00 MOV [007E],BX 0AA5:017B 891E8000 MOV [0080],BX 0AA5:017F 891E8200 MOV [0082],BX 0AA5:0183 90 NOP 0AA5:018E 90 NOP 0AA5:018F BA0002 MOV DX,0200 0AA5:0192 90 NOP 0AA5:0193 B41A MOV AH,1A 0AA5:0195 CD21 INT 21 0AA5:0197 BA5C00 MOV DX,005C 0AA5:019A 890E6A00 MOV [006A],CX 0AA5:019E B90100 MOV CX,0001 0AA5:01A1 B428 MOV AH,28 0AA5:01A3 CD21 INT 21 0AA5:01A5 B410 MOV AH,10 0AA5:01A7 CD21 INT 21 0AA5:01A9 CD20 INT 20 --------------------------------------------------------------------------- Disassemblage zendprogramma pc -> msx 0AA5:0100 90 NOP 0AA5:010F 90 NOP laad het bestand 0AA5:0110 BA5C00 MOV DX,005C 0AA5:0113 B40F MOV AH,0F 0AA5:0115 CD21 INT 21 0AA5:0117 A16C00 MOV AX,[006C] 0AA5:011A A36A00 MOV [006A],AX 0AA5:011D BA0002 MOV DX,0200 0AA5:0120 90 NOP 0AA5:0121 B41A MOV AH,1A 0AA5:0123 CD21 INT 21 0AA5:0125 BB0000 MOV BX,0000 0AA5:0128 891E7C00 MOV [007C],BX 0AA5:012C 891E7E00 MOV [007E],BX 0AA5:0130 891E8000 MOV [0080],BX 0AA5:0134 BA5C00 MOV DX,005C 0AA5:0137 B414 MOV AH,14 0AA5:0139 CD21 INT 21 0AA5:013B 90 NOP verzenden, begin met het ijkteken 0AA5:013C FA CLI 0AA5:013D BE0002 MOV SI,0200 0AA5:0140 BABC03 MOV DX,03BC 0AA5:0143 B8F000 MOV AX,00F0 0AA5:0146 BB0800 MOV BX,0008 0AA5:0149 B91200 MOV CX,0012 0AA5:014C 50 PUSH AX 0AA5:014D 250100 AND AX,0001 0AA5:0150 3C00 CMP AL,00 0AA5:0152 7502 JNZ 0156 0AA5:0154 D1E1 SHL CX,1 0AA5:0156 B8FF00 MOV AX,00FF 0AA5:0159 EF OUT DX,AX 0AA5:015A 49 DEC CX 0AA5:015B 83F900 CMP CX,+00 0AA5:015E 75F6 JNZ 0156 0AA5:0160 B80000 MOV AX,0000 0AA5:0163 EF OUT DX,AX 0AA5:0164 58 POP AX 0AA5:0165 D1E8 SHR AX,1 0AA5:0167 4B DEC BX 0AA5:0168 83FB00 CMP BX,+00 0AA5:016B 75DC JNZ 0149 0AA5:016D 90 NOP 0AA5:0174 90 NOP einde bestand? 0AA5:0175 8A04 MOV AL,[SI] 0AA5:0177 46 INC SI 0AA5:0178 3C1A CMP AL,1A 0AA5:017A 75CA JNZ 0146 0AA5:017C 90 NOP 0AA5:017F 90 NOP zend een heel lange streep als slot 0AA5:0180 B90020 MOV CX,2000 0AA5:0183 B8FF00 MOV AX,00FF 0AA5:0186 EF OUT DX,AX 0AA5:0187 90 NOP 0AA5:0188 49 DEC CX 0AA5:0189 83F900 CMP CX,+00 0AA5:018C 75F5 JNZ 0183 0AA5:018E B80000 MOV AX,0000 0AA5:0191 EF OUT DX,AX 0AA5:0192 FB STI 0AA5:0193 CD20 INT 20 ---------------------------------------------------------------------------- copyright (c) 1986 Pim van Tend Veldheimwg 8 6871 CD RENKUM