BIJ HET AFSCHEID VAN 1984 We staan al weer vlak voor de Kerstdagen. Het TRS-80 jeer 1984 is haast al weer voorbij. Een jaar waarin onze vereniging weer is gegroeid. Zoiets zou niet mogelijk zijn zonder al de hulp van die leden, die hun steentjes bijdroegen om onze vereniging interessant te houden. De bijdragen aan Remarks, de geweldige medewerking van de bestuurders van de 10 afdelingen die elke maand maar weer moesten zorgen dat de bijeenkomsten iets te bieden hadden. de hardware kenners, die voor zoveel leden een uitkomst boden, de software-freaks. die de bibliotheek met nieuwe programme's lieten groeien. de leden die op de laatste TRS-80 dag in "De Flint" hun medewerking verleenden en nog meer stille zwoegers die ook hun vrije tijd pro-deo aan de vereniging schonken.
REET1 nERKS Eli E
TWEEITIrtrtIVELM45 * DECEMEIER 19614
,
,
,
,
Namens het bestuur wens ik alle leden maar toch wel op de eerste plaats al die medewerkers een prettige Kerstweek toe en een gezond, gelukkig en vredig 1985. met veel computerplezier. ,
Gerard Zuiderduyn. Contactman.
Tenslotte nog een one-liner van John Schelfhorst 1 C—RNDI62)-4-129: D-15360: FORA-140T040 STEP-1: CLS: FORB—DT016383STEPA: POKEB.C:P0KE15360.32: NEXT:NEXT:GOTO1
r
r..1 racmo-offset
V Weerdstraat 78,7941 XH Mime!
Telefoon 05220 - 54627'
TR5-80 GEBRUIKERWEREMIGIWG
TR8-80 0 EESRITIKERSITER EISTIGING
DAG BESTE MENSEN
ENF1ALJ K 01STT T A 11:3 R. E S POSTSITS 551 2070 AN SANT P' CO (=WIT NOORD E I... EV(10N 023 - 38 41 35 S fir G IRO 40 80 960
De TRS-80 Gebruikersvereniging is opgericht op 1 oktober 1978. Het doel van de vereniging is het bijstaan van haar leden als gebruikers van de TRS-80 of soft/hardware-matig daarmee compatibel zijnde apparaten. De ondersteuning aan de leden omvat ondermeer het verstrekken van kennis , uitwisselen van ervaringen en dergelijke. Om dit doel te bereiken wordt elke twee maaneen het verenigingsblad REMARKS uitgegeven, dat gratis aan de leden wordt toegezonden, wordt een Software-bibliotheek in stand gehouden en vinden in de diverse afdelingen maandelijkse kontakt-bijeenkomsten pleats. De artikelen en programme's in REMARKS zlin bedoeld voor niet commercieel gebruik. Voor overname is schriftelijke toestemming van het hoofdbestuur vereist. Toepassing van informatie die mondeling, via REMARKS of anderszins is verkregen geschiedt geheel veer
eigen risico. Het bestuur aanvaardt geen enkele aansprakelijkheid voor eventuele schade die uit een dergelijke toepassing zou kunnen voort-
vloeien.
REMARKS verschijnt in de meanden februari, april. juni, augustus. oktober en december. Copy voor het februari-nummer lop floppy of cassette) moet uiterlijk 1 januari ziin ontvangen op het Redactie-adres Hammarskikildplaats 322. 3069 RJ ROTTERDAM Telefoon 010 - 20 89 84 Viditel 40 00 14 6 42 2
Voor informatie over advertenties. Me s.v.p. pagina 66. Voor alle overige correspondentie. inlichtingen, aanmelding van nieuwe leden, adreswijziging. enz. wordt u verzocht zich te wenden tot het Centrals Kontaittadres. Samenstelling van het bestuur
Cor de Rover, voorzitter, Ebe Koppenoi, secretaris,
Jos de Jonge, penningmeester. Gerard Zuiderduyn. kontaktman. Henk Bartels, software-beheer. Martin Reinders. ledenadministratie. Joop van Dam. redactie REMARKS Contributie f 39.-- per kalenderjeer; wanneer een machtiging tot giro-incasso is verstrekt, f 38.... Alle betalingen ten gunste van de Vereniging moeten worden gestort
op of overgeschreven near Giro 40 BO 960 ten name van
TRS-80 Gebruikersvereniging Santpoort Noord.
De laatste Remarks van dit jaar ligt alweer voor u en ik hoop dat iedereen hierin weer iets van zijn gading zal vinden. Afdeling Rotterdam heeft een STUNT georganiseerd, zoals in de geschiedenis van de TRS-80 Gebruikersvereniging nog niet eerder is voorgekomen. Meer hierover op pagina 10. Wat de kopy betreft ging het deze keer wat beter; er is zelfs nog wat overgebleven voor het februari-nummer. Kopy blijft welkom op cassette (alleen 500 baud) of op floppy (model-I, model-III), Ook kleine programma'tjes of tips zijn nodig om de pagina's op te vuilen. V66r ik het vergeet; uw cassette of floppy ziet u binnen enkele dagen weer terug. Wie zendt eens een afbeelding in voor de voorpagina in de vorm van een foto, print (zwart-wit, beslist geen grijs) of Basic-programma (met PLUS of TRS-80 graphics) ? Afmetingen : 13.5 cm. breed, 16 cm. hoog of groter in dezelfde breedte/hoogte-verhouding. Sommige mensen zuilen gemerkt hebben dat ik hun twee Marskramertjes (met veel moeite) in vier regels heb samengeperst. Gezien de grote belangstelling kan slechts één marskramer per lid geplaatst worden. Ik wens u veel plezier met de rest van dit boekje en FIEEL.F'11.LCFIG E
Joop van Dam.
INHOUD Erratum Remarks 35 Alternatief CLS De voorpagina
Van het Bestuur
4 4 5 6 en 7
Zap voor Arranger
Nog meer Zaps Software-bibliotheek
Programmeer-weastrijd TrsTel Rectificatie VDU-kaart
Knipperlicht op Modem Breuken berekenen Basic met Buskruit 4 Oneliner Markt-info Stringy Floppy Datum-zap
8 9 10 11 14 16
17 18 25 4 72 26 27 28
Doorsnede-grootheden Mergen van Basic-regels Pascal 80 Newdos/80-routines Hardware-uitbreidingen
User Calls Speed-up
Afdeiings-nieuws
Interrupts Viditel (zap) Hypotheek
Zelfstartende data-disk Klok-correctie voor Model-III 64K Dram Beeldvuller (Level-III) Servicepagina Marskramers Blokken 3072e lid
Inhoud Remarks 1984
30 38 39 40 41 44 46 49 51 54 55 60 61 62 64 66 67 69 70 70
ERRATUM REMARKS 35 In Remarks 35 staat op bladzijde 55 het gironummer van afdeling Noord-oost foutief vermeld. Het juiste gironummer van Afdeling Noord-oost is
54 59 50 2
ALTERNATIEF CLS Dit programma maakt het scherm schoon op dezelfde manier als dat bij
ROBOT-ATTACK gebeurt.
De ASCII-waarde van alle letters wordt steeds met 1 verlaagd totdat alle tekens spaties geworden zijn. Een aanroep van de routine geeft 1 verlaging. De waarde van de USR-functie is ongelijk 0 zolang het scherm nog niet leeg is. De eerste POKE zorgt ervoor dat het programma de Level II USR-functie heeft i.p.v. de Disk-Basic USR-functie. Door die POKE weg te laten , door DEFUSR0=PEEK(V+1)-256*PEEKIV+21 te gebruiken i.p.v. de POKE's op 16526 en 16527 en door USR(0) te vervangen door USR0(0) is het gebruik van de andere USR-functies onder Disk-Basic weer mogelijk. String AS bevat het machinetaal programma. V moet steeds opnieuw worden bepaald als er anaere strings zijn gedefinieerd, of als er een
'garbage collection is geweest. Het veiligste is het dus om steeds voor de aanroep weer het adres van de USR-functie door te geven. De loop aan het eind geeft aan hoe je de functie kunt gebruiken. 10 POKE16809,201:AS=STRINGS(32,1):V=VARPTR(AS): AD=PEEK(V+1)+256*PEEK(V+2):FORX-OT031:READW: POKEAD+65536*(A D>32767 ) 4- X,W:NEXT:POKE16526,PEEK(V+11: POKE16527,PEEK(V+2):FORX-0T01023:POKE15360+X,RND(255): NEXT:PRINT .@100,"TEL ASCII AF";:FORX=2TO0ST EP-1:X-USR(0):NEXT 20 DATA175,87,33,255,63,126,183.40,19,254,32,40,3,53.22,1,43,124,254.59.32, 239,175.103 .106,195,154,10,54,32,24.238:' BIJ AANROEP VERLAAGT DEZE TWO-LINER DE ASCII-WAARDE VAN ALLE TEKENS OP HET SCHERM MET 1. USR(0) IS <> 0 ALS HET SCHERM NOG NIET
SCHOON IS,
Ruud Broers Nieuwegein 4
DE VOORPAGINA Deze Keer in afwi iking tot wat in deze tijd bij vele bladen gebruikelijk is, geen afbeelding van een Kerstboom, -tak of -bal. Op deze wijze moét Remarks wel opvallen tussen alle andere bladen die gedurende deze maand in uw brievenbus dwarrelen.
Het gezicht op de voorpagina is voor velen onbekend. Het erbij behorende karakteristieke stemgeluid zal menigeen die "De Vereniging" weleens heeft opgebeld, wel bekend in de oren klinken, maar dat laten we hier niet horen. deze erepiaats toebedacht aan ons aller bekende "roeptoeter", kontaktman, vraagbaak, wegwijzer, correspondent buitenland, klachtenburolist en Manus van Alles : Gerard Zuiderduyn, de man die in zijn riante woning in Santpoort-noord, naast allerlei andere kleine, maar zeer belangrijke bezigheden, de telefoon van de vereniging bemant, sterker nog, bijna de vereniging is en aan al deze werkzaamheden meer dan een dagtaak heeft.
We hebben
Naast deze overbeladen functie probeert hij dan ook nog in de schaarse ogenblikken dat hij een beetje tijd over heeft, zich met de hobby bezig te houden. Omdat Gerard toch ook maar een gewoon mens is, moet hij af en toe, net als iedereen, ook eens een boodschap doen of een bezoek brengen aan een dokter , kan daardoor niet 24 uur per etmaal bij de telefoon zitten en ja. dan krijgt u het antwoord-apparaat "aan de lijn". Diegenen die in de veronderstelling verkeren dat "De Vereniging" is gehuisvest in een kantoorpand met een vaste staf van elke dag opnieuw terugkomende betaalde personeelsleden, krijgen door het lezen van dit artikel waarschijnlijk een indruk van hoe het werkelijk gaat.
De enige reden dat Gerard. ondanks zijn niet al te beste gezondheid, er niet allang de brui aan heeft gegeven, is dat hij zelf enorm veel voldoening van zijn werk heeft, ook al omdat hij daardoor veel kontakten heeft en dus geen tijd krijgt om de hele dag aan zijn kwaaltjes te denken. Als u het bekende nummer van de vereniging draait , bedenk dan dat Gerard 1.1 graag te woord staat, maar er eigenlijk weinig tijd voor heeft. We hopen dat u hem nog lang zult kunnen horen zeggen " Met de TRS-80 Gebruikersvereniging Namens het bestuur, Joop van Dam. 5
MEDEDELINGEN VAN HET BESTUUR Mededeling omtrent het huishoudelijk reglement.
Op de ledenvergadering van 26 juni 1984 werd het huishoudelijk reglement ter goedkeuring aangeboden. Omdat bij de behandeling bleek, dat de goedkeuring niet zou worden gegeven werd besloten om opnieuw te bezien op welke wijze het koncept veranderd zou moeten worden om de goedkeuring van de ledenvergadering te verwerven. Er bestonden door een misverstand 2 koncepten, die onderling dusdanig verschilden dat een snelle oplossing niet mogelijk bleek. Hiertoe stelde de heer Franken voor, dat hij als bemiddelaar de beide koncepten zou kombineren om te komen tot een koncept, dat op een speciale ledenvergadering in januari 1985 ter goedkeuring zal kunnen worden aangeboden. Hij doet dit in overleg met enerzijds het bestuur en anderszijds de kommissie, die op de ledenvergadering van 1983 de opdracht had gekregen een koncept-huishoudelijk reglement samen te stellen.
Deze versie zal dusdanig moeten zijn samengesteld. dat verwacht mag wordt goedgekeurd. Hoewel meerdere personen zich bezighouden met het samenstellen van het huishoudelijk reglement, draagt het bestuur de verantwoording voor het aan te bieden koncept.
worden, dat hij
Hoewel de afspraak is gemaakt dat het huishoudelijk reglement op een ledenvergadering in januari zal worden behandeld, heeft het bestuur gemeend hiervan te moeten afzien , omdat het niet zeker is of de geplande datum haalbaar is. Omdat bovendien in februari de TRS-80 dag wordt georganiseerd, blijven er weinig mogelijkheden over om vroeg in het jaar een ledenvergadering bijeen te roepen. Daarom zal in april de officiële ledenvergadering worden gehouden. Nadere informatie hierover zal tijdig in dit blad worden gegeven. Indien U het koncept huishoudelijk reglement wilt ontvangen, kunt U dat schriftelijk te kennen geven aan het kontaktadres. Als het koncept gereed is, zal een kopie daarvan aan U worden toegezonden. Namens het hoofdbestuur Cor de Rover (Voorzitter)
PROGRAMME 1,,t. w]Er3sT'FLIJE)
ZIE F•AGINA 10
6 ii
CONTRIBUTIE 1984 In de hoop dat iedereen dit kleine stukje leest, volgen hieronder wat gegevens over de betalingen van de contributie voor 1984. Als het goed is hebben de meesten van u hun contributie voor 1984 al
overgemaak t . indien dit niet het geval is, wilt u dit dan zo spoedig mogelijk doen, daar u anders geen REMARKS meer ontvangt. Indien u alsnog een machtiging wilt afgeven, doe dit dan zo spoedig mogelijk, daar wij medio januari de contributie zullen innen. Wanneer u het lidmaatschap niet wilt verlengen, stuurt u dan ook even een bericht: wij hoeven dan geen tweede girokaart te zenden. Aileen als iedereen meewerkt, verloopt de inning van de contributie snel. Daar de TRS-80 dag dit jaar al op 23 februari wordt gehouden, zullen we eind januari de lidmaatschapskaarten van iedereen die vbór 1 januari betaald heeft, of een machtiging heeft afgegeven, versturen. U heeft hem dan year de TRS-80 dag in huis. Leden waarvan de betalingen na 1 januari binnen komen, krijgen hun lidmaatschapskaart pas na de TRS-80 dag. Tot slot nog iets over het adres op de verzendband van REMARKS. Indien het adres niet goed is, of de postcode onbreekt, wilt u dan de verbeterde adresband naar het kontaktadres sturen ? Het is in uw eigen belang, dat de gegevens juist zijn, daar anders uw naam verkeerd in de ledenlijst komt, of REMARKS vertraagd in uw bus valt. M.Reinders Ledenadministratie
ZAP VOOR "THE ARRANGER"
Het programma "THE ARRANGER" is (wellicht bekend) een prachtig catalogiseerprogramma om je diskette-administratie bij te houden. Het kan zowat
alle disks lezen, ongeacht de DOS. Het herkent automatisch de DOS, of het een system- of data-disk is, single of double density, 35/40/80 tracks, Model- i of -III en natuurlijk worden de er op staande files bijgehouden. Voorwaarde is wel dat een dubbel-density-controller aanwezig is ! En de schijf start op Model-1 zowel als op Model-III, .... althans meestal Het blijkt dat het programma veronderstelt dat je op Model-III diskdrives gebruikt die de snelste track-stepping-rate (3 ms) aan kunnen. Dit is zo als 7
je de standaard Tandy-drives voor Model-III hebt, maar wat te doen als je andere (oudere) drives hebt die een langzamere stepping-rate vereisen ? Dan blijkt The Arranger niet te werken. Dit is als volgt te verhelpen Bekijk met bv. Superzap op je Arranger-schijf track 3, sector 8. De bytes 77H en 78H bevatten de codes E6FC. Verander deze bytes in F603 en het programma gebruikt in het vervolg de langzaamste track-stepping-rate !
NOG MEER ZAPS
Voor wie in het bezit is van het onvolprezen programma "CODIR/CMD" en het programma "DIS/CMD" of "DIC/CMD" (deze laatste zijn, behalve de naam, aan elkaar gelijk en geven de directory alphabetisch gesorteerd) volgt hier een eenvoudige, maar zeer bruikbare ZAP. sector 11 byte 8A : verander 52 in 53 sector 11 byte ED : verander 52 in 53
Verandert u bovendien de naam CODIR/CMD in Q/CMD (idee van Edward Hiind) dan geeft het intikken van : "Q 1 A S I" de gevraagde gegevens keurig alphabetisch gesorteerd. Vooral handig bij 80-tracks. Bovenstaande ZAP was een idee van Stef Taartmans, die begonnen is met het zappen
van
CAT/CMI)
Zo voor de feestdagen een bescheiden stukje over de softwarebibliotheek. 1\Tiev1we scof tvveire.
Deze keer 1 nieuwe schijf met software. Nummer 28. Deze is afkomsting
Karel Honings.
CODIR/CMD
SOFTWARE-BIBLIOTHEEK
sector 3 byte FC : verander 52 in 53
Voor beide zaps geldt dus dat DIS/CMD op één der drives aanwezig moet zijn, omdat dit programma door de aangebrachte zap wordt aangeroepen. Heeft u dus DIC/CMD in plaats van I)IS/CMD, dan moet u 6fwel dit programma omdopen in DIS/CMD 6f de betreffende bytes wijzigen in 43 in plaats van 53. Nog een handige zap (vind ik) SUPERZAP/CMD sector
sector sector
3 byte DD: verander verander 4 byte 17 verander 4 byte 35
3B in 5B 21) in IA
van de afdeling Rotterdam. Deze schijf hebben ze op de laatste TRS80 dag uitgebracht. Op deze schijf staan de volgende programma's: Hiermee kunt u uw Dos beveiligen. 1. Alarm Om een andere bootkop voor Newdos te maken. 2. Boot Een lichtkrant (Scripsit voor nodig !) 3. Bscript Een programma dat kalenders met een plaatje drukt. 4. Carkalen Om een tabellarisch kasboek bij te houden. 5. Giro Een kwis programma. 6. Kwis Voegt aan Newdos het Pdrive,„„B kommando toe. 7. Pdrive Om te kijken of uw diskdrives wel op de juiste snelheid 8. Snelheid draaien. Om tekeningen in strings op te slaan. 9. Tekenen Zoals u ziet een schijf vol. Zo vol zelfs dat er op de 35 tracks geen indexprogramma meer kon staan. Dit is opgelost door deze op de 36e track te zetten. Sommige mensen, die niet meer dan 35 tracks kunnen lezen, kunnen de index dus niet lezen. De overige dus wel. Zo dat was dan de nieuwe software. Deze is alleen op schik en voor de Model 1 verkrijgbaar. Diskette 16.
Op diskette 16 staat een tekstverwerker die, tot heden, alleen op een Epson printer werkte. Daar zijn nu andere printers aan toegevoegd. Het programma werkt nu ook met een Line Printer 8 en een DMP200 van Tandy. Op de Model 3 worden nu voor al deze 3 printers het programma geleverd. Voor de model 1 dient u op te geven voor welke printer u het programma wilt hebben. St:of war e prijzesta.
Superzap had nooit gedacht ooit zichzelf eens te zappen ! Het scrollen geschiedt nu met de pijltoetsen in plaats van met + en -.
Per 1-12-1984 zijn de prijzen van de software VERLAAGD. Voor een cassette betaalt u nog maar f 20.-- en voor een diskette is de prijs nu gezakt tot f 25. —. Misschien toch een aardig idee om iemand een cassette/diskette voor Sinterklaas of Kerstmis te geven.
Joop van Dam.
Henk Bartels.
8
2D in IA
9
PROGRAMMEER-WEDSTRIJD HOOFDPRIJS : Fl. 999.99 ! De TRS-80 Gebruikersvereniging schrijft een programmeerwedstrijd uit Voor gevorderde programmeurs in de machinetaal. Waar fga.at h e t corn ? In het public domaingebied van o.a. de CP/M omgeving circuleert een source programma genaamci "KERMIT". Dit is de source van een portable protocol voor microcomputers. Voor details van het protocol verwijzen wij naar naar 2 artikelen in BYTE (JUNE JULY 1984 ). De opgave is nu om dit programma werkend over te zetten op TRS-80 formaat (TRSDOS, NEWDOS en dergelijke) voor zowel model 1 als 3. Dit betekent dus het omwerken van de source, zodat de calls, start-adres en dergelijke op het juiste adres in DOS terechtkomen. Als dit gelukt is dan kunnen ook TRS-80 computers communiceren met praktisch alle andere computers.
'Vc
C)
Wie anders dan op de hierboven vermeide wijze in het bezit is gekomen van de source kan geen aanspraak maken op uitreiking van de prijs. Direct na het bekend worden van een winnaar krijgen de andere mededingers bericht dat zij hun inspanningen kunnen staken. De op bovengenoemde wijze door de vereniging verkregen software zal voor alle leden verkrijgbaar worden gesteld via de Software-bibliotheek. Voor nadere inlichtingen kunt u bellen naar 010 - 32 98 70; echter niet voor vragen als : "Met wat voor assembler moet ik het doen ?" of "Ik heb geen dubbel density hoe moet dat nu ?" Veel succes gewenst door de TRS-80 Gebruikersvereniging.
r-vvet rd e rt
Deelname aan deze wedstrijd is wel aan enige voorwaarden gebonden * Deelnemers dienen lid te zijn van de TRS-80 Gebruikersvereniging. * Zij dienen zorg te dragen dat de beschikbaar gestelde programmatuur niet in handen van derden komt. Degene die het eerste een werkende modificatie opstuurt is de winnaar. :K Alvorens de prijs wordt uitgereikt dient de winnaar/winnares een verklaring te ondertekenen , waaruit blijkt dat deze software aoor hem/haar zeif gemodificeerd is, dat hij/zij deze modificatie ter beschikking van de TRS-80 Gebruikersvereniging stelt en tevens afstand doet van alle rechten terzake de door hem/haar ontwikkelde modificatie. * Organisatoren van deze wedstrijd zijn van deelname uitgesloten. c) e kunt 11r1 ES e co e
?
U kunt meedoen door het storten van f 10.-- op GIRO-REKENING 42 98 889 ten name van TRS-80 Gebruikersvereniging, Afdeling Rotterdam, Postbus 5440 3008 NA Rotterdam. 10
U ontvangt dan per omgaande een diskette met de source van "KERMIT", ongeveer 140 K op dubbel density NEWDOS/80 formaat. Wanneer het programma gemoctificeerd is, moet dit worden opgezonden naar TRS-80 Gebruikersvereniging, Afdeling Rotterdam, Postbus 5440 3008 NA ROTTERDAM.
TRStel met one-liner "ON-LINE" Ieder die wel eens met Viditel op de TRS-80 heeft gewerkt, kent ook de nadelen hiervan. Als eerste nadeel zal het scrollen over het beeld worden genoemd. Viditel heeft een beeldformaat van 40 karakters op een regel en 24 regels op een beeld. Dit houdt in dat er maar een gedeelte van een bladzijde op het scherm staat. Viditel en andere Prestel compatible viewdata systemen maken gebruik van kleur. Dit is op de TRS-80 terug gebracht tot zwart/wit. Met kleuren kan er onderscheid worden gemaakt tussen delen informatie op een bladzijde , wat soms lastig lezen is in zwart/wit. Dan is er nog te vermelden dat de lengte/breedte verhouding niet overeenkomt met Viditel, wat betekent dat grafische beelden uitgerekt op het scherm verschijnen. Afdeling Rotterdam besloot zelf een viewdata systeem te beginnen genaamd Vidiboard. Het beeldformaat werd op 40 * 16 gebracht om het toch nog enigszins Viditel compatible te houden. Na enige tijd volgde de afdeling West met Vidiwest. Dit viewdata systeem hanteert de zelfde normen als Vidiboard. Sinds een paar maanden is Vidihost on-line met een eigen systeem, dat gebruik maakt van het zelfde protocol. Het beeldformaat is geschikt voor een TRS-80, maar helaas heeft dit de beperking van 40 karakters per regel. 11
Met Viditel, Vidiboard en Vidiwest is het in eerste instantie niet mogelijk om software voor computers te versturen. De software bij deze systemen is alleen mogelijk in bladzijde vorm, wat betekent dat er een conversie programma benodigd is om later de diverse bladzijden tot een file te combineren. Ook moet er rekening word en gehouden met. het feit dat niet alle binaire codes worden geaccepteerd door deze systemen. Vidihost daarentegen heeft het terminal programma gewijzigd, zodat BASIC software direct in het geheugen kan worden geladen. Deze, maar ook andere redenen. was voor ons de aanzet om een viewdata systeem te ontwerpen dat kan draaien op een TRS -80, en geheel is aangepast op het TRS-80 beeldformaat. Bij TrsTel is, zoals in Viditel. bovenste regel voor de naam van de informatie leverancier en beeidnummer. De onderste regel is de status regel, waar de ingetoetste karakters en eventueel meldingen van het systeem verschijnen. De 14 regeis er tussen in zijn van de informatie leverancier. TrsTel is voorzien van een compressie systeem, wat betekent dat een beeld sneller kan worden opgebouwd dan bij andere viewdata systemen. Tijdens het verzenden van een beeld kunt u onderbreken en direct verder gaan naar een volgende keuze, zotiat u niet hoeft te wachten tot het gehele beeld verzonden is, wat de zoektijd naar informatie aanzienlijk verkort. Het is eenvoudig om machinetaal programma 's te verzenden, omdat TrsTel werkt met een 8 bits protocol. Na verbinding te hebben gemaakt, controleert. TrsTel of er een terminal programma in uw computer aanwezig is. Heeft u nog geen terminal programma, dan begint TrsTel met het verzenden hiervan. U krijgt hierna, vanuit het menu, de mogelijkheid urn het terminal programma naar disk of tape te saven. Als u bij een volgende keer inloggen het terminal programma gebruikt. slaat u het verzenden hiervan over. Het terminal programma dat u krijgt toegezonden , beschikt over diverse functie's. Onder andere : het. bewaren van bladzijden en het editeren off-line.
Bent u benieuwd geworden naar TrsTel, toets dan de volgende one-liner in, type RUN en draai ons telefoonnummer : 010-515992. We zijn vanaf I december de gehele week on-line. 1
1=28650 : DEFUSR=I : FOR X= 1 TO 1+21 : READ D : POKE X.1) NEXT : X-USR(0) : DATA 1, 232, 3. 33, 253, 111, 237 , 163. 3. 32. 251, 219, 234, 7, 48. 251, 237, 162. 32, 247, 23, 229
Voor tape gebruikers moet DEFUSR=I vervangen worden door
POKE 16526,234 : POKE 16527.111 In afwachting van uw reactie, via een prikbord in TrsTel. tekenen w Robert en Erwin Lubbers. 12
I E
A Dv E
DPS De Birk.
1 8171 CA VAASSEN Postbus nr. 139 8171 AC VAASSEN Tel 05788- 2029 Giro 37 36 4 00 NMB 65.33.12.474
r- i j ere ir's cl
p. 1 1
LI It) 1 -t.
Z soars tzi
r--
0
ena r-
j
1
la -rt4-
e Neer- ere ! b et. a 1 1. rig !
NS I e ■•■■ ire LA 1 e e r- b a a r- ! Dr-l‘feeI TT 1_11:E1 I II-I I ID e
BO Tracks dubbelzijdig "IT E
ID I
1<
Dr- I. N., e
f 850.
-
-
80 Tracks dubbelzijdig ................ vraag prijs 32.50 f Het boek Elementair Basic. 68.-f Dynamische ram type 4116 8 stuks Ram ic's 18.-f Eprom type 2716 Eproms. 95.+ Graftrax80 voor EPSON MX-80 met TRS-80 blockgraphics. 15.Lintcassettes voor EPSON in ZWART. Inktlinten. 20.Idem in de kleuren BLAUW of BRUIN nu. en 20.Idem in de kleuren ROOD of GROEN nu. Lint 20.Lintcassette voor Tandy daisywheel 11 casset 35.Idem voor Tandy printer nieuw model. 7.50 Inktlint op rol voor STAR , ANADEX nu. 10.Idem in ROOD, GROEN, BLAUW en BRUIN Kettingpapier 2000 vel blank Papier met lengte perforatie. (240x12 inch) 98.f Idem, 2-voud, zelfcopierend. + 35.Etiketten. Plaketiketten 2000 stuks. 3,5 X 9 cm. + 230.TI programmer an calculator voor omrekenen HEX,OCT,AND,OR enz. Computer Diskette opbergdozen met slot 60. + supply's voor 5 inch inhoud 35 stuks. 80. f inhoud 85 stuks. idem 42. f Reinigings-diskettes per set. f 1435. I"Ii et.m.va ! EPSON RXBO F/T printer. f 100. Trs-80 rom voor de RXBO printer f 1121. STAR Gemini 10X printer. f 1071. NEC printer type NEC 8023 Daisy-wheel printers vanaf. f 1495. VERBATIM diskettes 5 1/4 per 10 vanaf f 65. WABASH diskettes in luxe doos per 10 + 65. L_Eatcap, ! SKC diskettes in zeer luxe doos per 10 f 55. Bestelwijze, telefonisch vanaf 9.00 t/m 22.00 Tel 05788 - 2029 Verzendkosten f 7.50 Verzendkosten papier
en etiketten f 10.- per doos, 5 dozen franco Het vertrouwde adres voor alle computer benodigdheden. Data
r-
C 5 5 e
De Fir-k. 8171 CA VAASSEN scs 1 1
Nye et. m l • Tel 0578£3 -- 2029 ee r-■ 1 r-1 c 1.
El TT
13
RECTIFICATIE VOOR VDU-KAART (Zie Remarks nr. 33.) Onder punt 2/ bij de wijze van aansluiten staat, dat, als er een 74LS30 gebruikt wordt in plaats van de 74S133, de aansluitpunten G-K, N, 0, P gebruikt worden. Dit is onjuist. In plaats van de aansluiting 'P' moet 'R' gebruikt worden. Overigens heb ik er in de tweede instantie de voorkeur aan gegeven om niet poort 126 (7E11), maar 62 (3EH) te gebruiken. Dit heb ik gedaan om uit de buurt te blijven van een andere modificatie (de real time clock uit Rotterdam) die de poort 126 gebruikt. De volledige selectie van de 6845 wordt dan : A15*, A14*, A13-A9, A8* respectievelijk verbinden met G-K, N, 0, R.
Behalve deze onzorgvuldigheid, is er nog een echt probleem opgedoken. Dit probleem ontstaat als de VDU kaart gebruikt wordt met een CP/M modificatie, die de adressen A14 en A15 inverteert ten einde de ROM en video RAM, die vanaf adres 0 geselecteerd worden, te vervangen door RAM. Dit gebeurt overigens bij de meeste CP/M modificaties. Er zijn twee mogelijkheden -1/ A14 en A15 worden géinverteerd als er CP/M gedraaid wordt. Het gevolg is dat bv. de adressen 0000H, 4000H, 8000H en COOOH respectievelijk veranderen in de adressen COOOH, 8000H, 400011 en 0000H. Dit verwisselen van geheugen plaatsen gebeurt dus voor alle 4 blokken van 16k. -2/ A14 en A15 worden, als CP/M gedraaid wordt, uitsluitend geinverteerd als blok 0 of blok 3 van de 4 blokken van 16k geselecteerd worden. De adressen 0000H, 400011, 8000H en C00011 veranderen dan respectievelijk in COOOH, 4000H, 8000H en 0000H. Nu worden dus alleen het eerste en het vierde blok van 16k verwisseld, terwijl het tweede en derde blok op hun gewone plaats geselecteerd worden. Een voorbeeld van de tweede manier van omschakelen is de VIP CP/M. Als dit omschakelen zo plaatsvindt, kan dit problemen opleveren. Want, als dit omschakelen tot gevolg heeft, dat bij I/O instructies de hoogste twee adres lijnen (A15 en A14) geinverteerd bij de (I/O-mapped) VDU kaart aankomen, dan komt tekst niet meer in de juiste volgorde op het beeldscherm. Een software oplossing voor dit probleem is : inverteer bits 14 en 15 (exclusive OR het, voor de processor hoge, adres byte met COH). Dit is heel redelijk zolang bij de gebruikte modificatie, waarmee het mogelijk werd om CP/M te draaien, A15 en A14 beide ten allen tijde geinverteerd worden.
14
Als A 15 en A14 alleen maar geinverteerd worden als de eerste of de vierde 16k (van de 64k direct selecteerbaar geheugen) aangesproken worden. dan wordt de zaak gecompliceerder. Dan moet er uitsluitend geinverteerd worden als het adres byte kleiner is dan 4011 (64 ) of als het groter is dan BFH ( 191). Voor dit probleem zijn ook verschillende hardware oplossingen. Een oplossing, die altijd goed werkt, is, om vanaf Al5 en A 1 4 van de Z80 zelf (via een goede buffer), deze adressen naar de VDU kaart te brengen. Dat kost twee buffers en twee draadjes. (A14 dan aansluiten op 23c en A115 op 23a).
Een andere oplossing, die alleen werkt als Al5 en A14 altijd géinverteerd worden, is : soldeer van ic-13 van de VDU kaart pen 11 en pen 5 niet
vast, doch buig deze omhoog. Maak dan twee verbindingen : van pen 11 naar A7* niet-A7, pen 18 van ic-2) en van pen 5 naar A6* (pen 3 van
ic-2). Als de VDU kaart ook gebruikt wordt zonder dat de A15 en A14 geinverteerd zijn ten behoeve van CP/M, dus "normaaal", dan kan een dubbele tweepolige schakelaar tussengevoegd worden. De moeder contacten
van de schakelaar komen dan respectievelijk op de omhoog gebogen pennen van ic - 13, terwijl voor de stand "normaal" de contacten verbonden worden met de gaatjes waar de omhoog gebogen pennen 5 en 11 (nog steeds van ic - 13) ingesoldeerd hadden moeten worden, terwijl de contacten voor de stand "CP/M" verbonden worden met pennen 3 en 18 van ic - 2. Let wel : gat 5, pen 5 en pen 3 horen bij elkaar, en gat 11, pen 11 en pen 18 ook. De laatste oplossing voor dit probleem is bedoeld voor de modificatie, waarbij Al5 en A14 selectief géinverteerd worden. (Diegenen, die de VDU kaart willen gebruiken bij de VIP CP/M modificatie moeten dus de volgende hardware modificatie aanbrengen, als ze het BIOS-CONOUT programma gebruiken, welke ik geschreven heb.)
Soldeer van ic 13 de pennen 5 en 11 niet vast, doch buig deze naar
buiten. Neem dan verder een 74LS86. Dat is een exclusive-OR poort. a/ Buig de pennen 10 en 12 naar onder het ic en soldeer ze aan elkaar. b/ Doe dit ook met de pennen 5 en 9. c/ Eveneens voor de pennen 3, 4 en 13. d/ Soldeer nu de aldus gevormde LS86 boven op ic 13 (een multiplexer, type : 74LS157) van de VDU kaart. Pen 1 van de XOR aan pen 1 van de multiplexer. Pen 6 van de XOR aan pen 5 van de multiplexer. Pen 7 van de XOR aan pen 8 van de multiplexer. Pen 11 van de XOR aan pen 11 van de multiplexer. 15
e/ Verbindt pen 10 van de XOR met A7* (=pen 18 van ic-2). f/ Verbindt pen 9 van de XOR met A6* (=pen 3 van ic-2). g/ Tot slot nog een draadje van pen 8 naar pen 2 van de XOR. Als de VDU kaart omschakelbaar moet worden om zowel gewoon als wel onder CP/M gebruikt te worden, neem dan een enkelpolige omschakelaar. Het moeder contact komt op pen 2 van de XOR, een van de beide andere contacten op pen 8 van de XOR en het derde contact wordt met de massa (V-, 0V) verbonden. Gebruikers, die de SELECTOR gainstalleerd hebben, zodat ze o.a. CP/M kunnen draaien, ook nog even opgelet. Jullie moeten bij de aansluiting van de VDU kaart twee draden rechtstreeks van de SELECTOR naar de VDU kaart leggen. ER-14 van de SELECTOR komt op 23a van de VDU kaart ipv A 1 4 van de expansion bus. En ER-15 komt op 23c ipv A15 van de expansion bus. Dit heeft te maken met het feit, dat zodra de SELECTOR geinstalleerd is A14 en A15 van de computer uitsluitend gebruikt worden als bankselect signalen. Tot slot : de VOEDING van de VDU kaart blijkt betrokken te kunnen worden uit de normale expansion interface. Een test exemplaar gaf geen problemen. Verbindt daartoe ader 40 van de bandkabel met lc van de VDU kaart. Het benodigde CONOUT programma is nu bij mij verkrijgbaar. Dit programma past LNW-CPM aan, zodat er van de VDU kaart gebruik gemaakt kan worden. Met een beetje knutselen is het mogelijk om ASTER-CP/M te draaien op een TRS-80 model I, VIDEO-GENIE of ROWER. Daarvoor is een manier van memory management nodig, zoals ASTER dat toepaste en dat de VDU-kaart memory-mapped aangesloten wordt. De SELECTOR past een geschikte manier van memory-management toe. Alleen de gebruikte poort en het bit patroon zijn verschillend, wat te ondervangen is door ASTER-CP/M op enkele plaatsen te wijzigen. Rence Rozendaal. tel. 020-712996 van 19.00 tot 23.00
KNIPPERLICHT OP MODEM (Aileen bruikbaar voor bezitters van Viditel-modem, waarvan netspanning is ingeschakeld) 10 OUT 234,2 : GOSUB 20 : OUT 234,4 : GOSUB 20 : RUN 20 FOR T = 0 TO 100 : NEXT : RETURN J.v.Dam. 16
BREUKEN Het onaerstaande programma is één van de inzendingen van de heer H.Reijnders te Amsterdam. Het berekent van een ingevoerde decimale breuk de teller en noemer, of andersom. Doordat in double precision wordt gewerkt kost het soms wel wat rekentijd 10 'BREUKDEL/BAS 20 CLS :PRINT :1NPUT"DELEN OF BREUKONTW1KKELEN";Y$ 30 IF LEFTS(Y$,1)="D" THEN 40 ELSE IF LEFTS(1$,1)="13" THEN 110 ELSE END 40 'DELEN/BAS ONTWIKKELT BREUK DECIMAAL. INPUTS: (DOUBLE PREC.) HELE GETALLEN > 0 50 A#=1 :B#=-1 60 PRINT:INPUT"TELLER";10:IFBij=0THEN10ELSE:INPUT"NOEMER";Aij:IFB P>A #THEN60 70 G%=0 :IF Bij<0 OR INT(B W>B# OR INT(Aij)<>Aij THEN 60 80 G%=G%+1:C%=0:FORF%=1T010:13#=Bij-F%*Aij:IFWOOTHENC%=C%+1:NEXT 90 I F G%=2 THEN PRINT"."; 100 PRINTUSING"#";C%;:B#=(D#+A#)*10:IFINKE Y$="X"THEN60ELSE80 BREUKGENERATOR DOUBLE PRECISION HR 83B 110 'BREUKDBL/BAS 120 'INPUT: EEN GETAL: 0 < GETAL <= 1 130 'OUTPUT: DE BESTE TELLER EN (NOEMER < 32768) 140 'ADVIES: INPUT >= 0.1 150 'VERANDER DE INPUT EVT. DOOR G*10IN OF/EN 1/G TE NEMEN 160 DEFINT H-Q,T :DEFDBLG :G=9 :CLS 170 PRINT@770,"GETAL <= 1 DAT BREUK MOET WORDEN (0=E1ND)"; 180 INPUT G :CLS :IF G<=0 THEN 10 ELSE IF G>1 THEN 170 190 PRINT0218,"BEEINDIGEN: TOETS X"; 200 PRINT@287,"GETAL:"G; 210 FF=9 :N=0 220 N=N+1 230 PRINT094,"NOEMER:";N;:PRINT@155,"ABS. FOUT:";FF;" "; 240 T=N*G+.5:Tij=T :F=ABS(T#/N-G) IF F
BASIC MET BUSKRUIT INFORMATIEOVERDRACHT TUSSEN BASIC EN ASSEMBLER
In de vorige aflevering van dit feuilleton hebben we een aantal methoden behandeld om een assemblerroutine op te nemen in een BASIC programma. De informatieoverdracht werd verkregen op een tamelijk drastische manier, n.l. door verandering van bytes van de assemblerroutine zelf. Voor de behandelde transportroutine was dit overigens helemaal geen slechte oplossing, te meer omdat er geen sprake was van gegevensoverdracht van de assemblerroutine naar het BASIC programma. Normaal gesproken wordt een assemblerroutine aangeroepen om even snel iets nuttigs te doen. BASIC draagt gegevens aan, de assemblerroutine doet daar iets mee, en het resultaat wordt weer overgedragen aan het BASIC programma. Dit kan een of enkele getallen betreffen, maar het kan ook gaan om een compleet gegevensbestand dat gesorteerd moet worden. Het is dan ook niet te vermijden dat we ons verdiepen in de wijzen waarop zo'n overdracht bewerkstelligd kan worden. Als inleiding daarop eerst een klein stukje algemene theorie. Getallenverwerking door de TRS
Getallen en variabelen die BASIC in het programma tegenkomt worden om te beginnen genoteerd op vaste geheugenadressen in de Communications Area. In navolging van James Farvour (Microsoft BASIC Decoded & Other Mysteries) zullen we deze adressen aanduiden als Work Area's ( WRA's). Dit is overigens niet de enige naam die in de literatuur voor deze adressen wordt gebruikt. Er zijn in totaal drie WRA's in gebruik: WRA1 WRA2 WRA3
adres 411D - 412411 4127 - 412E 414A - 4151
vlag 40AF 40B0
lengte De vlag van WRA1 en WRA2 is weer de eerder gebruikte type code 2/3/4/8 corresponderend met het soort gegeven in de WRA's. Voor ons doel is WRA1 verreweg het belangrijkste. Getallen worden er als volgt in genoteerd: Integer Single Precision Double Precision
lsb 4121(=16673) 4121(-16673) 411M-16669)
msb (40AF- 16559) 4122(=16674) 02 04 4124(-16676) 08 4124(=16676)
Als de machine met twee integers werkt komt de ene in registerpaar III,
en de andere in DE. Van twee SP getallen staat een in de registers BC/DE en een in WRAl: 18
Isb
4121 E
4122 D
msb 4124
4123 C
B
Twee DP getallen staan in WRA1 en WRA2. Als illustratie het volgende: Print Peek(16673)
Resultaat: 33
Het argument van de Peek-opdracht is 16673 = 412111: lsb = 33, msb = 65: Dit argument wordt, evenals iedere andere variabele, in WRA1 gezet. Print Peek (16673) toont dus de lsb van de laatste byte die in WRA1 is beland, d.w.z. de lsb van 16673. Poke 16673,10: Print Peek(16673) Het resultaat is weer 33, de Peek-opdracht vernietigt het resultaat van de Poke P1 — 3.14159: Print Peek(16676)
Resultaat: 130
Om te beginnen wordt PI neergezet op 4121 - 4124. Het argument van de Peek-opdracht komt vervolgens aan bod. Dit argument is een integer en wordt dus in 4121/2 gezet, de adressen 4123/4 blijven daarbij onveranderd. Op 4124 staat dus nog de exponent-byte behorende bij 3.14159 (een getal tussen 2 en 4 geeft een exponent 2, genoteerd als 128 + 2). Als we nu proberen PI — 3.14159:Print Peek(16676); Peek(16559) dan is het resultaat 130 2: de exponentbyte is onveranderd, maar de type-vlag 40AF is alweer op integer gezet, de adressen 4123/4 spelen dus geen rol meer. Dit illusteert de principes, maar toont ook duidelijk aan dat we hier in BASIC niets mee kunnen: het kijken naar bytes die veranderen doordat er naar gekeken wordt zal zelden erg nuttig zijn. Overdracht van een enkele variabele De aanroep van assemblerroutines bevat een variabele als argument: J = Usrivariabele)
Evenals in het voorgaande het argument van Peek-opdrachten komt ook het argument van de Usr-opdracht in WRA1 te staan. Als we dan ook in de assemblerroutine de WRA1 adressen uitlezen kunnen we de variabele 19
gebruiken. Het is duidelijk dat, als we de WRA1 adressen niet uitlezen, het argument geen kwaad doet. Wat de TRS betreft mag het argument een integer, een SP of een DP getal zijn, als het maar geen string is.
6C 26 00 C3 9A OA
In de literatuur staat altijd dat assembler routines aangeroepen moeten worden met:
In de opdracht "ip 0A9AH" zijn twee dingen gecombineerd:
J = Usr(integer)
Dit is niet juist, al komt het ontegenzeggelijk veel vaker voor dat een integer moet worden overgedragen dan een SP of DP getal. Dat men op overdracht van een integer de nadruk legt hangt weer samen met de manier waarop het argument wordt opgevangen in het assemblerprogramma. De geijkte opvang is Call
0A7FH
De ROM-routine op adres A71; is in feite een algemene routine die het getal in WRA1 omzet in een integer. Lukt dat niet, b.v. omdat het getal te groot is voor een integer, dan volgt een foutmelding. Lukt het wel dan wordt de integer in registerpaar HL gezet. Gebruik van Call 0A7FH sluit dus overdracht van iets anders dan een integer uit, maar laat wel toe dat we slordig zijn: als het getal niet als integer is gedeclareerd wordt het er wel van gemaakt. Voor de terugweg geldt precies hetzelfde. Overdracht van de assembler routine naar BASIC verloopt ook weer via WRAL Ook nu maakt het voor de TRS niet uit wat in WRA1 staat, het mag weer integer/SP/DP zijn. Er is weer een standaard opdracht die alleen goed werkt voor een integer: Call 0A9AH Deze ROM-routine verwacht een integer in registerpaar HL, die dan in 4121/2 wordt gezet. De typevlag 40AF wordt op 2 gezet en zo komt het dan tenslotte dat de aanroep
een integer I% overdraagt naar de assemblerroutine, die een integer J% teruglevert. Dit valt te illustreren aan de hand van een tamelijk onbenullig voorbeeld, maar het lukt niet altijd om voorbeelden zowel eenvoudig als interessant te houden. We gaan een integer toevoeren aan een assembler routine die daarna de msb van de integer teruglevert (het equivalent van Print Peek(Varptr(I%) +1) dus).
20
Call
Call Ret
L,f1 H,0 0A9AH
0A9AH
msb ;lsb ;msb = 0 ;zet HL in WRA1 en naar BASIC
:zet HL in WRA1 ;terug naar BASIC
Een subroutine (aangeroepen met een CALL) moet altijd in een Ret eindigen. De Ret leidt dus tot een terugkeer naar het aanroepprogramma, dat daarna met een Ret terugkeert naar BASIC. Met "Jp 0A9AH" slaan we het terugkeren naar de aanroeper over en gebruiken we de Ret van de subroutine voor terugkeer naar BASIC. De assembler routine is relocatable: de JP en Call opdrachten verwijzen naar ROM adressen en dat mocht. De routine komt dus in aanmerking voor toepassing van de Magic String methode. Het bijbehorende BASIC programma ziet er aldus uit: 2 Defint 20 Data 205, 127, 10, 108, 38, 0, 195, 154, 10 22 For I = 0 To 8: Read II: MSS = NIS +ChrS(I1): Next 24 Poke 16526, Peek(Varptr(PRS) +1) 26 Poke 16527, Peek(Varptr(PRS) +2) 100 Input"Integer"; 102 Print"msb = "Usr(I) 120 Goto 100 In regel 102 zorgt Print Usr(I) er voor dat I naar WRA1 wordt geschreven. Na terugkeer uit de routine wordt de inmiddels veranderde inhoud van WRA1 op het scherm getoond. Als we de msb nog voor andere doeleinden hadden willen gebruiken hadden we 102 kunnen vervangen door 102 I — Usr(1): Print"msb — "I
J% = Usr(I%)
CD 7F OA
Ld Ld Jp End
0A7FH
;zet integerargument in HL
Dom als dit programma is leent het zich in elk geval voor wat variaties: Oefening 4.1 Vervang de opdracht Call 0A7AH door Ld HL,(4121H) Oefening 4.2 Vervang Jp 0A9AH door Ld (4121KHL en Ret. Is het nodig om iets aan de type-vlag 40AF te doen? Oefening 4.3 Draag een SP getal over aan een assembler routine die de exponentbyte in HL zet en zo teruglevert aan BASIC. Hoe staat het nu met de vlag als Jp 0A9AH wordt vervangen door Ld (4121H),HL? 21
Het zal overigens duidelijk zijn dat, in plaats van overdracht via het argument van de Usr-aanroep, overdracht altijd kan plaats vinden door de routine in Magic Integer formaat te brengen en het gegeven op te nemen in een van de elementen van de reeks (programma laten beginnen met Nop en Ld HL,0). Overdracht van meer dan één gegeven
Als we meer dan een variabele willen overdragen in de Usr-aanroep zullen we onze taktiek wat moeten aanpassen. De eenvoudigste stap is om de variabelen die we willen overdragen in een reeks te verzamelen, zodat we de Varptr van die reeks kunnen overdragen. En als dat nog niet genoeg is kunnen we langs deze weg verder gaan: we maken een reeks waarin de Varptr's van een aantal reeksen zijn opgenomen. Zouden we nog verder willen gaan dan is de kans groot dat we het zicht verliezen op waar we mee bezig zijn. Er is uiteraard geen bezwaar tegen een reeks met een combinatie van adressen en getallen. We weten intussen ook dat we in een integerreeks zonder bezwaar een SP getal kunnen opnemen, dat beslaat dan twee integers, maar het kan. Er is dus geen theoretische grens aan wat we kunnen overdragen, de grens is uitsluitend een practische: zolang we het kunnen overzien is het goed. Wel is hiermee duidelijk gemaakt dat het overdragen van een integer in de Usr-aanroep veel vaker voorkomt dan het overdragen van iets anders: meestal is datgene wat overgedragen moet worden niet een variabele maar een adres. Iets anders is dat bij het overdragen van adressen een meer dan gewone voorzichtigheid geboden is. Pointeradressen van reeksen veranderen bij introductie van nieuwe enkelvoudige variabelen, en het zal duidelijk zijn dat ieder vergrijp in dezen uitzonderlijk zwaar wordt gestraft. Dat deze voorzichtigheid ook geboden is bij gebruik van stringadressen is al eerder ter sprake gekomen. De eis van de overzichtelijkheid dwingt tot terughoudendheid bij de keuze van illustratiemateriaal, met als gevolg dat de twee voorbeelden die nu volgen uitstekend zonder gebruik van pointerreeksen opgelost hadden kunnen worden. Het eerste voorbeeld betreft een routine die de waarde van een SP getal A overbrengt naar B (de operatie B = A). In de tweede routine zetten we de vier bytes van een SP getal in een string (disk-BASIC functie AS=MKSS(SP-getal) dus). Overdracht van de waarde van SP getal A naar B
De routine gaat er van uit dat via WRA1 het adres wordt overgedragen van een integerreeks bestaande uit de Varptr's van resp. A en B. Het adres van byte w0 van SP getal A gaat naar DE, dat van byte w0 van SP getal B gaat naar HL. Vervolgens wordt een ROM-routine aangeroepen die 22
bytes van adres DE e.v. transporteert naar adres HL e.v. Het aantal te transporteren bytes moet in register B staan: 2A 21 41 5E 23 56 23 7E 23 66 6F 06 04 C3 1)7 09
1,d f,d
Inc Ld Inc Ld Inc Ld Ld Ld Jp End
HL,(4121H) ;Varptr(AR%(0)) uit WRA1 naar HL ;lsb bronadres E,(HL) IlL
D,(H HL AU-IL) HL HAIL) L,A B,4 9D7H
:msb bronadres ;lsb bestemmingsadres ;msb bestemmingsadres ;bestemmingsadres in HL ;transportrou tine
De transportroutine op 9D7 ziet er als volgt uit: Loop
Ld Ld Inc Inc Dec Jr Ret
&(DE) (HL),A DE HL B NZ, Loop
De procedure die hierboven is toegepast is representatief: we weten hoe de overgedragen reeks is opgebouwd, zodat we de informatie byte voor byte kunnen ophalen en gebruiken. BASIC programma
'Overdracht van SP-getal A naar B 0 2 DefintI: A = 3.14159: B = 0 20 Data 42, 33, 65, 94, 35, 86, 35, 126, 35, 102, 111, 6, 4, 195, 9 22 For I = 0 To 15: Read II: PRS PRS +ChrS(II): Next 24 Poke 16526, Peek(Varptr(PRS) +1) 26 Poke 16527, Peek(Varptr(PRS) 42) 100 AR%(0) = Varptr(A): AR%(1) = Varptr(B) 120 I = Usr(Varptr(AR%(0))) 140 Cls: Print B
215,
Voor regel 100 moeten we de variabele B invoeren om in regel 100 met de Varptr ervan te kunnen werken. In het programma wordt dit invoeren direct in regel 2 gedaan. In regel 100 worden de pointers in reekselementen opgenomen. Die 23
adressen blijven goed zolang we geen nieuwe variabelen gebruiken, het is dus essentieel dat we dat met name niet doen in regel 120. De lisr-routine zet de bytes van A in de pointer van B, zodat in 140 het getal B kan worden getoond. Oefening 4.4 In het Magic Integer formaat kunnen de Varptr's van A en B direct in een reekselement worden opgenomen. Hoe ziet bovenstaand programma er uit als de assemblerroutine wordt omgeschreven naar het Magic Integer formaat? Het tweede voorbeeld lijkt als twee druppels water op het vorige: een reeks wordt overgedragen die de Varptr van een SP getal en die van een string bevat. Het verschil zit hem in het feit dat een stringpointer niet het adres van de string geeft, maar het adres van de lengtebyte van de string. De gewenste informatie zit dus dieper begraven: uit het adres van de bytes volgende op de lengtebyte moet het adres van de string worden opgehaald, dit laatste adres is pas wat we willen hebben. De assemblerroutine ontrafelt eerst de overgedragen reeks en kan dan pas de bytes van het SP-getal transporteren naar de string. 2A 21 41 5E 23 56 23 7E 23 66 6F 7E FE 04
Ld Ld
23 7E 23 66 6F 06 04 C3 1)7 09
Inc
CO
HL,(4121H) E,(HL)
Narptr(AR%(0)), uit BASIC ;adres van de lsb ; van het SP getal ; naar DE
A,(HL)
;Isb Varptr(AS)
H,(HL) L,A A,(HL) 4
;msb Varptr(AS) ;Varptr(A$) in HL ;lengtebyte van de string is die gelijk aan 4?
Inc
HL DAHL) HL
Inc
HL
Inc Ld
Ld
Ld Ld Ld
Cp
Ret Ld
Inc
Ld Ld Ld Jp
End
NZ HL
In regel 40 vullen we de reeks AR% met de Varptr's van A en AS (ingevoerd in regel 2 als een lege string van 4 bytes lang). A en AS zijn
allebei enkelvoudige variabelen, we hoeven ons er dus geen zorgen over te maken dat de pointers van plaats veranderen en we kunnen volstaan met het inlezen van de pointers buiten de cyclus om die start op regel 100.
In 100 voeren we het SP-getal in en schrijven het in de voorgebakken string. Om te zien dat het echt goed is gegaan lezen we in 200 het adres van AS uit om in 202 de bytes op het scherm te kunnen tonen (AR%(1) = Varptr(AS), dus op AR%(1) +1 en AR%(1) +2 staat het adres van AS). Oefening 4.5 Zet ook deze procedure om in Magic Integer formaat. Oefening 4.6 Voer een string in. Maak dan met behulp van StringS(n,0) een tweede string met dezelfde lengte als de eerste. Transporteer de bytes van de eerste string naar de tweede en controleer het resultaat door de tweede uit te lezen.
;Isb adres AS
L,A B,4 9D7I1
;adres AS in HL ;4 bytes te transporteren ;ROM transportroutine
B.0 Loopstra
Diemen
;rash adres AS
ONE -LI HER
Het bijbehorende BASIC - programma wordt al haast routine: 'SP-bytes naar een string schrijven 0 Clear 60: DefintI: AS - StringS(4,0) 2 20 Data 42, 33, 65, 94, 35, 86, 35, 126, 35, 102, 111, 126, 254, 192, 35, 126, 35, 102, 111, 6, 4, 195, 215, 9 22 For I = 0 To 24: Read II: PR$ - PR$ +Chr$(I1): Next 24
Om een string te kunnen opbouwen zoals dat gebeurt in regel 22 is een vrije stringruimte nodig die 2x zo groot is als het aantal bytes dat in de string komt. Daar de TRS een standaard ruimte van 50 bytes reserveert komen we in regel 22 te kort: we hebben al 4 bytes gebruikt in regel 2. Met een Clear van 60 bytes is het probleem opgelost.
;nee: fout. naar BASIC
A,(HL)
HL H, (HL)
24 Poke 16526, Peek(Varptr(PRS) +1) 26 Poke 16527, Peek(Varptr(PRS) +2) 40 AR%(0) - Varptr(A): ARV].) = Varptr(AS) 100 Print: Input"SP-getar:A: I = Usr(Varptr(AR%(0))) 200 IJ = Peek(AR%(1) +1): Poke Varptr(IJ) +1, Peek(AR%(1) +2) 202 For I = 0 To 3: Print Peek(IJ +I):: Next: Goto100
Onderstaand een one-liner van John Schelfhorst.
4,
10 PRINT(0.128,CHRS(31):DS=CHR$(176):PRINT@448,STRINGS(64,176): CS=CHRS(187)+CHR$(183):F0RI=320T0378:PRINT@LCHRS(129); CHR$116211)$;CHRS(145)CHRS(136)CHRS(252)CHRS(170);DS: CHR$(189)CHRS(190)CHRS(149);:PRINT@I+128,DS;CS: CHR$(191)CS:NEXT:GOT010
25
MARKT-INFO SELECTOR memory management system.
Met deze nieuwe uitbreiding voor de TRS-80 model I, amerikaanse en japanse versie, voor de VIDEO-GENIE en voor de KOMTEK worden de mogelijkheden van deze computers sterk uitgebreid. Het gebruik van dit memory management system in de TRS-80 model III wordt nader onderzocht en naar het zich laat aanzien is de SELECTOR ook in de model III goed te gebruiken. In het kort komt het er op neer, dat de SELECTOR het onder andere mogelijk maakt om het geheugen zo in te delen, dat het CP/M disk operating system gebruikt kan worden. Voor de model I, VIDEO-GENIE en KOMTEK is bv. LNW-CP/M te gebruiken. Indien er op de juiste wijze een 80*24 kolomskaart (bv. de VDU-kaart van ELECTUUR) aangesloten wordt, kan bovendien met ASTER-CP/M gewerkt worden. (Slechts enkele patches noodzakelijk).
Verder is het mogelijk om met de SELECTOR en extra RAM een RAMDISK te maken. De RAMDISK kan daarbij tot 512k groot zijn. Dit extra RAM wordt verkregen, door de aanwezige 16k RAM ic's te vervangen door types met meer capaciteit, zoals 64k of 256k RAM. Het is mogelijk om de systeem overlays van NEWDOS in het geheugen in te laden, zodat disk access en disk slijtage verminderd worden en de performance van de computer in zijn geheel verbeterd wordt.
De SELECTOR wordt geleverd met een duidelijk installatie voorschrift en met een beschrijving van alle mogelijkheden. De prijs van de SELECTOR met een Z80A is f 150.— . (Dit is exclusief de benodigde 64k RAM!. Programmatuur om een RAMDISK, printer spooler en speedup te kunnen gebruiken wordt geleverd voor f Deze programmatuur werkt uitsluitend onder NEWDOS. De SELECTOR wordt geleverd door SELECTOR mms, postbus 53049, 1007 RA Amsterdam.
WAFERS VOOR STRINGY-FLOPPY Regelmatig worden via de handel en de rubriek "Marskramer" Stringy
Floppy's te koop aangeboden. Wat er meestal niet wordt bijverteld is dat de hiervoor benodigde "WAFERS" niet in de handel verkrijgbaar zijn, althans niet in Nederland. Eén van onze adverteerders is onder bepaalde voorwaarden bereid te
trachten deze wafers vanuit Amerika te importeren. De voorwaarden die hieraan zijn verbonden is dat de leverancier tevoren wil weten of hiervoor belangstelling bestaat en hoe groot de afname zou kunnen zijn.
Er kan ook een printer spooler gebruikt worden, welke geen beslag legt op het normaal beschikbare geheugen.
De enige bemiddeling van de TRS-80 Gebruikersvereniging in deze is dit artikel, waarin deze mogelijkheid aan de leden kenbaar wordt gemaakt.
De SELECTOR ondersteunt de mogelijheid van een speedup tot 5,3 Mhz, doordat hij geleverd kan worden met een Z8OB processor samen met de mogelijkheid om , nadat de ROM naar RAM gecopieerd is vanuit RAM te werken, zodat er geen snellere ROM's nodig zijn.
Geinteresseerden worden verzocht rechtstreeks kontakt op te nemen met de importeur, die de gegevens zal verzamelen en bij voldoende deelname de nodige informatieve stappen zal ondernemen. Wanneer leverings-voorwaarden bekend zijn zal dit weer in Remarks bekend worden gemaakt, waarna de leden hun definitieve bestelling kunnen doen. In dit geval schriftelijk,
Een prettige eigenschap van de SELECTOR is, dat er 3/4k RAM beschikbaar komt tussen het toetsenbord en het video geheugen, zodat driver programma's voor een printer spooler. RAMDISK en voor een speedup daar geladen kunnen worden , en er geen conflicten optreden met programma's, die aan een vaste plaats hoog in het geheugen gebonden zijn. Om de SELECTOR te kunnen gebruiken, moet er van het aanwezige RAM in de computer tenminste 16k vervangen worden door 64k RAM. De SELECTOR komt op de plaats van de Z80 CPU. De installatie van de SELECTOR bestaat uit het verwijderen van de Z80 en het plaatsen van de SELECTOR in de vrijgekomen ic voet samen met het vastsolderen van twee draden. 26
omdat de importeur er dan graag verzekerd van wil zijn dat de bestelde wafers ook inderdaad zullen worden afgenomen.
Om te voorkomen dat er tussen het informeren naar de prijs en de daadwerkelijke bestelling teveel tijd verloopt, waardoor de prijs weer gewijzigd (= hoger geworden) zou kunnen zijn , wordt u verzocht zo snel mogelijk te reageren. Hopelijk kunnen we dan in het februari-nummer de nodige gegeyens opnemen, alsmede een oproep om de definitieve bestelling te plaatsen. Het adres van de importeur is Firma NECOMA,
Hoogeveen Telefoon 05280-69729
27
DATUM-ZAP REMARKS 34 VERBETERD Hieronder volgt een oplossing voor het DATE-probleem, zoals vermeld in Remarks 35 naar aanleiding van de ZAP in Remarks 34, blz. 25. Deze oplossing geldt alleen voor Model-1 !! De patch om de datum in het formaat DD/MM/JJ in te voeren is niet zoals het zou moeten. Zoals je misschien weet wordt de datum bij invoer gecontroleerd (maand <13, dag <32 en jaar >0). Dit wordt gedaan door de ingevoerde waarden te vergelijken met een stel 'controle'- bytes. De in Remarks 34 beschreven patch (SYSO/SYS, sector 12) zorgt er alleen voor dat er geen controle meer is. Het is beter om de 'controle'-bytes voor dag en maand te verwisselen , zodat de controle gehandhaafd blijft. Nu het probleem om de DAG i.p.v. de MAAND te verhogen, als de tijd op 00:00:00 komt. In het geheugen staan de TIMES-waarden in de volgorde: seconden, minuten, uren, jaren, dagen en maanden. Als de tijd wordt bijgewerkt, wordt deze volgorde aangehouden. Als de tijd op 00:00:00 komt wordt alleen de dag opgehoogd. Het programma springt
over de jaren heen naar de dagen. Aangezien we de dagen en maanden verwisseld hebben, behoort het programma nu iets verder te springen. Dit kost slechts 1 byte, doch er is geen ruimte meer over in de routine. ik heb het opgelost door naar een stukje vrij geheugen te springen en daar de routine verder (en ditmaal goed) af te werken. Er wordt gesprongen naar 4CFC. Alvorens de patch aan te brengen, is het aan te bevelen om te kijken of de bytes aldaar niet in gebruik zijn t.b.v. een andere patch. Is dat het geval, dan dient een ander deel van het vrije geheugen opgezocht te worden. De volledige patch is nu: SYSO/SYS, sector 01, byte D5 : 23 34 C9 wordt C3 FC 4C (I.p.v. maand verhogen wordt nu gesprongen naar 4CFC). SYSO/SYS, sector 10, byte OD : 00 00 00 00 wordt 23 23 34 C9 (Hier wordt de dag verhoogd en teruggesprongen). SYSO/SYS, sector 13, byte 83 : 45 3F 20 wordt 55 4D 3F (Tekst "DATE? " wordt "DATUM?"). SYSO/SYS, sector 13, byte 88 : 4D 4D wordt 44 44 byte 8B : 44 44 wordt 4D 4D (Tekst "MM/DD" wordt "DD/MM").
cQ4•AT DOEN WE Z.11. MEL •
hobby computer club
VE141.0 Compul-ershow van 11.00-- 19.00 u. zaterdag 19 januari .9 afdeling
collegium marianum., casinoweg 1, venlo
OPEN DAG
SYSO/SYS, sector 13, byte 95 : 4D 45 wordt 4A 44 (Tekst "TIME" wordt "TIJD"). SYSO/SYS, sector 13, byte BA : OC wordt 1F byte BC : IF wordt OC ("Controle"-bytes voor dag en maand worden verwisseld).
Paul Fransen, Spijkenisse. 28
ENT REE VRIJ 29
DOORSNEDE-GROOTHEDEN Beknopte beschrijving.
Met dit programma worden de statische grootheden van een willekeurige doorsnede berekend. De berekening levert o.a. de oppervlakte van de doorsnede en de ligging van het zwaartepunt. Verder worden bepaald de traagheidsmomenten t.o.v. de assen door Z, alsmede de hoofdtraagheidsmomenten met hun richtingen en de traagheidsellips. Tenslotte wordt een tekening op school gemaakt. De doorsnede moet worden opgegeven met de coordinaten van de omtrekspunten, waartussen de omtrek rechtlijnig is. Openingen en niet samenhangende delen kunnen in de berekening worden betrokkken. Het programma is geschikt voor de berekening van brugliggers met gecompliceerde doorsnede, geprefabriceerde (voorgespannen) gewapend betonnen liggers, samengestelde stalen of houten liggers en kolommen. Verder ook voor de bepaling van de oppervlakte van percelen, enz. Zelfs bepaalde typen vouwschalen kunnen worden berekend. Tenslotte ook stabiliteitskernen van gebouwen. N.B. Mede omdat een programma nooit echt klaar is, hoop ik dat er geen fouten meer in zitten. Voor eventuele onjuistheden wil ik geen verantwoording op mij nemen. Voor opmerkingen houd ik mij aanbevolen. Achtereenvolgens worden nu behandeld: 1.Afleiding formules (+ 7 figuren). 2.Listing basicprogramma. 3.Toelichting op het programma. 4.Voorbeeld van invoer, uitvoer en tekening. 1. Afleiding formules. Y
Het programma is gebaseerd op formules waarbij de contourpunten in coördinaten zijn gegeven (zie figuur 1). De basisformule: Opp. driehoek : 2F=x1y2-x2y1 .... (1) 30
Opp. rechthoek (zie figuur 2) 2F-Ix y -x y 1+(x y -x 2 3 3 1 2 2 1 2 1+(x 3 y4-x4 y3)+Ix4y. I Controie:
punt 1 10 2 10 3 5 4 5 1 10
y 4 7 7 4 4
(2)
= 70-40= +30 70-35= +35 20-35= -15 20-40- -20 20-40- -20 30
2F-21x2-x31(y2-y1)=2.5.3-30 Algemeen: steeds linksom nummeren. beginpunt-- eindpunt. (zie figuur 3). n 2F = (met n-8) Ook een samenstel van oppervlakken: ( zie figuur 4 1. Nu is n=11; formule (3) blijft geldig. Het aandeel van de "hulpstaaf"3-4 komt met tegengesteld teken terug in aandeel 9-10. Tenslotte zijn ook gaten mogelijk, waarbij de nummering tegengesteld, dus rechtsom, dient te zijn. I zie figuur 5 1. N.B. De "hulpstaven" dus steeds in beide richtingen doorlopen. Met formule (3) kan dus een willekeurig y oppervlak worden berekend ais de coördinaten van de contourpunten gegeven zijn. Door de eenvoudige opbouw is (3) zeer geschikt voor de computer. Ook bij zeer gecompliceerde opperviakken behoeft slechts formule (3) bij herhaling te worden toegepast. Vervolgens
kunnen,
,4-7G- zx/f.
774-2/e.//e
van de basisformule (1). verschillende andere grootheden worden afgeleid. -1/2(x y + 2 2
+ lx •x HY -y 11 of 1
2
2
1
Uit figuur 6 volgt: x -1/3(x x 2 "' (4a) z
1
uitgaande
-
X
Yz=1/3(y1+3,2)...(4b) 31
2. Listing Basicprogramma.
De statische momenten zijn:
Sx= F.y =1/3
.***************************************
z
Sy= F.xz-1/3 F.(x1+x2)... ( 5b)
2 3 4 6 7 8 9 10
Het traagheidsmoment (zie figuur 7 ) :
r
1/3 x1y23
- 1/4 v 3 2 - - - 202
1 3=1/12 x1y13 14=1/36 ( x1-x2)(y2-yi)3+1/2(xi-x2)(Y2-Y1)(Yi+2/31Y2-3,11 )
F/G4/u,e 7
Na herleiding: 2
2
2
2
I - 1/6 F(y1 -Y1y2-y2 )...(6a) x
I - 1/6 F(x1 -x1 x, -x, ) ...(613) 2
y
2
Cxy=1/12 F(2x1y1-t-x1y2+x2yrt2x2y2)...(6c) Tenslotte gelden nog: -I ,- 0 y 2
x x
•z
1y=I y
0 * x Z2
CXY=Cx y,-OX ' z' Y z tg 2A=2.Cxy/(Ix-Iy) u'Iv -1/2(I x y ru-v Iu/0 r
v-
V I /0
32
)+(-)V
Xy
2*(1/2 1 x-1/2 I )
2
2
'* BEREKENING VAN DOORSNEDE-GROOTHEDEN * "1/4 "DOORSN4/BAS" (OP DISK 40) l* UITVOER VIA PRINTER t* AUTEUR: IR.H.A.PH.VAN ROOSMALEN VOORBURG sept 1984. TEL.070-992432 * .*************************************** CLS:' ** aanroep is:plus,fontmr,basic,run"doorsn4/bas" ** LPRINT" ":LPRINT" ":1PRINT CHRS(15):LPRINT"BEREKENING VAN DOORSNEDE-GROOTHEDEN":PRANT LpRINT“***********************************H:LpRINTH
15 20 INPUT"HOEVEEL VERSCHILLENDE CONTOURPUNTEN";N DIM X(N+1),Y(N+1):M=0 30 40 CLS 50 LPRINT"COORDINATEN VAN CONTOURPUNTEN:" LPRINT" - - - - - - - - - - - - - - - 51 LPRINT" I"," X"," Y":LPRINT" " 52 53 FOR I=1 TO (N+1):CLS 54 PRINT "CONTOURPUNT";I INPUT"X-COORDINAAT";X(I):INPUT"Y-COORDINAAT";Y(I) 55 57 IF X(1)>M THEN M=X(1) 59 IF Y(I)>M THEN M=Y(I) 67 LPRINTI,X(I),Y(I) 68 NEXT I:PRINT C=INT((M+10)/10) 70 IF C<=2 THEN C=I 75 FOR I=1 TO N: A--(x(I)*y(14-1)-x(1+1)*y(i))/2 80 85 0=0+A IX=IX+(Y(I)*Y(I)+Y(I)*Y(1+1)+Y(1+1)*Y(I+1))*A/6 90 100 IY=IY+(X(I)*X(I)+X(I)*X(I+1)+X(I+1)*X(I+1))*A/6 110 CXY=CXY+((X(I)+X(I+1))*(Y(I)+Y(I+1))+X(I)*Y(I)+X(I+1)*Y(I+1 120 SX=SX+(Y(I)+Y(I+I))*A/3 ‘ ))*A/12 130 SY=SY+(X(I)+X(I+1))*A/3 140 NEXT I 145 CLS 146 LPRINT" 150 LPRINT"OPPERVLAKTE =";0 151 LPRINT" 203 LPRINT" 204 X(2)=51/O:Y(Z)=SX/0 205 LPRINT"COORDINATEN ZWAARTEPUNT:": LPRINT" - - - - - - - - - - - - 11 206 LPRINT"X(Z)=";X(Z):LPRINT"Y(Z)=";Y(Z) 207 LPRINT" 210 TX=IX-SX*Y(Z):TY=IY-SY*X(Z):PXY=CXY-SX*X(Z) 220 LPRINT"TRAAGHEIDSGROOTHEDEN T.O.V. ASSEN // x en y DOOR Z:"
v
33
225 230 235 240 245 250 260 270 280 290 300 310 320 330 332 335 340 350 360 1000 1010 1020 1030 1050 1052 1053 1055 1060 1070 1075 1078 1085 1088 1090 1100 1106 1107 1108 1110 1120 1130 1140 1145 1150 1155 1158 34
LPRINT" - - - - - - - - - - - - - - - - - - - - - - - - - - LPRINT"IX =";TX:LPRINT"IY =";TY:LPRINT"CXY =";PXY LPRINT" LPRINT"HOOFDTRAAGHEIDSGROOTHEDEN:" LPRINT" - - - - - - - - - - - - IF ABS(TX-TY)<1E-05 AND ABS(PXY)<>0 THEN 260 ELSE 270 = LPRINT"HOEK A 0.7854 RAD. = 45 GRADEN":LPR1NT"TG A = 1":GOTO 310 1= 2*PXY/(TX-TY) IF J=0 THEN LPRINT"HOEK A = 0": ' NT"TG A = 0":GOTO 310 AB= ATN(J)/2 LPRINT"HOEK A =";AB;"RAD.=";AB*180/3.1416;"GRADEN": =";TAN(AB) LPRINT"TG A B= SQR(PXY*PXY+(TX-TY)*(TX-TY)/4) D=(TX+TY)/2:IU=D-B: IV=D+13 =";IV LPRINT"IU =";IU:LPRINT"IV RU=SQR(I1J/0):RV=SQR(IV/0) =";RU:LPRINT"RV = ";RV LPRINT"RU LPRINT" - - - - - - - - - - - - - - - - - - 11 LPRINT"SCHAALFACTOR =";C LPRINT" ":LPRINT" REM ** CONTOURFIGUUR TEKENEN BIJ GEGEVEN COORDINATEN ** CLS A=FNINIT A=FNFRAME(-1,-1,13,13) NAMENX(Z)/C+.5,11.5,FNES)"INGEVOERDE CONTOURPUNTEN" NAME"EN BEREKENINGSRESULTATEN" NAME"* =PUNT TRAAGHEIDSELLIPS" NAM0(0.5+X(Z)/C,0.5+Y(Z)/C,-FNES)"Z" A=FNAXIS(0,0,0,10,1,10,FNES,0,"x-as") A=FNAXIS(0,0,0,10,1,10,-FNFS,90,"y-as") A=FNAXIS(-3,Y(Z)/C,-3,13,17,16,FNES,0) A=FNAXIS(X(Z)/C,-3,-3,13,17,16,-FNFS,90) A=FNPLOT(X(1)/C,Y(1)/C,0) FOR I=1 TO N A=FNPLOT(X(I)/C,Y(I)/C)+FNPLOT(X(I+1)/C,Y(1+1)/C) NEXT I IF ABS(TX-TY)<1E-05 AND ABS(PXY)<>0 THEN AB=0.7854 REM** tekenen hoofdassen ** IF ABS(PXY)<1E-05 THEN 1170 YP=Y(Z)/C+(X(Z)/C)*TAN(AB) X()=X(Z)/C+(Y(Z)/C)/TAN(AB) XR=X(Z)/C-(Y(Z)/C)*TAN(AB) XS=X(Z)/C+(10-Y(Z)/C)*TAN(AB) A=FNPLOT(0,YP,0) A=FNPLOT(0,YP)+FNPLOT(XQ,0) A=FNPLOT(0,YP)+FNPLOT(10,YP-10*TAN(A8)) A=FNPLOT(XR,0,0)
1160 1165 1166 1168 1170 1180 1190 1200 1210 1220 1230 1240 1250
A=FNPLOT(XR,O)+FNPLOT(XS,10) REM** tekenen punten traagheids-ellips ** IF TX-TY>0 THEN 1168 ELSE 1170 RW=RU:RU=RV:RV=RW X1=X(Z)/C-(RV/C)*COS(AB):Y1=Y(Z)/C+(RV/C)*SIN(AB) X2=X(Z)/C+(RV/C)*COS(AB):Y2=Y(Z)/C-(RV/C)*SIN(AB) X3=X(Z)/C-(RU/C)*SIN(AB):Y3=Y(Z)/C-(RU/C)*COS(AB) X4=X(Z)/C+(RU/C)*S1N(AB):Y4=Y(Z)/C+(RU/C)*COS(AB)
NAME0(x1-.1,Y1-.1,FNEs)"*" NAMEO(X2-.1,Y2-.1,FNES)"*" NAMEO(X3-.1,Y3-.1,FNFS)"*" NAME@(X4-.1,Y4-.1,FNES)"*" A=FNPRINT(2)
3. Toelichting op het programma.
Er wordt hierbij naar de regelnummers verwezen. 20 30-55 57-59 70-75
80-140 150-207 210-235
240-330 270 250 280 332 335 350 1000 1055
Steeds moeten de coordinaten van het laatste punt dezelfde zijn als die van het eerste punt. Er worden dus (n+1) stel coördinaten ingelezen en opgeslagen. M krijgt de waarde van de grootste x of y, in verband met het op schaal tekenen van de contourfiguur. (zie 70 en 1000). C= de schaalfactor, die zo wordt bepaald dat de figuur altijd past binnen de in 10 cm verdeelde assen x en y. (zie 1060 en 1070). Formules
voor oppervlakte, traagheidsgrootheden en statische momenten, alle t.o.v. de oorspronkelijke gekozen assen. Oppervlakte en coördinaten van het zwaartepunt worden
afgedrukt. 1)e assen x en y worden verschoven naar Z en de traagheidsgrootheden worden t.o.v. deze assen bepaald en afgedrukt. De assen door Z worden gedraaid over een hoek A, die vanaf 290 met AB is aangeduid. Omdat hier wordt gedeeld door (TX-TY) moet het geval dat TX-TY worden bewaakt en uitgezonderd. Dat gebeurt in 250. Ook A-0 moet worden uitgezonderd, omdat de hoofdassen dan samenvailen met de assen door Z. Tenslotte worden de traagheidsstralen berekend. En afgedrukt. De schaalfactor C geldt alleen voor de figuur. Vanaf hier tekenen van de contourfiguur. De letter Z wordt afgedrukt; 0.5 cm rechts boven het
zwaartepunt.
1060-1070 De assen zijn vast ingedeeld en 10 cm lang. 35
Daarom is een schaalfactor nodig. 1075-1078 Dit zijn de assen door Z getekend. Merk op dat nu dikwijls door C wordt gedeeld. 1085-1100 De contourfiguur wordt op schaal getekend.
Hierbij is 1085 nodig om in het goede punt te starten. 1106 Zie 250. Vanaf hier tekenen van de hoofdassen. 1107 1108 Dat is nodig, omdat in 1120 wordt gedeeld door TAN(AB)=0. 1110-1140 De punten P,Q,R en S zijn de snijpunten van de hoofdassen met de assen door Z en de andere zijden van het daarop gedachte vierkant. 1145-1160 De hoofdassen worden getekend en lopen van P-Q en R-S. 1145 Zie 1085 1165 Vanaf hier een * zetten op de snijpunten van de hoofdassen met de traagheidsellips. 1166-1168 Alleen als TX > TV moeten RU en RV in de formules worden omgewisseld! 1170-1240 De punten waar * moet komen zijn genummerd van 1-4. Merk op: dat weer door C moet worden gedeeld en dat de *, door zijn eigen afmetingen, 0.1 cm links en beneden moet worden geplaatst. 1250 Geeft een krachtige figuur. Bij 1107-1240 (zie figuur 8), is nog onderstaand overzicht gemaakt.
Punt
coördinaten x
P
0z
Q
x
z
1 2 3 4
z
IU
RU
RV
X
36
Coördinaten zwaartepunt
IV
Coördinaten van contourpunten
36.5
Oppervlakte = 8072.13
HOEK A = -.780751 RAD. = -44.7336 GRADEN = -.990748 TG A
4. Voorbeeld.
1 2 3
/ /
Hoof dtraagheidsgrootheden
y z+Rv .sin A y z-R v .sin A -R yz u .cos A )/ yz +-Ru .cos A
xz -Ru* sin A xz +R sin A
1 NGENOEPDE GONIOUREUNIEN EN EEPEIENIN*.'l,PEULTNTEN * *PONT TPNAGNEIESELLIF-3
IX = 1.02412E+08 1Y — 1.03902E+08 CXY = 8.01797E+07
0 10
xz-Rv. cos A xz+Rv.cos A
63 22.5 20 0 29 30 315 315 261.5 247.5 247.5 259 340 27 27 77 85 87.5 91.5 91.5
Traagheidsgrootheden t.o.v. assen // X en Y door Z
z
Y +x .tan A Z z 0
y
37.5 129 128 173.5 182 179.5 266 296 415 415 445 445 263.5 168 143 30 30 20 20 0
X(Z) = 217.735 Y(Z) = 168.062 y
z z /tan A x -y .tan A z x z +(10-y ).tan A
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
= = = =
2.29737E+07 1.8334E+08 53.3484 150.707
Schaalfactor = 45 91.5 76.5 60.5
F/66/c/ R
cP
Ir. H. A. Ph. v. Roosmalen, Voorburg.
37
MERGEN VAN BASIC-REGELS Uit Northern Bytes. Auteurs: T.G. Han lin en D.B. Lewis (Een stukje tikwerk van Paul Fransen.) Heeft u wel eens dat u OUT OF MEMORY op uw scherm ziet verschijnen? Of vindt u dat een programma te langzaam is ? Een manier om geheugen te besparen en de uitvoering iets te versnellen is om zoveei mogelijk statements op 1 regel te zetten. Dat betekent echter veel overtikwerk. De volgende utility kan u daarbij helpen, zodat u veel werk en ergernis bespaard wordt. De routine werkt op Model 1. 3 en 4 met of zonder disks. De routine zorgt er voor dat Basic het commando MERGELINE kent. De syntax is MERGELINE xxxx waarbij xxxx een regelnummer is (geen variabele!!). heeft bijvoorbeeld het volgende in uw programma staan: 10 FORI=15360T016383 20 POKEI,191 30
NEXT
Na MERGELINE 10 ziet het programma er als volgt uit: 1 0 F0R1=15360T016383:POKEI,191 30
NEXT
Na nogmaals MERGELINE 10 staat alles op I regel. Hoe het programma te gebruiken ? - Als u naar Basic gaat moet u een MEMSIZE opgeven, opdat 97 bytes beschermd opgenomen kunnen worden. U laadt het onderstaande programma en runt het. - Het programma vraagt u het adres waar de routine geplaatst moet worden. U kunt zowel een positief als een negatief adres (by 65400 of -100) opgeven. - Als het programma gereed is, ziet u "Klaar.." verschijnen. - U laadt (of maakt) nu een programma (het onderstaande verdwijnt). II kunt nu het commando MERGELINE gebruiken. Het is niet mogelijk om dit commando in een basicregel op te nemen!! Tevens moet u wel in de gaten houden, dat Basic alle statements omzet in 1-byte tokens. En er zijn slechts 255 bytes in een basicregel te krijgen (niet omgezette statements). De routine checkt wel of er meer dan 255 bytes worden gebruikt, en geeft een foutmelding als dat zo is. 38
1 0 CLS:PRINTTAB(21)"MERGELINE versie 1.0":PRINT:PRINT TAB(21) "LAADADRES... ";:INPUTL:IFL
32767THENN=N-65536 40 RETURN:DATA43,215,254,156,194,0,0,35,205,90,30,225,205,44, 27,48,72,35,126,183,40,67,43,229,197,197,94,35,86,225,235 50 DA1'A237,82,17,245,0,223,193,225,48,51,197,43,54,58,35,229, 235,42,249,64,63,237,82,229,193,225,229,209,35,35,35,35,237 60 DATA176,225,237,91,164,64,205,252,26,42,249,64,43,43,43,43 , 34,249,64,205,97,27,195,193,29,30,14,33,30,28,195,162,25
PASCAL VOOR DE TRS-80 Onder deze titel geeft Afdeling West van de TRS-80 Gebruikersvereniging een brochure uit die bedoeld is als hulp bij het programmeren in PASCAL.
Zoals reeds in de inleiding van dit boekje wordt vermeld, is deze brochure geen cursusboek en dienen beginners op dit pad enkele werken over Pascal te raadplegen. In het boekje wordt aangegeven welke boeken daarvoor in aanmerking komen. De brochure begint met een overzicht van de diverse delen waaruit Pascal 80 bestaat, namelijk Monitor, Editor, Compiler en Executer. Waar mogelijk is de (oorspronkelijk Engelse) tekst vertaald in het Nederlands, maar dat is niet doorgevoerd tot de wezenlijke programma-opdrachten, omdat deze uiteraard in het Engels moeten worden ingevoerd. Na het overzicht wordt elk onderdeel uitvoerig besproken, compleet met
foutmeldingen. Is er geen fout, dan wordt deze gecreeerd om er toch iets over te kunnen schrijven, waardoor niets aan het toeval wordt overgelaten. Veel aandacht wordt besteed aan het programmeren zelf, waarbij
voorbeelden niet ontbreken.
Tenslotte wordt nog het maken van en het werken met diverse soorten files besproken. Voor een boekje dat volgens de uitgevers geen cursusboek mag worden genoemd vind ik de behandelde stof toch vrij kompleet. Ook gezien de prijs warm aanbevolen. (zie ook Remarks 35, blz. 30)
Joop van Dam. 39
ROUTINES IN NEWDOS/80
HARDWARE -UITBREIDINGEN
(Uit Northern Bytes, auteur: Greg Small)
EXPANSION MODULES VOOR DE TRS-80 (en aanverwanten).
Newdos/80 2.0 heeft een algemene routine om de meegegeven parameters van een DOS-commando te scannen. Je kunt de parameters scheiden door een spatie of door een komma. Tevens kunnen aan het eind meerdere spaties gezet worden. De routine zet bepaalde vlaggen afhankelijk van de gevonden waarden. Hieronder volgt de routine met commentaar:
Dit artikeltje is vooral bedoeld om TRS-80 gebruikers, die niet veel van het inwendige van hun computer weten, enig inzicht te geven in de toepassing van Hardware-uitbreidingen.
4CD5 7E 4CD6 FEOD 4CD8 C8 4CD9 7E 4CDA FE2C 4CDC 23 4CDD 280A 4CDF FE20 4CE1 2B 4CE2 37 4CE3 2005 4CE5 23 4CE6 BE 4C E7 28FC 4CE9 B7 4C EA 3E34 4CEC RET
LD
CP
RET LD CP
INC JR CP DEC
A AIL) ODE &(IL) 2CH
HL Z,4CE911 20H
HL
SCF
JR INC CP JR OR
NZ,4CEAH
LD
A,34H
HL (HL) Z,4CE5H
A
Zet byte op adres (in HL) in A Is het een Carriage-Return ? JA, dan terug (Z is gezet) NEE, byte nogmaals ophalen Is het een komma ? Naar volgend Commando-byte JA, dan eruit via 4CE9 NEE, is het dan een spatie Terug naar vorige byte Zet de Carry-vlag NEE, dan terug via 4CEA JA, dan naar volgende byte Vergelijk met A (spatie) JA, dan volgende byte Reset de Carry-vlag Zet foutkode 34H in A Terug naar Aanroeper
De volgende in-/uitvoer geldt voor de routine: INVOER (HL) 1 of meer spaties
Carriage return iets anders
UITVOER HI,
A
Z-vlag
C-vlag
byte na "," eerste niet-spatie Carriage return zelfde byte
34H
reset reset set reset
set reset reset set
34E
ODH 34H
Met behulp van dergelijke Hardwareuitbreidingen kunnen de technische mogelijkheden van Uw computer verruimd worden, b.v. vergroting van de verwerkingssnelheid (de zgn. Speed-up), uitbreiding van het geheugen, aansluiting van randapparatuur zoals printers, floppy-disks, plotters enz. Voor dergelijke uitbreidingen worden zgn. expansion-modules gebruikt. Een expansion-module is een groep componenten, gemonteerd op een kunststof-plaat met een gedrukte bedrading, printed circuit of print-board genoemd. Een dergelijk print-board wordt dan door middel van een kabel met een meerpolige steker, connector genoemd, aangesloten op het TRS-80 print-board. 1)e TRS-80 LEVEL II-uitbreiding van TANDY voor de eerste TRS-80 computers is een voorbeeld van een dergelijke hardware-modificatie . Dit expansion-module bestaat uit een print-board van 100 x 45 mm dat met strookjes sponsrubber op het TRS-80 print-board gelijmd is. Voor aansluiting op het TRS-80 board wordt een 24-aderige band-kabel gebruikt met zgn. DIP-connectors, dit zijn stekers die in reeds aanwezige 1C-voeten gestoken kunnen worden.
Op soortgelijke wijze kunnen ook andere hardware-modules in de TRS-80 behuizing aangebracht worden, b.v. in de voetholte, waar ruimte is voor een print-board van 150 x 60 mm. Grotere expansion-modules, die niet meer in de TRS-80 behuizing kunnen in een afzonderlijk kastje kunnen worden, aangebracht ondergebracht worden. Soms hebben deze modules een eigen stroomvoorziening door middel van een print-trafo of een afzonderlijke voedings-eenheid.
Om deze routine te gebruiken in een eigen programma: 0100 0200
LD
HL,CMD
CALL 4CD5H
Als je ook bezig bent om routines uit Newdos 2.0 te verzamelen, dan kun je kontakt opnemen met onderstaand adres. Misschien kunnen we een groepje vormen om alles uit Newdos te halen, wat er mogelijk is. Paul Fransen, Havikhoek 48, 3201 SH Spijkenisse, 01880-23904. 40
Indien meerdere expansion-modules gewenst zijn kan een 19-inch-montageframe, ook wel rek genoemd, gebruikt worden. In een dergelijk rek wordt dan op de achterzijde een busprint gemonteerd. Deze busprint is een print-board met een aantal connectors, die slots genoemd worden, waarin meerdere expansion-modules gestoken kunnen worden. In een dergelijk rek wordt dan ook de stroomverzorging voor de expansion-modules gemonteerd. Externe modules worden meestal aangesloten op de expansion-poort van de TRS-80 met een zgn buskabel. 41
Een bus is een verzameling van aansluitingen die onderverdeeld zijn in: 8 datalijnen (de databus), 16 adreslijnen (de adresbus), 6 tot 12 besturingslijnen Ide controlebus) en een aantal lijnen voor de stroomverzorging (dc utility-bus).
Communicatie-module: Hiermee kunnen twee of meer computers met elkaar gekoppeld worden. cassette programma's zeer Hiermee kunnen Cassette - speedup - modules: -
betrouwbaar tot wel zes keer sneller geladen en gesaved worden. RS 232 module: Voor omzetting van computer-output in seriële output. Dit is nodig voor aansluiting van randapparatuur op grotere afstand en voor het aansluiten van een modem. Modem-module: Hiermee wordt computer-informatie omgezet in geluidssignalen. Hierdoor kunnen programma s via de telefoon worden uitgezonden of ontvangen. Ook nodig voor Viditel-ontvangst. Er zijn ook multifunctionele modules verkrijgbaar, zoals b.v. de floppy - disk interfacekaart die door iemand van de afdeling Arnhem ontwikkeld is. Dit module heeft namelijk ook een Centronics-printerpoort en een 40 Hz interrupt uitgang. -
De meeste expansion-modules hebben een andere busdefinitie dan de TRS-80 expansionpoort, d.w.z. de lijnen zijn wel identiek, maar de volgorde en de gebruikte connectors zijn verschillend. Om een expansion-module met een andere busdefinitie aan te sluiten is het nodig om een verloopbus-kabel te gebruiken. Deze kabel heeft aan de TRS-80 kant een 40-polige cardedge-connector die op de expansion-poort past en aan de andere zijde een connector met de bus-specificatie van het toegepaste expansion-module. Veelgebruikte busdefinities zijn b.v. de 5-100 bus (100-polig), de IEEE-484 bus (26-polig) en de Z-80 ECB bus (64 polig), die door Z1LOG, de fabrikant van de Z-80 micoprocessor, gedefinieerd is. De print - boards van het hardware-project van de afdeling Utrecht zijn ontworpen voor 8080-SIEMENS bus (64-polig). -
-
Na deze beknopte uiteenzetting hoe expansion-modules op de TRS-80 aangesloten kunnen worden, volgt hier een samenvatting van een aantal verkrijgbare expansion-modules: Geheugen uitbreidingen: 2k, 16k, 32k, 64k en 128k RAM-modues; Bankswitch-module voor CP/M en geheugenadressering tot 2 Megabyte. Clockspeedup-modules voor 2,5 of 3,5 of 5,3 MHZ.: Met deze modules lopen programma's 1,5 tot 3 keer sneller. Realtime-Klok-module: Een electronische klok, die datum en tijd op de bovenste regel van het beeldscherm aangeeft en door middel van basic-opdrachten ook in programma's gebruikt kan worden. Basiccode-module: Hiermee kunnen programma's van HOBBYSKOOP en van andere computers in de TRS-80 ingelezen worden. Karaktergenerator-module: Voor betere letters op het beeldscherm. Op de oudere TRS-80 computers kunnen hiermee ook kleine letters op het beeldscherm afgedrukt worden.
Video-display-module: Hiermee kan programmatisch de indeling van het beeldscherm gewijzigd worden, b.v. 80x24, 64x32 karakters enz. High-resolution-module: Om figuren en tekeningen op het beeldscherm af te drukken. Lichtpen-module: Hiermee kan men op het beeldscherm tekenen. Barcode-module: Voor het lezen van Barcodes. Audio-module: Voor het produceren van geluid en computer-muziek. Speach-synthesizer: Voor het produceren van gesproken woorden. 10-module: Hiermee kan computer-output naar verschillende randapparaten gestuurd worden. Interface-modules: Voor het besturen van printers, floppy - disks, plotters, robots, regeling van lichtsterkte, centrale verwarming, alarminstallaties, motoren , modeltreinen enz.
42
-
Hierna volgt een lijst met enkele beschikbare modules met de afdeling die ze maakt en voor welke computer ze zonder meer direct zijn te gebruiken. Mocht U voor égn van deze of voor andere modules belangstelling hebben kunt U altijd contact opnemen met de hardware-coördinator van Uw afdeling.
Omschrijving
Afdeling
Verkrijgbaar voor
CP/M selector Bufferprint voor bussysteem Bufferprint voor bussysteem 1-0 interface
West Utrecht
Model 1, Video Genie Model 1 Model 3 Utrecht bus systeem Utrecht bus systeem Utrecht bus systeem Utrecht bus systeem Utrecht bus systeem
R'dam
Utrecht Utrecht Printer interface Utrecht Audio kaart Utrecht Floppy diskisk interface Utrecht RS-232 interface Utrecht Real-time clock R'dam Real-time clock R'dam 2k geheugen bord 64k geheugen met bankswitch Lelystad R'dam Speed-up 5 MHz alle afd Speed-up R'dam Grafix-board Noord-oost 2800-baud Cassette-interface Floppy disk interface met Arnhem printer-aansluiting
Utrecht bus systeem
Model 1, 3 en Aster Model 1 Amerikaanse Model 1 Model 3 Model 1 en Video Genie Amerikaanse Model 1 Model 1 en Video Genie Model 1 en Video Genie
Th. Krops, Hardware-coördinator Noorderkroon 45 9301 JP RODEN.
43
ONBEPERKTE USR-CALLS Deze patch is bedoeld voor Model I/III systemen (zonder disks !) en biedt de mogelijkheid om onbeperkte USR-calls te krijgen. Daar komt nog bij dat de bekende (of beruchte ?) POKE-instructies, nodig om de start-adressen van de calls weer te geven, overbodig zijn geworden. De adressen worden nu met de USR-call meegegeven in decimale vorm : X= USRn(Y), waarbij n het adres voorstelt. Een voorbeeld
Ter vervanging van ' 10 XS=INKEYS:1FXS--GOTO 10', print : X=USR73(Y). Y is hier een default-waarde waarover straks meer. Eerst de routine: 41A9H JP USR USR CALL 1E5BH
DEC
HL
OR
E
LD
RET LD RET
A,D
;jump naar de patch ;als adres is meegegeven.haal het op ;backup pointer ;kijk of adres nul is
;usr-call zonder adres (408EH),DE ;sla adres op :usr-call met adres
De eerste regel is de enige met een vast adres (41A9H), de rest mag willekeurig in het geheugen geplaatst worden. In Basic ziet het er zo uit 10 1=65524:11%=1/256:12%=1-11%*256 20 POKE 16809,195:POKE 16810,12%:POKE 16811,11% 30 FOR J=I TO 1+11:READX:POKE J+65536*(J)32767),X:NEXT 40 DATA 205,91,30,43,122,179,200,237,83,142,64.201 Waarbij I een willekeurig adres voorstelt. Verklaring van de routine Als Level II een USR token tegenkomt dan springt hij naar ROM adres 27FEH voor executie. Daar aangekomen wordt een call uitgevoerd naar 41A9H. waar in Level II een RET staat. In een DOS staat daar een jump naar een routine die voor de 10 USR-calls zorgt.
Op het moment dat in deze routine wordt gesprongen, bevat het HL-register de token van USR : (C1H). Daarna wordt de ROM-routine aangeroepen (1E5BH), die het ASCII-nummer volgend op de USR-call (het adres). omzet naar het binaire equivalent en dit plaatst in het DE-register. Indien geen nummer wordt meegegeven, bevat DE nul. HL wijst nu naar het karakter dat op het adres volgt "(", dus HL moet geplaatst worden op het vorige karakter.
44
1)an moet er gecontroleerd worden of het resultaat in DE gelijk is aan nul en zo ja, springt de routine terug naar de normale USR bewerking. Anders wordt adres 408EH met het adres in DE geladen en springt dan terug. Adres 408EH is de plaats waar het adres van een USR-routine normaal gePOKEed wordt. Voor degenen die (nog) niet weten hoe de argumenten van een USR-call verwerkt worden, volgt hier enige uitleg.
Stel weer X—IJSRn(Y), met n het decimale adres. Normaal wordt Y op nul gezet (als default), maar kan in feite elke waarde (-32768 - 32767) bevatten. Zolang er in het machinetaal-programma niets mee gedaan wordt, maakt het als default-waarde niets uit. Als het wel gewenst is om een waarde mee te geven, moet in het machinetaal-programma de instructie : CALL 2687D worden uitgevoerd om het argument in het HL-register te krijgen. Willen we nu een argument vanuit machinetaal naar Basic teruggeven, dan moet de betreffende waarde in HL gezet worden en als laatste (!) de instructie JP 2714D uitgevoerd worden. 1)e instructie HET vervalt hierbij. De waarde in HL wordt hiermee terug gegeven in de variabele X. De X in X—USIln(Y)
Het argument Y mag uiteraard bestaan uit een combinatie van instructies zoals : X=USRn(ASC(YS)). Indien er 2 waarden meegegeven dienen te worden dan kan men de volgende methode gebruiken Stel we hebben de variabelen A en B. dan kan AB berekend worden AB%— A * 16 + B. De call luidt dan X=USRn(AB%) en kan in het machinetaal-programma uitgesplitst worden door te bedenken dat HL deze waarde bevat op deze manier : H heeft A en L heeft B, want vermenigvuldigen met 16 is 4 bits schuiven naar links. Uiteraard kan op deze manier ook een waarde teruggegeven worden, maar de waarde die dan in X terecht komt is gecodeerd. Referenties 80-US, December 1982. Programming Techniques for level II basic /Radio Shack. Rene van Soest
Diamantstraat 108 1074GG Amsterdam 020-764935 45
HOE EN WAAROM VAN SPEED-UP Hardware modificaties op model I. model 111 . VIDEOGENIE en KOMIEK. In de voorlaatste twee REMARKS (nr33 en 34) heb ik wat geschreven over hardware modificaties op de TRS-80. Echter zonder enig commentaar over het nut en de bruikbaarheid. Daar wil ik het nu over hebben. Aansluitend het een en ander over speedup's. Elders in deze REMARKS wat over CP/M en RAMDISK. Als eerste punt wil ik de snelheid van de computer eens onder de loep nemen. Als je het volgende BASIC programma uitvoert, dan duurt het zegge en schrijve 45 seconden voor het hele beeldscherm wit is 10 FOR I=0 TO 127 20 FOR J=0 TO 47 30 SET(I,J) 40 NEXT 50 NEXT (Dit is gebaseerd op ROM level II BASIC, met de standaard klok frequentie van 1.77 Mhz) Dit programma kun je uitvoeren en timen. Maar het eerste begrip is al gevallen : klok frequentie. Een computer heeft tijd nodig om een programma uit te voeren. De tijd die daarvoor nodig is kun je gaan verdelen in kleinere stappen. Bv. de tijd, die nodig is voor een heel programma, zou je op kunnen delen in de tijd per programma regel of per instructie. In het bovenstaande programma worden er 128 * 48 = 6144 punten op het beeldscherm aangezet, dus de (gemiddelde) tijd nodig om 1 punt te doen oplichten is 0.0073 seconde. Om 1 punt aan te zetten werden er echter vele stappen van het machinetaal programma BASIC uitgevoerd. Een machinetaal instructie duurt, afhankelijk van de instructie 0.0000023 tot 0.000012 seconde bij een klok frequentie van 1.77 Mhz. (Een klok frequentie van 1.77 Mhz betekent 1.77 miljoen klok cycli per seconde.) De computer heeft logisch ook voor iedere instructie een bepaalde tijd nodig. De tijd die de computer daarvoor neemt hangt af van de instructie een simpele instructie gebruikt 4 klok cycli en een ingewikkelde instructie duurt wel 23 klok cycli.
De duur van een klok cyclus wordt bepaald door de fabrikant van een computer. Deze zal afhangen van economische en van technische factoren. Een korte klok cyclus (dus een hoge frequentie : 1 Mhz frequentie geeft een klok cyclus die 0.000001 seconde duurt, 2 Mhz geeft een klok cyclus die half zo lang duurt enz.) vereist snellere en dus duurdere ic's. En op een gegeven moment kan het niet sneller : ook de techniek heeft zijn
grenzen. 46
Samenvattend : de tijd die een computer voor een bepaald programma
nodig heeft is uiteindelijk terug te voeren op de klok frequentie van die computer.
Sommige computers voeren een programma sneller uit dan een andere computer (bij dezelfde klok frequentie), omdat ze efficiënter werken, maar ook zo'n snellere computer zou sneller gaan als zijn klok frequentie hoger was. En : de maximaal haalbare snelheid hangt af van de kwaliteit van de computer. (ervan uitgaande dat sneller beter is).
De achtergrond van een (kristal gestuurde) klok is dat daarmee alle tijden die voor het uitvoeren van een instuctie nodig zijn precies vast liggen. Je kunt dan alle onderdelen op elkaar afstemmen. Je kunt in aantallen klok cycli precies voorspellen hoe veel tijd beschikbaar is voor een bepaald deel van een opdracht. Met name denk ik hier aan de tijd die nodig is om het geheugen te lezen of te schrijven.
Als de klok frequentie te hoog is, dan krijgt de computer te weinig tijd om
een instructie goed af te ronden en de zaak loopt dus vast. Zolang de computer echter genoeg tijd krijgt om zijn machinetaal programma uit te voeren, dan zullen verder alle programma's goed uitgevoerd worden. Met de beperking, dat sommige programma's zo sterk afhankelijk zijn van een bepaalde klok snelheid. dat de bedoeling van het programma fout uitpakt, hoewel het programma op machinetaal niveau goed uitgevoerd wordt. Een computer zal nooit over de woorden van een BASIC programma struikelen. Dat kan niet. Hij kan wel over z'n machine taal programma struikelen, maar niet over een hogere programmeertaal, omdat hij nooit een hogere programmeeertaal direkt uitvoert. Een hogere programmeer taal wordt of door een machinetaal programma géinterpreteerd (bv een BASIC interpreter, zoals de normale BASIC's op de TRS-80) of, en dat weer door een speciaal machinetaal programma, gecompileerd (dat is van een hogere programmeertaal omgezet, of in een lagere programmeertaal die dan op zijn beurt weer geinterpreteerd of gecompileerd wordt, of direkt in machinetaal). (Voorbeelden van programma's die altijd met een vorm van compileren
werken zijn PASCAL en FORTRAN. er zijn echter ook BASIC compilers).
Gesteld nu dat je de klok frequentie van je computer verdubbelt, dan duurt het maar 23 seconden om bovenstaand programma uit te voeren. Dat verhogen van die frequentie heeft zo zijn technische beperkingen, maar 2* zo snel zal wel zonder veel problemen haalbaar zijn. (Echter de ROM's van een KOMIEK bleken daarvoor al te traag). Als je nog sneller wilt, dus net zoals ik in REMARKS 34 schreef, by 3* zo snel. (ben je in 15 seconden mooi klaar) dan zijn er snellere geheugen ic's nodig. En alvast een Z80A microprocessor. (En een onderbreking van het disk operating system, die de klok wat lager zet bij disk I/O). En als je dan je geheugen ic's gaat vervangen, neem dan voor de DRAM ic's 64k ic's. (DRAM staat voor dynamisch RAM).
47
AFDEL I NGS-N I EU W5
Hoe logisch ik dat vind kun je lezen in het stukje : "Het waarom van 64k DRAM". Het nadeel van iedere speedup is, dat de computer bepaalde timingen niet goed meer doet. Het meest klassieke voorbeeld in deze is het lezen van cassette bandjes : bandjes geschreven bij de normale klok snelheid kunnen niet meer gelezen worden als de computer omgeschakeld is op de hogere snelheid. Een ander voorbeeld zijn diskdrive diagnose programma's : als de motor van de diskdrive precies goed loopt, zal het programma melden dat hij veel te langzaam gaat, als er een speedup aan staat. Tot slot kan het operating systeem problemen geven. Bij NEWDOS is er echter een voorziening in het operating systeem ingebouwd. Dan kun je opgeven hoeveel keer de klok sneller loopt. Dit is belangrijk bij NEWDOS • omdat NEWDOS maar een beperkte tijd wacht bij disk 1/0 en bij een géinstalleerde, maar niet in het operating systeem opgegeven, speedup ten onrechte met de melding "Device not available" komt. Er zijn echter helaas ook operating systemen, die zo afhankelijk zijn van een juiste (lage) kloksnelheid bij disk I/O, dat ze met een speedup niet goed werken. Een voorbeeld hiervan is LNW-Cp/M, welke al de geest geeft als je de klok op 1.7* zo snel zet. Wat er dan precies fout gaat weet ik ook niet, maar de disk wordt niet goed meer gelezen. Misschien wordt er bij het lezen van een disk wel binnen een bepaalde tijd het volgende byte verwacht, en als de snelheid van de computer te hoog is, is die tijd, welke in klok cycli geteld wordt, te snel voorbij. Rence Rozendaal
zonder woorden
Afdeling W E ST
De eerstvolgende bijeenkomsten van het seizoen 1985 zijn op 11 januari VRIJDAGavond van 19.30 - 23.00 uur en op ZAT ERDAGmiddag 9 februari van 13.00 - 19.00 uur. VIE)IWES'T Vidiwest is met een 1200/75 of een 300/300 baud modem te bereiken onder telefoonnummer 020 - 68.36.35 onder het protocol van Vidiboard-
Rotterdam.
Vidiwest is on-line maandag t/m vrijdag van 19.00 tot 24.00 uur en zaterdag van 00.00 uur tot zondag 24.00 uur.
Nadere informatie over Vidiwest bij Laurens Ory, telefoon 020-923885 en Kim KODDE. telefoon 020-103414. F'AS'CAL.-80
Van de NEDERLANDSE versie van de handleiding PASCAL-80 is inmiddels een herdruk verschenen en kan dus weer besteld worden (zie vorige Remarks).
mu-r.A9rIiEs De heer W.SMITS is bereid gevonden om het penningmeesterschap over te nemen van Winus KOOPS, die zich gedurende 3 jaar op voortreffelijke wijze van deze taak heeft gekweten. Daarvoor wordt hij ook langs deze weg en namens de leden van de afdeling hartelijk dank toegezegd. De afdelings-redact ie is thans in handen gekomen van de heer P.HEITLAGER Pernassusweg 29 1077 DC AMSTERDAM tel. 020-73.41.61. Bijdragen voor Remarks van de afdeling =WEST- kunnen aan hem worden toegestuurd (NIET allemaal te gelijk copy inzenden a.u.b.).
Zij die dit nog verzuimd hebben word en alsnog hi erbij vriendelijk gevraagd het hen toegezonden enquete-forrnulier al dan ni et ingevuld terug te sturen dan wel in te leveren op de afdelingsbijeenkomsten anders loopt U waarschijnlijk ons volgende rondschrijven mis. Andries Jager. 48
49
INTERRUPTS
AL3VEFterIENVI'IE
Amstel 312 It o Carrel / 1017 AP Amsterdam / G ro 4 475 158 Bank NMB 69 79 15 646 **************************************************************************** * Onze nieuwe WINTER 84/85 catalogus is uit. Stuur ons een kaartje met je * * naam en adres en de verrelding ' REMARKS' en we sturen hem GRATIS toe.
****************************************************************************
**************************************************************************** * SPECIALE SOFTWARE AANBIEDINGEN : * voor al deze aanbiedingen geldt dat ze worden behandeld in volgorde * * van binnenkomst en dat de voorraad beperkt is. * - SARGON II op tape voor 16K apdel I/III ................ van f 105 nu .... f 49 * * - T -PASCAL 2.2 op disk van Mikrorie ........................ van f 177 no .... f 75 * * - ENBASE model III relationele database manager, van f 375 nu f 175 * * - MICRO CLINIC disk doktor model I/III .................... van f 120 nu .... f 49 * * - THOR REVERSI model I of III op disk ....................... van f 125 nu .... f 39 * **************************************************************************** TRS-80 software disk THE ANALYST - BASIC versneller ..... disk THE COLLECTOR - Garbage collector ......................................................................... disk SUPER UTILITY PLUS 3.2 ...................... disk PASCAL-80 .......................................................... disk SMALL C COMPILER 2.1 .......................... tape SPHYRAMID nederlands adventure #3 (32K) ................................................. disk 3D FLIGHTSIMULAPOR model I of III ......................................................................... disk ALE - Z80 editor/assembler ............... disk THE ALTERNATE FORTH .................................
f f f f f f f f f
125,-125,-325,-375,-175,-49,-145,-250,-375,--
**************************************************************************** * SPECIALE BOEKEN AANBIEDINGEN (zelfde condities als software) * - THE BEST OF SOFISIDE - TRS -80 editie ....................... van f 70 nu ........... f 39 * * - COMPUTER ART AND ANIMATION FOR THE TRS -80 ......... van f 55 nu .......... f 29 * * - DOS RANECM ACCESS & BASIC FILE HANDLING ................ van f 89 nu ........... f 39 * - THE CREATIVE TRS -80 ........................................................ van f 59 nu .......... f 35 * - HOW TO DO IT ON THE TRS-80 & OTHER MYSTERIES .. van f 99 nu .......... f 49 * **************************************************************************** TRS-80 boeken SUPERSCRIPSIT ( Lehman) ................................................................................................................... TEACH YOUR TRS-80 TO PROGRAM ITSELF (Busch) ............................................................... listings van programmageneratoren voor de models I, III en 4. LEARNING TRS-80 MODEL 4/4P BASIC (David Lien) .......................................................... DYNAMIC GAMES FOR THE TRS-80 (Duns,Hartnell) .................................................... een nieuw engels boek met 17 spellen voor de TRS-80. INTERFACING TO THE TRS-80 COMPUTER models I, III and 4 ................................ VISICAIC FOR THE TRS-80 MODELS III and 4 COMPUTERS ............................................. TRS-80 ROM ROUTINES DCCUMENTED (Jack Decker) voor Model 1,111,4 ........... DYNAMIC GAMES FOR YOUR TRS-80 MODEL 100 .............................................................. 44 PROGRAMS FOR THE MODEL 100 ....................................................................................
f 89,-f 49,-f 89,-f 22,-f 79,-f 69,-f 89,-f 22,-f 39,--
tevens de tijdschriften 80-MICRO, RAINBOW, HOT-COCO en veel boeken over CP/M, MS-DOS, BASIC, C, FORTH, PASCAL, 1 80, 80186, dBASE II, MULTIPLAN enz. .
.
.
.
.
ONZE WINKEL IS GEOPEND VAN WOENSDAG T/m ZATERDAG TUSSEN 11 en 5 verzendkosten f 6 per bestelling alles inclusief BTW microcomputer tijdschriften boeken en software
50
...
.
. :
I
.
.
U heeft zich lekker in uw luie stoel geinstalleerd om nu eindelijk eens dat boek te lezen wat u al zo lang van plan was. Ring....Ring.... de telefoon gaat, na tien minuten kunt u de draad van het boek weer oppakken. Ding Dong . de buurman staat aan de deur en wil je wat vragen. Even later kun je weer verder met je boek. Joe-Hoe- wil je koffie ? Ja lekker , en maar weer verder met het boek.
Herkent u bovenstaande situatie ? Ja. dan weet u wat interrupts zijn! In onze computer be tekenen interrupts onderbrekingen van het lopende programma. Tijdens die onderbrekingen kan een ander programma worden afgewerkt waarna weer wordt teruggekeerd naar het lopende programma. Een interrupt is een van buiten komend elektrisch signaal naar de Z-80 processor. Als dit signaal aktief wordt kan de Z-80 er wel of geen aannacht aan besteden afhankelijk van het lopende programma. Als in het iopende programma interrupts verboden zijn door middel van de instruktie DI (disable interrupt) dan zal er bij een interrupt niets gebeuren, is er een keer de ins truktie El (enable interrupt) gegeven dan wordt gesprongen naar een interrupt-routine. De Z-80 kent vier soorten interrupts nl Mode 0, Mode 1, Mode 2 en de NMI (non-maskable interrupt). Voor de eerste drie geldt het bovenstaande verhaal. De NMI kan niet door de software verboden worden en er moet door de Z-80 processor meteen op worden gereageerd! Vooral bij grotere computersijstemen wordt de NMI gebruikt om op panieksituatie's te kunnen reageren. Bij het uitvallen van de netspanning bijvoorbeeld kan een NMI worden opgewekt wat dan tot gevolg heeft dat de computer de lopende instruktie afmaakt, het adres van de volgende instruktie , de status , de registers e.d. opslaat in niet vluchtig geheugen en dan stopt voordat de voedingspanning helemaal is weggevallen. Gewone interrupts worden vaak gebruikt door langzame randapparaten en door apparaten die maar zo nu en dan iets van de computer willen. Op deze manier hoeft de computer zich niet voortdurend met deze apparaten bezig te houden. in de TRS-80 is via wat logika de resetknop met de NMI verbonden. Van de interrupt Mode's 0.1 en 2 wordt door een TRS-80 (met EI ) alleen Mode 1 gebruikt. De Mode 0 en Mode 2 zijn alleen mogelijk na een hardware-wijziging. De devices die een interrupt kunnen geven zijn de floppy-controller en de real-time-clock. Nu we weten wat een interrupt is wordt het tijd eens wat nauwkeuriger te kijken wat er precies gebeurt. 51
Eerst maar de NMI. Als er een NMI komt voert de cpu een DI instruktie uit, onthoudt de voorgaande status (DI/ ED, bewaart het adres van de lopende instruktie op de stack en jumpt naar adres 66H. Nu, dan hebben we het wel zo ongeveer gehad want op 66H begint een routine die test op de aanwezigheid van een expansion-interface en disk en start het sijsteem op naar dos ready of naar Level 2 basic. Bij de enig overblijvende interrupt Mode 1 voert de cpu ook als eerste een DI instruktie uit , bewaart het adres van de lopende instruktie op de stack en jumpt dan naar adres 38H. Op adres 38H staat een jump 4012H, daar aangeland staat een jump 45F2H en begint een dos-routine die uitzoekt of
het een interrupt van de clock is of van de floppy en afhankelijk daarvan zijn werk doet. Is dit gedaan dan wordt er een EI en een RETI instruktie uitgevoerd. (RETI is return from interrupt). Deze RETI haalt van de stack het adres van de lopende instruktie op, zet het in de program-counter en gaat dan verder op dat adres van het programma. Omdat adres 4012H in ram staat kunnen we dit adres wijzigen en laten wijzen naar onze eigen routine. In het onderstaande programma gebeurt dit ook, tevens wordt daar de oude waarde van de adressen 4013H/4014H bewaard en na afloop van het programma wordt naar dat adres gesprongen zodat de oorspronkelijke interrupt-routine gewoon verder wordt afgewerkt.
Het programma bestaat een een initialisatiedeel. vanaf label BEGIN tot het label START, dat het adres op 4013H/4014H bewaart in EXIT+1, het startadres plaatst in de lokatie's 4013H/4014H, HIMEM aanpast en dan terugkeert naar de dos. Het tweede deel, vanaf label START is de eigenlijke interrupt-routine. Deze routine test of de toetsen 4,5 en 6 gelijktijdig zijn ingedrukt. Is dit niet het geval dan wordt via RESTO en EXIT meteen doorgegaan naar de oorspronkelijke interrupt-routine. Zijn de toetsen 4,5 en 6 wel gelijktijdig ingedrukt dan wordt de inhoud van de stack opgehaald, ASCII gemaakt en naar het beeldscherm gestuurd en dan doorgegaan naar de oorspronkelijke interrupt-routine. Wat we te zien krijgen is het adres van de program counter wat door de cpu op de stack is gezet bij de aanvang van de interruptafhandeling.
Zo zijn we dus in staat een op voile snelheid lopend programma een beetje te volgen. Voorwaarde is wel dat er interrupts toegestaan zijn. Dit is onder andere het geval met de dos zelf, edtasm, disassem ed. Dirk Hendriksen. Irenestraat 6. 5502 TM Veldhoven. 040 - 537629. 52
00100 00110 00120 00130 00140 00150 00160 00170 00180 00190 00200 00210 00220 00230 00240 00245 00250 00255 00260 00270 00280 00290 00300 00305 00310 00320 00330 00340 00350 00355 00360 00370 00380 00390 00400 00410 00420 00430 00440 00450 00460 00470 00480 00490 00500 00510 00520 00525
; 456 INTERRUPT PROGRAMMA
02/10/84 D.HENDRIKSEN.
VOOR NEWDOS-80 EN PROGRAMMAS ONI)ER NEWDOS-80 DIE ; INTERRUPTS TOESTAAN.
HIM EM
INTADR
DOS VIDEO
TOETS
BEGIN
()RG EQU EQU EQU EQII EQU
0FF9011 4049H 401311 402DH 3FBCII 3810H
LD
HLAINTADR) (EXIT+1),HL
DI
LI) LD
LI)
( E NTADR),HL
DEC
HL
EI JP PUSH
DOS AF
LD
START
LD
CP JP POP EX LD
EX PUSH LD
CALL LD LD
CALL LD
LI) CALL LI)
EXIT
(HIMEM),HL
A,(TOETS) 70H NZ,RESTO
AF
(SP),HL (STPLOK),HL (SP),HL
AF A. (STPLOK)
ASC (VIDEO),A A,(STPLOK) ASC1
(VIDEO-1),A
CALL
A. (STPLOK -1) ASC (VII)EC) -2(,A A,ISTPLOK+11 ASC1
POP JP
AF 0
LD
RESTO
HL, START
LD
ONDERBREEK DE INTERRUPT
KETEN DIE GAAT VIA
RST 38H - JP 4012 - JP 45F2.
EN PLAATS ER DE
ONDERSTAANDE
ROUTINE TUSSEN DIE
BEGINT BIJ HET LABEL START, PAS OOK METEEN HIMEM AAN.
HIER START DE INTERRUPT-ROUTINE. VRAAG TOETSENBORD AF TOETSEN 4-5-6 SAMEN IN ? NZ , DAN TOETSEN NIET IN ! WEL IN DAN HIER VERDER. DOOR BOVENSTAANDE POP STAAT BOVEN OP DE STACK NU HET HET ADRES WAT WE WILLEN DISPLAYEN. ZET HET IN DE LOKATIE STPLOK MAAK HET ASCII EN GEEF HET WEER OP HET VIDEOSCHERM IN DE LOKATIES VIDEO TOT VIDEO-3
(VIDEO-3),A ; DEZE JP WORDT DOOR HET PROG. : INGEVULD! 53
00530 ASC 00540 00550 00560 00570 00580 VERDER 00590 ASC1 00600 00610 00620 00630 00640 00650 STPLOK 00660
AND OR CP JP ADD
RET RRA RRA RRA RRA CALL
RET DEFW END
OFH ; MAAK LOW NIBBLE VAN A ASCII 30H 3AH M,VERDER A,7
HYPOTHEEK-PROGRAMMA 10 20
; MAAK HIGH NIBBLE VAN A ASCII
, ##U,###.0/t"
40 50
ASC OH BEGIN
; BEWAAR HIER INHOUD V D STACK
60 70 80 90
VIDITEL Voor bezitters van het programma VIDITEL van Upward Systems, versie 1.9 is het na enig zap-werk mogelijk ook het privé-codenummer automatisch op te geven bij het inloggen. Op die manier blijft geheimhouding, ook met bezoek, gewaarborgd. In het programma bleek zondermeer geen ruimte te zijn voor de privé-code , omdat op 520D een byte staat wat enige malen wordt gecontroleerd. Ik heb dit verplaatst naar 5211 en de andere adressen aangepast. De ZAPS worden als volgt Sector 00 byte 18 wordt privé-code (was 00 06 42 00, even controleren !!) 00 1C 00 06 42 00 (controle-byte opgeschoven) 11 (was OD) 07 92 11 idem Cl
12 3D 12 55 12 88 12 BO 13 7E Sector 07 byte F3 wordt 08 AB 09 39 09 BD 10 4A 10 AD 21 11 AO 11
Joop van Dam.
54
CLS:CLEAR150:PRINTSTRING$(63,"-"):PRINTTAB(20)"*" H Y P 0 THEEK***":PRINTSTRING$(63,"-"):PRINT PRINTTAB(23)CHR$(143);CHR$(143);" VIDEOVERSIE ";CHR$(143); CHR$(143) DEFDBLA,C,K,R,S,Z:DEFINTF,L,N,T:A$="00,###.#11":B$="00.11#"
idem
idem idem idem idem 12 ( was 0E) idem
idem
idem idem idem idem
icbmn
100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270 280 290 300 310
PRINT:PRINT"JAAR VAN AFSLUITEN (4 CIJFERS) ............ PRINTTAB(45)CHR$(27);:INPUTNJ$:NJ=VAL(NJ$):IFLEN(NJ$)<40RNJ 12THENPR1NTTAB(45 ":GOT070 )CHR$(27);" PRINT:PRINT"KAPITAAL (MAX. 500000) ................... PRINTTAB(45)CHR$(27);:INPUTK:IFK<=0ORK>500000PRINTTAB(45)CH ":GOT090 R$(27);" PRINT:PRINT"RENTEPERCENTAGE PER JAAR .................... PRINTTAB(45)CHR$(27);:1NPUTR:R=R/100:IFR<=0PRINTTAB(45)CHR$ (27);" ":GOT0110 PRINT:PRINT"LOOPTIJD IN JAREN (2 TOT MAX. 30) ......... PRINTTAB(45)CHR$(27);:INPUTN:IFN<20RN>30PRINTTAB(45)CHR$(27 ":GOT0130 );" PRINT:PRINT"(JAAR='J'; HALFJR.='H'; KWARTAAL='W;MAAND='W )": PRINT:PRINTTAB(5)"VOER CODE IN VAN BETALINGSPERIODE": X$=INKEYS IFX$="ORXS<>"J"ANDXS<>"H"ANDX$<>"K"ANDXS<>"M"THEN150 CLS:PRINTTAB(19)">>> MENU <<<":PRINT:PRINT: PRINTTAB(7) "KIES UIT:":PRINT PRINTTAB(10)"1-HYP. MET GELIJKE ANNUITEITEN POSTNUMERANDO)" PRINTTAB(10)"2-HYP. VLG. LINEAIRE METHODE (POSTNUMERANDO)" PRINTTAB(10)"3-HYP. MET GELIJKE ANNUITEITEN (PRAENUMERANDO)" PRINTTAB(10)"4-HYP. VLG. LINEAIRE METHODE (PRAENUMERANDO)":PRINT:PRINT PRINT"TYPE UW KEUZE:" LS=INKEY$:A=VAL(L$) IFLS="ORA<10RA>4THEN230 IFA=10RA=2THENF1=12ELSEF1=34 IFX$="J"GOSUB1100 IFXS="H"GOSUB1130 IFXS="K"GOSUB1170 IFX$="M"GOSUB1210 CLS:ONAGOT0310,500,630,850 Z1=1+R:CW=K*R*Z1TN/(Z15N-1):C=INT(CW*100+.50)/100
55
320
PRINT"WISKUNDIGE ANNUITEIT"; USINGAS;C;:PRINT" P E R ";XS:PRINT 330 PRINT:PRINT:PRINT" OVEREENGEKOMEN ANNUITEIT PER ",XS 340 PRINTTAB(41)CHRS(27);:1NPUTCO 350 IF(CO-C)<-.005ORCO-K*(1+R)>.005THENCLS:GOT0320 360 PRINT:GOSUBI060 370 IFRS="T"THEN380ELSEGOSUB1040 380 AI=C0-K*R:SR(0)=K 390 FORL=1T0N 400 AF=A1*Z1T(L-1) 410 IFL=NTHENAF=SR(L-1) 420 IFAF>=SR(L-1)THENAF=SR(L-1) 430 AF(L)=INT(AF*100+.50)/100:AF(0)=AF(0)+AF(L):AF(0)=INT(AF(0) *100+.50)/100:SR(L)=K-AF(0):RE=R*SR(L-1):RE(L)=IN1.(R E*100 +.5)/100 440 RT(L)=RT(L-1)+RE(L):PA=AF(0)/K*100 450 IFRS="T"ANDSR(L)<0.005THENI240 460 IFRS="T"PRINT"."; 470 IFR$<>"T"THENGOSUB1000 480 NEXTL 490 G0T01220 500 GOSUB1060 510 IFRS="T"THEN520ELSEGOSUB1040 520 SR(0)=K 530 F0RL=1T0N 540 AF(L)=K/N 550 IFL=NTHENAF(L)=SR(L-1) 560 AF(L)=INT(AF(L)*100+.50)/100 570 AF(0)=AF(0)+AF(L):AF(0)=INT(AF(0)*100+.50)/100:SR(L)=K-AF(0 ):RE(L)=R*SR(L-I):RE(L)=INT(RE(L)*100+0.50)/100:RT(L) =RT(L -1)+RE(L):PA=AF( 0)/K*100 580 IFRS="T"ANDSR(L)<0.005THEN1240 590 IFR$="T"THENPRINT".";:GOT0610 600 GOSUB1000 610 NEXTL 620 IFTS="T"THEN1220ELSEGOT01240 630 CW=K*R/(1-(1-R)TN):C=INT(CW*100+.50)/100 640 PRINTHWISKUNDIGE ANNUITE1T "; USINGA$;CW;:PR1NT" P E R ";X$:PRINT 650 PRINT:PRINT:PRINT" OVEREENGEKOMEN ANNUITEIT PER ";X$ 660 PRINTTAB(41);CHR$(27);:INPUTCO 670 IF(CO-C)<-.005ORCO-K*(1+R)>.005THENCLS:GOT0640 680 PRINT:A1=(CO-K*R)/(1-R) 690 GOSUB1060 700 IFRS="T"THEN710ELSEGOSUB1040 710 L=1:RE(1)=K*R:RE(1)=INT(RE(1)*100+.50)/100:RT(1)=RE(1):SR(1 )=K 720 IFRS<>"T"THENGOSUB1000
56
730 740 750 760 770
FORL=2TON+I AF(L)=A1/(1-R)T(L-2) IFL=N+1THENAF(L)=SR(L-1) IFAF(L)>=SR(L-1)THENAF(L)=SR(L-1) AF(L)=INT(AF(L)*100+.50)/100:AF(0)=AF(0)+AF(L):AF(0)=INT(AF (0)*100+.50)/100:SR(L)=K-AF(0) 780 IFL=N+ITHENRE(L)=0ELSERE(L)=R*SR(L) 790 RE(L)=INT(RE(L)*100+.50)/100:RT(L)=RT(L-1)+RE(L):PA=AF(0)/K *100 800 1FRS="T"ANDSR(L)<0.005THEN1240 810 IFRS="T"THENPRINT"."; 820 IFRS<>"T"THENGOSUB1000 830 NEXTL 840 G0T01220 850 GOSUBI060 860 1FRS="T"THEN880 870 IFRS<>"T"THENGOSUBI040 880 L=1:RE(1)=K*R:RE(1)=INT(RE(1)*100+.50)/100:RT(1)=RT(1)+RE(1 ):SR(1)=K 890 IFRS<>"T"GOSUB1000 900 FORL=2TON+1 910 AF(L)=K/N 920 IFL=N+ITHENAF(L)=SR(L-1) 930 AF(L)=INT(AF(L)*100+.50)/100:AF(0)=AF(0)+AF(L):AF(0)=INT(AF (0)*100+.50)/100:SR(L)=K-AF(0) 940 RE(L)=R*SR(L):RE(L)=INT(RE(L)*100+.50)/100:RT(L)=RT(L-I)+RE (L):PA=AF(0)/K*100 950 IFIO="T"ANDSR(L)<0.005THEN1240 960 IFRS="T"THENPRINT"."; 970 IFRS<>"T"THENGOSUB1000 980 NEXTL 990 1FTS="T"THEN1220ELSEGOT01240 1000 PRINTTAB(0)USING"###";L;:PRINTTAB(4)USINGA$;AF(L);:PRINTTAB (16)USINGAS;RE(L);:PRINTTAB(27)USINGCS;RT(L);: PRINTTAB(43) USINGAS;SR(L),:PRINTTAB(51)USINGAS;PA 1010 1FSR(L)<0.005THEN1220 1020 IFL/12=INT(L/12)ANDL>ITHENGOSUB1040 1 030 RETURN 1 040 CLS:PRINTTA1I(0)X.S;TAB(5)"AFLOSSING";TAB(20)"RENTE";TAB(30)" CUM.RENTE";TAB(43)"SCHULDREST";TAB(56)"ZAFGEL." 1 050 PRINTTAB(0)"---";TAB(5)" ";TAB(16)" - - - - - - ";TAB( 29)" - - - - - - ";TAB(43)" - - - - - - ";TAB(56)" - - - ":RETURN 1 060 PRINT"--TYPE 'T' VOOR TOTALEN, ELKE ANDERE TOETS VOOR AFLOSSINGSPLAN--" 1 070 RS=INKEYS:IFRS="THEN1070 1 080 IFR$="T"THENPRINT">>> EVEN GEDULD,BEN BEZIG <<<" 1090 RETURN 1100 FP=1:N=FP*N:R=R/FP:XS="JR.":L=N:DIMAF(N+2),RE(N+1),SR(N+1),
57
RT(N+1):T 8=12-NM+1 1110 IFF1=12THENTB=FIX(TB/12):RETURN 1120 TB=I:RETURN 1130 FP=2:N=FP*N:R=R/FP:XS="H.JR.":L=N:DIMAF(N+2),RE(N+1),SR(N+1 ),RT(N+1):TB=12-NM+I 1140 IFF1=12THENTB=FIX(TB/6):RET1JRN 1150 IFFI=34ANDTB/6=INT(TB/6)THENTB=TB/6:RETURN 1160 TB=FIX(TB/6)+1:RETURN 1170 FP=4:N=FP*N:R=R/FP:XS="KWRT.":L=N:DIMAF(N+2),RE(N+1),SR(N+1 ),RT(N+1):T8=12-NM+1 1180 IFF1=12THENTB=FIX(TB/3):RETURN 1190 IFF1=34ANDTB/3=INT(TB/3)THENTB=TB/3:RETURN 1200 TB=FIX(TB/3)+I:RETURN 1210 FP=12:N=FP*N:R=R/FP:X$="MND.":L=N:DIMAF(N+2),RE(N+1),SR(N+1 ),RT(N+1):TB=12-NM+1:RETURN --- TYPE '1" VOOR TOTALEN --1220 PRINT:PRINT:PRINT" 1230 V$=INKEYS:IFVS<>"T"THEN1230 ";USINGA$;AF(0) 1240 CLS:PRINT(1271,"TOTAAL AFLOSSINGEN ";USINGCS;RT(L) 1250 PRINT@5*64+15,"TOTAAL RENTE 1260 PRINT" ";USINGCS;AF(0)+RT(L) 1270 PRINT@7*64+15,"TOTAAL-GENERAAL 1280 PRINTTAB(34)"========.===" 1290 IFLS="3"THENN5=L-1ELSEN5=L 1300 IFL$="1"ORLS="3"PRINT:PRINT"EFFECT1EVE LOOPTIJD"; ";:PRINTUSINGAS; N5;XS:PRINT"OVEREENGEKOMEN ANNUITEIT CO; :PRINT" PER ";XS:PRINT"WISKUNDIGE ANNUITEIT PRINTUSINGAS;C;:PRINT" PER ";XS 1310 PRINT:PRINT"MAAND EN JAAR VAN AFSLUITEN:"; STRS(NM);"/";RIGHTS(STR$(NJ),4) --- WENST U OVERZICHT VAN BEPAALDE "; 1320 PRINT:PRINT:PRINT" X$;" ?";"J/N ---" 1330 RS=INKEYS:IFRS="THEN1330 1340 IFRS<>"J"ANDR8<>"N"THEN1330 1350 IFRS="N"THEN1430 VOER NUMMER IN VAN GEWENSTE ";X$ 1360 CLS:PRINT" 1370 PRINTTAB(45)CHRS(27);:INPUTL1 1380 IFL1<=0ORL1>LTHEN1360 1390 PRINTTAB(0)XS;TAB(6)"AFLOSSING";TAB(19)"REN1'E";1'AB(30)"CUM. RENTE";TAB(42)"SCHULDREST";:PRINTTAB(54)"%AF GEL." 1400 PRINTTAB(0)" - - ",TAB(6)" - - - - ";TAB(18)" - - - - ";TAB (29)" - - - - - ";TAB(42)" - - - - ";TAB(53)" - - - - 1410 PRINTTAB(0)USING"###";LI;:PRINTTAB(5)USINGAS;AF(L1);:PRINTT AB(17)USINGAS;RE(L1);:PRINTTAB(27)USINGCS;RT(1 1);: PRINTTAB(42)USING AS;SR(L1);;PRINTTA8(47)USINGAS, (K-SR(L1))/K*100 1420 GOT01320 1430 CLS:PRINT"AFTREKBARE RENTE IN KALENDERJAAR" 1440 PRINT"SCHULDREST EINDE JAAR T.B.V. VERMOGENSBELASTING." 58
1450 PRINTSTRINGS(63,"=") 1460 PRINTTAB(2)"JAAR";TAB(15)"RENTE";TAB(27)"SCHULDREST";TAB(42 )"%AFGEL.";TAB(54)" JAARLAST" 1470 PRINTTAB(2)"----";TAB(10)" - - - - - ",TAB(27)" - - - - AB(42)" - - - ",TAB(53)" - - - - 1480 AF(0)=0 1490 1FX$="JR."THEN1710 1500 FORNG=OTOTB:RO=RO+RE(NG):A0=A0+AF(NG) 1510 1FTB=OGOSUB1700:GOT01570 1520 IFF1=12ANDNG=TBANDSR(NG)<>0GOSUB1700:GOT01570 1530 IFF1=34ANDNG=TBANDNG<>0ANDSR(NG)<>0GOSUB1700:GOT01570 1540 IFF1=12ANDSR(NG)=OGOSUB1700:GOT01660 1550 IFF1=34ANDNG<>0ANDSR(NG)=OGOSUB1700:GOT01660 1560 NEXTNG 1570 FORNG=TB+1TON-FP+TB:NR=NR+1:RO=RO+RE(NG):A0=A0+AF(NG) 1580 IFNR/FP=INT(NR/FP)THENNJ=NJ+I:GOSUB1700 1590 IFSR(NG)=0ANDNR/FP=INT(NR/FP)THEN1660 1600 IFSR(NG)=0ANDNR/FP<>INT(NR/FP)THEN1650 1610 NEXTNG 1620 FORNG=N-FP+TB+1TON+FP:RO=RO+RE(NG):A0=A0+AF(NG) 1630 IFSR(NG)=OTHEN1650 1640 NEXTNG 1650 PRINTTAB(1)NJ+1;TAB(8)USINGC8;RO;:R1=81+RO:AX=AX+AO+RO:PRIN TTAB(25)USINGCS;SR(NG);:PRINTTAB(39)USINGAS;(K- SR(NG)) /K*100;:PRINTTAB(53)USINGAS; AO+RO 1660 PRINTTAB(10)" - - - - - ";TAB(53)" - - - - 1670 PRINT"TOTALEN";TAB(8)USINGCS;R1;:PRINT" ";"-";CHR$(94);: PRINTTAB(25)"CONTROLE";:PRINTUSINGCS;RT(L);:PRINTTAB (53)USINGAS;AX 1680 PRINTTAB(10)"= - - - - ";TAB(53)" 1690 END 1700 PRINTTAB(1)NJ;TAB(8)USINGCS;RO;:PRINTTAB(25)USINGCS;SR(NG); :PRINTTAB(39)USINGAS;(K-SR(NG))/K*100;:PRINTT AB(53) USINGAS;AO+RO:R 1=R1+RO:AX=AX+AO+RO:R0=0:A0=0:RETURN 1710 FORNG=OTON+FP:RO=RO+RE(NG):A0=A0+AF(NG) 1720 IFTB=OANDNG=OGOS1JB1700:NJ=NJ+I:GOT01760 1730 IFTB<>0ANDNG=OTHEN1760 1740 GOSUB1700:NJ=N1+1 1750 IFSR(NG)=OTHEN1660 1760 NEXTNG - - - - - - - - =========s=ss====.= 1770 t =========—==========mss. (C) W.A.KOPPIJN 1780 ' BERGMANNSTRAAT 62 1790 ' 5615 KG EINDHOVEN 1800 I VERSIE 22/09/1984 1810 ' 1820 >> AANGEBODEN AAN TRS-80 GEBRUIKERSVERENIGING << 1830 ' ======.====. 1840 59
ZELFSTARTENDE DATA-DISK In Northern Bytes Vol.5 Nr.6 staat beschreven hoe een diskette zornaer DOS zelf-startend gemaakt kan worden. Dit zelf-starten is dan wel beperkt tot één (machinetaal-) programma, maar met een beetje fantasie zijn hiermee toch leuke dingen te verrichten. Voorwaarde is dat de diskette onder NEWDOS/80 geformat is, het betreffende programma geen DOS-calls bevat (logisch, want er is geen DOS !) en dat het programma op aaneengesloten sectoren is weggeschreven. Dit is te controleren met "DIR A". Onder de kolom "EXTS" moet dan een 1 staan). De gegevens voor Model-III klopten niet helemaal, maar deze zijn gecontroleerd en verbeterd door Karel Honings. De werkwijze is als volgt 1. Disk formatten. (Voor Model-I in single density). 2. Machinetaal-programma naar deze geformatte disk copiëren. (voor 1-drive-bezitters : COPY 0 SPROGRAM/CMD /CMD) 3 Met Superzap begin-sector en -track van dit programma opzoeken. 4 BOOT/SYS zappen (alle waarden HEXADECIMAAL). Voor Model-I sector 0 byte 12 wordt nummer van begin-sector byte 13 wordt nummer van begin-track byte 4B (--C8) wordt C9. Voor Model-III sector 1 byte 05 wordt nummer van begin-sector byte 06 wordt nummer van begin-track byte 3E (—C8) wordt C9. (wanneer het de eerste file is zal deze doorgaans op sector 05 van track 00 komen te staan. Op byte 12 en 13 (05 en 06 voor Model-III) van BOOT/SYS komt dan te staan "0500") 6. Gezapte disk in drive 0 zetten. 7. Resetknop indrukken. De file wordt nu door BOOT/SYS ingelezen en gestart.
BOOT ZAP Voor de twee-drive-bezitters die het bovenstaande willen toepassen en meer dan één programma op hun zojuist verworven zelfstartende data-disk willen zetten volgt hier nog een tip Het copiëren van specifieke cassette-programma's moet, zoals bekend zal zijn met LMOFFSET geschieden. Voor programma's die DOS overlappen blijft het in dit geval nodig een hoger start-adres te kiezen. De vraag 60
"SHALL APPENDAGE BE SUPPRESSED moet dan met "N" worden beantwoord, evenals de daarop volgende vraag : "DISABLE DOS ?" (want op het moment van inlezen is er dus geen DOS). Het volgende programma biedt de mogelijkheid meer van dergelijke programma's op de data-disk te zetten en te starten. in regel 20 (menu) moeten de programma-namen worden vermeld en in regels 50 en 60 de juiste startposities worden ingevuld. Regel 10 zorgt er voor dat bij het runnen het programma wordt gesaved als de SHIFT ingedrukt wordt gehouden. 10 IFPEEK114464)=1THENSAVE"bootzap/bas:1" 20 CLEAR300:CLS:PRINT(4192."Menu Zelfstartende Level II disk" :PRINT:PRINT"1 Prog 1":PRINT"2 — Prog 2":PRINT:PRINT"Welke ?":XS=INKEYS 30 IS—INKEYS:IFIS—"THEN30ELSEONINSTR("12",IS)GOT050,60'kan worden uitgebreid 40 GOT030 50 S=X:T=Y:PGS—"Progl":GOT01.00'S — sector T — track Hier moeten DECIMALE waarden worden ingevuld. 60 S—X:1=Y:PGS="Prog2":GOT0100 100 FIELD1,18ASNS.2ASBOSS,236A5NN5'voor Model-III : 5 AS NS,2 AS BOS,249 AS NNS 110 OPEN"R",1,"boot/sys:1" 120 GET1.1 130 LSETBOS—CHRS(S)+CHRSIT) 140 PUT1,1:CLOSE 150 CLS:PRINTCO320."Programma "PGS" kan nu in Drive 0 worden opgestart":DEFUSR-0 160 PRINT:PRINT"Druk op <ENTER> als disk in drive 0 zit ";:INPUTA:Z=USR(0) Joop van Dam.
KLOK-CORRECTIE MODEL III Deze one-liner brengt voor een Model III zonder disk de klok-snelheid terug van 60 naar 50 Hz. Normaal loopt de klok van een Model III namelijk te
langzaam. 100 DATA17,248,127,213,219,236,33,22,66,53,192,54,25,195,94,53,58,22.66,254, 25,195,156.53:V=127*256:FORX-232T0255:READD:POKEV+X,D:NEXT: X1=16455:X2-16456:POKEX1,232:POKEX2,127:POKE16419,95: P0KE16561,231:P0KE16562,127:CLEAR50
Ruud Broers, Nieuwegein. 61
WAAROM 64K DRAM ? MODEL I, MODEL III, VIDEOGENIE, KOMTEK bezitters opgelet !! Het waarom van 64k DRAM in je computer. Stelling Als je het DRAM geheugen van je computer gaat veranderen, neem dan 64k DRAM ic's. (DRAM staat voor dynamisch RAM). Hoe logisch dat is zal ik proberen duidelijk te maken. Het voornaamste is. dat je met 64k DRAM ic's flexibel blijft, je computer zal dan in de toekomst ook aan je eisen kunnen blijven voldoen. Dit geldt voor alle TRS-80 modellen en look-a-likes. Dus ook (of beter gezegd juist?) voor model III en KOMTEK. Model I cassette gebruikers hoef je op dit gebied niets meer uit te leggen, maar bezitters met een expansion interface kijken je glazig aan als je ze probeert duidelijk te maken, dat de grotere geheugen ic's ook dan voordelen hebben. Voorbeelden : een KOMTEK op totaal 48k brengen kost zo'n 200 gulden. Het installeren van 64k ic's, waarvan je dan 48k kunt gebruiken, kost 250 tot 300 gulden. Dat kost inderdaad nu meer, maar in de toekomst kun je hem gaan gebruiken om CP/M te draaien, of, door in de overige 8 ic voeten nogmaals 64k ic's te pluggen (kosten nu zo'n 225 gulden) en dan samen met een paar ander ic's, kun je hem uitbreiden met een -goedkope- RAMDISK. Programmatuur daarvoor bestaat al. Model III bezitters zetten met het installeren van 64k DRAM ic's de eerste duidelijke stappen naar een upgrade naar model IV niveau. Voor model I bezitters met 64k in het toetsenbord en meer RAM in de expansion interface, beschikken over dezelfde mogelijkheden als KOMTEK gebruikers. Als je dan die 64k DRAM géinstalleerd hebt, of hebt laten installeren, dan gaan er meer deuren voor je open. Zoals CP/M, of een RAMDISK.
Voor wie is dat wat, CP/M? Diegenen, die een TRS-80 computer hebben, maar daarnaast CP/M kennen, van vrienden of van hun werk, hoef ik niets uit te leggen, die weten allang of ze dat wel of niet willen. De groep, die de TRS-80 professioneel gebruiken, of op scholen, die kunnen CP/M heel goed gebruiken, omdat er zoveel software voor verkrijgbaar is. 62
De ervaring bij ons in afdeling west is, dat er weinig hobbyisten zijn die, hoewel ze vol enthousiasme CP/M modificaties gekocht hebben, het ook daadwerkelijk veel zijn gaan gebruiken. Dat zijn er slechts enkelen, maar die doen dat dan wel heel bewust. In REMARKS nr 33, een beetje in een hoekje weggedrukt, heb ik al wat geschreven over het hoe en waarom van CP/M modificaties. Naast geheugen uitbreiding, (als je tenminste 64k CP/M wilt draaien), is er nog een handvol 1"I'L ic's nodig om het geheel in- en om- te schakelen. (Over zo'n handvol ic's hoef je niet in te zitten : er zijn compleet gemonteerde insteek printjes te koop, die dat allemaal doen.) En dan nu RAMDISK. Een RAMDISK is een manier van informatie opslaan, als ware het een diskdrive. Aileen het medium is niet een schijfje met een magnetische laag, maar het zijn gewone RAM ic's. RAMDISK's worden steeds vaker toegepast, by in het nieuwe model IV van TANDY.
RAMDISK's zijn voor verschillende computers voor goed geld te koop. Voor de TRS-80 gebruiker zijn ze nu ook bereikbaar. De ingrediënten zijn verkrijgbaar : meer RAM en een printje met wat logica, zodat alles naar behoren werkt. Programmatuur is er ook : op de model I is er al mee gedemonstreerd en
op de model III wordt aan de installatie gewerkt.
RAMDISK is net als zoveel dingen : wat de boer niet kent dat eet hij niet, maar als je er eenmaal aan gewend bent dan wil je niet anders. Voor wie is nou zo'n RAMDISK zinvol ? Dat is heel simpel : voor iedereen, die een tijd lang met dezelfde files werkt, en alsmaar op z'n drives zit te wachten. Want dat diskdrives langzaam zijn merk je pas als je een file wilt sorteren, of als je gegevens
zoekt in een grotere database. Een nadeel is, dat de inhoud van een RAMDISK wegvalt bij een stroomstoring. Dat kan bv. opgevangen worden door een noodvoeding. Of door het regelmatig even copieren van de gewijzigde files van de RAMDISK naar een gewone schijf. Of door veranderingen van een file zowel naar de RAMDISK als naar een gewone schijf weg te schrijven, terwijl bij lezen van die file de RAMDISK aangesproken wordt, zodat er toch een behoorlijke tijdwinst is. Dan is er nog een evident voordeel : de RAMDISK betekent een betrekkelijk goedkope drive extra. Vooral handig voor diegenen, die maar 1 drive hebben. En wat zijn de mogelijkheden voor iemand die uitsluitend een cassette systeem heeft ? Theoretisch is het goed mogelijk om de RAMDISK van cassette te laden en dan net zo te werken alsof je een compleet disk systeem hebt. Gezien de 63
inventiviteit van verschillende cassette gebruikers hoop ik dit nog eens met vereende krachten te laten draaien. En dan : een RAMDISK is veel goedkoper dan een expansion interface met diskdrive, terwijl hij, eenmaal geladen, veel sneller is.
A ID V E Ft
I\T
IE
S3
UW PARTNER
Dan is er nog een evident voordeel van een RAMDISK. Hij slijt niet, zoals
een gewone drive. En dat scheelt op den duur aan onderhoud en aan reparaties, dat geldt vooral voor disk operating systemen als NEWDOS omdat die voor elk wissewasje de systeem schijf nodig hebben, en dat hoort dan definitief tot het verleden.
X
Er is nu een printje (SELECTOR) verkrijgbaar, dat op de plaats van de processor komt, en dat in principe samen met 64k DRAM ic's de TRS-80 computers aanvult. Met deze uibreiding is het dan mogelijk om CP/M te draaien en/of een RAMDISK toe te passen, met daarnaast nog een aantal nuttige mogelijkheden in verband met bankselecting onder BASIC (tot nu toe ongehoord) en speedup tot 3* de oorspronkelijke snelheid (zie REMARKS 34).
(in ..:] aniu kont vastl,:-
ur-■ dat
van Verschillende kanten kunt be',
tercn.
De SELECTOR wordt al gebruikt in de model 1 (zowel amerikaanse als japanse versie), in de VIDEOGENIE en in de KOMTEK. Het gebruik in de MODEL III is thans onderwerp van nadere studie. Samenvattend : met (snelle) 64k DRAM en de SELECTOR kun je de snelheid verhogen tot 5.3 Mhz, kun je CP/M draaien en kun je de performance van je systeem opvoeren door de toepassing van een RAMDISK (met als prettige extra winst minder slijtage van je drives). Voor vragen over het inbouwen van 64k in je computer, of over de SELECTOR, of voor een samenwerking wat betreft het schrijven van software in deze kun je me tussen 20.00 en 23.00 bellen : 020-712996.
X
=, t daarin verwerkt dc-, He
nen (hoogste/laagste
J aar) Het
IT • aande Ian van
Rence Rozendaal.
van kanr
f.
na,,-
• •■ in aanpasLaar
or i if'
In. ir
la -;,,,eft aan irAikatie • te Roi,en Ge manier
en t,
n met. U
Dos
ec, en
van de ,usonprinter.
BEELD-UULLER Boze tongen beweren, dat kleine programma'tjes alleen maar goed zijn om pagina's in Remarks op te vullen. Onderstaand programma'tje is er zo één. Het vult bovendien het beeld en werkt alleen onder Level-III 10 FORH=0T0127:FORV-47TO0STEP-1:LINE(H,V)-(127-H,47-V),SET 20 IFRND(2)=2THENLINE(H,V)-(127-H,47-V),RESET:NEXTELSENEXT 30 FORV-0T047:FORH=0T0127:LINE(127-H,47-V)-(H,V),SET 40 IFRND(2)-2THENLINE(127-H,47-V)-(H,V),RESET:NEXTELSENEXT 50 RUN
64
X
Tte1t de7, . • -namma' s - I.. t betreffende 1 - , ever te maken naar E. Postbus 9597 Voor c'okumentatio 1_ ,C6 GB Amsterdam C20-12P9P2/197454 PG nr 2,6959P
65
ADVERTEREN IN REMARKS
A ANTG E3CIE) E N
Commtevrciële fatd.-vertetrtties :
1/1 pagina, formaat 120 mm breed, 170 hoog, prijs f 250.1/2 pagina, formaat 120 mm breed, 80 hoog, prijs f 150.Advertenties dienen fotoklaar te worden ingeleverd op genoemd formaat of groter in dezelfde breedte / hoogte-verhouding. Voor plaatsing in het februari-nummer moeten deze uiterlijk op 1 januari 1985 in het bezit zijn van de advertentie coördinator J. I. I. de Jonge, Pieter Houtkooperhof 10, 1944 PL BEVERWIJK, Telefoon 0 25 10 - 41 5 47 Ina 19.00 uur) Metrskretrricsirs
Deze advertenties kunnen alleen door leden (gratis) geplaatst worden wanneer zij geen commercieel karakter hebben, niet meer dan 124 tekens bevatten, worden ingezonden op onderstaand formulier (of copie), zijn voorzien van naam , adres en lidnummer. 0 AANGEBODEN
0 RUILEN
GEVRAAGD
LID NR.
ADRES WOONPLAATS
TEL.
Vóér 1 januari 1985 zenden naar
J. H. van Dam,
HammarskiÖldplaats 322, 3069 RJ ROTTERDAM.
66
TRS80 M1L2 groene monitor basi-
code cass.rec. -270 programma's handl. en veel documentaties. Prijs [1450.--. Te1.04780-82296 CP/M adapter voor Model-I (zie adv. Remarks 28 blz. 39) f 95.-Printer Microline-80 voor f 699.-R.v.Zutphen 04130-41194 Veghel TRS-80 M1L2 16K Monitor Cass.rec etc compleet met printer, boeken en software. f 1500.-- L.v.d.Plaat Tel. 03240-17133 T.e.a.b. programmeerbare karaktergenerator high resolution voor (oude) TRS-80 Mdl I - software. 071-891654 (18.00-19.30 uur) TRS-80 modi 'evil 48K incl cass. rec, monitor, lowercase, basicode, Editor/Ass, Level-III Basic, Pascal Pr.f1400.--. 072-611571
•1111 1111111111111111111111 111 1111111111111111111111111111111 •11111111111111111111111 11111111 NAAM
MARSKRAMERS
Bij wijze van proef kunnen alléén Marskramers v66r 1 januari 1985 worden aangeboden via VIDITEL, Klantnummer 40 00 14 642.
Modell + Exp.int. 48K, 2 diskdrives Tandy ss/sd, Lineprinter VII. Alles in prima staat. Prijs f 3600.-. Junkers 02510-22449 na 5 uur. TRS-80 Modell Level2 48K met groene monitor, cass.rec, Basicode, software en boeken. Prijs f1500.-Tel. 05915-53724 MI-LII 32K, 1.case basicode Hspeed softw. literatuur joystick koffers 11600.--. Siemens telex + ponsm. v. onderd. werkend f100.--. 030-730894 TRS-80 Mod.1 Lev.2 48K + monitor, cass.rec, boeken, software. Prijs 1 1000.--. Te1.05120-31018 Te koop : wegens overstap op disk al mijn spelletjes op cassette. Alles origineel. Big Five etc. Incl. handl. 13.Hey1 040-855267
Koopje : TRS-80 Model-I 48K, monitor, RS232, 2 diskdrives, veel software. 0, wat antiek. Daarom slechts 12000.--. Te1.013-674472
TRS-80 Model-I Lev-II 16K groene monitor recorder basicode handlei-
dingen. f1000.--. Te1.02152-67100
2 Micropolis 51" diskdrives SS/SD samen voor f300.--. Tel. 03483-1693 A.u.b. na 18.00 uur Weinig gebr. Stringy Floppy met wafers + progr. 1320.--. TRS-80 M-I 48K, mon, cass, ref.man, Basicode int, boeken. f 1400 .- - . 05930-3724 TRS-80 Model-I Level-II, monitor. cassetterecorder en veel software. Prijs f1150.--. Bel 04780-88515 TRS 80 Model I Level-II 16K -+ monitor f800.--. Epson MX70 :350.--. Te1.035-49954, 's avonds 035-19094 TRS-80 M-I L-II, Exp.int, dubbelz. diskdr.40T dubbel den. CP/M ingeb. Veel softw. en doe. Ev. cass.rec -tcassettes 13000.--. Te1.03200-32629 TRS-80 Model-III Level-II 48K, cass.rec, handleiding, software. -
-
Prijs f900.--. Te1.05734-553
Tandy DMP-100 printer Centronicsinterface. 480 byte buffer. Prijs
1 600.--. Te1.040-518767
Printerkabel met interface M1 aan printer zonder Expansion 190.--. G.F.Avis 020-456005
TRS-80 M1 L2, cass, mon, printer GP80 Seikos. div softw, doos papier, alles aangesloten en werkend. f1750.--. 078-157795 TRs-so M1 L2 48K, monitor groen, 2 drives 40T DS TEAC, veel softw Te1.04936-2661. Vraagprijs f3000.--.
MCP disk-contr/printer interf. incl voeding, Scripsit org + manual Edassem org. Beide cass. versie. Alles t.e.a.b. Na 19.00 uur 01846-7852 TRS-80 M1 L2 48K groene mon cas ree, Basicode, schakelaar 1.7MHz/ 3.4MHz, boeken. softw. f 1500 .--. Te1.05915-53724 Nieuw Amsterdam T.e.a.b. wegens modelverandering orig software + doe voor de model-I en LNW. Voor info bel 01820 25405 na 18.00 uur Brem. -
67
Seikosha GP80A printer, papier max 8", TRS-80 interfacekabel Tegen elk aann. bod. Inl. 01608-20755 TRS-80 MI L2, Exp.interf. 48K, 2 diskdr, Cas.rec, 2 mon, Quick printer, RS232, manuals, softw oa Newdos80, Vcalc. f3500.--. 01883-192Printer DMP200 in doos, 4 maanden oud, met garantie. A. Persad. Tel. 020-799268 Model-III, 2 drives, RS232 interface, Profile 3, antiglans-scherm , stofhoes, boeken, cursus Viditel, enz. f3900.--. Telefoon 03200-30008 TRS-80 M1 Exp.int, 2 dubb. diskdr, Utrechts Bussysteem, RS232, printer, veel software en documentatie. Prijs f4250.--. 050-181837 (Jelle) Tandy TRS-80 Mod.1 compl + cassrec f800.--. Epson printer -t- interface voor Tandy MX8OFT f750.--. Egbert 010-582500/124459 TRS-80 M1 L2 16K, Mon, 2 rec, Lineprinter 3, 25 cass softw, Tel f 19 50 . - - . boeken, diverse 03435-76446 na 18.00 uur TRS-80 M1 L2, Exp.Interf 48K, 1 veel cass.rec, monitor, drive, software -- lektuur. f2250.--. Tel. na 18.00 uur. 070-639310 TRS-80 M1 L2 16K, Mon, Cas.rec, Stringy-fl, RTTY/CW-int Macrotronics M80 met softw f2000.--. Stringy en Int ook apart. 078-170102 TRS-80 M1 L2 16K, gr.monitor, cass.rec, software, printer Microline 80. f1700.--. Printer evt apart te koop. Te1.010-830522 Model-III 32K, cass.rec, Epson-printerkabel, evt. software en boeken ion 80-Micro) J.Dijkstra 050-420338 TRS-80 M1 L2, gr. scherm, cas.rec, exp.int, drive, printer VIII. f 3250..-. Te1.03462-64508 TRS-80 M1 L2 16K, groene monitor, cass.rec, handleiding. Prijs f 1200 . - - . Gespreide bet. mogelijk. Te1.08730-20484 ,
68
TRS-80 Model-III 32K + diverse boeken. 11500.--. Te1.075-211892 TRS-80 M1 L2 16K. cas.rec, printer -interf f1050.--. 4 -kleuren plotter/printer TRS-80 CGP-115. Samen 11 645.--. 058-672359 TRS-80 M1 48K, cas.rec, groene
monitor, div.progr. waaronder
Edtasm, div.boeken. f1300.--. Te1.03200-50773 TRS-80 M1 L2 met mon, software
Pascal, (Tiny compiler, Basic Editor/ass. enz), printer interf. Prijs f 125 0 . - - . Te1.01100-12159
Genie 3003 16K TRS-80-compatible, ingeb. cas.rec. Edit/assembler, Tiny div. Basicode, boeken, Pascal, progr. H.Poort, 023-245292 TRS-80 MI L2 16K, 2jr. oud,
groene monitor, japans keyboard. layout buffer .1- busprint hoezen software. f1175.--. 079-600769 TRS-80 Model-1 met E.I. 48K. 2 diskdrives, veel software, real time clock, daisy-wheelprinter. In één
kou f4250.--. 03404-58584 TRS-80 Mod.3 48K, veel software, boeken, green screen. Prijs f1600.--. R.Duyn Tei.023-355041 TRS-80 Model I Level II, groene monitor, cass.rec, Lineprinter VIII. Samen f1400.--. Te1.05910-12126 TRS-80 Mod-III 48K, 2 drives, RS232, Newdos80. Instant Ass, Aced l 4, Orchestra-90, boeken. 'Fe1.010-372270 TRS-80 M3 48K met cass.rec, software en div. boeken. Prijs f2300.--. Te1.03455-4606 TRS-80 M1 L2 Exp.int.48K, 2 diskdr, 30 disks (div. syst.), cass.rec, 33 cass, 2 cursus Basic cass/disk T.e.a.b Muilwijk Te1.01820-30852 TRS-80 Mod 1 Lev II 16K + zwartgroene monitor incl hoez boek cass f1400.--. Te1.050-344821 Ina 6 uur)
Handl. Profile (qwerty NL) van Tandy. Te koop: TRS-80 M1 L2, gr.mon
11100.--. Uitw. printerinterf. f75.--. Samen f1150.--. 02942-4498 na 19 u Zoek kontakt met Model-4 gebruikers (disk) voor uitw. ervaring Info over bruikbaarheid tekstverw. Kouwenberg 08340-44871 na 19 uur Voor de knutselaar defecte TRS-80 Mod.1 Prijs afhankelijk van defect 03483-1693 Tel. Max. f 300.-Tunderman Eikenlaan 19 Harmelen
Handleiding en documentatie voor Tandy Lineprinter no 3. H.J.Hoenderdos 03410-17695
Terminal-programma (tape) op tape. Software te ruil voor Model-II. ii.v.Hemert Tel. 05202-20738 Eerste 12 nummers van REMARKS, schema + softw voor HiRes op Mod voor I, printerdr Superscripsit Brother HR-1. 01862-1772 na 20 u. LDOS Quarterlies nr.1 en vanaf nr.7. A.J.Hagers Afd. Rotterdam Tel. 01891-2970 TRS-80 M1 L2 16K 4 EI 32K Jap. keyboard 2 diskdr SS/DD 40T of DS/DD event incl printer Epson MX8OFTIII. Na 19.00 u 01831-1414
Wie wil mogelijkheden met zelfgebouwde Telektor modem uitproberen of zijn ervaring hiermee kwijt ? R.Gelenbrecht Te1.079-317331
Aster CT 80E. Aanbiedingen aan F.den Burger, Zwette 13, 8446 ME
Heerenveen. Te1.05130-25923
Oude nummers van 80-Micro jaargang 1983 en eerder. Telefoon 04927-4637 na 18.00 uur. Voor project gevraagd div. Mod. ééns, defect of incompleet geen groot bezwaar. Voor inlichtingen na 8.00 uur tel 070-295967 Pascal MT + compiler. Telefoon 02152-54947 EDTASM voor Model-1. Voldoende "ruilware" aanwezig. Ook joystickaansl. te koop gevraagd. T.Stevens
Te1.023-253340 Softw.Model-4/3:Pascal, Highres-3D, Viditel (disk). Ruilen golfspel (Newdos2),tekenprog (Mod4+COM/GR) tegen softwispel op disk. 023-261813
1217 I L. EN
Software TRS-80 Model-I Level-II Cass, liefst spelletjes en utilities. Bel naar H.Veenendaal 033-622392
BLOKKEN 100 200 250 270
'BLOK/BAS CLS : CLEAR 999 :DEFINT H-Q,X,Y :DEFSTR S :RANDOM XI=RND(128)-1:X2=RND(128)-1:XS=2*(X2-X1<0)+1 Y1=RND(48)-1 :Y2=RND(48)-1 :Y5=2*(12-YI
300 310 320 330 330 360 370 NEXT X :NEXT Y 400 IF RND(25)=2 THEN FOR I=1 TO 10000 :NEXT I : CLS 450 GOTO 250 ' Hans Reiinders, Amsterdam
69
3072e LID
Onderwerp C (taal)
Op woensdag 26 september werd tijdens de maandelijkse bijeenkomst van de Afdeling Lelystad, het 3072e lid, de heer P. Kleinjan, feestelijk gehuldigd. Namens het bestuur ontving deze Komtek-bezitter o.a. een kadobon, goed voor 10 cassettes uit de software-bibliotheek. Na de huldiging ontvingen wij onderstaande brief, die we met toestemming van de afzender publiceren.
Aan het bestuur van de TRS-80 Gebruikersvereniging
C-compiler Cassetterecoraer Contributie Disk per PTT Doolhof Doorsnede-grootheden Dosroutines Drie Musquetiers Elektuur modem Errata
Errata
Evenementen Fruitmachine
Lelystad, 28 oktober 1984 Beste mensen. Hierbij wil ik jullie hartelijk danken voor de attenties die mij als 3ke lid te beurt zijn gevalien. Het enorme pakket aan software heb ik inmiddels mogen ontvangen. Ik geloof dat er weinig beginnende komputer-hobbyisten zijn, die zo'n komfortabele start hebben kunnen maken. Dit heeft me erg veel plezier gedaan. Ik heb begrepen dat de vereniging inmiddels snel groeit naar een ledenaantal van 4k. Daar wil ik jullie veel succes mee toewensen.
Grafiek Grapje Grote letters M-III Grote letters Scripsit
Hardware-uitbreidingen Hypotheek Index Remarks 1-34
Interrupts Karakterset
Kegelen
Klok
Klok Klok-correctie Mod-III Knippercursor Krekel Leraren
Met vriendelijke groet. Pieter Kleinjan, Lelystad.
Lijst
Logboek
INDEX REMARKS 1984 Onderwerp 24 * 80 kaart 24 * 80 kaart Afd. nieuws Afd. nieuws Afd. nieuws Afd. nieuws Afd. nieuws Afd. nieuws Alternatief CLS Arranger (zap)
70
Remarks
Biz
Onderwerp
33 36 31 32 33 34 35 36 36 36
32 14 61 48 55 26 28 49 4 7
Basic met Buskruit 2 Basic met Buskruit 3 Basic met Buskruit 4 Basic-tips Basic-tips Basicode Beeldvuller Level-III Blokken Boekbespreking Breuken
Lowercase
Remarks
Blz
31 33 36 34 35 33 36 36 34 36
46 39 18 44 16 58 64 69 43 17
Machinetaal 6 Machinetaal 7 Machinetaal 8 Machinetaal 9 Menkela
Marktinfo Marktinfo
Mastermind Merge Mergeline Mijlpaal 3072 Model-I op 5.3 Mhz
Moleculen
Remarks
Biz
Onderwerp
35 32 34 36 35 32 36 36 35 35 35 36 34 33 33 34 32 33 36 36 35 36 32 31 32 33 36 34 33 31 32 35 33 31 32 33 34 33 34 36 32 34 36 34 34 31
31 62 41 7 39 40 30 40 23
Monopoly Morse Morse (color) Ontbinden in faktoren Pascal (Invaders) Pascal 80
16 4 32 22 19 38 65 6 41 55 42 51 52 4 35 28 61 13 23 55 4 10 21 36 28 48 20 17 40 26 26 23 38 3 16 10
Print-schakelaar Printer AVT-80 Programmeer-wedstriid RS232 copy (C) Ram 64K Self boot
Slagspel Software-bieb Software-bieb Software-bieb Software-bieb Software-bieb Speedup
Spraak-synthesizer Strings inpakken
Stringy Floppy
Superscripsit TRS-80-dag TRStel Telescoop Trucs Newdos/80 Trucs Newdos/80 Usercalls
Utilities Verslag TRS-80 dag Verzekering
Verzekering
Video-Genie tip
Vidicom Viditel Viditel
Viditel (zap) Voorzitter Vrije -dagen-kaart XL25 (Basic) Zappen Zappen Zappen Zappen Zeeslag
Remarks
Blz
31 35 33 33 34 36 35 35 36 35 36 36 34 31 32 33 35 36 36 35 34 36 35 35 36 32 31 34 36 35 34 31 34 34 35 31 34 36 35 35 34 33 34 36 36 31
26 7 18 21 30 39 9 4 10 35 62 60 39 64 67 46 54 9 46 26 14 27 48 18 11 12 22 24 44 20 8 50 47 19 40 56 28 54 19 36 34 24 25 7 28 53 71