Atom-in-PC

pictures/epos-0.jpg
 
OSBYTE routines Communicatie met de PC Snelle kennismaking

EPOS/3 is het nieuwe Operating Systeem voor de Atom-in-PC kaart. Hierin zijn ten opzichte van de vorige versie belangrijke wijzigingen aangebracht:

Disk Operating Systeem is ingrijpend gewijzigd

*NOMON/*MON zijn terug
*DRIVE test of de geselecteerde drive bestaat
*INFO kent wildcards
*DELETE vraagt om bevestiging als *MON actief is
*CAT werkt in clear 0

Videodrivers zijn verbeterd. In combinatie met het nieuwe terminal programma werken de extended graphics modi volgens de VESA standaard. De videokaart wordt automatisch gedetecteerd.

Toetsenbord invoer is geheel herschreven waardoor nu ook niet-US toetsenborden goed gebruikt kunnen worden. Tevens kunnen extended ascii tekens via ALT+num worden ingevoerd. Het probleem met het AUTO statement is hiermee ook verholpen; het statement werkt weer als vanouds.

Toolboxen zijn in kleine mate aangepast, de PC-Utility-box is voorzien van een nieuwe set statements voor grafische commando’s.

Om snel aan de slag te gaan met de nieuwe software volgt u onderstaande installatie- aanwijzingen:
  1. Het eerste punt is optioneel; vervang de EPROM op de Atomkaart met het nieuwe operating systeem. Dit is te vinden op de diskette in de directory \EPROM en heet EPOS310.EPR
  2. Plaats de installatiediskette in de drive en run het bestand INSTALL.BAT
  3. De Atom wordt eerst geïnitialiseerd met EPOS 3.11 en start vervolgens automatisch opnieuw op met het installatieprogramma INSTALL.RUN. Kies vervolgens de drive waar de software geïnstalleerd moet worden. Dit gebeurt nog steeds in de directory \ATOM.
Compatibiliteit met vorige versies is functioneel gelijk gebleven; echter de EPOS/3 rom maakt gebruik van pc-commando’s uit het terminal programma v3.10 en zal vastlopen bij oudere versies van het terminal programma. De oude rom werkt echter wel samen met terminal v3.10.

Om problemen te voorkomen wordt aanbevolen om alleen operating systeem programmatuur en datafiles met een datum vanaf 31 augustus 1995 te gebruiken.

Voor terminal versie 4.00 moeten de files OPERSYST.ROM en BRANQUAR.ROM na 1 september 1997 aangemaakt zijn. De toolboxen zijn ongewijzigd gebleven. ../../images/terug.gif

Voorwoord bij eerste druk

Mijn laatste Atom kreeg langzaam maar zeker steeds meer ouderdomskwaaltjes. De voeding is niet meer zo stabiel, de diskdrives zitten constant in conflict wie aangesproken wordt (dan werken ze beide tegelijk, dan beide helemaal niet) en ook het beeld begon na te laten. Hardware uitbreidingen voelden zich soms niet aangesproken als de processor een byte las of schreef in het I/O bereik. Kortom het was weer tijd voor een grondige revisie.

Een ander verschijnsel, waar ik mijzelf ook op betrapte, is dat vele leden van de Atom Computer Club steeds meer werkten met een PC. De Atom bleek zelfs op regioavonden een ondergeschikt onderwerp. Ik ben van mening dat we nog lang niet uitgekeken zijn op de Atom, zowel niet op de hardware als op de software.

Langzaam maar zeker begon het idee te groeien om een Atom te bouwen die in de kast van een PC gemonteerd is. De PC zou dan dienst kunnen doen als toetsenbord en beeldscherm; met wat geluk was het misschien mogelijk om zelf de drives van de PC te gebruiken. Hetgeen aldus geschiedde. Een eerste ontwerp op vier euro-kaarten liep meteen de mist in omdat het in veel PC’s niet zou passen vanwege de afmetingen; verder zijn dan acht connectoren nodig en buffers. Dat werd meteen te duur.

Direkt daarna begon ik te tekenen aan een ontwerp dat de basis bleek te zijn voor een enorme ontdekkingsreis; het schema werd uitgebreid en een print werd ontworpen, geetst en gebouwd. Het eerste resultaat was op de landdag in het voorjaar van 1993 werkend te zien.

Nu vele programmeer-uren verder is het project grotendeels ten einde. De Atom-in-PC is een feit. Een print die zo in een vrij slot van een willekeurige PC gestoken wordt en bijna alle oude Atomprogramma’s werken zonder of met uiterst geringe aanpassing op een goede Atom.

Niet alleen standaard Atom mogelijkheden zijn te gebruiken; ook zijn diverse uitbreidingen toegevoegd aan de print. Zoals een schakelkaart met acht banken voor utility-roms, een R65C02 processor met uitgebreidere instruktieset, de mogelijkheid om het operating systeem in RAM te plaatsen en zelf wijzigingen aan te brengen. Ook biedt de gast-PC vele nieuwe mogelijkheden zoals een muis, (hard)disk drives met grotere opslag-capaciteit, een kleurenkaart voor de Atom met SuperVGA resolutie waar we ook Snapper op kunnen spelen, seriele poorten en printerpoorten.

Niet alleen gevorderde programmeurs krijgen deze extra’s tot hun beschikking, maar ook minder bedreven Atomisten. Alle extra’s zijn met de oude bekende Atom statements en commando’s te gebruiken. Dus iedereen kan bestanden van bijvoorbeeld 943 kB benaderen op een harddisk en plaatjes maken in een resolutie van 1248*768 in 256 kleuren. Gewoon met de oude bekende Atom statements. Uiteraard zijn ook nieuwe mogelijkheden gemakkelijk bereikbaar dankzij nieuwe toolboxen en DosRom.

Ofschoon ik veel van het werk zelf heb verricht, hebben ook een groot aantal leden van onze vereniging, al dan niet bewust, meegewerkt. Diverse verzoeken zijn tijdens de ontwikkeling ingewilligd om het zoveel mogelijk naar ieders zin te maken. En nog steeds zijn suggesties van harte welkom.

Een speciaal woord van dank richt ik tot Bruno Tossaint, hij heeft de verdere uitwerking verzorgd van prototype tot eindproduct, samen met Henk Bastings. Henk zorgde tevens voor de ondersteuning met het programmeren van de GAL’s. Emile Hounjet maakte twee geweldige en foutloze exemplaren van de prototype print. Een van die kaarten kwam onder de hoede van Wil Truijen die de kaart ook bouwde en gebruikt. Wil heeft een grote bijdrage geleverd aan de ontwikkeling van de software. Voor jullie en alle anderen die meegewerkt hebben:

Ik hoop dat u net zoveel plezier aan deze kaart beleeft als ik heb gehad tijdens de ontwikkeling. Roland Leurs, 23 september 1993 ../../images/terug.gif

Voorwoord bij tweede druk

De Atom-in-PC is een groot succes gebleken, gezien de relatief grote afname van printen. Tevens hebben de ontwikkelingen sinds de eerste uitgave niet stil gestaan. Daarom is een nieuw, kompleet handboek geen overbodige luxe.

In de tweede druk zijn enkele foutjes uit de eerste druk verwijderd en zijn een aantal hoofdstukken toegevoegd. Hierbij denk ik aan de beschrijving van de PC Utility Rom, tussentijdse wijzigingen aan het operating systeem en het geheel nieuwe hoofdstuk over I/O uitbreidingen. Tevens is er een hoofdstuk van Leendert Bijnagte over WinAtom bijgevoegd

De meeste informatie is al eerder gepubliceerd in Atom Nieuws, het clubblad van de Federatie van Atom Computerclub Nederland/Belgie. Ondanks deze publikaties verschijnt er een nieuwe handleiding die al deze informatie bij elkaar bundelt in één boekwerk.

Voorwoord bij electronische versie

Er is inmiddels een nieuw tijdperk aangebroken. De Atom lijkt wat op de achtergrond te raken. Nieuwe technieken komen er aan. Echter deze zijn nog steeds goed te combineren met de Atom.

Een van die technieken is het Internet / Intranet. Ik ben nog wel eens bezig met deze laatste. Om de HTML-taal eens te gebruiken heb ik de derde druk van de handleiding grotendeels handmatig omgezet naar dit HTML document. Voordelen van deze versie zijn het snelle zoeken via de browser,gebruik van kleuren en de links die samenhangende onderwerpen met elkaar koppelen.

Het lijkt erop dat de actieve interesse van de Atom-in-PC wat begint af te nemen. Vooralsnog geen enkele reden om de ontwikkelingen te stoppen. In deze handleiding zijn de nieuwe uitbreidingen voor terminal versie 4.00 opgenomen. Daarnaast is deze handleiding prima bruikbaar voor versie 3.x

Nieuw in deze versie zijn o.a. implementatie van de XMS driver, gebruik van maximaal 1024 sprites, nieuwe startmogelijkheden van Atom programma’s via drag ’n drop en uitgebreide support voor Atomic Windows. Een release van Atomic Windows (AWROM.ROM) is opgenomen in de system roms; Word Master 2.0 is vervallen.

Roland Leurs, Geldermalsen, 16 februari 1998

1. Het Atom-in-PC pakket

Het totale pakket bestaat uit de volgende onderdelen:

  1. een dubbelzijdige, doorgemetaliseerde printplaat
  2. drie geprogrammeerde GAL’s type 16V8A (GALATPC1, GALATPC2 en GALATPC3)
  3. deze handleiding
  4. een 3&frac12″ diskette, 1.44 Mb
  5. indien besteld, een 27128 EPROM met Operating Systeem software
../../images/terug.gif 1.1 Versie problematiek

Deze handleiding gaat uit van het geheel nieuwe Enhanced Pc Operating System versie 3 (afgekort met EPOS/3). Hierin zijn dusdanige wijzigingen aangebracht waardoor het nodig is om ook de toolboxen aan te passen. Andere boxen hebben geen wijzigingen nodig. Om nu verwarring te voorkomen wordt het hele pakket opnieuw geleverd. Alle gebruikte operating systeem software dient na 31 augustus 1995 aangemaakt te zijn.

Voor terminal versie 4.00 moeten de files OPERSYST.ROM en BRANQUAR.ROM na 1 september 1997 aangemaakt zijn. De toolboxen zijn ongewijzigd gebleven. ../../images/terug.gif

2. MS-DOS en PC systeem eisen

De Atom-kaart gebruikt een acht bits slot van de PC. Verder werkt het pakket met CGA, EGA of VGA-kaart. Een Herculeskaart is ook te gebruiken maar dan zijn er geen Atom compatible grafische mogelijkheden beschikbaar. Gebruik in dat geval een CGA-emulator. Grafische mogelijkheden via de plotvector zijn wel mogelijk bij gebruik van een Herculeskaart. Gebruik daartoe het programma MSHERC.COM dat bij diverse DOS versies wordt meegeleverd.

Met ingang van versie 4.00 dient de PC iets uitgebreider te zijn: een 286 met 1 MB intern geheugen is het minimum indien er van sprites gebruik gemaakt wordt. Sommige floating point functies vereisen zelfs een 387 coprocessor of hoger.Er dient minimaal 64 Kbytes ram beschikbaar te zijn in de DOS omgeving. Voor gebruik van XMS geheugen is minimaal 32 Kbytes geheugen nodig.

De software is zoveel mogelijk getest, met name de toegang tot de (hard)disk. Het is uiteraard erg vervelend als er ooit eens wat mis gaat en alle data zijn verloren gegaan. Tot nu toe is dat nog nooit gebeurd. De ontwikkel-PC is voorzien van een kleine harddisk met Stacker 2.0, later met DoubleSpace. Hiermee zijn geen problemen naar voren gekomen. De Atom kan goed overweg met Novell Netware (Lite); netwerkdrives kunnen zonder problemen benaderd worden. Overigens verwacht ik hiermee ook geen problemen omdat alle toegang tot de disk via MS-DOS functies verloopt.

Het terminalprogramma is ontwikkeld onder MS-DOS 3.21 en 3.30; verder is het getest onder MS-DOS 5.00 t/m 6.20 en 4DOS 4.01. Testen hebben probleemloos gedraaid in dosboxen onder Windows 3.1x, OS/2 2.1 en OS/2 3.0 Warp. Voor een goede werking is in ieder geval MS-DOS 3.21 of hoger vereist.

../../images/terug.gif

2.1 Vrijwaring

Het gebruik van de Atom-in-PC van zowel hardware, software alsook deze handleiding is geheel voor eigen risico. Ik erken op geen enkele manier aansprakelijkheid voor enigerlei schade, hetzij materiele, hetzij immateriele schade op welke manier dan ook, aangericht aan computersystemen, aanwezige bestanden op die computersystemen of hiermee verbonden systemen en/of randapparatuur, voortvloeiend uit gebruik van de Atom hardware, software en/of deze handleiding. ../../images/terug.gif 3. Bouw en installatie van de ATOM-IN-PC kaart

Voor het bouwen van de kaart dient u zich te houden aan de normale handelwijze. Gebruik een schone soldeerbout, dunne tin en zeker geen soldeervet. Bij het bouwen van het eerste prototype werkte de kaart meteen en het tweede exemplaar werkte niet vanwege één slecht soldeercontact. Het is dus mogelijk om de kaart direct werkend te krijgen. Een componentenopstelling vindt u in bijlage V.

Mocht het ondanks alle pogingen niet lukken om de kaart werkend te krijgen dan kunt u natuurlijk altijd een beroep doen op de ontwerper. ../../images/terug.gif

De installatie van de kaart

De installatie van de kaart in de PC is zeer eenvoudig. Door toepassing van een GAL in de adresselectie is de kaart op acht basisadressen te plaatsen. In totaal gebruikt de kaart vier bytes I/O ruimte. Bij de standaarduitvoering wordt de kaart geadresseerd in het gebied 0300h t/m 031Fh. Op verzoek kan dit gebied verplaatst worden.

Vlak boven de slotconnector van de kaart bevindt zich een jumper. Hiermee kan het basisadres gekozen worden. De volgende adressen zijn mogelijk:

pictures/address.gif

De software probeert zelf de kaart te vinden in bovenstaand I/O gebied. Als er geen andere kaarten in dit gebied geplaatst zijn lukt dit altijd. Mocht het de software niet lukken om het juiste basisadres te bepalen kan dit met een optie alsnog opgegeven worden.

Met jumper JP4 kan de klokfrequentie voor de R65C02 processor ingesteld worden (1 of 2 MHz). De overige jumpers op de kaart zijn vervallen. Dit wordt uitgebreid toegelicht in het hoofdstuk ‘I/O uitbreidingen’.

De software heeft vanaf versie 3.10 installatie op een harddisk nodig. Plaats de bijgeleverde diskette in een drive; geef het MS-DOS commando INSTALL. De installatie gaat uit van drive A: als source en de bestemming is C:\ATOM. Als uw 3&frac12″ drive niet A: maar B: is kunt u die wisselen met het (oude) doscommando ASSIGN A=B B=A. Na de installatie gaat u naar de directory ATOM op de C: drive en u kunt beginnen. Het terminalprogramma wordt opgestart met het commando ‘ATOM’, eventueel gevolgd door de volgende opties:

/?

Geeft het versienummer van de software, beknopte infor-matie omtrent het opstarten van de software en het door het systeem bepaalde basisadres van de Atomkaart.

/A=aaa

Waarbij ‘aaa’ het hexadecimale basisadres van de Atomkaart is. Dit adres heeft voorrang op het automatisch bepaalde adres.

/R=rrr

Standaard wordt CTRL-ALT-DEL gebruikt om de Atom een reset te geven. Als de voorkeur aan CTRL-ALT-ESC gegeven wordt vul dan op de plaats van ‘rrr’ ESC in. In versie 3.10 is de optie /R=F12 toegevoegd omdat met name Windows’95 moeite heeft met de overige toetscombinatie’s.

/V=vvv

Het terminalprogramma probeert vanaf versie 3.10 zelf de juiste videokaart te detekteren. Als deze detektie niet juist is kan met deze parameter alsnog de juiste kaart aangegeven worden. De aanwezigheid van een andere video kaart kan kenbaar gemaakt worden door ‘vvv’ de waarde EGA, VGA of HGC te geven.

/X=xxx (vanaf versie 4.0)

Deze optie is nieuw in versie 4.0 en moet gebruikt worden om XMS geheugen te reserveren. De opgegeven waarde is de hoeveelheid XMS geheugen dat de Atom mag gebruiken en deze moet liggen tussen 16 en 4096 kBytes. Indien er minder XMS geheugen beschikbaar is dan de opgegeven waarde reserveert het terminal programma al het beschikbare XMS geheugen.

/F=fff (t/m versie 3.1x)

Met de switch /F kan een font automatisch geladen worden bij het opstarten waarbij ‘fff’ de filenaam is. Hier mag eventueel een drive specificatie en een pad opgegeven worden, maar geen wildcard (* en ?). Als het font niet gevonden wordt dan wordt deze switch genegeerd; er volgt geen (fout)melding. In verband met de autostart functie in terminal versie 4.0 is deze switch niet meer beschikbaar vanaf de command-line. Indien een font geladen moet worden kan dit geregeld worden vanuit de INIT-file.

Na het starten van dit programma dient de Atom zich direct te melden met een soortgelijk beeld:

pictures/epos3.gif

Bij de eerste opstart na het aanzetten van de PC zijn de RAM geheugens leeg. Om de schakelsoft, toolboxen en eventueel een operating systeem te laden kunt u het programma ‘INIT’ gebruiken. Hierbij wordt de benodigde software automatisch op de juiste plaatsen in het geheugen geladen. Als het terminal programma verlaten wordt of de PC wordt gereset blijven de geladen programma’s in de Atom aanwezig. U hoeft deze niet opnieuw te laden zolang de PC niet uitgezet wordt.

Ondersteuning bij problemen

Als er zich onverwacht toch nog problemen voordoen, kijk in de lijst met de meest gestelde vragen (bijlage VII) voor tips en adressen. ../../images/terug.gif

4. Nieuwe Operating Systeem vectoren

Om de nieuwe Atom flexibeler te maken dan de originele computer zijn nog vijf systeemvectoren toegevoegd. Hiervan worden er vier op de oude manier aangeroepen en één wordt met een OSBYTE aangeroepen. De nieuwe vectoren zijn:

OSBYTE 6   (#224)exit vector
#FFBF JMP (#222)joystick leesroutine
#FFC2 JMP (#220)osbyte routines
#FFC5 JMP (#21E)lees byte van pc
#FFC8 JMP (#21C)zend byte naar pc

Exit vector:

Deze vector wordt aangeroepen als een programma beeindigd wordt. In Basic wijst deze vector naar het END-statement. In een menu kan deze vector omgelegd worden om na de uitvoering van een programma weer terug te keren naar het menu. Deze vector wordt vanuit Basic aangeroepen met het EXIT statement.

Joystick vector:

Deze vector is geimplementeerd om bestaande programma’s zo eenvoudig mogelijk aan te passen. De bits 0 t/m 4 van de accu hebben na aanroep van deze vector dezelfde betekenis als in een standaard Atom het uitlezen van adres #B001. Door deze vector te verleggen naar een eigen routine kan de joystick eventueel vervangen worden door de muis of door het toetsenbord. In Basic wordt de joystick gelezen met USR #FFBF i.p.v. A=?#B001, waarna de variabele A het resultaat weergeeft. Vanuit assembler wordt de instruktie LDA #B001 vervangen door JSR #FFBF.

OSBYTE vector:

OSBYTE routines worden aangeroepen om bepaalde systeem handelingen uit te voeren. Het voordeel van deze werkwijze is dat niet bekend hoeft te zijn waar de betreffende routine zich in het geheugen bevindt. Parameters worden via de registers A, X en Y doorgegeven. De aanroep vindt plaats op #FFC2 en verloopt via de vector #220.

LEES/ZEND byte naar PC:

Met behulp van deze routines wordt een byte van de PC gelezen resp. naar de PC geschreven. Dit byte bevindt zich in de accu.

../../images/terug.gif 4.1 OSBYTE routines

In dit hoofdstuk volgt een opsomming van de OSBYTE routines, waarbij de invoer, uitvoer en gewijzigde registers kort gegeven worden.

Vanaf o.s. versie 3.01 is de OSBYTE interpreter re-entrant, d.w.z. dat tijdens de uitvoering van een OSBYTE routine de OSBYTE vector nogmaals aangeroepen kan worden.

Per definitie wordt het vlaggenregister bij aanroep van OSBYTE routines altijd gewijzigd.

OSBYTE #00 druk o.s. versie nummer af
invoer : geen
uitvoer: geen
gewijzigde registers: geen

../../images/terug.gif OSBYTE #01 test escape toets
invoer : geen
uitvoer: zero vlag = 1 -> escape gedrukt
zero vlag = 0 -> geen escape
Accu = key scan code
gewijzigde registers: Accu

Opmerking – deze aanroep kan ook gebruikt worden voor een snelle keyboard scan. De toetscode staat immers in de accu.

OSBYTE #02 initialiseer alternatieve graphics mode
invoer : X = alternatieve mode
uitvoer: error 129 bij verkeerde mode
gewijzigde registers: vlaggen

OSBYTE #03 initialiseren/opvragen VDU mode

invoer : X = 0 -> opvragen vdu mode
X <> 0 -> init vdu mode
uitvoer: carry = 0 -> alles in orde, X = mode
carry = 1 -> illegale mode opgegeven
gewijzigde registers: X en vlaggen

../../images/terug.gif

OSBYTE #04 wacht op PC timertick
invoer : geen
uitvoer: geen
gewijzigde registers: geen

Opmerking – deze aanroep wacht ongeveer 1/18 seconde en wordt o.a. gebruikt bij het wachten op de flyback op adres #FE66.

OSBYTE #05 produceer geluid
invoer : X = frequentie
Y = duur in 18e seconden
uitvoer: geen
gewijzigde registers: geen

OSBYTE #06 spring naar exit vector

invoer : geen
uitvoer: onbepaald
gewijzigde registers: onbepaald

../../images/terug.gif

OSBYTE #07 opvragen/wijzigen exit vector
invoer : X = 0 -> opvragen exit vector
X <> 0 -> wijzig exit vector naar XY
uitvoer: X = high byte exit vector
Y = low byte exit vector
Gewijzigde registers: X en Y

OSBYTE #08 opvragen processor gegevens

invoer : geen
uitvoer: accu bevat volgende informatie:

pictures/osbyte08.gif

gewijzigde registers: Accu en vlaggen
OSBYTE #09 instellen van pieptoon $7
invoer : X = frequentie
Y = duur in 18e seconden
uitvoer: geen
gewijzigde registers: geen

OSBYTE #0A reset semafoor voor PC communicatie

invoer : geen uitvoer: geen gewijzigde registers: geen

OSBYTE #0B test en set semafoor voor PC communicatie

invoer : geen
uitvoer: carry = 0 -> toegang tot PC geweigerd
carry = 1 -> toegang tot PC toegestaan
gewijzigde registers: vlaggen

Als toegang tot de PC gegeven is, wordt voor andere aanvragers automatisch de toegang geweigerd. Na het beeindigen van de betreffende routine moet de semafoor gereset worden met OSBYTE #0A.

OSBYTE #0C wek foutmelding op
invoer : X is errorcode
uitvoer: aanroep brkvector #202
gewijzigde registers: alle

../../images/terug.gif

OSBYTE #0D druk tekst van foutmelding af
invoer : foutcode in adres #00
uitvoer: foutmelding door PC op scherm
gewijzigde registers: alle

OSBYTE #0E keyboard scan

invoer : geen
uitvoer: accu = keyboard status
X-register = ascii waarde
Y-register = scan code

Bit 1 van de accu geeft aan of er een toets ingedrukt is. Alleen in dat geval bevatten X en Y zinnige informatie.
De afzonderlijke bits van de keyboard status hebben de volgende betekenis:

pictures/osbyte0e.gif

OSBYTE #F0 XMS versie opvragen
invoer: geen
uitvoer: A=aantal xms pagina’s
X=versienummer
Y=releasenummer

OSBYTE #F XMS pagina voorzetten (no save) invoer: Y=pagina nummer
uitvoer: geen

Bij dit commando wordt de huidige pagina niet opgeslagen in xms geheugen.

OSBYTE #F2 XMS pagina voorzetten (no load)
invoer: Y=pagina nummer
uitvoer: geen

Bij dit commando wordt de nieuwe pagina niet gelezen in het atomgeheugen.

OSBYTE #F3 XMS pagina voorzetten
invoer: Y=pagina nummer
uitvoer: geen

De huidige pagina wordt opgeslagen in het xms geheugen en de nieuwe pagina wordt in het atomgeheugen gelezen.

OSBYTE #F4 XMS paginaframe instellen/opvragen
invoer: Y=hoge byte paginaframe
uitvoer: Y=hoge byte paginaframe

Het paginaframe is 16 kb groot en kan liggen tussen #2000-#9FFF; de parameter voor deze functie ligt in het bereik #20…#60. Bij een ongeldige parameter wordt de functie niet uitgevoerd, alleen wordt het huidige frame teruggemeld. Na een reset staat het frame op #4000.

5. Communicatie met de PC

De PC krijgt van de Atom opdrachten aangeboden welke uitgevoerd worden. Hiertoe wordt door de Atom een byte gezonden via de vector #FFC8. Als dit byte ongelijk aan #00 is dan wordt deze waarde als ascii waarde afgedrukt. Als het aangeboden byte wel #00 is wordt nog een tweede byte, het commandonummer, overgedragen.

Afhankelijk van het commando worden meerdere parameters, danwel data overgedragen.

Daar er slechts één datapad is tussen de Atom en de PC zijn deze commando’s gebonden aan een protocol waar niet van afgeweken mag worden. Gebeurt dat wel dan leidt dat meestal tot het vasthangen van het systeem.

Het gebruik van deze commando’s betekent dus dat alle eventuele parameters en resultaten geschreven en gelezen moeten worden, ook als niet alle gegevens gebruikt worden. Dus als de PC twee parameters verlangt en drie resultaatbytes terugstuurt, moet de Atom deze in de juiste volgorde aanbieden cq lezen.

Een en ander verloopt bij normale toepassing zonder problemen, echter wanneer een commando met parameter of data overdracht uitgevoerd wordt, en er treedt een interrupt op waarbij ook communicatie met de PC gebruikt wordt dan liggen de problemen (zeg maar vasthangen van het systeem) voor de hand.

Een praktijkvoorbeeld is bijvoorbeeld het laden van een grafisch scherm op #8000 wanneer video emulatie gebruikt wordt. De Atom leest enerzijds data van de disk (via de PC) en plaatst deze in het videogeheugen. Direct daarna wil de NMI routine ook een commando aan de PC doorgeven, dus de PC biedt data aan de Atom aan en de Atom geeft een commando aan de PC. Beiden zullen dus tot aan een reset wachten.

Uiteraard is daar een oplossing voor gevonden. Met behulp van OSBYTE #0A en #0B kan een z.g. semafoor gezet en opgevraagd worden. Een semafoor is een simpele vlag die aangeeft of een bepaalde routine gebruikt mag worden door twee processen. In bovenstaand voorbeeld is het lezen van disk een proces en het emuleren van het Atom videogebeuren is een ander proces. Bij het schrijven van programma’s hoeft de programmeur alleen maar OSBYTE #0B aan te roepen waarna het resultaat in de carry vlag staat. Als de carry ‘1’ is dan mag de opvragende routine zo veel gebruik maken van de communicatie vectoren als nodig. Zolang de semafoor niet gereset is, zullen volgende aanvragers altijd de waarde ‘0’ in de carry terugkrijgen. In zo’n geval kan gewacht worden totdat de routines vrijgegeven zijn of het opvragende programma wordt vroegtijdig afgebroken. De semafoor wordt gewist met OSBYTE #0A.

De semafoor is in de eerste operating systeem versies opgeslagen in #CF. Het verdient aanbeveling om dit adres alleen maar via eerder genoemde OSBYTE routines te benaderen. Als het ooit nodig blijkt te zijn om de semafoor in een ander adres op te slaan dan hoeven alleen deze twee OSBYTE routines gewijzigd te worden. Hieruit blijkt meteen het voordeel van deze OSBYTE routines.

Nu volgt een opsomming en een beschrijving van de commando’s die door de PC herkend worden. Een niet-herkend commando levert de melding ‘*** Onbekend commando #xx’ op.

5.1 PC-COMMANDO API Opmerkingen vooraf:
  • Als een word (16 bits getal) wordt overgestuurd dan wordt eerst het lage byte en daarna het hoge byte overgezonden.
  • Bij de omschrijving van invoer/uitvoer geeft het woord ‘geen’ aan dat er geen parameters en/of gegevens overgezonden worden. Het commando levert natuurlijk wel enige uitvoer op, bijvoorbeeld op het beeldscherm.
  • Een ASCIIZ string is een string die wordt afgesloten met de code #00 i.p.v. #0D of 13.
  • Als een filenaam opgegeven wordt dan mag deze een compleet zoekpad met wildcards (* of ?) bevatten, tenzij dat anders vermeld is. Filenamen worden nooit met aanhalingstekens doorgegeven bij het gebruik van deze commando’s.
  • Disk commando’s geven meestal een errorcode terug. Als er geen fout opgetreden is dan is deze code #00. Bij fouten is deze code de errorcode zoals die door MS- DOS afgegeven wordt. De meest voorkomende errorcodes staan in bijlage I.
  • Vanaf terminalprogramma v3.xx zijn er enkele commando’s met diverse subfuncties; dit is een manier van commando implementatie om een groep functies onder de zelfde noemer toe te voegen. Commando’s met subfuncties verwachten als eerste parameter het subfunctienummer.
#00 Druk $0 af
Invoer: geen
Uitvoer: geen

#01 Keyboard scan

Invoer: geen
Uitvoer: scan code (1 byte)
keyboard status (1 byte)

De scan codes zijn niet gelijk aan de standaard PC-scancodes. Deze codes worden door de Atom als index gebruikt om de bijbehorende ascii waarde te bepalen uit een tabel.
Als u gebruik wil maken van keyboard codes wordt commando #3A aanbevolen; daarmee zijn ook functietoetsen uit te lezen.
De keyboard status bits hebben de volgende betekenis:

pictures/pccom01.gif

Door de Atom wordt de TAB toets gebruikt als COPY toets.

#02 Lees karakter op cursorpositie
Invoer: geen
Uitvoer: ascii waarde van teken op cursorpositie

Wordt o.a. gebruikt bij afhandeling van copy toets.

#03 Plot pixel
Invoer: X-coordinaat (1 word)
Y-coordinaat (1 word)
Plot mode (1 byte)
Uitvoer: geen

De coordinaten zijn afhankelijk van de grafische resolutie van de videokaart. Voor Hercules is dat 720*348 en voor CGA is dat 640*200. Dit commando voert een bewerking uit met het opgegeven pixel. Deze bewerkingen zijn:

mode = 1 -< zet pixel
mode = 2 -< inverteer pixel
mode = 3 -< wis pixel

#04 Initialiseer grafische mode voor Atom video emulatie
Invoer: geen
Uitvoer: geen

Dit commando schakelt de videokaart om naar de grafische mode met een resolutie van 320*200.

#05 Plot pixel in clear 4 coordinatenstelsel
Invoer: X-coordinaat (1 word)
Y-coordinaat (1 word)
Plot mode (1 byte)
Uitvoer: geen

De coordinaten zijn in dit geval gelijk aan de grafische resolutie van de Atom (256*192). Verder is dit commando hetzelfde als #03.

mode = 1 -< zet pixel
mode = 2 -< inverteer pixel
mode = 3 -< wis pixel

#06 Ramfont laden
Invoer: filenaam van het ramfont als ASCIIZ string
Uitvoer: errorcode

De naam van het te laden font wordt als ascii string overgestuurd. Deze string eindigt met de code #00. De filenaam mag een kompleet pad bevatten maar geen wildcards (* of ?).
Als het font geladen is, is de errorcode #00. Als een fout opgetreden is (bijv. font niet gevonden) dan duidt de uitvoer de aard van de fout aan.

#07 Schrijf string in grafische mode
Invoer: X-coordinaat (1 word)
Y-coordinaat (1 word)
ASCIIZ string
Uitvoer: geen

De opgegeven string wordt geplot vanaf de coordinaten X en Y.

#08 Zet horizontale en vertikale schaalfactor
Invoer: horizontale schaalfactor (1 byte)
vertikale schaalfactor (1 byte)
Uitvoer: geen

De horizontale en vertikale schaalfactoren bepalen de afmetingen van de karakters die met commando #07 worden afgedrukt.

#09 Zet cursor aan
Invoer: geen
Uitvoer: geen

De cursor verschijnt als knipperend streepje op het scherm.

#0A Zet cursor uit
Invoer: geen
Uitvoer: geen

De cursor verdwijnt van het scherm.

#0B File van disk laden
Invoer: filenaam als ASCIIZ string
Uitvoer: errorcode, bloklengte(n) en data

Als de PC de filenaam ontvangen heeft wordt de file geopend. Als dit lukt wordt de errorcode #00 (geen error) teruggestuurd. Vervolgens wordt een datablok van max. 255 bytes gelezen. De lengte van dit datablok wordt naar de Atom gestuurd, direct gevolgd door de data. Als het einde van de file bereikt is dan ontvangt de Atom een bloklengte van #00.

#0C File naar disk schrijven
Invoer: filenaam als ASCIIZ string
bloklengte(n)
data
Uitvoer: errorcode

De PC leest de filenaam en probeert de file te openen. Als de file reeds bestond dan wordt deze overschreven (zonder vermelding). Als de file nog niet bestond dan wordt deze aangemaakt. Als de file geopend is wordt het resultaat overgestuurd naar de Atom; errorcode #00 geeft aan dat er geen fout opgetreden is. Daarna begint de data-overdracht. Eerst geeft de Atom de bloklengte, direct gevolgd door data. Als een blok overgestuurd is van Atom naar PC en het blok is naar disk geschreven dan meldt de PC het aantal geschreven bytes naar de Atom. Als dit niet gelijk is aan de bloklengte dan is de disk vol.
Als de PC een bloklengte #00 ontvangt wordt de file gesloten.

#0D Disk catalog op scherm afbeelden
Invoer: zoekpad/filespec als ASCIIZ string
Uitvoer: geen

De PC leest de filespecificatie, deze mag een drive, directory en een file- aanduiding met wildcards bevatten, en drukt deze op het scherm af. De uitvoer wordt door de PC direct op het scherm gezet en komt niet ter beschikking van de Atom. Een lege string wordt behandeld als *.*
Hidden files worden niet op het scherm weergegeven.

#0E Veranderen/opvragen van huidige directory
Invoer: nieuwe directory als ASCIIZ string
Uitvoer: foutcode
huidige directory als ASCIIZ string

Dit commando verandert van directory naar de opgegeven directory. Als er geen fout opgetreden is, wordt de foutcode #00, gevolgd door de actuele directory als ASCIIZ string naar de Atom gestuurd.
Als de foutcode niet #00 is, dan volgt er geen ASCIIZ string.

#0F Verwijder directory
Invoer: te verwijderen directory als ASCIIZ string
Uitvoer: foutcode
lege ASCIIZ string

De opgegeven directory wordt indien mogelijk van de disk verwijderd. Als dat gelukt is dan volgt nogmaals een #00 byte na de foutcode. Als de foutcode niet #00 is, dan volgt er geen ASCIIZ string.

#10 Maak directory aan
Invoer: aan te maken directory als ASCIIZ string
Uitvoer: foutcode
lege ASCIIZ string

De opgegeven directory wordt indien mogelijk op de disk aangemaakt. Als dat gelukt is dan volgt nogmaals een #00 byte na de foutcode. Als de foutcode niet #00 is, dan volgt er geen ASCIIZ string.

#11 Verwijder file van disk
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode

Deze functie verwijdert de opgegeven files van disk, mits deze niet Read-Only en/of Hidden zijn. Als er geen files gewist kunnen worden dan is de foutcode niet gelijk aan #00. Als er één of meerdere files gewist zijn, dan is de foutcode #00.

#12 Lock files
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode

Deze functie zet van de opgegeven files het Read-Only bit. Als er geen files gelocked kunnen worden dan is de foutcode niet gelijk aan #00. Als er één of meerdere files gelocked zijn, dan is de foutcode #00. De filespecificatie mag bestaan uit een drive, directory en wildcards.

#13 Unlock files
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode

Deze functie reset van de opgegeven files het Read-Only bit. Als er geen files geunlocked kunnen worden dan is de foutcode niet gelijk aan #00. Als er één of meerdere files geunlocked zijn, dan is de foutcode #00. De filespecificatie mag bestaan uit een drive, directory en wildcards.

#14 Verander actuele drive
Invoer: drive nummer (1 byte)
Uitvoer: geen

Met dit commando kan de actuele drive gewijzigd worden. Voor drive A: is het drivenummer 0, drive B: is drive nummer 1 etc.
Er is geen terugmelding en controle op geldigheid van het drive nummer.

#15 Ga naar MS-DOS
Invoer: geen
Uitvoer: geen

Dit commando beeindigt het Atom terminal programma op de PC en de besturing wordt teruggegeven aan het oproepende programma. Voordat dit commando wordt uitgevoerd dienen geopende bestanden eerst gesloten te worden.

#16 Maak file verborgen
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode (1 byte)

Deze functie zet van de opgegeven files het Hidden bit. Als er geen files verborgen kunnen worden dan is de foutcode niet gelijk aan #00. Als er één of meerdere files verborgen zijn, dan is de foutcode #00. De filespecificatie mag bestaan uit een drive, directory en wildcards.

#17 Maak files weer zichtbaar
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode (1 byte)

Deze functie reset van de opgegeven files het Hidden bit. Als er geen files zichtbaar kunnen worden gemaakt dan is de foutcode niet gelijk aan #00. Als er één of meerdere files zichtbaar gemaakt zijn, dan is de foutcode #00. De filespecificatie mag bestaan uit een drive, directory en wildcards.

#18 Opvragen file informatie
Invoer: filenaam als ASCIIZ string
Uitvoer: foutcode (1 byte)
file header (16 bytes)
attribuut (1 byte)
tijd en datum van laatste schrijfopdracht(2 words)

De opgegeven file wordt gezocht en indien gevonden wordt de file header overgestuurd naar de Atom. Bij succes is de foutcode #00. De fileheader bevat de volgende informatie:

– load adres van file, twee bytes
– exec adres van file, twee bytes
– dataveld lengte, vier bytes
– gereserveerd, acht bytes

Aangezien de header in de file zelf is opgeslagen, is de totale file lengte zestien bytes langer dan de doorgegeven lengte; deze bytes zijn niet meegeteld in de dataveld lengte.
De tijd en datum van de laatste schrijfopdracht naar de file, normaal gesproken is dat het moment waar de file naar disk is geschreven, wordt in twee woorden doorgegeven. Hiervan hebben de bits de volgende betekenis:

Tijd: bit 0-4: seconden/2 (0-29)
bit 5-10: minuten (0-59)
bit 11-15: uren (0-23)
Datum: bit 0-4: dag van de maand (0-31)
bit 5-8: maand (1-12)
bit 9-15: jaar-1980 (0-127)

#19 Produceer geluid
Invoer: toonhoogte (1 byte)
toonduur (1 byte)
Uitvoer: geen

De toonhoogte en de toonduur zijn beiden één byte lang. De maximale toonhoogte ligt rond de waarde 100. Dit is al een behoorlijk hoge toon. De waarden vanaf 128 geven een ongedefinieerde toon. De toonduur wordt gegeven in 18den van seconden.
Als de toonhoogte 0 bedraagt dan wordt geen geluid geproduceerd; het commando kan dan gebruikt worden om de opgegeven toonduur te wachten.

#1A Instelling bell-toon
Invoer: toonhoogte (1 byte)
toonduur (1 byte)
Uitvoer: geen

Met dit commando worden de toonhoogte en de toonduur ingesteld voor het bell- signaal. Dit is de pieptoon die gegeven wordt voor de ASCII code #07. Wat de waarden betreft zijn deze gelijk als voor het commando #19.

#1B Druk foutmelding af
Invoer: Atom errorcode (1 byte)
Uitvoer: geen

Dit commando drukt een tekststring, behorende bij de gegeven errorcode, af op het beeldscherm van de PC. Dit schrijven doet de PC zelf. Er wordt geen informatie overgestuurd naar de Atom.

#1C Oproepen muisfunctie (PC INT 33)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)

Hiermee kunnen functies van de PC-muisdriver opgeroepen worden. De registerset bestaat uit acht bytes, die de registers AX, BX, CX en DX van de 8088/80×86 processor voorstellen. Voor het gebuik van deze functie wordt verwezen naar de handleiding voor muizen.
Vanaf versie 4.00 zijn de volgende subfuncties voor de muis toegevoegd:

#1C subfunctie #80: initialiseer muis
Invoer: geen
Uitvoer: aantal muisknoppen (1 byte)

Deze functie initialiseert de muis en retourneert het aantal beschikbare muisknoppen. Indien er geen muisdriver geïnstalleerd is is het aantal knoppen 0.

#1C subfunctie #81: initialiseer muis voor CLEAR 4
Invoer: geen
Uitvoer: geen

Functie #81 is een aanvulling op functie #80 indien de muis gebruikt wordt binnen een CLEAR 4 scherm. De het muiswindow wordt afgestemd op het effectieve grafische scherm. Tevens wordt ervoor gezorgd dat de muiscursor uitgezet wordt indien de Atom naar het eigen videogeheugen schrijft. Na de emulatie wordt de muiscursor weer aangezet. M.a.w. de muis wordt voor de Atom in CLEAR 4 geheel transparant.

#1C subfunctie #82: muis informatie opvragen
Invoer: geen
Uitvoer: muis X coordinaat (1 word)
muis Y coordinaat (1 word)
knoppenstatus (1 byte)

Informatie omtrent de muisstatus wordt hiermee opgevraagd; de coordinaten zijn 16 bits groot, de knoppenstatus is weergegeven als in onderstaand schema:

pictures/pccom1c.gif

#1C subfunctie #83: muis cursor aanzetten

Invoer: geen
Uitvoer: geen

De muiscursor wordt zichtbaar op het scherm.

#1C subfunctie #84: muis cursor uitzetten
Invoer: geen
Uitvoer: geen

De muiscursor verdwijnt van het scherm.

#1C subfunctie #85: muis informatie opvragen binnen CLEAR 4
Invoer: geen
Uitvoer: muis X coordinaat (1 byte)
muis Y coordinaat (1 byte)
knoppenstatus (1 byte)

Deze functie lijkt op functie #84, maar de muiscoordinaten zijn aangepast naar een CLEAR 4 coordinaten stelsel; elke coordinaat is slechts 1 byte groot. De knoppenstatus is hetzelfde als in bovengenoemde functie.
Om compatibiliteit te behouden met de hardware muispointer van Kees van Oss is de Y coordinaat van de bovenste lijn binnen het CLEAR 4 scherm 255; de onderste lijn is 0.

#1C subfunctie #86: CLEAR 4 muiscursor selecteren
Invoer: muiscursor (1 byte)
Uitvoer: geen

In het terminalprogramma zijn 32 voorgedefinieerde muiscursors opgenomen welke met deze functie gekozen kunnen worden. Deze zijn gelijk aan de hardware muiscursors van Kees van Oss.
Deze functie dient gebruikt te worden in CGA modi of in emulatie van Atom grafische modi; de cursor verschijnt dan in een andere kleur zodat deze duidelijker zichtbaar is.

#1C subfunctie #87: muiscursor selecteren
Invoer: muiscursor (1 byte)
Uitvoer: geen

In het terminalprogramma zijn 32 voorgedefinieerde muiscursors opgenomen welke met deze functie gekozen kunnen worden. Deze zijn gelijk aan de hardware muiscursors van Kees van Oss.

#1D Definieer muiscursor
Invoer: muismasker (64 bytes)
Uitvoer: geen

Met muisfunctie #09 kan de vorm van de grafische muiscursor opgegeven worden. Deze dient dan echter wel eerst in het geheugen van de PC te staan. Met commando #1D kan de vorm van de muiscursor in het PC geheugen geplaatst worden. Voor het verdere gebruik van deze functie wordt ook verwezen naar de handleiding voor muizen.

#1E Opvragen cursorpositie
Invoer: geen
Uitvoer: X en Y coordinaat tekstcursor (2 bytes)

Dit commando geeft de positie van de tekstcursor naar de Atom. De linkerbovenhoek is (0,0)

#1F Oproepen video functies (PC INT 10)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)

Hiermee kunnen videofuncties van het PC-BIOS opgeroepen worden. De registerset bestaat uit acht bytes, die de registers AX, BX, CX en DX van de 8088/80×86 processor voorstellen. Voor het gebuik van deze functie wordt verwezen naar betreffende literatuur.

#20 Oproepen seriele communicatie functies (PC INT 14)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)

Hiermee kunnen communicatiefuncties van het PC-BIOS opgeroepen worden. De registerset bestaat uit acht bytes, die de registers AX, BX, CX en DX van de 8088/80×86 processor voorstellen. Voor het gebuik van deze functie wordt verwezen naar betreffende literatuur.

#21 Oproepen printer functies (PC INT 17)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)

Hiermee kunnen printerfuncties van het PC-BIOS opgeroepen worden. De registerset bestaat uit acht bytes, die de registers AX, BX, CX en DX van de 8088/80×86 processor voorstellen. Voor het gebuik van deze functie wordt verwezen naar betreffende literatuur.

#22 Oproepen MS-DOS functies (PC INT 21)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)

Hiermee kunnen MS-DOS systeemfuncties opgeroepen worden. De registerset bestaat uit acht bytes, die de registers AX, BX, CX en DX van de 8088/80×86 processor voorstellen.
Omdat niet alle functies uitsluitend gebruik maken van bovengenoemde registers, kunnen sommige functies niet uitgevoerd worden. Voor het gebuik van deze functie wordt verwezen naar betreffende literatuur.

#23 Lees I/O byte
Invoer: I/O adres (1 word)
Uitvoer: gelezen data (1 byte)

De PC leest het opgegeven I/O adres uit en geeft deze waarde aan de Atom. Het I/O adres ligt in het algemeen in het gebied $0000 – $03FF.

#24 Schrijf I/O byte
Invoer: I/O adres (1 word)
data (1 byte)
Uitvoer: geen

De PC stuurt de data naar het opgegeven I/O adres. Het I/O adres ligt in het algemeen in het gebied $0000 – $03FF.

#25 Definieer grafische letter
Invoer: ASCII waarde van karakter (1 byte)
karakter patroon (16 bytes)
Uitvoer: geen

Karakters die met commando #07 in de grafische mode geschreven worden kunnen met deze functie gedefinieerd worden. Het eerst gelezen byte vormt de bovenste regel van het karakter.

#26 Opvragen muis aktiviteiten
Invoer: geen
Uitvoer: horizontale beweging (1 byte)
vertikale beweging (1 byte)
status van knoppen (1 byte)

Deze functie biedt de mogelijk om snel de beweging van de muis op te vragen. Dit is relatief t.o.v. de laatst gelezen positie.

#27 Opvragen PC informatie
Invoer: geen
Uitvoer: PC identificatie (1 word)

Het PC identificatie woord geeft enige informatie omtrent de beschikbare hardware die op de PC is aangesloten. Dit woord is als volgt samengesteld:

bit 0 gezet als drive(s) aanwezig
bit 1 gezet als 80×87 coprocessor aanwezig is
bit 2 pc type (0=XT, 1=AT)
bit 3 video type (1=Hercules mono, 0=kleurenkaart)
bit 4,5 video mode bij opstarten
bit 6,7 aantal drives als bit 0 gezet is
bit 8 0 = dos, 1 = windows terminal programma
bit 9,11 aantal seriele poorten
bit 12,13 video kaart (00=CGA, 01=EGA, 10=VGA, 11=HGC)
bit 14,15 aantal printerpoorten

#28 Emulatie clear 0

Invoer: video adres (1 word)
video data (1 byte)
Uitvoer: geen

De opgegeven data wordt overeenkomstig met Atom grafics op het beeldscherm weergegeven. De positie van deze data wordt opgegeven met het videoadres. Het font ATOMVDU.FNT dient geladen te zijn. Dit is nodig omdat bij het emuleren van CLEAR 0 gebruik wordt gemaakt van een karaktertabel.

#29 Wijzigen van palet of achtergrondkleur in CGA modi
Invoer: paletnummer of kleurnummer (1 byte)
Uitvoer: geen

In de grafische modi kan met deze functie gekozen worden tussen de twee kleurensets van een CGA kaart. Als bit 7 van de kleur gezet is dan wordt de achtergrondkleur ingesteld.

Palet 0: groen, rood, geel
Palet 1: ultramarijn, violet, wit

Dit commando kan ook gebruikt worden in tekstmode. In dat geval wordt, indien bit 7 gezet is, de kaderkleur van het scherm ingesteld.

#2A t/m #31 Emulatie grafische Atom modi
Deze commando’s werken op dezelfde manier als commando #28. De geemuleerde modi zijn:

#2A clear 1 monochroom
#2B clear 1 kleur
#2C clear 2 monochroom
#2D clear 2 kleur
#2E clear 3 monochroom
#2F clear 3 kleur
#30 clear 4 monochroom
#31 clear 4 kleur

In de kleurenmodi kan met behulp van commando #29 gekozen worden tussen twee kleurensets. In monochroom modi kan op dezelfde wijze een van de achtergrondkleuren gekozen worden. Dus monochroom is niet altijd zwart/wit. Voor emulatie van een van deze modi hoeft geen speciale karakterset geladen te worden.

#32 Inschakelen extended video mode
Invoer: schermmode (1 byte)
Uitvoer: geen

De PC schakelt de aanwezige videokaart over naar de opgegeven mode. Hiermee kunnen dus hogere grafische modi opgeroepen worden. De toegestane waarden zijn afhankelijk van de aanwezige videokaart.
Als een extended video mode gekozen wordt dient het tekstvenster met de juiste waarden gedefinieerd te worden om problemen bij het scrollen te voorkomen. Of de muis gebruikt kan worden in deze modi is afhankelijk van de gebruikte muisdriver.

#33 Zet graphics kleur voor extended video mode
Invoer: pixelkleur (1 byte)
Uitvoer: geen

De opgegeven kleur wordt gebruikt bij plot opdrachten in extended video modi. De toegestane waarden zijn afhankelijk van de videomode.

#34 Schrijf grafisch pixel in extended video mode
Invoer: X-coordinaat (1 word)
Y-coordinaat (1 word)
plot opdracht (1 byte)
Uitvoer: geen

Met dit commando kunnen punten in de extended video modi gezet of gewist worden. De bewerking wordt gegeven door de plot opdracht, 1=zet pixel, 2=wis pixel en 3=exor pixel met kleur.
De X en Y-coordinaten zijn afhankelijk van de grafische resolutie van de geselecteerde video mode. In theorie kan een resolutie van 65535*65535 met 256 kleuren gebruikt worden. Slechts weinig videokaarten ondersteunen deze mode. Let erop dat in extended video modi de punt (0,0) links boven op het scherm is en niet zoals bij de Atom modi links onder!

#35 Instellen tekstvenster
Invoer: X-links onder (1 byte)
Y-links onder (1 byte)
X-rechts boven (1 byte)
Y-rechts boven (1 byte)
Uitvoer: geen

Het tekstvenster kan met dit commando ingesteld worden. Alle door de Atom geproduceerde beeldscherm uitvoer wordt in dit venster afgedrukt.
Uitvoer die door de PC op het scherm afgebeeld wordt zoals een catalog of foutmelding kan buiten het venster vallen.
Zoals bij de beschrijving van commando #32 al is vermeld moeten bij extended video modi de tekstvensters expliciet opgegeven worden. De windowbreedte klopt meestal wel, maar de hoogte is altijd 25 regels. Dit omdat in het PC-BIOS wel het aantal tekens per regel kan worden opgevraagd, maar niet het aantal regels per scherm. Daarom is gekozen voor de meest voorkomende waarde van 25 regels per scherm.

#36 Opheffen tekstvenster
Invoer: geen
Uitvoer: geen

Dit commando heft een gedefinieerd tekstvenster op.

#37 Joystick uitlezen
Invoer: geen
Uitvoer: stand joystick en vuurknoppen (1 byte)

De analoge joystick van de PC wordt uitgelezen en omgezet naar digitale waarden die voor de Atom joystick gebruikelijk zijn. Voor de volledigheid de betekenis van de afzonderlijke bits:

pictures/pccom37.gif

#38 Joystick calibreren
Invoer: geen
Uitvoer: geen

Een analoge joystick moet altijd gecalibreerd worden. Bij deze gebeurtenis wordt de stand van de joystick gelezen en deze stand wordt als “neutraal” beschouwd. Alle joystick bewegingen gelden ten opzichte van deze neutraalstand.
Bij het opstarten van het terminal programma en bij een reset van de Atom wordt de joystick automatisch gecalibreerd; deze functie is alleen nodig indien tijdens het werken met de Atom van joystick gewisseld wordt of als de PC van snelheid veranderd. Dit laatste geval omdat het uitlezen van de joystick tijdafhankelijk is.

#39 Masker bit 7 instellen
Invoer: 0 – -< bit 7 is altijd ‘0’
1 – -< bit 7 blijft ongewijzigd.
Uitvoer: geen

De ascii-codes #00 t/m #1F worden door de Atom als controlcodes opgevat. De PC kent echter voor deze codes ook nog een aantal symbolen. Als het masker voor bit 7 gezet is, worden alle ascii-codes normaal afgehandeld; als dit masker gewist is wordt van ieder, op het scherm af te drukken karakter, bit 7 gewist. Hiermee kunnen de speciale symbolen door middel van de ascii waarden #80 t/m #9F ook op het scherm afgebeeld worden.

#3A Oproepen keyboard functies (PC INT 16)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)

Hiermee kunnen de keyboard functies van het PC-BIOS opgeroepen worden. De registerset bestaat uit acht bytes, die de registers AX, BX, CX en DX van de 8088/80×86 processor voorstellen. Bit 0 van DH (het laatst overgezonden byte van het resultaat) bevat de waarde van de ZeroFlag van de 80×86; hiermee kan de keyboard scan beter gebruikt worden. Voor het gebuik van deze functie wordt verwezen naar betreffende literatuur.
Let erop dat er bij het gebruik van deze interrupt verschillen kunnen zijn bij de XT en AT!

#3B Shell naar DOS
Invoer: MSDOS commando als ASCIIZ string
Uitvoer: geen

Als men tijdens het werken behoefte krijgt om een MS-Dos programma te gebruiken (bijvoorbeeld FORMAT of DISKCOPY) kan met dit commando ieder geldig MS-DOS commando uitgevoerd worden. Als men tijdelijk naar MS-DOS wil kan dat door het opstarten van een tweede COMMAND.COM. Geef om terug te keren naar de Atom dan het commando EXIT.

#3C Zoek eerste passende file
Invoer: filespecificatie als ASCIIZ string
Uitvoer: resultaat (1 byte)
DTA informatie (22 bytes)

MS-DOS biedt de mogelijkheid om files te zoeken die voldoen aan de opgegeven filespecificatie. Hierin mogen wildcards * en ? voorkomen. Dit zoeken naar files gaat in twee stappen.
Bij de eerste zoekactie dient dit commando gebruikt te worden. Als een file gevonden is dan wordt als resultaat een 0 overgezonden. Het resultaat geeft de foutcode weer als geen passende file gevonden is; in dat geval volgt er geen DTA. In de DTA, dit staat voor Disk Transfer Area, is alle MS-DOS directory informatie opgenomen. Voor de exacte inhoud wordt verwezen naar bijlage II.

#3D Zoek volgende passende file
Invoer: geen
Uitvoer: resultaat (1 byte)
DTA informatie (22 bytes)

De tweede stap bij het zoeken naar files krijgt geen parameters mee omdat deze nog bekend is vanuit de eerste zoekactie. Een voorwaarde is dat er tussen twee zoektochten geen disk activiteiten hebben plaats gevonden. De teruggegeven informatie is het zelfde als bij functie #3C.

#3E Selecteer printer
Invoer: printernummer (1 byte)
Uitvoer: printerstatus (1 byte)

Met deze functie wordt een printer gekozen die aangesproken wordt als de printer aangezet wordt met $2 of CTRL-B. De uitvoer is de status van de betreffende printer. Als deze status #90 bedraagt is de printer gereed om data te ontvangen en af te drukken.

#3F Open random access file
Invoer: filenaam als ASCIIZ-string
file-attribuut (1 byte)
Uitvoer: handle (1 byte)

Bij het openen van een file bepaalt het attribuut op welke wijze de file aangesproken mag worden. Het attribuut is gewijzigd sinds de vorige versies. De afzonderlijke bits hebben de volgende betekenis:

pictures/pccom3f.gif

Toegangsmodus:
000 alleen lezen
001 alleen schrijven
010 lezen en schrijven
File share modus:
000 alleen actuele programma heeft toegang (FCB mode)
001 alleen actuele programma heeft toegang
010 andere programma’s mogen alleen lezen
011 andere programma’s mogen alleen schrijven
100 andere programma’s mogen lezen en schrijven
Handle vlag:
0 Afhankelijk proces mag handle aanspreken
1 Alleen het actuele proces mag handle aanspreken

De file sharing mode is van toepassing indien er gebruik wordt gemaakt van netwerkprogrammatuur. Deze modus is van toepassing indien andere programma’s proberen te lezen of schrijven terwijl het bestand geopend is.
De computer zoekt het opgegeven bestand. Als dit gevonden is wordt het geopend voor de gewenste toegang. Bestanden waarnaar geschreven mag worden worden aangemaakt als zij niet gevonden worden.
Bij een niet geopend bestand is de afgegeven handle 0; het is niet te achterhalen waarom de file niet gevonden is. Iedere andere waarde voor de handle duidt erop dat de file geopend is.

#40 Sluit random access file
Invoer: handle (1 byte)
Uitvoer: geen

De opgegeven file wordt afgesloten en de handle wordt vrijgegeven. De handle moet een waarde hebben groter dan 4 omdat anders een MS-DOS standaard apparaat gesloten kan worden. Zie bijlage II.

#41 Schrijf byte naar random access file
Invoer: handle (1 byte)
data (1 byte)
Uitvoer: resultaat (1 byte)

De data wordt naar de file met de betreffende handle gestuurd. Bij succes is het resultaat 1. Een resultaat 0 geeft aan dat er geen byte meer naar de file geschreven kon worden; de disk is dan vol.

#42 Lees byte van random access file
Invoer: handle (1 byte)
Uitvoer: resultaat (1 byte)
data (1 byte)

De data wordt van de file met de betreffende handle gelezen. Bij succes is het resultaat 1. Een resultaat 0 geeft aan dat er geen byte meer gelezen kon worden; het einde van de file is dan bereikt. Er moet dan toch nog een leesopdracht plaats vinden omdat de PC een willekeurig byte overstuurd.

#43 Verplaats random access file pointer
Invoer: handle (1 byte)
offset van pointer (4 bytes)
offset code (1 byte)
Uitvoer: resultaat (1 byte)
absolute waarde van pointer (4 bytes)

De pointer naar een random access file kan met deze functie opgevraagd worden. Hiertoe wordt eerst de handle van de betreffende file gegeven en daarna een 32 bits offset voor de pointer. Tenslotte volgt de offset code, hiermee wordt aangegeven hoe de offset geïnterpreteerd dient te worden:

0: offset heeft betrekking op begin van het bestand
1: offset heeft betrekking op actuele positie van pointer
2: offset heeft betrekking op einde van het bestand

Als er geen fout optreedt is het resultaat 0, gevolgd door de waarde van de pointer ten opzichte van het begin van het bestand. De offset mag 0 of negatief zijn bij offset codes 1 en 2. Het is zelfs mogelijk om de pointer voor het begin of achter het eind van het bestand te zetten. Hiervoor wordt geen foutmelding gegeven. De fout treedt pas op bij de eerstvolgende lees of schrijfopdracht voor die file.
Met dit commando kan de actuele waarde van de pointer opgevraagd worden door een offset 0 te geven en offset code 1; hierdoor wordt de pointer 0 bytes verplaatst ten opzichte van de actuele positie -< deze blijft dus staan.

#44 Opvragen extensie van random access file
Invoer: handle (1 byte)
Uitvoer: resultaat (1 byte)
extensie van file (4 bytes)

De extensie is in dit geval niet het laatste stukje van de filenaam maar de lengte van de file. Bij een resultaat 0 volgt de lengte van de file.

#45 Lees teken onder muiscursor
Invoer: geen
Uitvoer: teken onder muiscursor (1 byte)

Deze functie is analoog aan functie #02, behalve dat nu het karakter gelezen wordt op de plaats van de muiscursor; deze functie werkt alleen in tekstmodi 40*25 en 80*25.

#46 Opvragen versienummer terminal programma
Invoer: geen
Uitvoer: release/update nummer (1 byte)
hoofdversienummer (1 byte)

Het is zinnig om het versienummer van het terminal programma op te vragen als er gebruik wordt gemaakt van deze serie PC-commando’s. Hiermee kan de gebruiker gewaarschuwd worden dat hij/zij mogelijk een recentere versie van het terminal programma dient te gebruiken.
Alle commando’s in deze handleiding zijn beschikbaar vanaf versie 3.10.

#47 Teken naar printer sturen
Invoer: teken (1 byte)
Uitvoer: geen

Het gelezen teken wordt naar de printer gestuurd indien deze aangezet is met $2 of ^B. Als de printer niet aangezet is dan voert dit commando niets uit. In het geval dat de printer wel aangezet is maar de printer is niet on-line wordt gewacht totdat de printer on-line komt.

#48 CGA grafisch teken definieren
Invoer: ascii waarde van teken (1 byte)
bitpatroon van teken (8 bytes)
Uitvoer: geen

In de grafische CGA mode is het mogelijk om zelf de tekens 128 t/m 255 te definieren (iets dat MS-DOS doet met het commando GRAFTABL). Deze mogelijkheid is nu ook beschikbaar voor de Atom.
Nadat de ascii waarde van het te definieren teken is overgezonden worden de volgende acht bytes opgeslagen als bitpatroon.
De nieuwe tekens worden in hetzelfde gebied opgeslagen als het font voor GTEXT en Atomvdu; het is dus niet mogelijk om deze drie fonts gelijktijdig te gebruiken of de fonts moeten om en om geladen worden.
Het is al aan te voelen dat een komplete karakterset geladen kan worden. Om een nieuwe karakterset te laden kan het bekende FONT statement of commando #06 gebruikt worden.

#49 Horizontaal vullen
Invoer: coordinaten beginpunt (2 words)
grenskleur (1 byte)
Uitvoer: geen

Vanaf het opgegeven punt wordt de beeldlijn naar links en naar rechts gekleurd in de aktuele kleur. Dit kleuren gaat door totdat een pixel ontmoet wordt dat gelijk is aan de grenskleur.
Bij het kleuren wordt rekening gehouden met een eventueel grafisch venster en een verschoven oorsprong. Voorwaarde is wel dat het beginpunt in het grafisch venster ligt.

#4A Vertikaal vullen
Invoer: coordinaten beginpunt (2 words)
grenskleur (1 byte)
Uitvoer: geen

Vanaf het opgegeven punt wordt de beeldlijn naar boven en naar beneden gekleurd in de aktuele kleur. Dit kleuren gaat door totdat een pixel ontmoet wordt dat gelijk is aan de grenskleur.
Bij het kleuren wordt rekening gehouden met een eventueel grafisch venster en een verschoven oorsprong. Voorwaarde is wel dat het beginpunt in het grafisch venster ligt.

#4B Aanroepen INT 61h
Invoer: afhankelijk van aangeroepen programma
Uitvoer: afhankelijk van aangeroepen programma

Om het Atom terminal programma zelf uit te breiden kan op de PC een resident programma gestart worden dat geaktiveerd wordt bij een oproep van INT 61h.
Parameters en resultaten kunnen afhankelijk van het opgeroepen programma uitgewisseld worden.
Zie het hoofdstuk “communicatie met andere programma’s” voor meer uitleg.

#4C Definieer een grafisch venster
Invoer: X-coordinaat linker benedenhoek (1 word)
X-coordinaat linker benedenhoek (1 word)
Y-coordinaat rechter bovenhoek (1 word)
Y-coordinaat rechter bovenhoek (1 word)
Uitvoer: geen

Voor de Atom grafische mode bood het Gagsrom al mogelijkheden voor grafische vensters. Voor de extended video mode kan dit commando gebruikt worden om een grafisch venster vast te leggen. Dat houdt in dat alleen binnen dat venster getekend kan worden.
Na het gebruiken van een CLEAR opdracht wordt het venster automatisch opgeheven.

#4D Grafisch venster opheffen
Invoer: geen
Uitvoer: geen

Hiermee wordt een grafisch venster opgeheven.

#4E Grafische oorsprong verschuiven
Invoer: coordinaten van nieuwe oorsprong (2 words)
Uitvoer: geen

Het grafische nulpunt ligt normaal in de linker bovenhoek van het scherm. Met dit commando kan het punt (0,0) verschoven worden naar een willekeurige plaats op het scherm.
Bij het verschuiven van de grafische oorsprong wordt geen rekening gehouden met een eerder verschoven oorsprong en een grafisch venster. De nieuwe positie is dus altijd ten opzichte van de linker bovenhoek van het scherm.
Na een CLEAR opdracht bevindt de oorsprong zich altijd in de linker bovenhoek.

#4F Selecteer schermpagina voor monitor Invoer: schermpagina nummer (1 byte)
Uitvoer: geen

Bij gebruik van een tekstmode kan gebruik gemaakt worden van verschillende schermpagina’s. Er zijn in feite twee mogelijkheden bij het werken met verschillende pagina’s, te weten: werkpagina is zichtbaar op scherm of de werkpa- gina en de getoonde pagina zijn verschillend. Met het commando #4F kan de pagina gekozen worden die op de monitor getoond wordt.
Zie voor meer informatie het hoofdstuk “Schermpagina’s”.

#50 Selecteer schermpagina voor bewerkingen
Invoer: schermpagina nummer (1 byte)
Uitvoer: geen

Bij gebruik van een tekstmode kan gebruik gemaakt worden van verschillende schermpagina’s. Er zijn in feite twee mogelijkheden bij het werken met verschillende pagina’s, te weten: werkpagina is zichtbaar op scherm of de werkpa- gina en de getoonde pagina zijn verschillend. Met het commando #50 kan de pagina gekozen worden waar de schrijfopdrachten naar toe gestuurd worden. Zie voor meer informatie het hoofdstuk “Schermpagina’s”.

#51 Zet cursor lijnen
Invoer: bovenste cursorlijn (1 byte)
onderste cursorlijn (1 byte)
Uitvoer: geen

De vorm van de cursor kan ingesteld worden met dit commando. De cursorlijnen worden van boven naar beneden geteld. De eerste parameter zal dus altijd groter zijn dan de tweede. Bij ongeldige waarden verdwijnt de cursor van het scherm. Het aantal lijnen verschilt per videokaart.

#52 Gereserveerd

#53 Gereserveerd

#54 Gereserveerd

#55 Selecteer user font voor EGA/VGA tekstmode
Invoer: geen
Uitvoer: geen

Dit commando laadt het geladen font in het fontram van de EGA of VGA kaart.
Hiermee kunnen de karakters in tekstmode gewijzigd worden.

#56 Selecteer EGA 8*14 ROM font
Invoer: geen
Uitvoer: geen

Hiermee wordt het standaard EGA 8*14 karakterset in de fontram van de EGA of VGA kaart geladen. Automatisch wordt omgeschakeld naar 25 regels per scherm. Het kan nodig zijn om het tekstwindow te herdefinieren.

#57 Selecteer EGA 8*8 ROM font
Invoer: geen
Uitvoer: geen

Hiermee wordt het standaard EGA 8*8 karakterset in de fontram van de EGA of VGA kaart geladen. Automatisch wordt omgeschakeld naar 43 regels per scherm voor EGA en 50 regels per scherm voor VGA. Het tekstwindow zal aangepast moeten worden.

#58 Schrijf grafisch venster naar disk
Invoer: x-coordinaat links onder (1 word)
y-coordinaat links onder (1 word)
x-coordinaat rechts boven (1 word)
y-coordinaat rechts boven (1 word)
filehandle (1 byte)
Uitvoer: geen

Schrijft een grafisch window in een extended video mode naar file. De file moet reeds geopend zijn. De coordinaten van het window en de file handle worden als parameter opgegeven. De coordinaten gelden vanaf de logische oorsprong. Er wordt dus rekening gehouden met een verschoven oorsprong. Er wordt geen resultaat teruggegeven; het is dus niet bekend of alle data op de disk terecht zijn gekomen. Dit commando is hoofdzakelijk bedoeld om stukken van een grafisch scherm tijdelijk in een bestand op te slaan. Na beeindiging van het commando wordt de file niet automatisch afgesloten.

#59 Lees grafisch venster van disk
Invoer: x-coordinaat links onder (1 word)
y-coordinaat links onder (1 word)
filehandle (1 byte)
Uitvoer: geen

Een grafisch window dat met commando #58 naar file geschreven is kan hiermee teruggezet worden op het scherm. Dit hoeft niet op dezelfde plaats te zijn. De file moet al geopend zijn. Er wordt geen resultaat teruggemeld zodat niet bekend is of de data goed gelezen zijn. Na het inlezen wordt het bestand niet automatisch gesloten.

#5A Diverse grafische functies

SHAPES – leest een sub-commando nummer en voert vervolgens de functie uit. Bij deze functies wordt rekening gehouden met een verschoven grafische oorsprong en het huidige grafische venster.

#5A subfunctie #0: teken een cirkel
Invoer: x-coordinaat middelpunt (1 word)
y-coordinaat middelpunt (1 word)
straal (1 word)
Uitvoer: geen

In extended video mode wordt een cirkel getekend met het middelpunt op de opgegeven coordinaten en met de opgegeven straal.

#5A subfunctie #1: teken een cirkel en vul deze
Invoer: x-coordinaat middelpunt (1 word)
y-coordinaat middelpunt (1 word)
straal (1 word)
Uitvoer: geen

In extended video mode wordt een cirkel getekend met het middelpunt op de opgegeven coordinaten en met de opgegeven straal. Deze cirkel wordt opgevuld in de geldende voorgrondkleur.

#5A subfunctie #2: teken een rechthoek
Invoer: x-coordinaat linker benedenhoek (1 word)
y-coordinaat rechter benedenhoek (1 word)
x-coordinaat linker bovenhoek (1 word)
y-coordinaat rechter bovenhoek (1 word)
Uitvoer: geen

In extended video mode wordt een rechthoek getekend tussen de opgegeven hoekpunten.

#5A subfunctie #3: teken een rechthoek en vul deze
Invoer: x-coordinaat linker benedenhoek (1 word)
y-coordinaat rechter benedenhoek (1 word)
x-coordinaat linker bovenhoek (1 word)
y-coordinaat rechter bovenhoek (1 word)
Uitvoer: geen

In extended video mode wordt een rechthoek getekend tussen de opgegeven hoekpunten. Deze rechthoek wordt opgevuld in de geldende voorgrondkleur.

#5A subfunctie #4: teken een driehoek
Invoer: x en y-coordinaten eerste hoekpunt (2 words)
x en y-coordinaten tweede hoekpunt (2 words)
x en y-coordinaten derde hoekpunt (2 words)

In extended video mode wordt een driehoek getekend tussen de opgegeven hoekpunten.

#5A subfunctie #5: teken een driehoek en vul deze
Invoer: x en y-coordinaten eerste hoekpunt (2 words)
x en y-coordinaten tweede hoekpunt (2 words)
x en y-coordinaten derde hoekpunt (2 words)

In extended video mode wordt een driehoek getekend tussen de opgegeven hoekpunten. Deze driehoek wordt opgevuld in de geldende voorgrondkleur.

#5A subfunctie #6: zet lijn patroon
Invoer: bitpatroon van de lijn (1 word)
Uitvoer: geen

Om niet-aaneengesloten lijnen te tekenen kan met deze functie een 16-bits patroon opgegeven worden.

#5A subfunctie #7: teken een rechte lijn
Invoer: x-coordinaat beginpunt (1 word)
y-coordinaat beginpunt (1 word)
x-coordinaat eindpunt (1 word)
y-coordinaat eindpunt (1 word)
Uitvoer: geen

In extended video mode wordt een lijn getekend tussen het opgegeven begin en eindpunt. Hierbij geldt dat een ‘1’ in het lijn patroon (zie ook subfunctie #06) geplot wordt de geldende voorgrondkleur. Een ‘0’ in het lijn patroon laat het pixel ongewijzigd.

#5A subfunctie #8: huidige kleur/attribuut opvragen
Invoer: geen
Uitvoer: attribuut (1 byte)

De waarde van het huidige attribuut of van de huidige voorgrondkleur kan hiermee opgevraagd worden.

#5A subfunctie #9: video mode support opvragen
Invoer: video mode (1 byte)
Uitvoer: support status (1 byte)

De PC controleert of de gevraagde video mode ondersteund wordt door de huidige videokaart. Bij status #FF wordt de mode niet ondersteund. Er wordt niet van mode veranderd.

#5B Directe toegang tot PC-video geheugen

Met directe toegang tot het PC-video geheugen kunnen bepaalde bewerkingen veel sneller gebeuren dan via het BIOS. Deze functies zullen in de windows versie van het terminal programma niet geimplementeerd zijn; gebruik ervan is dus vanuit vanwege de compatibiliteit niet aan te raden.

#5B subfunctie #0: Lees direct PC videogeheugen
Invoer: offset adres videogeheugen (1 word)
Uitvoer: data uit videogeheugen (1 byte)

Deze call maakt het mogelijk om het PC videogeheugen direct uit te lezen, dus niet via het BIOS. Deze werkwijze is over het algemeen wat sneller. Bovendien worden hiermee ook systemen met twee monitoren ondersteund.

#5B subfunctie #1: Schrijf direct PC videogeheugen
Invoer: offset adres videogeheugen (1 word)
data (1 byte)
Uitvoer: geen

Deze call maakt het mogelijk om direct naar het PC videogeheugen te schrijven, dus niet via het BIOS. Deze werkwijze is over het algemeen wat sneller.
Bovendien worden hiermee ook systemen met twee monitoren ondersteund.

#5B subfunctie #2: Verplaats datablok in PC videogeheugen
Invoer: offset adres bron (1 word)
offset adres bestemming (1 word)
bloklengte (1 word)
Uitvoer: geen

Het datablok beginnende vanaf ‘offset adres bron’ met lengte ‘bloklengte’ wordt gekopieerd naar ‘offset adres bestemming’. Hierme kunnen snel stukken tekst over het scherm verplaatst worden, data kan tussen verschillende schermpagina’s gekopieerd worden of in twee-monitor systemen van de ene monitor naar de andere.

#5B subfunctie #5B: Opvragen reset type
Invoer: geen
Uitvoer: reset type (1 byte)

De Atom kan opvragen wat de reden was van de laatste reset. Door het terminal programma worden de volgende typen gebruikt:

Reset type #0 – terminal programma start
Reset type #1 – reset door CTRL-ALT-<reset>
De overige reset typen kunnen door software vanuit de Atom gezet worden.

#5B subfunctie #5C: Instellen reset type
Invoer: reset type (1 byte)
Uitvoer: geen

Voor een software reset kan met dit commando het reset type ingesteld worden. Ofschoon type #0 en #1 gereserveerd zijn door het terminal programma kunnen deze codes alsnog ingesteld worden om een dergelijke reset te simuleren.

#5B subfunctie #5D: Software reset genereren
Invoer: geen
Uitvoer: geen

Het terminal programma geeft de Atom kaart een reset signaal. Het reset type kan van te voren worden ingesteld met commando #5B, subfunctie #5C.

#5C Tekstpagina’s kopieren, saven en laden

De volgende serie commando’s bieden mogelijkheden om tekstschermen onderling te kopieren of om ze (tijdelijk) te bewaren of te laden van disk. Aangezien het videosegment van een Herculeskaart begint op adres B000h en van de overige videokaarten op B800h moet met behulp van de command line parameter /V=vvv de juiste videokaart opgegeven zijn om deze functies goed te laten werken.

#5C subfunctie #0: kopieer schermpagina
Invoer: bron schermpagina (1 byte)
bestemming schermpagina (1 byte)
Uitvoer: geen

De inhoud van de ‘bron’pagina wordt gekopieerd naar de bestemming.

#5C subfunctie #1: bewaar schermpagina op disk
Invoer: schermpagina nummer (1 byte)
file handle (1 byte)
Uitvoer: geen

De inhoud van de opgegeven schermpagina wordt inclusief de attributen in een bestand opgeslagen. Dit bestand dient van te voren als random access file geopend te zijn. Er volgt geen terugmelding; het is dus niet na te gaan of het scherm goed opgeslagen is. Na afloop wordt het bestand niet afgesloten.

#5C subfunctie #2: haal schermpagina van disk
Invoer: schermpagina nummer (1 byte)
file handle (1 byte)
Uitvoer: geen

De inhoud van het opgegeven “pagina-bestand” wordt in de opgegeven schermpagina geladen. Dit bestand dient van te voren als random access file geopend te zijn. Er volgt geen terugmelding; het is dus niet na te gaan of het scherm goed geladen is. Na afloop wordt het bestand niet afgesloten.

#5D Ascii keyboard scan
Invoer: geen
Uitvoer: keyboard status (1 byte)
ascii waarde -als toets gedrukt- (1 byte)
scancode -als toets gedrukt- (1 byte)

Dit commando is een combinatie van de commando’s #1 en #3A. De keyboard status wordt altijd als resultaat terug gegeven. De afzonderlijke bits hebben de volgende betekenis

:

pictures/pccom5d.gif

Als bit 0 gezet is volgen achtereenvolgens nog de ascii waarde en de scan code van de ingedrukte toets. Als er geen toets ingedrukt is wordt alleen de status overgestuurd naar de Atom.

#5E Diverse wachtfuncties

Let op: de functies van commando #5E maken gebruik van BIOS INT 15H; deze is niet in een PC/XT geimplementeerd!

#5E subfunctie #0: Wacht gedurende ingestelde tijd
Invoer: geen
Uitvoer: dummy (1 byte)

De PC wacht gedurende een van te voren opgegeven tijd. Na het verstijken van deze tijd wordt een dummy byte naar de Atom gestuurd om beide systemen te synchroniseren. De wachttijd kan met subfunctie #1 van commando #5E ingesteld worden.

#5E subfunctie #1: Stel wachttijd in
Invoer: tijd in microseconden (4 bytes)
Uitvoer: geen

Met deze functie wordt de wachttijd ingesteld voor de functies #0 en #2 van commando #5E. Het meest lage byte wordt als eerste overgestuurd.

#5E subfunctie #2: Vlag zetten na wachttijd
Invoer: geen
Uitvoer: geen

In de PC wordt een vlag gewist die na de opgegeven wachttijd gezet wordt. De wachttijd wordt ingesteld met commando #5E subfunctie #1. De status van deze vlag kan opgevraagd worden met commando #5E subfunctie #3.

#5E subfunctie #3: Timer vlag uitlezen
Invoer: geen
Uitvoer: status van de vlag (1 byte)

Als de wachtperiode, die met commando #5E subfunctie #2 gestart werd, verstreken is heeft bit 7 de waarde ‘1’.

#5E subfunctie #4: 1/60 seconde wachten
Invoer: geen
Uitvoer: dummy byte (1 byte)

Deze functie laat de PC 1/60 seconde wachten waarna een dummy byte naar de Atom gestuurd wordt om de twee systemen te synchroniseren.

#5E subfunctie #5: 1/50 seconde wachten
Invoer: geen
Uitvoer: dummy byte (1 byte)

Deze functie laat de PC 1/50 seconde wachten waarna een dummy byte naar de Atom gestuurd wordt om de twee systemen te synchroniseren.

#5F Paint functies

Deze functies kleuren gesloten vlakken in met gedefinierde patronen. Hierbij wordt rekening gehouden met een verschoven oorsprong en grafisch venster. Paint-patronen worden samen met de geplande sprites opgeslagen in het geheugen van de PC. In totaal zijn 64 patronen en sprites beschikbaar. Beiden hebben hetzelfde formaat, met afmetingen van 16*16 pixels.

#5F subfunctie 0: vlak inkleuren in voorgrondkleur
Invoer: x-coordinaat (1 word)
y-coordinaat (1 word)
grenskleur (1 byte)
Uitvoer: geen

Een vlak, ingesloten door lijnen in de grenskleur, wordt gevuld in de geldende voorgrondkleur. De grenskleur mag hetzelfde zijn als de huidige voorgrondkleur.

#5F subfunctie n: vlak inkleuren volgens patroon n
waarbij geldt: 1 < n <64
invoer: x-coordinaat (1 word)
y-coordinaat (1 word)
grenskleur (1 byte)
uitvoer: geen

Een vlak, ingesloten door lijnen in de grenskleur, wordt gevuld met het opgegeven patroon. de grenskleur mag hetzelfde zijn als de huidige voorgrondkleur.

#5F subfunctie #FD: patroonfile laden van disk
Invoer: pad+filenaam als ASCIIZ
Uitvoer: error code (1 byte)

Om een set met patronen te laden van disk dient dit commando gebruikt te worden. De filenaam mag vooraf gegaan worden door een drive en pad aanduiding. Wildcards zijn niet toegestaan.

#5F subfunctie #FE: patroonfile schrijven naar disk
Invoer: pad+filenaam als ASCIIZ
Uitvoer: error code (1 byte)

Een set met patronen wordt met dit commando op disk opgeslagen. De filenaam mag vooraf gegaan worden door een drive en pad aanduiding. Wildcards zijn niet toegestaan.

#5F subfunctie #FF: patroon definieren
Invoer: patroonnummer (1 byte)
patroon (256 bytes)
Uitvoer: geen

Een patroon heeft de afmetingen van 16×16 bytes. Ieder byte bevat de kleurwaarde van één pixel. Op deze manier kunnen dus maximaal 256 kleuren in een patroon verwerkt worden. De eerste 16 bytes vormen de bovenste rij van de patroon, de daaropvolgende 16 bytes de tweede rij enz.

#60 Zet PC in CLEAR 0 emulatie mode
Invoer: geen
Uitvoer: geen

In het windows terminal programma moet bij emulatie van de grafische modi duidelijk aangegeven worden of het CLEAR 0 betreft of een van de overige Atom grafische modi. Daartoe wordt CLEAR 0 met een apart commando geïnitialiseerd. In de DOS versie wordt automatisch het benodigde ‘ATOMVDU.FNT’ geladen mits deze geplaatst is in de directory C:\ATOM\FONT.

#61 Record lezen/schrijven

Om data uit een bestand te lezen kan het lezen van de gegevens in een blok handiger danwel sneller zijn door het datablok in één commando te lezen in plaats van de afzonderlijke bytes. Een record mag maximaal 16 kb groot zijn. Als buffer wordt het opslag gebied voor patronen en sprites gebruikt. Deze zijn na het lezen of schrijven van een record gewist!

#61 subfunctie #0: record lezen
Invoer: handle (1 byte)
aantal te lezen bytes (1 word)
Uitvoer: errorcode (1 byte)
aantal gelezen bytes (1 word)
xxx bytes

Als invoer worden de file handle en het aantal te lezen bytes doorgegeven aan de PC. Deze probeert het aantal bytes te lezen. Indien er geen toegangsfout optreedt is de errorcode gelijk 0. In dat geval wordt vervolgens het aantal gelezen bytes teruggemeld. Deze bytes worden als laatste overgestuurd van PC naar Atom. Als er een fout optradt volgen er na de errorcode geen data meer. Als er geen fout optreedt, maar het aantal gelezen bytes is kleiner dan het aantal gevraagde bytes, is het einde van het bestand bereikt.

#61 subfunctie #1: record schrijven
Invoer: handle (1 byte)
aantal te schrijven bytes (1 word)
xxx bytes
Uitvoer: errorcode (1 byte)
aantal geschreven bytes (1 word)

De Atom stuurt de file handle, het aantal te schrijven bytes en de data naar de PC. De data worden naar het bestand geschreven en er volgt een terugkoppeling. Als er een fout optrad tijdens het schrijven is de errorcode ongelijk 0 en volgt er geen data meer. Bij succes wordt het aantal geschreven bytes teruggemeld. Als dit aantal kleiner is dan het oorspronkelijk aantal is de disk vol.

#62 Floating point functies

Dit commando biedt de mogelijkheid om gebruik te maken van de rekenkracht van een 80×87 coprocessor. Hierbij worden twee modi ondersteund: de standaard Atom notatie (40 bits getallen) of de Intel8 (64 bits getallen). Dit formaat dient gegeven te worden alvorens de floating point functies gebruikt worden. Voor de floating point functies is een 287 of hoger nodig. Voor het gebruik van goniometrische functies (sin, cos, tan e.d.) is zelfs een 387 of hoger vereist. Alvorens de functies te gebruiken dient met subfunctie 0 getest te worden welke mathematische coprocessor in de pc aanwezig is.

#62 subfunctie #00: fp-formaat instellen en processor opvragen
Invoer: floating point formaat (1 byte)
Uitvoer: floating point processor code (1 byte)

Voor het floating point formaat wordt ‘0’ gegeven voor Atom formaat of ‘1’ voor het Intel8 formaat. De processor code is voor de diverse typen:

0 geen coprocessor aanwezig
1 80287 aanwezig
2 80387 of hoger aanwezig

#62 subfunctie #01: optellen
Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: som van beide getallen (5/8 bytes)

De ingevoerde getallen worden bij elkaar opgeteld.

#62 subfunctie #02: aftrekken

Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: verschil van beide getallen (5/8 bytes)

Getal2 wordt van getal1 afgetrokken.

#62 subfunctie #03: vermenigvuldigen
Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: product van beide getallen (5/8 bytes)

De twee ingevoerde getallen worden met elkaar vermenigvuldigd.

#62 subfunctie #04: delen
Invoer: getal1 (teller) (5/8 bytes)
getal2 (noemer) (5/8 bytes)
Uitvoer: quotiënt van beide getallen (5/8 bytes)

Getal1 wordt gedeeld door getal2.

#62 subfunctie #05: absolute waarde bepalen
Invoer: getal (5/8 bytes)
Uitvoer: absolute waarde van getal (5/8 bytes)

Van het ingevoerde getal wordt de absolute waarde teruggegeven.

#62 subfunctie #06: afronden naar integer waarde
Invoer: getal (5/8 bytes)
Uitvoer: afgeronde integer waarde van getal (5/8 bytes)

Van het ingevoerde getal wordt de afgeronde integer waarde teruggegeven. Dit is echter nog steeds in floating point formaat genoteerd. (Bijv. 1,23 wordt 1,00)

#62 subfunctie #07: vierkantswortel
Invoer: getal (5/8 bytes)
Uitvoer: vierkantswortel van getal (5/8 bytes)

Deze functie retourneert de vierkantswortel van het opgegeven getal.

#62 subfunctie #08: tangens (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: tangens van getal (5/8 bytes)

Deze functie retourneert de tangens van het opgegeven getal. Dit getal moet in radialen gegeven worden.

#62 subfunctie #09: sinus (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: sinus van getal (5/8 bytes)

Deze functie retourneert de sinus van het opgegeven getal. Dit getal moet in radialen gegeven worden.

#62 subfunctie #0A: cosinus (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: cosinus van getal (5/8 bytes)

Deze functie retourneert de cosinus van het opgegeven getal. Dit getal moet in radialen gegeven worden.

#62 subfunctie #0B: omrekenen naar graden
Invoer: hoek in radialen (5/8 bytes)
Uitvoer: hoek in graden (5/8 bytes)

De ingevoerde hoek wordt omgerekend van radialen naar graden.

#62 subfunctie #0C: omrekenen naar radialen
Invoer: hoek in graden (5/8 bytes)
Uitvoer: hoek in radialen (5/8 bytes)

De ingevoerde hoek wordt omgerekend van graden naar radialen.

#62 subfunctie #0D: machtverheffen
Invoer: m (macht) (5/8 bytes)
n (getal) (5/8 bytes)
Uitvoer: n^m (5/8 bytes)

Teruggegeven wordt de m-de macht van n. Uiteraard zijn floating point getallen hier toegestaan.

#63 AIC Communicatie

De Atom-in-PC kan via een AIC-kabel communiceren met een andere Atom die op de printerpoort is aangesloten. Alvorens te communiceren dient de gebruikte poort geïnitialiseerd te worden. Bij de overige commununicatie hoeft de printerpoort niet meer opgegeven te worden.

#63 subfunctie #00: initialiseer AIC poort
Invoer: adres printerpoort (1 word)
Uitvoer: geen

Het adres van de gebruikte printerpoort (378 voor LPT1 en 278 voor LPT2) wordt intern opgeslagen. Verder worden de handshakelijnen ingesteld voor de communicatie.

#62 subfunctie #00: fp-formaat instellen en processor opvragen
Invoer: floating point formaat (1 byte)
Uitvoer: floating point processor code (1 byte)

Voor het floating point formaat wordt ‘0’ gegeven voor Atom formaat of ‘1’ voor het Intel8 formaat. De processor code is voor de diverse typen:

0 geen coprocessor aanwezig 1 80287 aanwezig
2 80387 of hoger aanwezig

#62 subfunctie #01: optellen
Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: som van beide getallen (5/8 bytes)

De ingevoerde getallen worden bij elkaar opgeteld.

#62 subfunctie #02: aftrekken
Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: verschil van beide getallen (5/8 bytes)

Getal2 wordt van getal1 afgetrokken.

#62 subfunctie #03: vermenigvuldigen
Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: product van beide getallen (5/8 bytes)

De twee ingevoerde getallen worden met elkaar vermenigvuldigd.

#62 subfunctie #04: delen
Invoer: getal1 (teller) (5/8 bytes)
getal2 (noemer) (5/8 bytes)
Uitvoer: quotiënt van beide getallen (5/8 bytes)

Getal1 wordt gedeeld door getal2.

#62> subfunctie #05: absolute waarde bepalen
Invoer: getal (5/8 bytes)
Uitvoer: absolute waarde van getal (5/8 bytes)

Van het ingevoerde getal wordt de absolute waarde teruggegeven.

#62 subfunctie #06: afronden naar integer waarde
Invoer: getal (5/8 bytes)
Uitvoer: afgeronde integer waarde van getal (5/8 bytes)

Van het ingevoerde getal wordt de afgeronde integer waarde teruggegeven. Dit isechter nog steeds in floating point formaat genoteerd. (Bijv. 1,23 wordt 1,00)

#62 subfunctie #07: vierkantswortel
Invoer: getal (5/8 bytes)
Uitvoer: vierkantswortel van getal (5/8 bytes)

Deze functie retourneert de vierkantswortel van het opgegeven getal.

#62 subfunctie #08: tangens (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: tangens van getal (5/8 bytes)

Deze functie retourneert de tangens van het opgegeven getal. Dit getal moet in radialen gegeven worden.

#62 subfunctie #09: sinus (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: sinus van getal (5/8 bytes)

Deze functie retourneert de sinus van het opgegeven getal. Dit getal moet in radialen gegeven worden.

#62 subfunctie #0A: cosinus (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: cosinus van getal (5/8 bytes)

Deze functie retourneert de cosinus van het opgegeven getal. Dit getal moet in radialen gegeven worden.

#62 subfunctie #0B: omrekenen naar graden
Invoer: hoek in radialen (5/8 bytes)
Uitvoer: hoek in graden (5/8 bytes)

De ingevoerde hoek wordt omgerekend van radialen naar graden.

#62 subfunctie #0C: omrekenen naar radialen
Invoer: hoek in graden (5/8 bytes)
Uitvoer: hoek in radialen (5/8 bytes)

De ingevoerde hoek wordt omgerekend van graden naar radialen.

#62 subfunctie #0D: machtverheffen
Invoer: m (macht) (5/8 bytes)
n (getal) (5/8 bytes)
Uitvoer: n^m (5/8 bytes)

Teruggegeven wordt de m-de macht van n. Uiteraard zijn floating point getallen hier toegestaan.

#63 AIC Communicatie

De Atom-in-PC kan via een AIC-kabel communiceren met een andere Atom die op de printerpoort is aangesloten. Alvorens te communiceren dient de gebruikte poort geïnitialiseerd te worden. Bij de overige commununicatie hoeft de printerpoort niet meer opgegeven te worden.

#63 subfunctie #00: initialiseer AIC poort
Invoer: adres printerpoort (1 word)
Uitvoer: geen

Het adres van de gebruikte printerpoort (378 voor LPT1 en 278 voor LPT2) wordt intern opgeslagen. Verder worden de handshakelijnen ingesteld voor de communicatie.

#63 subfunctie #01: stuur byte naar andere computer
Invoer: data (1 byte)
Uitvoer: geen

Het opgegeven byte wordt naar de andere computer gestuurd.

#63 subfunctie #02: lees byte van andere computer
Invoer: geen
Uitvoer: ontvangen data (1 byte)

Er wordt gewacht totdat een byte van de andere computer ontvangen is. Dit byte wordt geretourneerd naar de Atom-in-PC.

#64 Extended Memory Support

Het gebruik van XMS geheugen is nu standaard opgenomen in het terminal programma. Het gebruik van een losse XMS-driver is niet meer nodig. De maximale hoeveelheid beschikbaar XMS geheugen wordt als command line parameter opgegeven bij het starten van het terminal programma. Als er XMS geheugen beschikbaar is kan dit zonder verdere initialisatie gebruikt worden. Wellicht ten overvloede, minimaal een pc met een 80286 processor is noodzakelijk.
Het directe gebruik van dit commando wordt niet aanbevolen omdat reeds bestaande software dat wel XMS geheugen nodig heeft hiermee niet werkt. Het gebruik van XMS geheugen dient te verlopen via de daarvoor bestemde OSBYTE functies.

#64 subfunctie 0: versie opvragen
Invoer: geen
Uitvoer: versienummer (1 byte)
releasenummer (1 byte)
aantal xms pagina’s (1 byte)

#64 subfunctie 1: pagina voorzetten
Invoer: nieuw paginanummer (1 byte)
Uitvoer: 16 kb data

Bij dit commando wordt de huidige pagina niet opgeslagen in xmsgeheugen.

#64 subfunctie 2: pagina voorzetten
Invoer: huidig paginanummer (1 byte)
16 kb data
Uitvoer: geen

Bij dit commando wordt de nieuwe pagina niet gelezen in het atomgeheugen.

#64 subfunctie 3: pagina voorzetten
Invoer: huidig paginanummer (1 byte)
16 kb data
nieuw paginanummer (1 byte)
Uitvoer: 16 kb data

De huidige pagina wordt opgeslagen in het xms geheugen en de nieuwe pagina wordt in het atomgeheugen gelezen.

#65 Sprite support commando’s

De opzet is om de administratie, het bewaren van de scherminhoud en het plaatsen van de sprites door de PC uit te laten voeren en dus een hogere snelheid te bereiken. De sprites werken alleen in extended video modi. Elke sprite is 32×32 pixels in maximaal 255 kleuren, de kleurcode 255 (#FF) betekent achtergrondkleur; per sprite is 2kb XMS geheugen nodig.
Functie 0 geeft het aantal beschikbare sprites terug. De overige functies geven minimaal een statusbyte retour. De betekenis van de bits in deze statuscode zijn:

pictures/pccom65.gif
#65 subfunctie 00: Definieer sprite base en initialisatie
Invoer: XMS paginanummer (1 byte)
Uitvoer: aantal beschikbare sprites (1 word)

Alle sprites (max. 1024) worden in XMS geheugen opgeslagen vanaf de opgegeven pagina. Hierdoor is het mogelijk om nog een hoeveelheid XMS geheugen te reserveren voor andere doeleinden, zoals bijvoorbeeld data-opslag. Als tegenprestatie geeft dit commando het hoogste spritenummer terug.

#65 subfunctie 01: Definieer sprite
Invoer: spritenummer (1 word)
spritedata (1024 bytes)
Uitvoer: statuscode (1 byte)

Om een sprite te definieren stuurt de Atom eerst het betreffende spritenummer naar de pc. Direct daarna stuurt de pc het statusbyte terug. Indien alles ok is, statuscode is #00, kunnen de 1024 bytes verstuurd worden. Een sprite bevat horizontaal en vertikaal 32 pixels. Voor elk pixel wordt één byte gebruikt. Een sprite kan 255 kleuren hebben. De kleurwaarde 255 (#FF) geeft aan dat er geen pixel geplot moet worden, de achtergrond blijft dan zichtbaar. Sprites hoeven dus niet per definitie vierkant te zijn.

#65 subfunctie 02: Plaats sprite op het scherm
Invoer: spritenummer (1 word)
x-coordinaat (1 word)
y-coordinaat (1 word)
Uitvoer: statuscode (1 byte)

Het opgegeven spritenummer wordt gecontroleerd op geldigheid en de statuscode wordt teruggestuurd. Indien alles ok is, statuscode is #00, kunnen de coordinaten verzonden worden. Deze coordinaten gelden ten opzichte van een eventuele verschoven oorsprong. De sprite wordt op het scherm getekend. Hierbij wordt geen rekening gehouden met een eventueel ingesteld grafisch venster. De scherminhoud op de positie wordt automatisch bewaard. De coordinaten worden in de administratie bijgewerkt.

#65 subfunctie 03: Verwijder sprite van het scherm
Invoer: spritenummer (1 word)
Uitvoer: statuscode (1 word)

Met deze functie wordt een sprite van het scherm verwijderd. De oude scherminhoud wordt weer hersteld. De coordinaten blijven ongewijzigd in de administratie achter. Alvorens dit alles uit te voeren wordt eerst de statuscode teruggestuurd naar de Atom.

#65 subfunctie 04: Verplaats sprite op het scherm
Invoer: spritenummer (1 word)
x-coordinaat (1 word)
y-coordinaat (1 word)
Uitvoer: statuscode (1 byte)

Om een sprite te verplaatsen wordt eerst subfunctie #03 aangeroepen en direct daarna subfunctie #02. Op de gebruikelijke wijze wordt de sprite van het scherm verwijderd en vervolgens op de nieuwe positie getekend.

#65 subfunctie 05: Plaats sprite op scherm, zonder administratie
Invoer: spritenummer (1 word)
x-coordinaat (1 word)
y-coordinaat (1 word)
Uitvoer: statuscode (1 byte)

Deze functie is gelijk aan subfunctie #02 met uitzondering van het bewaren van schermdata en coordinaten. Deze functie is geoptimaliseerd om dezelfde sprite meerdere malen op het scherm te plaatsen.
Het terminalprogramma controleert eerst of de opgegeven sprite al in de XMS buffer geladen is. Als dat zo is wordt deze niet nogmaals uit het XMS geheugen gekopieerd. Daardoor is de gehele routine sneller dan functie #02. Maar let erop dat er geen beeldschermdata bewaard wordt; de sprite kan niet met subfunctie #03 verwijderd worden.

#65 subfunctie 06: Opvragen sprite coordinaten
Invoer: spritenummer (1 word)
Uitvoer: statuscode (1 byte)
x-coordinaat (1 word)
y-coordinaat (1 word)

Na terugmelding van de statuscode, #00 betekent alles ok, worden de coordinaten van de opgegeven sprite teruggemeld aan de Atom.

#65 subfunctie 07: Test overlap van twee sprites
Invoer: spritenummer1 (1 word)
spritenummer2 (1 word)
Uitvoer: statuscode (1 byte)

Het terminalprogramma berekent aan de hand van de opgeslagen coordinaten of de twee opgegeven sprites elkaar overlappen. Indien er een overlapping bestaat wordt dit kenbaar gemaakt in bit7 van de statuscode. Dit bit is dan gezet.

#65 subfunctie 08: Test overlap van een sprite met muis
Invoer: spritenummer (1 word)
Uitvoer: statuscode (1 byte)

Het terminalprogramma berekent aan de hand van de opgeslagen coödinaten of de opgegeven sprite en de muiscursor elkaar overlappen. Een overlapping wordt kenbaar gemaakt doordat bit7 van de statuscode ‘1’ is. De bits 0,1 en 2 bevatten de status van de muisknoppen.

6. PCDOS – een nieuw disk operating systeem

Het disk operating systeem heeft ook de nodige veranderingen ondergaan. Diverse Atomdos commando’s zijn vervallen en nieuwe commando’s zijn toegevoegd. De nieuwe commando’s hebben betrekking op commando’s die in MS-DOS algemeen gebruikt worden.

Sommige dos commando’s roepen via de shell functie hun gelijknamige MS-DOS commando of programma op. Deze commando’s mogen niet afgekort worden omdat ze als afkorting niet herkend worden door MS-DOS. Het betreft de volgende commando’s:


*COMMAND *FORMAT
*COPY*LABEL
*DIR *RENAME
*DISKCOPY *VOL
*ERASE *XCOPY

Voor de syntax van deze commando’s wordt verwezen naar het MS-DOS handboek van uw DOS-versie. Alle geldige MS-DOS parameters mogen meegegeven worden. Deze commando’s leveren nooit foutmeldingen op voor de Atom.

Begrippen:

filespec: [drive][path][filenaam.ext]
[…]gegeven is optioneel
&lt…&gt gegeven is verplicht

Tenzij anders vermeld zijn in de filenaam zijn de jokers * en ? toegestaan; zowel filenaam als extensie zijn verplicht.
PC-DOS v1.27 heeft enkele wijzigingen ten opzichte van v1.25 en v1.26:

– *MON/*NOMON functie
– *INFO kent nu wildcards
– filenamen mogen tussen aanhalingstekens
– *&ltcommand&gt en *RUN herkennen zelf *.RUN files
– *&ltcommand&gt en *RUN kunnen parameters meekrijgen
– *DRIVE test of opgegeven drive bestaat
– *DELETE kan om bevestiging vragen

*CAT catalog disk (*.)

Syntax: *CAT [filespec]

Alle files die aan de opgegeven filespecificatie voldoen worden op het scherm weergegeven. Als er geen filespecificatie wordt opgegeven worden alle files van de actuele drive en directory afgebeeld. Files waarvan het hidden attribuut gezet is worden niet afgebeeld.

*CD change directory

Syntax: *CD [path]

Als een path wordt opgegeven dan wordt de actuele directory gewijzigd in dit path mits het gevonden is. Als geen path opgegeven wordt, of alleen een drive aanduiding, dan wordt de actuele directory op de betreffende drive op het scherm aangegeven.

*COMMAND ga tijdelijk naar MS-DOS

Syntax: *COMMAND

Hiermee kan het Atom programma tijdelijk onderbroken worden om in MS-DOS te werken. Vanuit MS-DOS kan met het EXIT commando teruggekeerd worden naar de Atom. Deze gaat dan verder waar het programma onderbroken werd. Dit commando werkt ook in een basic programma.

*DELETE wis file(s) (*D.)

Syntax: *DELETE

Als *MON actief is worden alle gevonden files waarvan het read-only ‚n het hidden attribuut gewist zijn op het scherm getoond. De Atom vraagt daarna een bevestiging om de files te verwijderen. Als *MON niet actief is worden de files niet op het scherm getoond en worden ze zonder om bevesting te vragen meteen verwijderd.

*DRIVE verander actuele drive (*DR.)

Syntax: *DRIVE Hiermee kan de actuele drive veranderd worden. Als een ongeldige driveletter opgegeven is, wordt het commando door een foutmelding geweigerd. De huidige drive blijft dan geldig. Een dubbele punt achter de driveletter is bij dit commando optioneel.

*EXEC execute file (*EX.)

Syntax: *EXEC

De opgegeven file wordt geopend en alle toetsenbord invoer via de vector #FFE3 (#20A) wordt gelezen uit het opgegeven bestand. Het exec commando wordt alleen beeindigd door het tussentijds herstellen van de leesvector (het bestand wordt dan niet gesloten) of als de waarde 26 gelezen wordt (het bestand wordt dan wel gesloten). De filehandle van deze file is opgeslagen in adres #BC.

*FIND zoek passende file (*FI.)

Syntax: *FIND []

Dit commando zoekt een passende file aan de hand van de opgegeven filespecificatie. Voor de eerste zoekactie dient een filespecificatie opgegeven te worden. Voor verdere zoekacties moet alleen *FIND gegeven worden. Resultaten worden opgeslagen vanaf adres #140. Na het geven van een *FIND commando bevat adres #140 het resultaat; een 0 geeft aan dat er een file gevonden is. Informatie omtrent deze file is opgeslagen van #141 t/m #157. Hierin is de disk transfer area opgeslagen. De filenaam is te vinden vanaf adres #14A. Voor uitgebreide informatie over de DTA wordt verwezen naar bijlage II.

*HELP geeft beknopte hulp (*H.)

Syntax: *HELP

Een beknopt overzicht van alle dos commando’s wordt op het scherm afgebeeld.

*HIDE zet hidden attribuut (*HI.)

Syntax: *HIDE

Van alle gevonden files wordt het hidden attribuut bit gezet, zodat deze files niet herkend worden door *CAT, *DELETE, *LOCK en *UNLOCK.

*INFO file informatie opvragen (*I.)

Syntax: *INFO

Van de opgegeven file worden het moment van aanmaken, load adres, executie adres, file lengte en attributen weergegeven. Vanaf versie 1.27 zijn in de filenaam ook de jokers * en ? toegestaan.

*LOAD file laden van disk (*L.)

Syntax: *LOAD [loadadres]

De opgegeven file wordt in het geheugen van de Atom geladen. Als er geen load adres wordt opgegeven dan wordt het load adres uit de file header gebruikt. Hier zijn in de filenaam geen jokers * en ? toegestaan.

*LOCK maak file read-only (*LO.)

Syntax: *LOCK

Van alle gevonden files wordt het read-only attribuut bit gezet zodat deze niet meer gewist of overschreven kunnen worden. De files kunnen alleen nog maar gelezen worden.

*MD maak directory

Syntax: *MD

Een nieuwe directory wordt aangemaakt indien het path geldig bevonden is.

*MON message monitor

Syntax: *MON

Als MON actief is wordt de informatie van de file(s) weergegeven op het scherm na de uitvoering van de commando’s *HIDE, *LOCK, *LOAD, *RUN, *SAVE, *UNHIDE en *UNLOCK. Voor het *DELETE commando geldt dat de files eerst op het scherm getoond worden en er vervolgens nog om een bevestiging gevraagd wordt alvorens de files te wissen.

*NOMON message monitor off

Syntax: *NOMON

Heft de werking van *MON op. Er wordt na *HIDE, *LOCK, *LOAD, *RUN, *SAVE, *UNHIDE en *UNLOCK geen file informatie gegeven. Bij het *DELETE commando worden de files zonder verdere vragen gewist. Na het initialiseren van PC-DOS is *NOMON actief.

*PC geeft besturing aan MS-DOS

Syntax: *PC [msdos-commando]

Als er geen MS-DOS commando opgegeven is dan wordt het Atom terminal programma beeindigd. Als er wel een commando opgegeven is dan wordt dit uitgevoerd. Daarna draait het Atom terminal programma verder.

*RD verwijder directory

Syntax: *RD

De opgegeven directory wordt van disk verwijderd als deze leeg is en niet de actuele directory is.

*RESET Reset de Atom (*RE.)

Syntax: *RESET

Dit commando heeft niets met een Disk Operating Systeem te maken. Het zet eerst het reset type op #2 en laat vervolgens de Atom resetten.

*RUN laadt en start file (*R.)

Syntax: *RUN [programma parameters]

De opgegeven file wordt van disk geladen en gestart op het executie adres. Als er geen loadadres gegeven is dan wordt het loadadres uit de file header gebruikt. Hier zijn in de filenaam geen jokers * en ? toegestaan. De default extensie voor een uitvoerbaar programma is ‘.RUN’. Als het opgegeven bestand niet gevonden wordt probeert PCDOS het bestand met deze extensie te laden. De gehele command line blijft vanaf adres #100 in het geheugen staan. Hierdoor kan het programma eventuele parameters opzoeken.

*SAVE schrijf file naar disk (*S.)

Syntax: *SAVE [execadres]

Het geheugen van beginadres tot eindadres wordt onder de opgegeven naam naar disk geschreven. Bij het ontbreken van het executieadres wordt het beginadres op deze plaats ingevuld. Hier zijn in de filenaam geen jokers * en ? toegestaan.

*SPOOL beeldschermuitvoer naar disk schrijven (*SP.)

Syntax: *SPOOL

Alle beeldschermuitvoer via de vector #FFF4 (#208) wordt eerst naar het opgegeven bestand geschreven. Dit commando wordt net als *EXEC beeindigd door het herstellen van de schrijfvector (bestand wordt niet afgesloten) of door het schrijven van de code 26 (het bestand wordt wel afgesloten). De handle van deze file is opgeslagen in adres #B9.

*UNHIDE reset hidden attribuut (*U.)

Syntax: *UNHIDE

Van alle gevonden files wordt het hidden attribuut bit gewist.

*UNLOCK reset read-only attribuut (*UNL.)

Syntax: *UNLOCK

Van alle gevonden files wordt het read-only attribuut bit gewist.

Wat betreft de Random Access files is het systeem compatible met de originele AtomDos met uitzondering van de SHUT routine. Normaal worden met handle 0 alle geopende files gesloten. Voor PC-DOS geldt dat niet! In dit geval moeten alle geopende files afzonderlijk gesloten worden. Voor bestaande programma’s is dit het enige punt waar een aanpassing nodig kan zijn. Nieuwe programma’s kunnen maximaal 15 files openen van elk 2 gigabytes lang (mits de PC dat ondersteunt…)

Bij de meeste PC gebruikers zal bekend zijn dat in de CONFIG.SYS het maximaal aantal te openen files opgegeven kan worden met FILES=xxx. Dit aantal is echter het maximale aantal voor alle in de PC aanwezige programma’s. Een programma krijgt bij het opstarten maximaal 20 filehandles toegewezen van MS-DOS; vijf hiervan worden echter al gebruikt voor standaard apparaten. Houdt er verder rekening mee dat ook diverse diskcommando’s gebruik maken van een handle. Als alle beschikbare handles in gebruik zijn kan dat een foutmelding opleveren.

Bij het aanroepen van de LOAD of SAVE vector #20C/#20D resp. #20E/#20F is de semafoor NIET gezet. Dit kan tot vasthangen leiden als er in het video geheugen geladen wordt of als er tijdens het laden/saven een interrupt optreedt waarbij gecommuniceerd wordt met de PC. Programma’s die van deze vectoren gebruik maken dienen zelf de semafoor te zetten d.m.v. OSBYTE #0B. Dit geldt niet voor de DOS commando’s *LOAD en *SAVE en niet voor random access files.

7. Nieuwe toolboxen

In dit hoofdstuk worden de nieuwe toolboxen beschreven. Deze toolboxen zorgen voor een eenvoudig gebruik van de mogelijkheden die het terminal programma, en dus de PC, biedt.

7.1 PC-BOX

De PCBOX is een utility rom, bestemd voor het Axxx-blok. Deze rom ondersteund een groot aantal faciliteiten die de PC aan de Atom te bieden heeft, zoals uitgebreide video handelingen, muis toepassingen en I/O.

In de zeropage gebruikt de PCBOX alleen zeropage adressen #90 t/m #9F; verder worden de adressen #700 t/m #70F gebruikt als de escape-toets uitgeschakeld is d.m.v. ESCAPE=OFF. De PCBOX werkt probleemloos in het schakelkaart systeem.

ASC2BAS Lees asciifile en converteer naar basicprogramma

Syntax: ASC2BAS [drive][path]

Veel tekst-editors voor PC’s werken prettiger dan de Atom basic editor. Een programma kan met zo’n editor ingetypt worden en met dit statement ingeladen worden, waarbij de ascii-file automatisch omgezet wordt naar een basicprogramma. Voor een goede werking dient de ascii-file uitsluitend uit basic regels te bestaan, eventuele spaties voor het regelnummer zijn toegestaan; regels zonder regelnummer alsook lege regels niet! Het basicprogramma wordt geladen vanaf #2900.

ATOMVDU Standaard Atom tekstscherm

Syntax: ATOMVDU

Met dit statement wordt de schrijfvector gezet naar de originele Atom schrijfroutine op #FE52. Alle tekst wordt dan in een 32*16 tekstscherm afgebeeld. Deze mode kan alleen gebruikt worden om tekst af te drukken, niet voor het editen van programma’s. Voordat dit statement uitgevoerd wordt moet eerst een goede karakterset geladen zijn, bijvoorbeeld ATOMVDU.FNT. Genoemd font wordt automatisch geladen als dit zich bevindt in de directory C:\ATOM\FONT.

ATTRIB Zet tekst attribuut

Syntax: ATTRIB a

Het attribuut bepaalt de (achtergrond)kleur en intensiteit van een karakter in tekstmode. Voor kleurentekst modi hebben de bits de volgende betekenis:
pictures/attrib01.gif

K: knipperen
I: Intensiteit
Voor de achtergrondkleur gelden de volgende waarden:
000 0 zwart 100 4 rood
001 1 blauw 101 5 magenta
010 2 groen 110 6 bruin
011 3 cyaan 111 7 wit

Voor de voorgrondkleur gelden de volgende waarden:

I = 0 I = 1
000 0 zwart 000 0 grijs
001 1 blauw 001 1 lichtblauw
010 2 groen 010 2 lichtgroen
011 3 cyaan 011 3 lichtcyaan
100 4 rood 100 4 lichtrood
101 5 magenta 101 5 lichtmagenta
110 6 bruin 110 6 geel
111 7 wit 111 7 helder wit
Voor monochroomtekst modi hebben de bits de volgende betekenis:
pictures/attrib02.gif

K: knipperen
I: Intensiteit
achtergrondvoorgrond beeldscherm
000 000 geen beeld zwart
111 111 geen beeld wit (alleen VGA)
000 001 onderstreept
000 111 normaal
111 000 geïnverteerd

CENTER calibreer joystick

Syntax: CENTER

Een analoge joystick dient voor gebruik eerst gecalibreerd te worden. Daarmee wordt als het ware het referentiepunt voor de neutraalstand bepaald. Bij het opstarten van het terminal programma wordt de joystick automatisch gecalibreerd. Als tijdens het werken met de Atom een (andere) joystick aangesloten wordt dient deze eerst met dit statement gecalibreerd te worden.

CLW wis tekstvenster

Syntax: CLW

Hiermee kan het actieve tekstvenster gewist worden. De achtergrond wordt gevuld met de waarde in het attribuut byte. Dit in tegenstelling tot het CLS commando uit het Gagsrom; daar wordt de achtergrond zwart gemaakt en wordt het tekstwindow gereset.

CURSOR cursor controle

Syntax: CURSOR ON

De knipperende cursor wordt aangezet.

Syntax: CURSOR OFF

De knipperende cursor wordt uitgezet.

Syntax: CURSOR TO x,y

De cursor wordt geplaatst op de positie (x,y) waarbij (0,0) de linker bovenhoek van het actieve tekstvenster is.

Syntax: CURSOR POS x,y

De positie van de cursor wordt opgeslagen in de variabelen x en y. Hierbij wordt geen rekening gehouden met eventueel actieve tekstvensters!

Syntax: CURSOR POS c

De variabele c wordt gevuld met de asciiwaarde van het karakter dat zich bevind op de cursorpositie.

DATE opvragen systeemdatum

Syntax: DATE [$x]

Als er geen string wordt opgegeven wordt de datum op het scherm afgedrukt. Als wel een string opgegeven wordt komt de datum als ascii tekst in deze string te staan.

DAY opvragen systeemdag

Syntax: DAY [$x]

Als er geen string wordt opgegeven wordt de dag op het scherm afgedrukt. Als wel een string opgegeven wordt komt de dag als ascii tekst in deze string te staan.

ESCAPE uit- en inschakelen van escape toets

Syntax: ESCAPE=ON of OFF

Als een programma niet onderbroken mag worden door een druk op de escape toets kan deze hiermee uitgeschakeld worden. Hiertoe wordt de OSBYTE-vector verlegd naar #703. OSBYTE-call #1 kan dan niet meer gebruikt worden. Een ander gebruik van dit statement kan zijn om te voorkomen dat de keyboard buffer van de PC steeds leeg is als een keyboardscan uitgevoerd wordt (OSBYTE #1 leest langzaam de keyboardbuffer leeg). Met ESCAPE=ON wordt de escape toets weer aangezet en het gebied #700 t/m #710 weer vrijgegeven.

FONT laden van ramfont

Syntax: FONT filespec

Voor de grafische tekstmode GTEXT kunnen hiermee karaktersets geladen worden. De filespec mag een driveletter en een zoekpad bevatten maar geen jokers * of ?.

GTEXT initialiseren grafische tekstmode

Syntax: GTEXT [filespec]

GTEXT laat alle beeldschermuitvoer, die door de Atom geproduceerd wordt, in een grafische mode tekenen. Hierbij wordt de schrijfvector verzet naar de PCBOX. Deze tekstmode is niet geschikt voor het editen van programma’s. Tevens zullen foutmeldingen en het *CAT commando schrijven in de normale PC mode. Als een filespec wordt opgegeven wordt eerst een karakterset geladen. Deze filespec mag een driveletter en een zoekpad bevatten maar geen jokers * of ?.

INP lees byte van PC I/O bus

Syntax: INP adres,var

Met dit statement kan I/O hardware, die op de PC is aangesloten, direct worden aangesproken. Het opgegeven adres wordt van de PC I/O bus gelezen en in de opgegeven variabele geplaatst.

KADER teken kader

Syntax: KADER xlo,ylo,xrb,yrb,mode,kleur

De eerste vier parameters bepalen de afmetingen van het kader; xlo en ylo zijn de coordinaten van de linker onderhoek en xrb en yrb zijn de coordinaten van de rechter bovenhoek. Deze coordinaten gelden ten opzichte van de linker bovenhoek van het actieve tekstvenster. Voor mode mag een letter D of S gegeven worden. Het kader wordt dan getekend met dubbele resp. enkele lijnen. De kleur bepaalt het attribuut van de kaderlijnen. Na beeindiging van het statement bevind de cursor zich in de linker bovenhoek van het kader.

NB: Let erop dat het 7e bit niet gereset wordt. Zie het statement MSB.

LPT selecteer printer

Syntax: LPT = printernummer

Het kiezen van een printer kan met dit statement. Alle printeruitvoer na $2 wordt naar de opgegeven printer gestuurd. Dit statement is identiek aan het PRN= statement.

MENU opstarten !BOOT file

Syntax: MENU

Een mogelijkheid om een menu of grafisch gebruikersinterface te maken begint met het menu statement. De exit-vector wordt gezet naar een routine die van de actuele drive de file !BOOT in de directory \ATOM opstart. Deze !BOOT-file mag een basic of assembler programma zijn, zolang deze maar gestart kan worden met *RUN. Als de file \ATOM\!BOOT niet gevonden wordt volgt een melding. Met wordt het statement afgebroken, met wordt opnieuw geprobeerd, maar dan op een andere disk.

Alle programma’s die eindigen met het EXIT statement of met OSBYTE #6 laden automatisch de !BOOT-file opnieuw. Een programma dat eindigt met END of een RTS instructie komt terug in basic. Door dan het commando EXIT te geven wordt het menu alsnog gestart.

MOUSE muis controle

Syntax: MOUSE commando parameters

Na het MOUSE statement volgt nog een tweede statement. Een beschrijving van deze statements staat hieronder beschreven.

MOUSE BUTTON knop,P/R,result,x,y

Hiermee kan de beweging van de afzonderlijke muistoetsen gelezen worden. Met de waarde ‘knop’ wordt een van de toetsen opgegeven. P/R leest het aantal keren dat een toets ingedrukt of losgelaten is. Het aantal keren komt in de variabele ‘result’ en de muispositie van de laatste actie staat in de variabelen x en y.

MOUSE CHAR c

In tekstmode wordt het karakter op de muiscursor-positie gelezen en in de variabele c gezet. In grafische modi is het resultaat niet gedefinieerd.

MOUSE CURTYPE S,screenmask,cursormask

Met curtype kan bepaald worden hoe de muiscursor op het scherm verschijnt. De tekstcursor kan bestaan uit een hardware cursor (de “normale” cursor) of een software cursor. Met bovenstaand commando wordt de software tekstcursor zichtbaar gemaakt. Om deze cursor op het scherm zichtbaar te maken voert de muisdriver eerst een AND functie uit met het screenmask en het resultaat daarvan ondergaat een EXOR met het cursormask. Aangezien zowel het karakter als het attribuut gewijzigd kunnen worden, zijn screenmask en cursormask 16-bits getallen. Houdt er rekening mee dat het hoge byte van deze waarden betrekking heeft op het attribuut en het lage byte heeft betrekking op het karakter. Om bijvoorbeeld de muiscursor te wijzigen in een * kan gegeven worden ‘MOUSE CURTYPE S,#FF00,#2A’.

MOUSE CURTYPE H,upper_scanline,lower_scanline

De hardware muiscursor is dezelfde als de hardware tekstcursor (dat zenuwachtig knipperend streepje). De twee parameters geven de eerste en laatste beeldlijn van de cursor aan.

MOUSE CURTYPE G,maskeradres,x_hotspot,y_hotspot

De grafische muiscursor kan ook geheel door de programmeur gedefinieerd worden. Deze definitie bestaat net als bij de software textcursor uit een screenmask en een cursormask. Bij het plaatsen van de muiscursor op het scherm wordt eerst een AND uitgevoerd van de inhoud van het beeldscherm en het screenmask, vervolgens wordt een EXOR uitgevoerd met het resultaat van voorgaande AND functie en het cursormask. Het maskeradres wijst naar een datablok dat beide maskers bevat, de eerste 32 bytes zijn het screenmask (16 * 16 bits) en de tweede 32 bytes zijn het cursormask (16 * 16 bits). De overige twee parameters geven aan waar de hot-spot van de muis zich in de cursor bevind.

MOUSE COUNT x,y

De verplaatsing van de muis sinds de laatste oproep wordt geplaatst in de variabelen x en y.

MOUSE INIT [b]

De muis wordt geïnitialiseerd. Als een variabele meegegeven is wordt het aantal muisknoppen in deze variabele gezet. Als op de PC geen muisdriver actief is dan krijgt deze variabele de waarde 255.

MOUSE KVO

De afkorting KVO staat voor Kees van Oss. Bij dit statement wordt de positie van de muis gelezen, omgerekend naar het formaat van de muisdriver ‘mINTER’ van Kees en in de variabelen X, Y en Z geplaatst. Hiermee kunnen bestaande muisgestuurde programma’s eenvoudig aangepast worden. Voor een goede werking dient de muis opgesloten te worden in een window middels MOUSE WINDOW 0,191,255,0.

MOUSE OFF

Hiermee wordt de muiscursor van het scherm gehaald. De muisbewegingen en toetsen worden wel nog door de PC bijgewerkt en kunnen altijd opgevraagd worden. Door de muiscursor uit te schakelen kunnen sprites van het Gagsrom door de muis bewogen worden.

MOUSE ON

Maak de muiscursor zichtbaar op het scherm.

MOUSE POS x,y,k

De positie van de muis wordt opgeslagen in de variabelen x en y. De status van de knoppen wordt in de laagste drie bits van de variabele k opgeborgen. Bit 0 is rechter muisknop, bit 1 is linkerknop en bit 2 is, indien aanwezig, de middelste knop.

MOUSE TO x,y

Zet de muiscursor op de positie x,y.

MOUSE WINDOW xlo,ylo,xrb,yrb

De bewegingsvrijheid van de muis wordt beperkt in het opgegeven venster. Als bij het initialiseren van het venster de muis zich buiten dit venster bevind, dan wordt deze alsnog in het venster geplaatst.

Enkele opmerkingen:

  • de muiscoordinaten gaan altijd uit van grafische pixels. Ook in een tekstscherm! Voor de juiste positie in een tekstscherm dienen de coordinaten door acht gedeeld te worden.
  • de oorsprong van de muis bevindt zich altijd in de linkerbovenhoek van het beeldscherm.
  • een uitzondering op bovenstaande regels is het statement MOUSE KVO.
  • als de muiscursor op het beeld staat en het beeld gaat scrollen dient voor het scrollen de muis van het scherm afgehaald te worden; daarna kan de muis weer op het scherm geplaatst worden.
  • na het veranderen van grafische mode is de muiscursor van het scherm gehaald.
  • in tekstmode is de standaard muiscursor een blokje; in grafische mode een pijltje.

MSB masker voor 7e bit in tekstmodi

Syntax: MSB = masker

Waarbij masker de waarde voor masker 0 of 1 is. Als het masker ‘0’ is dan wordt van ieder af te drukken karakter bit 7 gewist. De asciiwaarden #80 t/m #9F geven dan de speciale symbolen die vervallen in verband met de controlcodes.

PRN selecteer printer

Syntax: PRN= printernummer

Het kiezen van een printer kan met dit statement. Alle printeruitvoer na $2 wordt naar de opgegeven printer gestuurd. Dit statement is identiek aan het LPT= statement.

OUT schrijf byte naar PC I/O bus

Syntax: OUT adres,data

Met dit statement kan I/O hardware, die op de PC is aangesloten, direct worden aangesproken. De opgegeven data wordt naar het opgegeven PC I/O bus adres geschreven.

PCBOX geeft versienummer en overzicht statements

Syntax: PCBOX

REPORT verklaar nummer van foutmelding

Syntax: REPORT errornummer

Standaard worden foutmeldingen als tekst gegeven. In sommige gevallen, bijvoorbeeld als een programma begint met het PROGRAM statement uit P-Charme, verschijnt toch nog de oude foutmelding. Aan de hand van de foutcode kan alsnog om de betekenis van de foutmelding gevraagd worden.

SCAN uitvoeren van bios toetsenbordroutines

Syntax: SCAN functie,resultaat

Afhankelijk van het functienummer wordt een routine van PC INT 16H uitgevoerd. Het register AX wordt in de variabele ‘resultaat’ geplaatst. Functie 0:Deze functie leest een teken uit het toetsenbord buffer. Als deze leeg is wordt gewacht totdat een toets wordt ingedrukt. Het gelezen teken wordt uit de buffer verwijderd. Functie 1:Deze functie kijkt of een teken in de toetsenbordbuffer klaarstaat. Als dat het geval is wordt de waarde ervan als resultaat teruggegeven. (Bij een lege buffer is het resultaat #0101). Het gelezen teken wordt niet uit de buffer verwijderd zodat het nogmaals met functie 0 of functie 1 gelezen kan worden. Functie 2:Deze functie bepaalt de status van een aantal toetsenbord-modi en geeft de status van de shift, ctrl en alt toetsen weer. Zie bijlage III voor beschrijving van resultaten.

Bij gebruik van het SCAN statement dient u er rekening mee te houden dat er verschillende kunnen optreden bij gebruik van een XT of AT. Met name de scan-codes kunnen afwijken!

TIME opvragen systeemtijd

Syntax: TIME [$x]

Als er geen string wordt opgegeven wordt de tijd op het scherm afgedrukt. Als wel een string opgegeven wordt komt de tijd als ascii tekst in deze string te staan.

TSIZE zet afmetingen tekst

Syntax: TSIZE x,y

Met dit statement kunnen de afmetingen van karakters in GTEXT ingesteld worden. De eerste parameter zorgt voor bredere karakters en de tweede parameter zorgt voor hogere karakters.

TWINDOW zet tekstvenster

Syntax: TWINDOW xlo,ylo,xrb,yrb

De opgegeven coordinaten bepalen de positie van het tekstvenster. Buiten dit venster kan de Atom niet schrijven. Deze coordinaten gelden altijd ten opzichte van de linker bovenhoek van het scherm.

TWOFF reset tekstvenster

Syntax: TWOFF

Het tekstvenster wordt opgeheven. Hierbij wordt het scherm niet gewist.

UDS definieer karakter

Syntax: UDS karakter,d0,…,d15

Voor de grafische karakterset kunnen met UDS karakters gedefinieerd worden. De eerste parameter is de ascii waarde van het te definieren karakter. De overige zestien parameters bepalen het bitpatroon van het karakter.

7.2 PC UTILITY BOX

Een andere toolbox waarbij de commando’s van het terminal-programma eenvoudig vanuit BASIC aan te roepen zijn is de PC Utility Box. Ook deze box gebruikt de zeropage adressen #90-#9F en werkt probleemloos in het Branquar Schakelkaart Operating System.

CHAIN laadt en start Atom basicprogramma

Syntax: CHAIN “filespec”

Het CHAIN statement laadt een basicprogramma in de actuele tekstpagina en start het programma. Het executieadres maakt in dit geval niets uit omdat het programma altijd gestart wordt vanaf #F144. De filespecificatie mag een drive en directory bevatten maar geen wildcards * en ?.

FILECNV fileheader toevoegen of weghalen

Syntax: FILECNV filespec1 filespec2 H+ [start exec]

of FILECNV filespec1 filespec2 H-

De files voor de Atom bevatten altijd een header van 16 bytes aan het begin van de file. Met het statement FILECNV kan deze header toegevoegd of weggehaald worden, bijvoorbeeld als er files van een “echte” Atom en de Atom in PC worden uitgewisseld. Filespec1 bevat het pad en filenaam van de oorspronkelijke file; deze file wordt niet veranderd. Filespec2 is het pad en de filenaam van de nieuwe file waar de header is toegevoegd of weggehaald. H+ geeft aan dat de header wordt toegevoegd; H- betekent header weghalen. Het start en executie adres mogen weggelaten worden. In dat geval worden de waarden #2900 en #F144 gebruikt. Geef deze adressen met # teken en zonder komma tussen de parameters. Let erop dat de originele file en de nieuwe file niet hetzelfde zijn; dan gaan alle data verloren!

GETWIN grafisch venster naar disk schrijven

Syntax: GETWIN handle,xlo,ylo

Met GETWIN kan een grafisch venster dat met SAVWIN naar disk geschreven is weer teruggehaald worden. De opgegeven coordinaten zijn de linker benedenhoek waar het venster teruggezet wordt. De file moet vooraf als random access file geopend zijn. Na het statement is de file niet gesloten; dat zal alsnog moeten gebeuren met het SHUT statement.

GWINDOW definieeren grafisch venster

Syntax: GWINDOW xlo,ylo,xrb,yrb

Dit statement werkt alleen in de extended videomodi. Er wordt een grafisch venster gecreeerd waarin getekend mag worden. De vier parameters geven de X en Y coordinaten aan van de linker benedenhoek en de rechter bovenhoek. Deze coordinaten gelden altijd ten opzichte van de linker bovenhoek van het beeldscherm.

GWOFF grafisch venster opheffen

Syntax: GWOFF

Het grafische venster wordt gereset zodat weer over het gehele scherm getekend mag worden.

HELP on-line helpfunctie

Syntax: HELP [trefwoord]

Hoe was de syntax ook alweer van het HLINE commando? Hoeveel parameters krijgt het UDS statements mee? Met welk PC-commando wordt de printerstatus opgevraagd? Inmiddels zijn er voor de Atom zovele toolboxen en nog meer extra statements toegevoegd dat het bijna onmogelijk is om nog een eenvoudig overzicht te houden. Bovenstaande vragen kunnen nu snel beantwoord worden met het HELP statement. Op het scherm verschijnt razendsnel voldoende maar toch beknopte uitleg. HELP gebruikt twee datafiles, ATOMHELP.IDX en ATOMHELP.TXT; het pad en de naam van deze datafiles zijn opgeslagen als ascii string vanaf adres #AFC0 resp. #AFE0. Bij gebruik van HELP wordt eerst het trefwoord opgezocht in de indexfile. Als het daar gevonden is, wordt een pointer gelezen naar het begin van de helptekst in de file ATOMHELP.TXT. Die tekst wordt vervolgens op het scherm afgebeeld.

Het wijzigen of toevoegen van de helptekst kan met een gewone tekst editor. Plaats de trefwoorden aan het begin van de regel, voorafgegaan door een golfje ~. Achter het trefwoord moet minstens één spatie staan. Het laatste trefwoord moet ~end zijn. In de eerste regel staan zestien apestaartjes (@); deze niet verwijderen want zij vormen de header van de tekstfile.

In de helptekst kan een woord voorafgegaan worden door een achterwaards accent ` . Het betreffende woord wordt dan in de helptekst in een andere kleur weergegeven. Zodoende kunnen trefwoorden in de tekst gemarkeerd worden.

Na het wijzigen of toevoegen aan de helptekst moet de indexfile opnieuw aangemaakt worden. Verwijder de oude ATOMHELP.IDX file en laat het programma HELPMKR even lopen. Doe dit bij voorkeur op een ramdisk (in verband met snelheid).

HFILL horizonale lijnen kleuren

Syntax: HFILL x,y1 TO y2,g

Met HFILL kunnen horizontale lijnen gekleurd worden. Het kleuren begint bij x,y1 en kleurt naar links en rechts totdat een pixel wordt aangetroffen die de grenskleur g heeft. Vervolgens wordt de y-coordinaat verhoogd en wordt de volgende lijn ingekleurd. HFILL werkt alleen in extended videomodi en houdt rekening met een grafisch venster en een verschoven oorsprong.

POWERDOWN snel geheugeninhoud op disk bewaren

Syntax: POWERDOWN

Dit statement is bedoeld om snel de geheugeninhoud van #300 tot #A000 op disk te bewaren als de computer uit wordt gezet. Na het opnieuw opstarten kan de geheu- geninhoud hersteld worden met *LOAD MEMORY.PD

ORIGIN verplaatsen grafische oorsprong

Syntax: ORIGIN x,y

De grafische oorsprong (het punt 0,0) wordt voor extended videomodi verschoven naar het punt x,y; dit punt is opgegeven ten opzichte van de linker bovenhoek van het beeldscherm.

OSCLI aanroep *-commando

Syntax: OSCLI string,$13

In PC-DOS is het niet toegestaan om variabelen te gebruiken bij de *-commando’s. Met OSCLI is dat gemis te omzeilen. De op te geven string kan bestaan uit tekst tussen aanhalingstekens en (string)variabelen. Let erop dat dit statement altijd wordt afgesloten met een $13 !

PCC printer control code

Syntax: PCC p1,p2,p3,…..

Als de printer aangezet is met $2 stuurt PCC alle opgegeven parameters uitsluitend naar de geselecteerde printer. Ook de codes $2, $3 en de inhoud van #FE worden naar de printer gestuurd. De printer kan met PCC niet aan of uitgezet worden.

PDMENU pull down menu

Syntax: PDMENU x,y,breedte,items,S/D,attr,$tekst,var[,begin]

Dit statement geeft een kompleet pull down menu in zowel tekst als grafische mode. Bediening kan met de cursortoetsen of met de muis. Het menu is omgeven door een kader. De coordinaten x en y geven de linker bovenhoek van het menu aan. De ‘breedte’ is het aantal karaters dat de menu-items breed zijn. De parameter ‘S/D’ geeft aan of het kader met enkele (S) of dubbele (D) lijnen getekend moet worden. ‘Attr’ is de kleur of attribuut van het menu. $tekst wijst naar een string in het geheugen die de menu-items bevat. Het uiteindelijk gekozen item komt in de ‘var’ (A..Z) terecht. De laatste parameter is optioneel. Zonder deze parameter licht het eerste menu-item op bij het begin van het statement PDMENU. Als deze parameter wordt opgegeven licht het overeenkomstige item op.

RGET lees record uit random access file

Syntax: RGET handle, bufferadres, recordlengte

Uit de geopende file wordt geprobeerd het aantal gevraagde bytes (de recordlengte) te lezen. De data wordt opgeslagen vanaf het bufferadres. Het aantal gelezen bytes is direct na uitvoering van dit statement beschikbaar op zeropage adres #90/#91. De maximale recordlengte is 16 kb.

RPUT schrijf record naar random access file

Syntax: RPUT handle, bufferadres, recordlengte

Het aantal opgegeven bytes wordt vanuit de buffer naar de file met de opgegeven handle gestuurd. al geschreven bytes is direct na uitvoering van dit statement beschikbaar op zeropage adres #90/#91. De maximale recordlengte is 16 kb.

SAVWIN schrijf grafisch venster naar disk

Syntax: SAVWIN handle,xlo,ylo,xrb,yrb

Het opgegeven grafische venster wordt naar een bestand geschreven. Dit bestand dient van te voren als random access file geopend te zijn. Na het schrijven wordt het bestand niet automatisch gesloten.

SCOPY video scherm kopieren

Syntax: SCOPY C,bron,bestemming

Met het statement SCOPY kan de inhoud van de ene beeldscherm-pagina naar de andere gekopieerd worden of van/naar disk. Syntax: SCOPY L,pagina,handle of SCOPY S,pagina,handle Met de opties L en S wordt een schermpagina uit een bestand gelezen danwel naar een bestand geschreven. Het bestand dient reeds geopend te zijn als random access file; het bestand wordt na afloop niet gesloten en er volgt geen terugmelding of de actie goed afgehandeld is.

SCREEN selecteren beeldpagina’s

Syntax: SCREEN s

De meeste videokaarten kunnen overweg met meerdere schermpagina’s. De Atom kan inmiddels ook overweg met meerdere pagina’s in tekstmode. Met SCREEN kunnen pagina’s opgeroepen worden. Als s tussen 0 en 7 ligt wordt dat de pagina die op de monitor verschijnt en waarin de bewerkingen plaatsvinden. Een s tussen #40 en #47 selecteert alleen de pagina waarin bewerkingen plaatsvinden en s tussen #80 en #87 selecteert alleen de pagina die op de monitor verschijnt.

TXMOD omschakelen naar tekstmode

Syntax: TXMOD [optie]

Dit statement vervangt het gelijknamige statement uit de PCBOX (vanaf versie 1.03 komt dat statement daar niet meer in voor) en kan nu ook gebruikt worden met de volgende optie’s voor EGA en VGA kaarten:

TXMOD /8

Er wordt naar tekstmode geschakeld waarbij het EGA 8*8 karakterfont wordt geladen; automatisch wordt overgeschakeld naar 43 regels per scherm voor EGA kaarten of 50 regels per scherm voor VGA kaarten. Het tekstvenster wordt automatisch goed gezet mits de juiste video-optie is opgegeven bij het starten van het terminal programma.

TXMOD /14

De tekstmode wordt ingeschakeld waarbij het EGA 8*14 karakterfont wordt geladen; automatisch wordt overgeschakeld naar 25 regels per scherm voor EGA kaarten of 28 regels per scherm voor VGA kaarten. Het tekstvenster wordt automatisch goed gezet mits de juiste video-optie is opgegeven bij het starten van het terminal programma.

TXMOD /F pad+fontnaam

De tekstmode wordt ingeschakeld, het opgegeven font wordt van disk geladen en wordt geaktiveerd.

TXMOD /C

Het in de buffer geladen font (laden m.b.v. het statement FONT) wordt gekopieerd naar fontram van de EGA of VGA kaart waarbij de op het scherm aanwezige tekst wordt aangepast aan het nieuwe font. De overige instellingen blijven ongewijzigd.
Het TXMOD statement is geheel compatible met het oude TXMOD statement uit de PCBOX en kan dus ook aangeroepen worden met CGA of Hercules videokaarten. Uiteraard zullen de gegeven opties geen werking hebben bij deze kaarten.
Een andere wijziging van het TXMOD statement is dat de NMI niet meer geblokkeerd wordt na het aanroepen van dit statement.

UTIL overzicht statements PC Utility Box

Syntax: UTIL

Het scherm wordt gewist en er verschijnt een overzicht van alle statements uit deze toolbox.

VCC video control code

Syntax: VCC p1,p2,p3,….

VCC stuurt alle opgegeven parameters direct door naar de PC. De semafoor wordt gedurende de uitvoering van dit statement gezet zodat het oversturen niet onderbroken kan worden. Een $0 wordt als slechts één 0 overgestuurd. Dit statement is goed te gebruiken om via control codes bepaalde commando’s uit te voeren.

VDU video control code

Syntax: VDU p1,p2,p3,…

Dit statement is gelijk aan het VCC statement.

VFILL vertikale lijnen kleuren

Syntax: VFILL x1 TO x2,y,g

Met VFILL kunnen vertikale lijnen gekleurd worden. Het kleuren begint bij x1,y en kleurt omlaag en omhoog totdat een pixel wordt aangetroffen die de grenskleur g heeft. Vervolgens wordt de x-coordinaat verhoogd en wordt de volgende lijn ingekleurd. VFILL werkt alleen in extended videomodi en houdt rekening met een grafisch venster en een verschoven oorsprong.

VIDEO uitvoeren PC video interrupt 10h

Syntax: VIDEO

Voordat dit statement uitgevoerd wordt dienen de variabelen A, B, C en D voorzien te worden van de waarden die de 80×86 registers AX, BX, CX en DX krijgen. De return- waarden van deze registers worden opgeslagen in de zeropage vanaf adres #90. Let er bij gebruik in een schakelkaart systeem op dat deze adressen weggeschakeld kunnen worden.

XBLOCK teken een rechthoek in extended video mode

Syntax: XBLOCK mode,xlo,ylo,xrb,yrb

Er wordt binnen de opgegeven coordinaten een rechthoek getekend. ‘mode’ mag de waarde O hebben voor een ‘open’ rechthoek of de waarde F voor een ingekleurde rechthoek.

XCIRCLE teken een cirkel in extended video mode

Syntax: XCIRCLE mode,x,y,straal

In extended video mode wordt een cirkel getekend. ‘mode’ mag de waarde O hebben voor een ‘open’ cirkel of de waarde F voor een ingekleurde cirkel.

XLINE teken een rechte lijn in extended video mode

Syntax: XLINE xb,yb,xe,ye

Tussen de punten (xb,yb) en (xe,ye) wordt een rechte lijn getekend.

XPAINT gesloten vlakken inkleuren

Syntax: XPAINT C,x,y,g

Hiermee wordt het vlak waarin het punt (x,y) zich bevindt ingekleurd in de geldende voorgrondkleur. De grenskleur van het vlak wordt aangegeven met de parameter ‘g’. Syntax: XPAINT P,x,y,g,n Hiermee wordt het vlak waarin het punt (x,y) zich bevindt ingekleurd met het patroon ‘n’ (n is minimaal 1 en maximaal 64). De grenskleur van het vlak wordt aangegeven met de parameter ‘g’. Syntax: XPAINT D,n,a Een patroon bestaat uit 16*16 (256) bytes. Deze bytes moeten opgeslagen zijn in het atomgeheugen vanaf adres ‘a’. De eerste zestien bytes zijn de bovenste rij van het patroon; de tweede zestien bytes zijn de tweede rij van het patroon en zo verder. Met XPAINT D,n,a wordt de patroondefinitie van patroon ‘n’ doorgegeven aan de PC. In de Atom kan dit geheugen daarna weer gebruikt worden voor andere doeleinden. Er kunnen maximaal 64 patronen gedefinieerd worden. De waarde van n ligt tussen 1 en 64. Syntax: XPAINT S,filenaam De verzameling patronen die opgeslagen zijn in het geheugen van de PC wordt hiermee op disk opgeslagen. De filenaam is een ASCIIZ string en mag een drive en pad aanduiding bevatten maar geen wildcards * en ?. Syntax: XPAINT L,filenaam Er wordt van schijf een verzameling patronen geladen en in het geheugen van de PC opgeslagen. De filenaam is een ASCIIZ sting en mag een drive en pad aanduiding bevatten maar geen wildcards * en ?.

XPALET wijzigen EGA/VGA kleurenpalet

Syntax: XPALET reg,kleur

Bij EGA/VGA kaarten kunnen de 16 kleuren in tekstmode gekozen worden uit een palet van 64 kleuren. Het ‘reg’ komt overeen met het logische kleurnummer. De ‘kleur’ is de werkelijke kleur die op het scherm getoond wordt.

XSTYLE lijn type definieren

Syntax: XSTYLE s

Voor de statements XLINE, XBLOCK, XCIRCLE, XPAINT enXTRIANGLE kan het lijntype opgegeven worden. Het meest logische effect is te zien bij XLINE. Als een bit in ‘s’ 1 is wordt er een punt geplot; als een bit ‘0’ is wordt er niets geplot. Met XSTYLE is het dus mogelijk op stippellijnen te tekenen.

XTRIANGLE teken een driehoek in extended video mode

Syntax: XTRIANGLE mode,x1,y1,x2,y2,x3,y3

Tussen de drie opgegeven punten wordt een driehoek getekend. Als ‘mode’ O is wordt deze niet ingekleurd, als ‘mode’ F is wordt deze wel gekleurd in de geldende voorgrondkleur. 7.3 JBOX v2.2

Ten opzichte van de originele JBOX zijn de statements ASCI, CAS, CUR, DUMP,MFILL, PACK, PLIST, RAM en TRACE vervallen. Het statement HEP heeft een nieuwe naam: HXD. Twee nieuwe statements zijn:

USR aaaa machinetaal programma starten

Het statement USR werkt hetzelfde als LINK met het verschil dat de registers A, X en Y in de laagste bytes komen te staan van de gelijknamige basic variabelen. Op die manier kan eenvoudig een eventueel resultaat van een routine via de registers naar het oproepende basicprogramma gegeven worden.

SPRITE Sprite functies
Syntax: SPRITE BASE xmsbase, n

Dit is het eerste statement dat aangeroepen moet worden als een programma gebruik maakt van sprites. ‘xmsbase’ is de XMS pagina waar de eerste sprite opgeslagen wordt. In de variabele ‘n’ wordt het hoogst bruikbare spritenummer teruggegeven.

Syntax: SPRITE DEF sprnr, addr, s

Stuurt een spritedefinitie naar de pc. De sprite wordt opgeslagen onder het ‘sprnr’; de sprite data staat op ‘addr’ en is 1 kB groot.
In de variabele ‘s’ wordt de status teruggezet. Mogelijke waarden zijn:

#00 alles ok, sprite gedefinieerd
#10 fout, geen XMS geheugen beschikbaar voor sprites
#20 fout, ongeldig spritenummer
#30 combinatie van beide fouten
Syntax: SPRITE SET sprnr,x,y,s

Plaats sprite ‘sprnr’ op positie (x,y) op het scherm; de coördinaten worden opgenomen in de sprite administratie. De achtergrond wordt opgeslagen in het XMS geheugen. In de variabele ‘s’ wordt de status teruggemeld; zie statement SPRITE DEF.

Syntax: SPRITE UNSET sprnr,s

Verwijdert sprite ‘sprnr, van het scherm; de achtergrond wordt hersteld. In de variabele ‘s’ wordt de status teruggemeld; zie statement SPRITE DEF.

Syntax: SPRITE MOVE sprnr,x,y,s

Verplaatst de sprite ‘sprnr’ naar de nieuwe positie (x,y) en werkt de administratie bij. Achtergrond wordt weer hersteld en in de variabele ‘s’ wordt de status teruggemeld.

Zie SPRITE DEF.
Syntax: SPRITE PUT sprnr,x,y,s

Dit statement is gelijk aan SPRITE SET maar slaat de achtergrond niet op en de sprite wordt niet in de administratie opgenomen; derhalve kan deze niet verplaatst of gewist worden met SPRITE MOVE resp. SPRITE UNSET.

Syntax: SPRITE POS sprnr,x,y,s

Van de sprite ‘sprnr’ worden de x- en y-coördinaat opgeslagen in de opgegeven variabelen. In ‘s’ wordt de status geplaatst.

Syntax: SPRITE HIT sprnr1,sprnr2,s

Test op overlap van de sprites ‘sprnr1’ en ‘sprnr2’; het resultaat wordt geplaatst in de statusvariabele ‘s’. Indien voor sprnr2 de waarde -1 opgegeven wordt test het statement op overlap tussen ‘sprnr1’ en de muiscursor. De betekenis van de acht laagste bits van de variabele ‘s’ is weergegeven in onderstaand schema:

pictures/pccom65.gif

8. Wijzigingen aan toolboxen en branquart schakelsoft

Om goed te werken in de Atom-in-PC zijn een aantal toolboxen gewijzigd. De voor de gebruiker van belang zijnde wijzigingen worden hieronder weergegeven.

Operating systeem en Basic

De statements CLEAR en COLOUR zijn aangepast om de PC videokaarten te ondersteunen. Deze statements zijn geheel gewijzigd en worden gebruikt voor zowel Atom als PC grafische schermen. Zie ook hoofdstuk 10.

Het SAVE statement gebruikt niet meer het executie adres #C2B2 maar #F144. Het WAIT statement wacht nu iets langer, 1/18e seconde.

In de floating point rom is de opslag van variabelen verhuisd naar #06xx.

Op onderstaande adressen zijn routines gewijzigd vanwege de andere hardware en/of een verbetering van de Atom systeemsoft.

#C504 test op escape toets m.b.v. OSBYTE #1
#C9D8 foutafhandeling gewijzigd, met behulp van OSBYTE #0C wordt een foutmelding als tekst afgebeeld.
#CD9B aanpassing END statement, bepaal TOP en geef melding indien niet gevonden. De atom blijft niet meer hangen als TOP niet gevonden wordt.
#CDA1 aanpassing SAVE statement, de TOP wordt correct bepaald voor het wegschrijven van de file. Als TOP niet gevonden wordt, volgt een foutmelding en wordt het SAVE statement afgebroken.
#CDB1 t/m #CDBB : vrij
#CF0A SAVE statement; voert eerst routine uit om TOP goed te zetten.
#CF19 Executie-adres bij SAVE statement is gewijzigd in #F144.
#CF3B instruktie vervallen, PTR en EXT zijn nu 32 bit breed met teken, random files kunnen hierdoor 2 gigabytes lang zijn.
#D07B aanpassing beginadres COLOUR statement
#DF02 t/m #DF2C : aanpassing COLOUR statement
Floating Point variabelen zijn verplaatst naar pagina #06.
#E000 t/m #EB22 : DOS routines
#EB23 t/m #EB7F : vrij
#EB80 t/m #EBFF : scancode tabel voor #FE71
#EC00 t/m #EFFF : console en grafische drivers
#F017 Start adres CLEAR statement wordt #EE82
#F141 Begin RUN statement met testen op einde statement.
#F144 Default exec-adres; zet TOP correct. Als TOP niet gevonden dan volgt een melding en wordt het programma niet gestart. Deze routine maakt deel uit van het RUN statement.
#F900 OSBYTE/OSWORD routines
#FD1A Pieptoon via OSBYTE #05
#FD23 Verplaatste NMI routine
#FE71 t/m #FE82 : gewijzigde keyboardscan routine; de uitvoer van deze routine is voor de meeste toetsen compatible met de originele Atomroutine; uitzonderingen zijn de toetsen “:” en “@”.
Deze routine is geschreven voor een Amerikaans PC-toetsenbord.
Deze routine maakt gebruik van een tabel waar de scan-codes zijn opgeslagen.
Deze tabel is geplaatst van #EB80 t/m #EBFF.
#FE94 De eerste 3 bytes van deze routine vormen een sprong naar de “Read Character” routine, buiten de vector om #FFE3 om! Dit is gedaan om aanpassing van sommige programma’s te minimaliseren.
De routine #FE94 maakt geen gebruik meer van de scanroutine op #FE71.
#FF3F Gewijzigde reset routine
#FF7C Operating systeem vector tabel
#FFA7 Verplaatste IRQ routine
#FFBE Processor type byte (zie osbyte #08, t/m versie 3.1x)
#FFBF t/m #FFFF : toegevoegde en gewijzigde systeemvectoren.

P-Charme

Als gevolg van een gewijzigde wachtroutine op #FE66 is de wachteenheid van het PAUSE statement 1/18e van een seconde.
Het BEEP statement is gewijzigd en maakt nu gebruik van PC-commando #19. Zie aldaar. De werkruimte in pagina #28xx is verplaatst naar #06xx.

SALFAA 2.6

Het statusbyte is verplaatst van #28FF naar #6FF.

JOSBOX

Ook hier zijn statements vervallen, te weten READ, DATA, RESTORE, KEY, ON ERR en TXMOD. GRMOD is gewijzigd zodat deze gebruikt kan worden voor tekst uitvoer. Editen met behulp van de COPY (=TAB) toets is niet mogelijk. TXMOD wordt vervangen door het gelijknamige statement in de PC-UTILITY-BOX. Het PLAY statement is niet gewijzigd en kan dus niet meer gebruikt worden.

GAGSROM

Hierin is het statement PAUSE vervangen door het statement PALET. Daarmee kan de kaderkleur in tekstmode of het palet in grafische kleurenmodi gezet worden. Zie ook PC- commando #29. Het SOUND commando deelt de parameters door vier en roept vervolgens PC-commando #19 aan. Het JOYSTK statement leest niet meer adres #B001 maar roept de JOYSTICK vector #FFBF aan. Dat betekent dat de joystick eventueel gesimuleerd kan worden door het toetsenbord of door de muis.
Verder is het mogelijk dat het statement INK andere kleuren dan normaal oplevert.

BRANQUART SCHAKELSOFT

Branquart heeft ook weer een uitbreiding ondergaan. Er wordt een tweede schaduwbyte gebruikt. Tevens zijn ook hier enkele statements verwijderd (DISMOUNT, #, ROM) en nieuwe toegevoegd. De gebruikte werkruimte kan zoals altijd nog in de source gewijzigd worden. In het standaard pakket ligt de werkruimte in het blok #04xx. De nieuwe vectoren worden ook meegeschakeld.

Nieuwe statements:

CHIP x

Dit statement schakelt de opgegeven rombank voor.

EXIT

Veroorzaakt een sprong naar de EXIT-vector. Deze wijst normaal naar het END- statement.

LATCH

geeft de status van de latch op de Atomkaart weer. Hiertoe worden beide schaduwbytes gelezen.

LOCK x

Dit commando schakelt de opgegeven rombank voor en zet deze vast.

OSV

Toont alle operating systeem vectoren met hun adressen.

SYST

Geeft een lijstje met alle statements en hun beginadressen.

SYSV

In direct mode geeft dit statement het versienummer van operating systeem, schakelsoft en terminalprogramma, alsmede het processortype. In programma mode verwacht SYSV een versienummer als parameter. Indien het versienummer van het terminalprogramma lager is dan de opgegeven versie genereert dit statement een passende melding, direct gevolgd door een error94. Syntax voorbeeld: SYSV 4.00

WP

Write protect; WP ON zet write protect aan; WP OFF zet write protect uit.

XMS functie,pgnr

Basic statement op XMS pagina’s te wisselen
functie: I zet XMS frame op pgnr, binnen de Atom (!)
functie: R zet XMS pagina pgnr voor, data wordt niet weggeschreven
functie: W zet XMS pagina pgnr voor, data wordt niet ingelezen
functie: P zet XMS pagina pgnr voor, data wordt weggeschreven en ingelezen

9. Enkele programmeer tips

In dit hoofdstuk worden enkele programmeertechnieken uitgelegd. Het betreft enkele stukken over de hardware op de Atomkaart, alsook een aantal technieken met betrekking tot de PC.

9.1 De schakelkaart latch

De bits van de latch op #B888 hebben de volgende betekenis:
pictures/latch.gif

De meest interessante bits voor de programmeur zijn bit 7 en bit 6. De schakelbits worden geheel verzorgd door Branquart en de video interrupt enable wordt onder andere ingesteld bij het kiezen van een grafische mode m.b.v. het CLEAR statement.

Als een van bovenstaande bits gewijzigd wordt dan moet ervoor gezorgd worden dat de overige bits van de latch niet veranderen. Daartoe hebben we twee schaduwbytes. Een schaduwbyte is geplaatst in #4FF. Daarin bevindt zich het nummer van de voorgeschakelde utility bank op het A-blok. Bit 6 van dit schaduwbyte wordt door Branquart gebruikt om een box vast te zetten (lock toolbox). De bits 3, 4, 5 en 7 dienen ‘0’ te zijn. Het tweede schakelbyte bevindt zich in #4FD. Daarin is de status opgeslagen van de hoogste vijf bits van de latch. De laagste drie bits dienen ‘0’ te zijn. Om nu een van deze vijf bits te wijzigen leest men de waarde van het tweede schaduwbyte. Wijzig daarin de betreffende bits en schrijf de waarde terug. Lees vervolgens het eerste schaduwbyte; reset bit 6 en voer een OR funktie uit met het tweede schaduwbyte. Het resultaat daarvan mag dan naar de latch geschreven worden.

In basic ziet dat er dan zo uit:

10 REM WRITE PROTECT UIT ZETTEN
20 ?#4FD=?#4FD & #BF; REM WIS BIT 6
30 ?#B888=(?#4FF & #BF) | ?#4FD
40 REM WRITE PROTECT STAAT NU UIT

In assembler gaat dat als volgt:

LDA #4FD \ LAADT SCHADUWBYTE 2
AND @#BF \ RESET BIT 6, WRITE PROTECT OFF
STA #4FD \ SCHRIJF RESULTAAT TERUG
LDA #4FF \ LAADT SCHADUWBYTE 1
AND @#BF \ WIS LOCK BIT
ORA #4FD \ VOEG BEIDE SCHADUWBYTES SAMEN
STA #B888 \ SCHRIJF NAAR DE LATCH

Dit is natuurlijk te omslachtig in veel gevallen. Vanuit basic is write protect aan en uit te zetten met het WP statement. Het overschakelen tussen operating systeem in RAM en ROM, dat op soortgelijke wijze gebeurt, moet met enige voorzichtigheid gebeuren. Zeker als er in het RAM geen operating systeem geladen is. Vanuit BASIC is er dus weinig toepassing voor deze mogelijkheid. Assembler programma’s kunnen er eventueel data of routines plaatsen en daarvoor steeds schakelen tussen ram en rom.

Om het verwarrend te maken kunnen basicprogramma’s wel machinetaal routines aanroepen die op hun beurt gebruik maken van die extra ram en daarna weer rom voorschakelen.

9.2 Communicatie met andere programma’s

Er zijn situaties denkbaar waarbij het wenselijk is als er vanuit een ander programma dat in de PC draait, met de Atom gecommuniceerd kan worden. In de beschrijving van de PC-commando’s is reeds een mogelijkheid gegeven via INT 61h. Daarbij roept de Atom een resident programma in het PC geheugen aan. Een andere mogelijkheid wordt geboden via INT 60h. Hierbij worden de volgende drie functie’s herkend:

INT 60h – functie 0 (AH=00h)
De waarde in AL wordt van de PC naar de Atom gestuurd.
INT 60h – functie 1 (AH=01h)
Er wordt een byte van de Atom gelezen en in AL geplaatst.
INT 60h – functie 2 (AH=02h)

Het statusregister van de communicatie PPI wordt geretourneerd in AL. Hiermee kan eventueel getest worden of een teken gereed staat. In DX wordt het basisadres van de 8255 PPI teruggegeven.

Met uitzondering van het statusregister worden de niet vermelde registers niet gewijzigd.

INT 60h geeft een programma in de PC de mogelijkheid om een byte naar de Atom te sturen of van de Atom te lezen. Twee voorbeelden van toepassingen zijn:
Er dienen een groot aantal bytes zo snel mogelijk van de Atom naar een I/O poort gezonden te worden, bijvoorbeeld in blokken van 1024 bytes. Dat kan gebeuren door steeds commando #24 te gebruiken. Echter daarbij worden voor elk byte vijf bytes gestuurd van de Atom naar de PC.
De Atom kan ook eerst een programma starten op de PC en vervolgens die 1024 bytes naar de PC sturen. Het Atomprogramma kan er zo uitzien:

10 ESCAPE = OFF
20 *PC BYTES2IO
30 FOR X=1 TO 1024
40 A=X?#4000 ; REM LEES DATA
50 LINK #FFC8 ; REM STUUR NAAR PC
60 NEXT X
70 ESCAPE = ON
80 END

Het is belangrijk dat in dit geval de ESCAPE toets uitgezet wordt. Na ieder statement test de BASIC interpreter of de escape toets is ingedrukt. Hiertoe wordt een commando (#01) naar de PC gestuurd. Aangezien het gestartte programma BYTES2IO daar niet op rekent moet dat vermeden worden. Regel 10 zorgt daarvoor. Er moet tevens rekening mee gehouden worden dat de semafoor bediend wordt of men moet er zeker van zijn dat er geen interrupt optreedt waarbij met de PC gecommuniceerd kan worden.
De semafoor kan in BASIC gezet worden met A=11;LINK #FFC2 en met A=10;LINK #FFC2 wordt de semafoor weer gewist.

Het programma BYTES2IO op de PC kan er in grote lijnen zo uitzien:

MOV AH,01H ; LAADT FUNCTIENR VOOR INT 60
MOV DX,ioadres ; ZET I/O ADRES IN DX REGISTER
MOV CX,1024 ; LAADT TELLER
lus: INT 60H ; LEES BYTE VAN DE ATOM
OUT DX,AL ; STUUR BYTE NAAR I/O POORT
LOOP lus ; CX=CX-1;ALS CX<>0 GA NAAR lus
RET ; EINDE PROGRAMMA

Er worden bij de laatste methode alleen maar de 1024 databytes overgezonden, terwijl bij de eerste methode (d.m.v. commando #24) 5120 bytes overgezonden worden.
Een ander voorbeeld is een wiskundig probleem.
Er moet een moeilijke en langdurige berekening worden uitgevoerd: Bereken (7-2) + (8-7)
Aangezien we twee processoren (een 80×86 en een 6502) in het systeem hebben zitten kunnen we ditmaal de Atom als rekenkundige insteekkaart voor de PC gebruiken.
Op de Atom draait onderstaand programma:

10 ESCAPE = OFF
15 *COMMAND
20 ZERO ; REM ALLE VARIABELEN 0 MAKEN
30 USR #FFC5 ; REM LEES EERSTE GETAL
40 B=A ; REM BEWAAR DIT IN DE VARIABELE B
50 USR #FFC5 ; REM LEES TWEEDE GETAL
60 A=B-A ; REM VOER BEREKENING UIT
70 LINK #FFC8 ; REM STUUR RESULTAAT NAAR PC
80 ESCAPE = ON
90 END

Na run verschijnt de MS-DOS prompt weer bij de PC. Start dan het onderstaande PC-programma (gecompileerd in Turbo C: MOEILIJK.EXE)

#include &ltstdio.h&gt
#include &ltdos.h&gt
main()
{
int pc_uitkomst, atom_uitkomst, totaal;
union REGS regs;
printf (&quotEen voorbeeld van parallelprocessing,\n&quot);
printf (&quottwee processoren berekenen een moeilijk&quot);
printf (&quot wiskundig probleem … &quot);
/* Stuur data naar de Atom */
regs.x.ax = 0x0008;
int86(0x60, &ampregs, &ampregs);
regs.x.ax = 0x0007;
int86(0x60, &ampregs, &ampregs);
/* De Atom heeft nu de data ontvangen en
kan beginnen met het uitrekenen van 8-7.
De PC berekent op datzelfde moment 7-2. */
pc_uitkomst = 7 – 2;
/* Lees nu de uitkomst van de Atom */
regs.x.ax = 0x0100;
int86(0x60, &ampregs, &ampregs);
atom_uitkomst = regs.x.ax &amp 0xFF;
/* Bereken de totale som en druk het resultaat af */
totaal = pc_uitkomst + atom_uitkomst;
printf (&quot\n\n(7-2) + (8-7) = %1d\n\n&quot, totaal);
}

Ofschoon bovenstaand voorbeeld erg omslachtig is om de opgegeven som te berekenen is dit een mooi voorbeeld van parallel processing. Overigens werken de Atom en PC toch al veel samen op basis van parallelprocessing, bijvoorbeeld het tekenen van een lijn: de Atom berekent welk punt gezet moet worden, geeft dat door aan de PC.
Terwijl de PC het punt op het scherm zet berekent de Atom al het volgende punt.

9.3 Zelf programma’s aanpassen

Ofschoon de meeste programma’s zonder veel moeite zijn aan te passen zijn er toch een paar punten waar u op dient te letten. De meeste problemen doen zich voor op die plaatsen waar hardware buiten een vector of statement om wordt aangesproken. Voorbeelden van statements die goed verlopen zijn o.a. JOYSTK, KEY, INKEY; een voorbeeld van een minder geslaagd geval om op de vuurknop van de joystick te wachten is DO UNTIL ?#B001=#FE.

Een vervangende mogelijkheid is onderstaande machinetaal routine te gebruiken: JSR #FFBF \ aanroep joystickvector
STA #80 \ berg gelezen resultaat op in zeropage
RTS \ einde routine
In het basicprogramma wordt dan gewacht op de vuurknop met
DO LINK routine;UNTIL ?#80=#FE

Een zelfde oplossing is te gebruiken om een toets te lezen van het toetsenbord. De joystickvector wordt dan uiteraard vervangen door de leesvector #FFE3.

Een ander punt is het testen of de printer gereed is om een karakter te ontvangen. Het uitlezen van adres #B801 werkt uiteraard niet meer. Om de status van een printer op te vragen kan PC-commando #3E gebruikt worden.

Ook het maken van geluid door het aan en uitzetten van de luidspreker op adres #B002 werkt niet meer op deze kaart. Hiervoor is helaas niet meer te zeggen dan het gebruik van commando #19.

9.4 Operating Systeem aanpassen

Ofschoon het Operating Systeem goed werkt kan het zijn dat u zelf wijzigingen wil aanbrengen in het operating systeem. Natuurlijk kan dat eenvoudig dankzij de schaduw- ram. U maakt de wijziging aan, kopieert dat naar deze ram en resetten!

Maar als er een foutje zit in de resetroutine en het systeem hangt is er geen ontsnappen meer aan! Alleen uitzetten en van voren af aan weer opnieuw beginnen.

Met de invoering van EPOS/3 is daar echter iets op verzonnen: in de resetroutine wordt het reset type worden opgevraagd. Afhankelijk van het resultaat kan een beslissing worden genomen. Bij het opstarten van het terminal programma is het reset type altijd 0 en zal de Atom alleen de standaard resetroutine, zonder uitbreidingen, uitvoeren. Dus ook het stuk resetroutine in het #1xxx blok wordt overgeslagen.

Mocht het systeem onverhoopt enorm vastlopen kunt u uit de lus komen door het terminal programma te beeindigen met de noodgreep CTRL+ALT+END en daarna het terminal programma opnieuw starten.

10. Het gebruik van grafische modi

Standaard Atom grafische modi

Door de Atom in PC kaart en de software worden standaard Atom graphics ondersteund. CLEAR 1 t/m 4, zowel kleur als monochroom, worden in een CGA mode geemuleerd. Bij aanwezigheid van een EGA of VGA kaart wordt het kleurenpalet opnieuw geprogrammeerd om in kleurenmodi de standaard Atom kleuren te gebruiken. CLEAR 0 wordt op een andere wijze afgehandeld, namelijk door gebruik te maken van een karakterset. Deze karakterset ‘ATOMVDU.FNT’ wordt automatisch geladen als het gevonden wordt in de directory C:\ATOM\FONT. In andere gevallen dient het v¢¢r gebruik van CLEAR 0 geladen te worden met het FONT statement van de PCBOX.

Extended video modi

De beschikbare extended video modi zijn uiteraard afhankelijk van de beschikbare videokaart. CGA, EGA, VGA en in iets mindere mate ook Herculeskaarten zijn standaard op te roepen via het BIOS. (Voor de Atom wordt dit geregeld door pc-commando #32). Maar voor Super-VGA kaarten ligt het iets anders. Hiervoor zijn in de eerste versies van de BIOS geen standaarden gedefinieerd. Vele kaarten hebben vele modi die op vele manieren aangeroepen moeten worden.

Gelukkig is er een wijze commissie van fabrikanten gekomen die zich de Video Electronic Standards Association, afgekort VESA, noemt. En warempel, ze hebben een standaard bedacht en uitgevoerd waar de Atom nu dankbaar gebruik van maakt. Als uw videokaart de VESA standaard ondersteund kan de Atom de extended modi met resoluties vanaf 640*400 gebruiken. Let op: deze VESA standaard heeft zuiver betrekking op het BIOS, niet op de busstructuur van de aanwezige videokaart. Het VESA-BIOS kan ook voorkomen in gewone ISA of PCI bus-systemen.

(Super-)VGA kaarten die wel de hoge grafische resoluties ondersteunen maar niet VESA compatibel zijn kunnen met behulp van een externe driver toch gebruikt worden. Informeer bij uw leverancier of dergelijke drivers beschikbaar zijn.

Programma’s die afhankelijk zijn van een bepaalde mode kunnen met behulp van pc- commando #5A subfunctie 9 opvragen of die mode door de videokaart ondersteund wordt. Als deze functie de waarde #FF teruglevert wordt de mode niet ondersteund. Mocht een niet-ondersteunde mode opgeroepen worden volgt een foutmelding op het beeldscherm. Deze melding wordt niet afgegeven aan de Atom; het programma zal zo goed als mogelijk doorlopen.

Het COLOUR statement kan in zowel standaard als extended grafische modi een van de beschikbare kleuren selecteren.

Vanaf versie 3.10 zijn de volgende grafische modi voor de Atom beschikbaar:

CLEAR 0 Atom clear 0 64 * 48 pixels 2 kleuren
CLEAR 1 Atom clear 1 64 * 64 pixels 2 kleuren
CLEAR 2 Atom clear 2 128 * 64 pixels 2 kleuren
CLEAR 3 Atom clear 3 128 * 192 pixels 2 kleuren
CLEAR 4 Atom clear 4 256 * 192 pixels 2 kleuren
CLEAR 5 CGA mode 0 40 * 25 karakters 16 kleuren
CLEAR 6 CGA mode 1 40 * 25 karakters 16 kleuren
CLEAR 7 CGA mode 2 80 * 25 karakters 16 kleuren
CLEAR 8 CGA mode 3 80 * 25 karakters 16 kleuren
CLEAR 9 CGA mode 4 320 * 200 pixels 4 kleuren
CLEAR 10 CGA mode 5 320 * 200 pixels 4 kleuren
CLEAR 11 CGA mode 6 320 * 200 pixels 4 kleuren
CLEAR 12 Hercules mode 7 80 * 25 karakters monochroom tekst
CLEAR 13 Hercules mode 8 1) 768 * 348 pixels 2 kleuren
CLEAR 18 EGA mode 0D 320 * 200 pixels 16 kleuren
CLEAR 19 EGA mode 0E 640 * 350 pixels 2 kleuren
CLEAR 20 EGA mode 0F 640 * 350 pixels 4 kleuren
CLEAR 21 EGA mode 10 640 * 350 pixels 16 kleuren
CLEAR 22 VGA mode 11 640 * 480 pixels 2 kleuren
CLEAR 23 VGA mode 12 640 * 480 pixels 16 kleuren
CLEAR 24 VGA mode 13 320 * 200 pixels 256 kleuren
CLEAR 25 VESA mode 100 640 * 400 pixels 256 kleuren
CLEAR 26 VESA mode 101 640 * 480 pixels 256 kleuren
CLEAR 27 VESA mode 102 800 * 600 pixels 16 kleuren
CLEAR 28 VESA mode 103 800 * 600 pixels 256 kleuren
CLEAR 29 VESA mode 104 1024 * 768 pixels 16 kleuren
CLEAR 30 VESA mode 105 1025 * 768 pixels 256 kleuren
CLEAR 31 VESA mode 106 1280 * 1024 pixels 16 kleuren
1) Voor deze mode dient het hulpprogramma MSHERC.COM geladen te zijn.

In de vorige versies van het terminalprogramma is het noodzakelijk dat het type videokaart opgegeven wordt met de parameter /V=vvv. In de nieuwe versie wordt geprobeerd om de videokaart automatisch te detekteren. U kunt met ATOM /? controleren of de juiste kaart gedetekteerd wordt. Als de automatische detektie niet correct is kan met /V=vvv alsnog de juiste kaart opgegeven worden.

Als in de PC een Hercules (of monochroom tekst) kaart en een VGA kaart geïnstalleerd zijn, heeft de laatste de hoogste prioriteit bij de automatische detectie.

11. WinAtom, het programma

Dit hoofdstuk is gewijd aan het gebruik van WinAtom, het terminalprogramma voor de Atom-in-PC kaart onder Windows.

Het WinAtom programma voorziet in een aantal mogelijkheden. Er is getracht om zoveel mogelijk de reeds bestaande functionaliteit van het dos programma te volgen. Als extra’s zijn uiteraard de windowsfuncties toegevoegd, dus het gebruik van menu’s, clipboards etc. Het WinAtom programma is een zogeheten terminal emulator. Dat wil zoveel zeggen alsof het een echte Atom is, maar dan wordt de output naar het scherm omgeleid via een stukje software.

11.1 Installatie

Er is geen officieel installatie programma gemaakt voor de WinAtom software. Dat op zich is al een project en voor die ene keer dat WinAtom geïnstalleerd moet worden, moet maar even met de handleiding open geslagen op de knieen worden gewerkt. De installatie is eenvoudig: bestanden kopieren naar de juiste directories en een groep aanmaken onder Windows.
  • kijk met de DOS versie, wat het adres van uw Atomkaart is door in te toetsen Atom /?. U noteert dit adres, want dat heeft u straks nodig.
  • Plaats de diskette met daarop de WinAtom software
  • ga naar de directory waar uw dosatom software staat: CD \ATOM
  • Kopieer winatom.exe naar die directory: copy a:winatom.exe
  • Ga vervolgens naar de windows directory: CD \WINDOWS
  • kopieer het ini bestand: COPY A:*.INI
  • ga naar de systeemdirectory van windows: CD \WINDOWS\SYSTEM
  • kopieer de devicedrivers en het TrueType font: COPY A:*.386 COPY A:*.TTF COPY A:*.DLL
Dat is alles om de software te installeren. Nu nog het aanpassen van de system.ini, zodat Windows weet dat ook u met de Atom-in-PC kaart kan werken.
Om dit te bewerkstelligen, moet er in de sectie waar [386Enh] staat een aanpassing worden gemaakt.

Zorg dat ergens voorbij de [386Enh] sectie een regel komt te staan met ‘device=atomxxx.386’ waarbij xxx het adres is, dat u onder stap 1 hebt opgezocht.

pictures/winatom1.gif

Aanpassen kan met een editor gebeuren, of binnen Windows met Notepad. Laad vervolgens het bestand WinAtom.ini in de editor en pas op de laaste regel het IO adres aan. Let u er op dat de waarde in decimalen wordt opgegeven en niet in HEX. Alles is nu gereed en Windows kan opnieuw worden opgestart.

Het meest praktische is om de WinAtom programmatuur onder een eigen groep te plaatsen binnen Windows. Hiertoe kan, na het opstarten van Windows, via het menu File (Nederlandse versie: Bestand) worden gekozen voor New (Nieuw…). Voeg via ‘Program Group’ (Programma Groep) vervolgens een groep toe. Als de groep is aangemaakt, kiest u nogmaals via File voor de New functie, maar dan voor ‘Program Item’ (Programma).

pictures/winatom2.gif

Vervolgens komt het systeem met de vraag wat u toe wilt voegen. U verzint op de eerste regel een mooie omschrijving voor het terminal programma. Bij de programmanaam geeft u de directory aan, alsmede de naam van het programma. Staat de WinAtom programmatuur inderdaad onder c:\winatom dan wordt de inhoud van die regel: c:\winatom\winatom.exe. In bovenstaande afbeelding is voor een andere directory gekozen.
Flexibiliteit alom dus.
De working directory is niet echt relevant, dus die kunt u leeg laten. Voor de liefhebbers, is de mogelijkheid om via ‘Change Icon’ het pictogram te veranderen. U kunt dan kiezen voor een afbeelding van een beeldschermpje met daarop een prachtige Eikel. Nee, niet een pasfoto van deez of geen, maar het logootje van de lieden uit Cambridge. Hoe heet dat ook alweer: Once an Acorn, now an Oak?

pictures/winatom3.gif

Als alles naar verwachting is verlopen, ziet u nu de groep met daarin het WinAtom logo. Dubbelklik met de muis op dit geheel en het zaakje moet nu opstarten.

11.2 Het gebruik

Reset

Zodra het programma wordt opgestart, wordt de Atom in PC kaart gereset, net zoals u dat kent vanuit het DOS programma. Wilt u zelf de zaak resetten, dan kan via het menu worden gekozen voor deze optie. Dat kan op de bekende Windows manieren: U gaat met de muis naar de optie ‘Reset!’ en vervolgens de bekende klip-klak met de muis; u drukt op de menu toets, dat is de Alt of de F10 toets. U ziet nu de ‘Reset!’ oplichten.
Vervolgens drukt op Enter. Als derde mogelijkheid is het gebruiken van de Accelerator mode. U drukt de Alt toets in, houdt deze vast en drukt vervolgens op de R. Drie methoden voor een en hetzelfde kunstje.

Statusbalk

Speciaal voor wat meldingen en omdat het zo aardig staat, is er een statusbalk opgenomen onder in het scherm. Hierin wordt de status van bijvoorbeeld toetsen, of de status van een printer gemeld. Als de pagemode aanstaat bijvoorbeeld, zal het woord ‘pagemode’ in hoofdletters op de status balk verschijnen. Zo ook voor de shift en de capslock toetsen. Als de printeroptie, die normaal gesproken met CTRL-B en CTRL-C respectievelijk aan of uit gezet wordt, wordt het woord ‘printer’ in kleine danwel hoofdletters weergegeven, overeenkomstig met de ‘uit’ of ‘aan’ status.
Links in de statusbalk is ruimte gereserveerd voor het melden van de coordinaten in het geval van selecteren van een stuk van het scherm. Zie hiervoor het stukje ‘clipboard’.

Aanpassen van de windowgrootte

Op de bekende Windows wijze kan de grootte van het scherm worden aangepast. Bij deze aanpassing, wordt ook de juiste fontgrootte gekozen, zodat alles weer optimaal in het window past. Afhankelijk van de snelheid van de machine kan dit (heel) eventjes duren, want er gebeurt nogal wat.
Bij het afsluiten van het WinAtom programma, worden de afmetingen van het window opgeslagen in een zogeheten ini bestand. Deze coordinaten worden de volgende keer gebruikt, als het programma weer wordt opgestart.

Clipboard

Staat u in het Atom Window, dan kunt u een gebied selecteren en naar het clipboard kopieren, zodat u er in andere applicaties gebruik van kunt maken. Let er op dat het hier als het ware om een fotootje van het scherm gaat en er geen permanente koppeling is tussen de applicaties.

pictures/winatom4.gif

Als u op de linker muistoets drukt, (voor de instellingen voor linkshandigen, is dat de rechter muistoets), verschijnen er links onderin beeld de begincordinaten waar vanaf de selectie start. Dat komt dus overeen met de positie op het beeldscherm. Links bovenin is 1,1 rechts onder, afhankelijk van de instellingen bijvoorbeeld 32,16 of 80,25. Vervolgens houdt u de toets vast en sleept met de muis naar de gewenste positie. Het rechter gedeelte van de vier cijfers links onder loopt nu mee.
Alles wat tussen die cordinaten ligt, wordt bij het loslaten van de linkermuis toets gekopieerd naar het clipboard. Bij het loslaten van die toets merkt u dus niets, tenzij het programma geen ruimte kon vinden om de zaak te kopieren; dan krijgt u een foutmelding. Gegevens die naar het Clipboard gaan, kunnen op twee manieren worden weggeschreven: als bitmap of als tekst. Met tekst kunt u nog iets zinnigs doen, bijvoorbeeld inlezen in een editor, of het toevoegen of verwijderen van tekst. Met een bitmap is het aleen mogelijk om er iets als afbeelding mee te doen, zoiets als ik in dit verhaal doe.
Het programma gaat default uit van een bitmap, maar middels de optie ‘Text copy’ uit het ‘Edit’ menu kan dit worden veranderd. Als u voor deze optie kiest, verschijnt er een vinkje voor. Klinkt u nogmaals op deze optie, dan verdwijnt het vinkje weer en wordt er weer als bitmap gekopieerd.

Printen

Via Edit is het mogelijk om een afdruk van het scherm te maken. Het maakt daarbij niet uit of het nu om een grafisch scherm gaat of om een scherm met tekst. Het geheel wordt 1:1 naar een A4 pagina op de printer afgedrukt. Omdat het programma met een TrueType Lettertype werkt, wordt het font naar de juiste (printer)afmetingen vergroot, zonder dat er van die kenmerkende blokken ontstaan. Printen zoals u dat kende van de CTRL-B en CTRL-C combinatie gaat in WinAtom op een wat andere manier. Er wordt niet rechtstreeks naar de printer geschreven, maar via een PC-ATOM.SPL bestand. Zodra u CTRL-B geeft wordt dit bestand geopend. Bestaat er al een bestand, dan wordt er toegevoegd aan het einde van het bestand. Via CTRL-C wordt het bestand weer gesloten. Voor de rest is de werking identiek aan die van de reeds bekende Atom.

Voor het printen van grafische afbeeldingen hoeven geen drivers meer geladen of geschreven te worden. Het afdrukken gebeurt namelijk door Windows zelf. Wat u bij een grafisch scherm ziet is een zogeheten DIB, Device Independent Bitmap. Deze wordt door de WinAtom programmatuur gevuld op het moment dat de Atom iets grafisch staat te verzinnen. Deze DIB wordt overgeheveld naar de printer. Uw Windows configuratie dient natuurlijk wel op de juiste printer te staan. Een keuze voor een Epson printer waar HP informatie naar wordt toegestuurd, levert zelden positieve ervaringen op, laat staan mooie afbeeldingen.

Drag & Drop

Het is binnen Windows mogelijk om met de muis een bestand aan te klikken en vervolgens ‘ergens’ naar toe te slepen. Ook dit wordt door de WinAtom programmatuur ondersteund. Hoe gaat dat in zijn werk. Wel u start de File Manager (Bestandsbeheer) op en gaat naar de directory waar Atom bestanden zijn te vinden. U klikt met de muistoets op, bijvoorbeeld, ‘Init’, als deze zou bestaan, en terwijl u de linker muistoets ingedrukt houdt, sleept u dit naar het WinAtom window. Hier laat u vervolgens de muistoets los en, zie daar, daar verschijnt op de commandline: *LOAD C:\ATOM\INIT. Safety first, dus WinAtom geeft nog even geen enter. Want stel dat u uw vorige programma nog niet bewaard had, dan wordt dat anders automatisch overschreven. Vandaar dat u zelf een enter moet geven.

Het WinAtom.ini bestand

In het ini bestand worden door WinAtom zelf wat gegevens weg geschreven en valt er ook het een en ander te configureren. Met name het IO adres is instelbaar. Let er op dat dit in decimale waarden wordt ingegeven en dat alleen het base adres wordt genoemd. In dit bestand wordt ook de grootte van het window bij het verlaten van het programma opgeslagen.

Comptabiliteit met de DOS Atom.com

Er is getracht om zo dicht mogelijk bij de originele DOS programmatuur te blijven. Toch zijn er een paar punten waarop dat nou eenmaal niet gaat. Het is niet mogelijk om, bijvoorbeeld, in een Atom DOS shell een schijf te gaan formatteren. Iets wat je binnen Windows kunt doen, wordt niet nog eens extra via een houtje touwtje constructie nogmaals als functionaliteit aangeboden.
Ook het communiceren met de seriele poorten is zoiets. Het laden van het originele dos ATOMVDU.FNT wordt niet ondersteund, daar de WinAtom programmatuur daar (nog) niets mee doet.

12. Hardware toelichting

In dit hoofdstuk zal de hardware aan de hand van de schema’s in bijlage IV worden toegelicht.

De Atom is opgebouwd uit vier blokken (schema 1). Dit zijn de processor met EPROM (schema 5), het RAM geheugen (schema 2), I/O en communicatiekanaal tussen PC en Atom (schema 4) en het videogedeelte met externe I/O (schema 3).

De processor wordt van een klok voorzien door middel van dezelfde schakeling als in een normale Atom: een 4 MHz oscillator opgebouwd uit een kristal en twee inverters met teruggekoppelde weerstanden. Het oscillatorsignaal wordt met een deler teruggebracht naar de gewenste frequentie. Op de print is een jumper (jump3) aanwezig om een frequentie te kiezen van 1 of 2 MHz.
De adresdecodering binnen de Atom wordt geregeld door één enkele GAL (GALATPC1 in schema 2). Aan deze GAL worden de hoogste vier adreslijnen van de processor aangeboden en enkele controle signalen: R/W, è2, memory-enable, o.s.-ram en write protect. Het ‘memory-enable’ signaal dient om het gehele interne geheugen en de interne I/O uit te schakelen als een externe uitbreiding daarom vraagt. Dit wordt verderop in de tekst uitgebreid toegelicht.
‘O.S.-ram’ komt van een latch en dient om het geheugengebied #C000 – #FFFF te benaderen in RAM of ROM. Een laag signaal laat de EPROM adresseren en een hoog signaal de RAM. ‘Write protect’ is ook afkomstig van een latch. Een ‘0’ maakt het hele RAM toegankelijk voor lezen en schrijven. Een ‘1’ blokkeert schrijfacties voor de gebieden #1000 – #1FFF, #A000 – #AFFF en #C000 – #FFFF.

Wat fysieke indeling betreft zijn de acht utility banken in IC3 ondergebracht, het programmageheugen van #0000 – #7FFF in IC4 en het video en operating systeem geheugen in IC5. Deze RAM IC’s bevatten 32 kB aan geheugen. Het totale RAM geheugen is dus 96 kB. De EPROM is 16 kB groot.

GALATPC1 dient verder voor buffering van de signalen è2, R/W en wekt een NWDS signaal op.

Het I/O gebied wordt geactiveerd in het gebied #B000 – #BFFF. Standaard I/O zijn een 6522A VIA, een “schakelkaart-latch” en twee video adres latches. Met de VIA wordt de communicatie tussen Atom en PC verzorgt. De schakellatch (IC9) dient voor de selectie van de acht RAM-banken op het #Axxx blok. Overige bits van de latch zijn ‘write protect’ (bit 6), ‘o.s.-ram’ (bit 7) en ‘NMI-enable’ (bit 5) die voor het videogedeelte van belang is.
De clear ingang van IC9 is verbonden met de resetlijn van de Atom. Na een reset zijn alle bits ‘0’. In woorden betekent dat: utilitybank 0, write protect uit, o.s. in ROM en video NMI geblokkeerd.

De standaard I/O is als volgt ingedeeld:

#B800 t/m #B87F 6522A VIA
#B880 t/m #B8FF latch
#B900 t/m #B97F video adres latch

De communicatie tussen de PC en de Atom is 2*8 bits breed. Er is een 8 bits datapad van Atom naar PC en een 8 bits datapad van PC naar Atom. De handshake wordt geheel verzorgd door de 6522 aan Atomzijde en de 8255 aan PC-zijde. Door gebruik te maken van deze vorm van handshake maakt het niets uit hoe snel of langzaam een van beide computers is. Van de 6522 en de 8255 worden de A-poorten als ingang gebruikt en de B- poorten zijn uitgang. Het datatransport loopt dus altijd van B-poort naar A-poort. De handshake wordt verzorgt door twee speciale in en uitgangen.
De timers van de 6522 worden niet gebruikt voor de communicatie en zijn dus geheel beschikbaar voor programma’s.

Van de 8255 wordt een uitgang van de C-poort (PC7) gebruikt als resetlijn voor de R65C02. Hierdoor kan de PC de Atom resetten zonder zelf gereset te worden.

De 8255 wordt in de PC geadresseerd in het gebied $300 – $31C. Het exacte adres wordt ingesteld met JP4. Dit is in het hoofdstuk ‘installatie’ al toegelicht. Voor de adressering wordt de GAL ‘GALATPC2’ gebruikt. De kaart gebruikt geen hardware interrupts of DMA-kanalen van de PC.

Voor het videogedeelte wordt gebruik gemaakt van de NMI van de processor. Alles onder de controle van GALATPC3. Als er geschreven wordt naar het geheugen gebied #8000 – #9FFF dan wekt deze GAL een puls op die door de latches 574-1 en 574-2 gebruikt wordt als klokpuls en verder gaat als NMI-puls voor de processor. De latches nemen bij een opgaande klokpuls de inhoud over van de adresbus. Bij een NMI maakt de processor zijn huidige instruktie (in dit geval altijd een store-instruktie) af. Dan vervolgt deze zijn weg in de NMI-routine. In deze routine kunnen de latches uitgelezen worden. Hier staat altijd een adres in uit het videogeheugen. De data staat uiteraard opgeborgen in het videogeheugen (mits enabled natuurlijk). Aan de hand van deze gegevens (adres en data) kan met behulp van software een simulatie gemaakt worden voor alle standaard Atom video-modi.

Het lage byte van het adres komt in 574-2 te staan. Deze latch kan uitgelezen worden op adres #B900. De latch 574-1 vangt het hoge bytee van het videoadres en kan uitgelezen worden op adres #B901.

De I/O verschilt op één punt heel veel van de standaard Atom I/O. In het nieuwe systeem is een controle lijn toegevoegd aan de I/O connector. Met behulp van deze lijn kunnen we het hele interne geheugen en I/O van de Atom-in-PC uitschakelen. Om het op niveau te zeggen:

Als we die lijn ‘I/O enable’ aan een laag niveau hangen dan is de hele kaart niet meer dan een gebufferde processorkaart.

Hiertoe is GAL 2, de gal die de Atom adresdecodering verzorgt, gewijzigd. Deze gal had al een enable lijn voor het video-geheugen. Door middel van een jumper kon het videogeheugen op de kaart aan of uitgeschakeld worden. Deze functie is nu vervallen. Daarvoor is nu het I/O Enable in de plaats gekomen. Op het moment dat deze I/O Enable laag wordt (< 0,8 v) blokkeert de gal alle uitgangen (lees chipselect lijnen). verder hangt de databus buffer (een 74hct245) ook aan deze i/o enable lijn, zodat deze opengezet wordt voor datatransport van/naar buiten.

Zodra een uitbreiding geadresseerd wordt zorgt de decoderings logica ervoor dat uiteraard de uitbreiding geselecteerd wordt (CS ingang wordt laag) en tegelijkertijd het I/O enable signaal laag wordt. Dit I/O enable signaal dient een Open Collector uitgang te zijn, aangezien meerdere uitbreidingen het signaal moeten kunnen bedienen. Vergelijk dit met de IRQ lijn waarop ook meerdere IC’s aangesloten kunnen worden.

Twee voorbeelden:
  • Op de Atom-in-PC kaart zit een 6522 VIA (adresgebied #B800 t/m #B87F. Hiervan worden slechts 16 bytes daadwerkelijk gebruikt (bijv. #B800-#B80F of #B810-#B81F).
    Op de I/O kaart is ook een VIA geplaatst in het gebied #B800-#B80F. Het lijkt op dubbele adressering, maar dat is het niet want op het moment dat de externe VIA op #B800 geadresseerd wordt zorgt de I/O Enable er voor dat de VIA op de Atomkaart niet geselecteerd wordt.
    Deze interne VIA kunnen we aanspreken op bijvoorbeeld #B810 want dan wordt de externe VIA niet geselecteerd en wordt ook de I/O Enable niet actief.

  • Een soortgelijk voorbeeld is Henk’s videokaart. Als deze kaart aangesloten wordt op de Atom-in-PC zorgt deze kaart er voor dat bij adressering in het geheugengebied #8000 t/m #9FFF (het videogeheugen) het interne geheugen van de Atom geblokkeerd wordt.
    Op het moment dat deze videokaart aan het systeem hangt is het interne videogeheugen uitgeschakeld. Als de videokaart losgekoppeld wordt werkt het interne geheugen weer.

Een van de grote voordelen van deze uitvoering is dat u een uitbreiding kunt maken en deze aansluiten op het systeem zonder overige hardware wijzigingen te maken. Dus nooit meer doorkrassen en piggy-packen. Mocht een ontwerp of uitbreiding niet werken of niet bevallen dan kunt u altijd terug naar de oude situatie, eenvoudig door alleen de betreffende print er uit te trekken.

BIJLAGE I: MS-DOS ERRORCODES

Dit zijn de meest voorkomende errorcodes die MS-DOS teruggeeft bij diskcommando’s. 0 geen fout opgetreden 2 bestand niet gevonden 3 pad niet gevonden 4 geen vrije handle meer 5 toegang geweigerd 6 onbekende handle 12 toegangscode ongeldig 15 onbekende drive 16 actuele directory mag niet verwijderd worden 18 geen bestanden meer 19 medium is tegen schrijven beveiligd Let erop dat dit niet de overeenkomstige errorcodes voor de Atom zijn! Deze waarden komen alleen voor bij het werken met bestanden via de PC-commando’s.

BIJLAGE II: DISK TRANSFER AREA EN HANDLE APPENDIX

In deze bijlage worden de DTA en handles wat beter toegelicht.

Disk Transfer Area

De DTA is een blok van oorspronkelijk minstens 43 bytes. Hiervan zijn er 21 gereserveerd voor MS-DOS en deze worden door de Atom niet gebruikt. De Atom kan alleen informatie lezen uit de DTA en heeft zodoende aan de overige 22 bytes genoeg. In het DTA is de volgende informatie opgeslagen:
  • byte 0 : attribuut van het gevonden bestand
  • byte 1-2 : tijd laaste wijziging
  • byte 3-4 : datum laatste wijziging
  • byte 5-8 : lengte van het bestand
  • byte 9-21 : naam van het bestand (normale ascii string)
Deze informatie heeft betrekking op de DTA die bij de Atom bekend is en niet de originele MS-DOS DTA.

De tijd heeft de volgende vorm:
pictures/ftime.gif

De datum heeft de volgende vorm:
pictures/fdate.gif

Het attribuutbyte heeft de volgende betekenis:
pictures/fattr.gif

HANDLE FUNCTIES

Het werken met handles komt erop neer dat een file onder een bepaalde naam geopend wordt. Na het openen krijgt deze file een uniek nummer toegewezen. Dit is de handle voor deze file. Alle lees of schrijfacties naar deze file verlopen via de handle. De filenaam is dan niet meer van belang.

Een standaard (of echte) Atom werkt ook met handles; het statement
F=FIN “DATA”
levert een file handle op in de variabele F. Het statement
SPUT F, “Deze data naar disk schrijven”
schrijft de string naar de file met handle F. Op zich zijn handles dus niets nieuws in de Atom.
Wel nieuw is dat een random access file nu 2.147.483.632 bytes (2^31 – 16 bytes van de header) lang kan zijn, als uw DOS versie en opslagmedium die mogelijkheid bieden.

Tenslotte dient een random access file altijd afgesloten te worden. Voor input files alleen om de gebruikte handle vrij te geven; voor output files om de directory bij te werken. Mocht het sluiten niet gebeuren dan kunnen er “lost clusters” optreden.
Met *PC CHKDSK /F kunnen deze hersteld danwel verwijderd worden.
Het sluiten van een file kan en mag gebeuren nadat de Atom gereset is. Als het terminal programma met *PC beeindigd wordt dan sluit MS-DOS automatisch alle openstaande handles.

MS-DOS heeft vijf handles (0 t/m 4) gereserveerd voor speciale “bestanden” of “apparaten”. Dit zijn:
0   standaard invoer apparaat CON toetsenbord
1   standaard uitvoer apparaat CON beeldscherm
2   standaard error uitvoer CON beeldscherm
3   seriele interface AUX com1
4   parallelle interface PRN lpt1
Deze vijf handles mogen niet gesloten worden, als dat toch gebeurd dan zal MS-DOS geen invoer/uitvoer naar deze handles uitvoeren. Dit is o.a. te zien als handle 1 gesloten wordt:
      SHUT 1
      *CAT

zal geen catalog op het scherm weergeven. De Atom blijft echter toch werken omdat het terminal programma de in en uitvoer van tekst via de BIOS interrupts #16 en #10 afhandeld.
Het is vanuit de Atom dus ook mogelijk om geproduceerde tekst te sturen naar een file, beeldscherm of printer. Hiervoor hoeft alleen maar een handle gegeven te worden.
Bijvoorbeeld om een string op het scherm af te drukken kan gegeven worden:
      SPUT 0,“Deze tekst afdrukken s.v.p.”
en om deze string naar een printer te sturen:
      SPUT 4,“Deze tekst naar de printer s.v.p.”

Houdt er wel rekening mee dat u hier met MS-DOS bestanden werkt. Met name stuurcodes als #0D, #0A en End-Of-File #1A zijn iets anders dan bij de Atom gebruikelijk is.

Om de cursor naar de volgende regel te plaatsen dient niet alleen #0D gegeven worden maar ook #0A. Zo kan ook de printer niet aangezet worden met ^B of ^C.

BIJLAGE III: TOETSENBORD CODES EN STATUS

Het resultaat van INT 16H (bios keyboard functies) wordt gegeven in register AX van de 8088/8086.
[Bij gebruik van het SCAN-statement komt AX in de opgegeven variabele, waarbij AL in bit 0 t/m 7 komt en AH in bit 8 t/m 15.]

Functies 0 en 1:
AL = 0 uitgebreide toetsenbord code, AH = code
AL <> 0 normale asciicode, AH = scancode
Bijzondere toetsen met een uitgebreide code:
Shift-Tab 15
F1 … F10 59 – 68
Shift-F1 … Shift-F10 84 – 93
Ctrl-F1 … Ctrl-F10 94 – 103
Alt-F1 … Alt-F10 104 – 113
Alt-1,2,3,4,5,6,7,8,9,0,-,= 120 – 131
Alt-Q,W,E,R,T,Y,U,I,O,P 16 – 25
Alt-A,S,D,F,G,H,J,K,L 30 – 38
Alt-Z,X,C,V,B,N,M 44 – 50
Cursor omhoog 72
Cursor omlaag 80
Cursor links 75
Cursor rechts 77
Ctrl-cursor links 115
Ctrl-cursor rechts 116
Ins, Del, Home, End, PageUp,PageDown82, 83, 71, 79, 73, 81
Ctrl-Home, Ctrl-End 119, 117
Ctrl-PageUp, Ctrl-PageDown 132, 118

Functie 2:
Al = toetsenbord status

pictures/bijlage3.gif

BIJLAGE VI GAL LISTINGS Decoder gal voor adressering Atom-in-PC kaart

PC ADRES DECODER-DESIGN GAL16V8A
DATE 08/03/93
BY: R.LEURS
CHIP DECODERP GAL16V8A
NC A2 A3 A4 A5 A6 A7 A8 A9 GND 
AEN CS300 CS304 CS308 CS30C CS310 CS314 CS318 CS31C VCC
EQUATIONS
/CS300 = /AEN*A9*A8*/A7*/A6*/A5*/A4*/A3*/A2
/CS304 = /AEN*A9*A8*/A7*/A6*/A5*/A4*/A3*A2
/CS308 = /AEN*A9*A8*/A7*/A6*/A5*/A4*A3*/A2
/CS30C = /AEN*A9*A8*/A7*/A6*/A5*/A4*A3*A2
/CS310 = /AEN*A9*A8*/A7*/A6*/A5*A4*/A3*/A2
/CS314 = /AEN*A9*A8*/A7*/A6*/A5*A4*/A3*A2
/CS318 = /AEN*A9*A8*/A7*/A6*/A5*A4*A3*/A2
/CS31C = /AEN*A9*A8*/A7*/A6*/A5*A4*A3*A2

Decoder gal voor geheugen en I/O binnen de Atom ATOM ADRES DECODER - DESIGN 16V8A DATE 09/03/93 BY: R.LEURS ; Deze versie gebruikt het ENABLE signaal om het interne ; geheugen en I/O te disablen als er op datzelfde adres een ; externe uitbreiding zit.

CHIP DECODERA_V2 GAL16V8A

A15 A14 A13 A12 RW FI2 WP OSRAM ENABLE GND NC1 CS_IO FI2OUT RWOUT NWDS CS_PROG CS_UTIL CS_VIDEO CS_ROM VCC @UES RL09034a EQUATIONS FI2OUT = FI2 /RWOUT = /RW /NWDS = FI2*/RW /CS_IO = A15*/A14*A13*A12*ENABLE /CS_UTIL = A15*/A14*A13*/A12*RW*ENABLE + A15*/A14*A13*/A12*/RW*/WP*ENABLE CS_PROG = A15+/A15*/A14*/A13*A12*WP*/RW+/ENABLE /CS_VIDEO = A15*/A14*/A13*ENABLE + A15*A14*OSRAM*RW*ENABLE + A15*A14*/WP*/RW*ENABLE /CS_ROM = A15*A14*/OSRAM*RW*ENABLE

Gal voor aansturing video en I/O

ATOM VIDEOKAART-DESIGN GAL16V8A DATE 14/1/1995 BY: R.LEURS CHIP VIDEO GAL16V8A CS NMI_EN RW O2 A0 A1 A13 A14 A15 GND IOSEL VIASEL LATSEL DIR NC NRDS LATCH CS_ADL CS_ADH VCC ; IOSEL = SELECTIE I/O GEBIED (DECODER GAL PIN 12) ; VIASEL = SELECTIE VIA (74HCT138 PIN 15) ; LATSEL = SELECTIE LATCH (74HCT138 PIN 14) ; CS = SELECTIE VIDEOGAL (74HCT138 PIN 13) ; DIR = RICHTING DATATRANSPORT (74HCT245 PIN 1) EQUATIONS /LATCH = A15 * /A14 * /A13 * /RW * O2 * NMI_EN * IOSEL * VIASEL * LATSEL /CS_ADL = RW * /A1 * /A0 * /CS /CS_ADH = RW * /A1 * A0 * /CS /NRDS = RW * O2 DIR = /RW

Decoder en controller gal voor I/O kaart

Deze gal wordt alleen gebruikt op de optionele I/O kaart, zoals beschreven in hoofdstuk 10. ATOM I/O ADRES DECODER - DESIGN 16V8A DATE 12-02-1995 BY: R.LEURS CHIP ATOMIO GAL16V8A A15 A14 A13 A12 A10 A11 A7 A6 A5 GND A4 NC1 BXXX ENABLE B4XX B80X A9 A8 NC2 VCC @UES RL50212a EQUATIONS /B80X = A15 * /A14 * A13 * A12 * A11 * /A10 * /A9 * /A8 * /A7 * /A6 * /A5 * /A4 /B4XX = A15 * /A14 * A13 * A12 * /A11 *A10 * /A9 * /A8 /BXXX = A15 * /A14 * A13 * A12 /ENABLE = A15 * /A14 * A13 * A12 * A11 * /A10 * /A9 * /A8 * /A7 * /A6 * /A5 * /A4 + A15 * /A14 * A13 * A12 * A11 * A10 + A15 * /A14 * A13 * A12 * /A11

BIJLAGE VII MEEST GESTELDE VRAGEN

Vraag: Moet er per se een R65C02 processor gebruikt worden?
Antwoord: Nee, u kunt gerust een 6502 processor gebruiken, op 1 of 2 MHz. De snelheid kan ingesteld worden met de jumper bij het klokcircuit.
Zelfs de 65802 kan gebruikt worden.
Vraag: Na het opstarten van het terminal programma blijft het scherm zwart of er verschijnen doorlopend karakters op het scherm. Waar ligt dat aan?
Antwoord: In de meeste gevallen vindt de PC in het adres-gebied de kaart niet.
Omdat de controle nogal erg eenvoudig is kan het voorkomen dat de PC “iets” ziet op de controle-adressen en het domme ding “denkt” dan dat de kaart aanwezig is op dat adres.
De oplossing is dan het meegeven van de /A:aaa optie.
Als bijvoorbeeld de kaart geadresseerd is op I/O adres 310h geef dan de volgende optie mee: ATOM /A:310
Vraag: Waarom laten enkele *-commando’s laten het hele systeem vastlopen?
Antwoord: Door een foutje in de versies t/m 2.15 van het terminalprogramma vindt de software de naam van de DOS commando interpreter niet als deze niet als eerste in de DOS environment staat. Vanaf versie 2.20 is deze fout verholpen.
Vraag: Sommige hoge resolutie modi krijg ik niet in beeld; een foutmelding verschijnt in beeld terwijl de kaart de betreffende modi wel aankan.
Antwoord: De videokaart ondersteunt die modi wel, maar niet volgens de VESA standaard. Probeer via de leverancier van de kaart een VESA driver te krijgen.

Roland Leurs Copyright © 1997

../../images/terug.gif