OSBYTE routines
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:
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.
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.
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.
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.
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:
OSBYTE 6 (#224)exit vectorGeeft 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=aaaWaarbij ‘aaa’ het hexadecimale basisadres van de Atomkaart is. Dit adres heeft voorrang op het automatisch bepaalde adres. /R=rrrStandaard 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=vvvHet 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: 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. 4. Nieuwe Operating Systeem vectorenOm 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: #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. 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 afinvoer : geen uitvoer: geen gewijzigde registers: geen 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 modeinvoer : X = alternatieve mode uitvoer: error 129 bij verkeerde mode gewijzigde registers: vlaggen OSBYTE #03 initialiseren/opvragen VDU mode invoer : X = 0 -> opvragen vdu modeX <> 0 -> init vdu mode uitvoer: carry = 0 -> alles in orde, X = mode carry = 1 -> illegale mode opgegeven gewijzigde registers: X en vlaggen 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 geluidinvoer : X = frequentie Y = duur in 18e seconden uitvoer: geen gewijzigde registers: geen OSBYTE #06 spring naar exit vector invoer : geenuitvoer: onbepaald gewijzigde registers: onbepaaldOSBYTE #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 : geenuitvoer: accu bevat volgende informatie: gewijzigde registers: Accu en vlaggen 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: geenOSBYTE #0B test en set semafoor voor PC communicatie invoer : geenuitvoer: 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 opinvoer : X is errorcode uitvoer: aanroep brkvector #202 gewijzigde registers: alle OSBYTE #0D druk tekst van foutmelding af invoer : foutcode in adres #00 uitvoer: foutmelding door PC op scherm gewijzigde registers: alle 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.
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 voorzetteninvoer: 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/opvrageninvoer: 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 PCDe 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.
Invoer: geen Uitvoer: geen 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. Door de Atom wordt de TAB toets gebruikt als COPY toets. #02 Lees karakter op cursorpositieInvoer: geen Uitvoer: ascii waarde van teken op cursorpositie Wordt o.a. gebruikt bij afhandeling van copy toets. #03 Plot pixelInvoer: 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 pixelmode = 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 coordinatenstelselInvoer: 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 pixelmode = 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 ?). 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 schaalfactorInvoer: 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 aanInvoer: geen Uitvoer: geen De cursor verschijnt als knipperend streepje op het scherm. #0A Zet cursor uitInvoer: geen Uitvoer: geen De cursor verdwijnt van het scherm. #0B File van disk ladenInvoer: 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 schrijvenInvoer: 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. 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 *.* 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. 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 aanInvoer: 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 diskInvoer: 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 filesInvoer: 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 filesInvoer: 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 driveInvoer: 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. 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 verborgenInvoer: 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 zichtbaarInvoer: 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 informatieInvoer: 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. 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. 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 afInvoer: 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. 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 4Invoer: 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 opvragenInvoer: 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: #1C subfunctie #83: muis cursor aanzetten Invoer: geenUitvoer: geen De muiscursor wordt zichtbaar op het scherm. #1C subfunctie #84: muis cursor uitzettenInvoer: geen Uitvoer: geen De muiscursor verdwijnt van het scherm. #1C subfunctie #85: muis informatie opvragen binnen CLEAR 4Invoer: 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. 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. 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 muiscursorInvoer: 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 cursorpositieInvoer: 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. 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 byteInvoer: 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 letterInvoer: 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 aktiviteitenInvoer: 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 informatieInvoer: 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) aanwezigbit 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 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 modiInvoer: 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, geelPalet 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 #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 modeInvoer: 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. 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 modeInvoer: 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. 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. Invoer: geen Uitvoer: geen Dit commando heft een gedefinieerd tekstvenster op. #37 Joystick uitlezenInvoer: 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: 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. 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. 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 fileInvoer: 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. 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 printerInvoer: 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 fileInvoer: 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: 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. 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 fileInvoer: 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 fileInvoer: 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 pointerInvoer: 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 bestand1: 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. 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 muiscursorInvoer: 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 programmaInvoer: 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. 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 definierenInvoer: 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. 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. 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. 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. 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. Invoer: geen Uitvoer: geen Hiermee wordt een grafisch venster opgeheven. #4E Grafische oorsprong verschuivenInvoer: 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. 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. 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 lijnenInvoer: 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. #55 Selecteer user font voor EGA/VGA tekstmodeInvoer: geen Uitvoer: geen Dit commando laadt het geladen font in het fontram van de EGA of VGA kaart. 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 fontInvoer: 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 diskInvoer: 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 diskInvoer: 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 functiesSHAPES – 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 cirkelInvoer: 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 dezeInvoer: 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 rechthoekInvoer: 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 dezeInvoer: 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 driehoekInvoer: 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 dezeInvoer: 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 patroonInvoer: 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 lijnInvoer: 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 opvragenInvoer: 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 opvragenInvoer: 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 geheugenMet 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 videogeheugenInvoer: 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 videogeheugenInvoer: 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. 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 typeInvoer: 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 startReset 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 genererenInvoer: 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 ladenDe 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 schermpaginaInvoer: 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 diskInvoer: 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 diskInvoer: 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 scanInvoer: 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 :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 wachtfunctiesLet 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 tijdInvoer: 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 inInvoer: 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 wachttijdInvoer: 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 uitlezenInvoer: 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 wachtenInvoer: 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 wachtenInvoer: 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 functiesDeze 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 voorgrondkleurInvoer: 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 nwaarbij 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 diskInvoer: 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 diskInvoer: 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 definierenInvoer: 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 modeInvoer: 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/schrijvenOm 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 lezenInvoer: 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 schrijvenInvoer: 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 functiesDit 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 opvragenInvoer: 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 aanwezig1 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: vermenigvuldigenInvoer: 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: delenInvoer: 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 bepalenInvoer: 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 waardeInvoer: 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: vierkantswortelInvoer: 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 gradenInvoer: 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 radialenInvoer: 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: machtverheffenInvoer: 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 CommunicatieDe 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 poortInvoer: 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 opvragenInvoer: 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 aanwezig2 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: aftrekkenInvoer: getal1 (5/8 bytes) getal2 (5/8 bytes) Uitvoer: verschil van beide getallen (5/8 bytes) Getal2 wordt van getal1 afgetrokken. #62 subfunctie #03: vermenigvuldigenInvoer: 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: delenInvoer: 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 bepalenInvoer: 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 waardeInvoer: 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: vierkantswortelInvoer: 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 gradenInvoer: 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 radialenInvoer: 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: machtverheffenInvoer: 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 CommunicatieDe 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 poortInvoer: 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 computerInvoer: data (1 byte) Uitvoer: geen Het opgegeven byte wordt naar de andere computer gestuurd. #63 subfunctie #02: lees byte van andere computerInvoer: 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 SupportHet 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. 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 voorzettenInvoer: 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 voorzettenInvoer: 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’sDe 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. 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 spriteInvoer: 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 schermInvoer: 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 schermInvoer: 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 schermInvoer: 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 administratieInvoer: 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. 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 spritesInvoer: 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 muisInvoer: 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 systeemHet 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:
[…]gegeven is optioneel <…> gegeven is verplicht
Tenzij anders vermeld zijn in de filenaam zijn de jokers * en ? toegestaan;
zowel filenaam als extensie zijn verplicht. – *INFO kent nu wildcards – filenamen mogen tussen aanhalingstekens – *<command> en *RUN herkennen zelf *.RUN files – *<command> 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 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 = 1000 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: 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
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 /8Er 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 /14De 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+fontnaamDe tekstmode wordt ingeschakeld, het opgegeven font wordt van disk geladen en wordt geaktiveerd. TXMOD /CHet 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. 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, sStuurt een spritedefinitie naar de pc. De sprite wordt opgeslagen onder het ‘sprnr’;
de sprite data staat op ‘addr’ en is 1 kB groot. #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,sVerwijdert 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,sVerplaatst 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,sVan 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,sTest 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: 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. 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 wisselenfunctie: 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 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: 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 2AND @#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. Het programma BYTES2IO op de PC kan er in grote lijnen zo uitzien: MOV AH,01H ; LAADT FUNCTIENR VOOR INT 60MOV 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. 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 <stdio.h>#include <dos.h> main() { int pc_uitkomst, atom_uitkomst, totaal; union REGS regs; printf ("Een voorbeeld van parallelprocessing,\n"); printf ("twee processoren berekenen een moeilijk"); printf (" wiskundig probleem … "); /* Stuur data naar de Atom */ regs.x.ax = 0x0008; int86(0x60, &regs, &regs); regs.x.ax = 0x0007; int86(0x60, &regs, &regs); /* 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, &regs, &regs); atom_uitkomst = regs.x.ax & 0xFF; /* Bereken de totale som en druk het resultaat af */ totaal = pc_uitkomst + atom_uitkomst; printf ("\n\n(7-2) + (8-7) = %1d\n\n", 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. 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 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:
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. 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? 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. 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. 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:
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:
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 statementF=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:
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
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 |