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
Toetsenbord invoer is geheel herschreven waardoor nu ook niet-US toetsenborden
goed gebruikt kunnen worden. Tevens kunnen extended ascii tekens via
ALT+
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:
Om problemen te voorkomen wordt aanbevolen om alleen operating systeem
programmatuur en datafiles met een datum vanaf 31 augustus 1995 te gebruiken.
Voor terminal versie 4.00 moeten de files OPERSYST.ROM en BRANQUAR.ROM na 1 september 1997
aangemaakt zijn. De toolboxen zijn ongewijzigd gebleven.
Mijn laatste Atom kreeg langzaam maar zeker steeds meer ouderdomskwaaltjes. De
voeding is niet meer zo stabiel, de diskdrives zitten constant in conflict wie aangesproken
wordt (dan werken ze beide tegelijk, dan beide helemaal niet) en ook het beeld begon na
te laten. Hardware uitbreidingen voelden zich soms niet aangesproken als de processor
een byte las of schreef in het I/O bereik. Kortom het was weer tijd voor een grondige
revisie.
Een ander verschijnsel, waar ik mijzelf ook op betrapte, is dat vele leden van de Atom
Computer Club steeds meer werkten met een PC. De Atom bleek zelfs op regioavonden
een ondergeschikt onderwerp. Ik ben van mening dat we nog lang niet uitgekeken zijn op
de Atom, zowel niet op de hardware als op de software.
Langzaam maar zeker begon het idee te groeien om een Atom te bouwen die in de kast
van een PC gemonteerd is. De PC zou dan dienst kunnen doen als toetsenbord en
beeldscherm; met wat geluk was het misschien mogelijk om zelf de drives van de PC te
gebruiken. Hetgeen aldus geschiedde. Een eerste ontwerp op vier euro-kaarten liep
meteen de mist in omdat het in veel PC's niet zou passen vanwege de afmetingen; verder
zijn dan acht connectoren nodig en buffers. Dat werd meteen te duur.
Direkt daarna begon ik te tekenen aan een ontwerp dat de basis bleek te zijn voor een
enorme ontdekkingsreis; het schema werd uitgebreid en een print werd ontworpen, geetst
en gebouwd. Het eerste resultaat was op de landdag in het voorjaar van 1993 werkend te
zien.
Nu vele programmeer-uren verder is het project grotendeels ten einde. De Atom-in-PC is
een feit. Een print die zo in een vrij slot van een willekeurige PC gestoken wordt en bijna
alle oude Atomprogramma's werken zonder of met uiterst geringe aanpassing op een
goede Atom.
Niet alleen standaard Atom mogelijkheden zijn te gebruiken; ook zijn diverse
uitbreidingen toegevoegd aan de print. Zoals een schakelkaart met acht banken voor
utility-roms, een R65C02 processor met uitgebreidere instruktieset, de mogelijkheid om
het operating systeem in RAM te plaatsen en zelf wijzigingen aan te brengen. Ook biedt
de gast-PC vele nieuwe mogelijkheden zoals een muis, (hard)disk drives met grotere
opslag-capaciteit, een kleurenkaart voor de Atom met SuperVGA resolutie waar we ook
Snapper op kunnen spelen, seriele poorten en printerpoorten.
Niet alleen gevorderde programmeurs krijgen deze extra's tot hun beschikking, maar ook
minder bedreven Atomisten. Alle extra's zijn met de oude bekende Atom statements en
commando's te gebruiken. Dus iedereen kan bestanden van bijvoorbeeld 943 kB
benaderen op een harddisk en plaatjes maken in een resolutie van 1248*768 in 256
kleuren. Gewoon met de oude bekende Atom statements. Uiteraard zijn ook nieuwe
mogelijkheden gemakkelijk bereikbaar dankzij nieuwe toolboxen en DosRom.
Ofschoon ik veel van het werk zelf heb verricht, hebben ook een groot aantal leden van
onze vereniging, al dan niet bewust, meegewerkt. Diverse verzoeken zijn tijdens de
ontwikkeling ingewilligd om het zoveel mogelijk naar ieders zin te maken. En nog steeds
zijn suggesties van harte welkom.
Een speciaal woord van dank richt ik tot Bruno Tossaint, hij heeft de verdere uitwerking
verzorgd van prototype tot eindproduct, samen met Henk Bastings. Henk zorgde tevens
voor de ondersteuning met het programmeren van de GAL's. Emile Hounjet maakte twee
geweldige en foutloze exemplaren van de prototype print. Een van die kaarten kwam
onder de hoede van Wil Truijen die de kaart ook bouwde en gebruikt. Wil heeft een grote
bijdrage geleverd aan de ontwikkeling van de software.
Voor jullie en alle anderen die meegewerkt hebben:
En natuurlijk ook voor Pascalle die me op allerlei wijzen ondersteund heeft op deze
ontdekkingsreis door zowel de Atom, de PC en door MS-Dos.
Ik hoop dat u net zoveel plezier aan deze kaart beleeft als ik heb gehad tijdens de
ontwikkeling.
Roland Leurs
Beek, 23 september 1993
Voorwoord bij tweede druk
De Atom-in-PC is een groot succes gebleken, gezien de relatief grote afname van printen.
Tevens hebben de ontwikkelingen sinds de eerste uitgave niet stil gestaan. Daarom is een
nieuw, kompleet handboek geen overbodige luxe.
In de tweede druk zijn enkele foutjes uit de eerste druk verwijderd en zijn een aantal
hoofdstukken toegevoegd. Hierbij denk ik aan de beschrijving van de PC Utility Rom,
tussentijdse wijzigingen aan het operating systeem en het geheel nieuwe hoofdstuk over
I/O uitbreidingen. Tevens is er een hoofdstuk van Leendert Bijnagte over WinAtom
bijgevoegd
De meeste informatie is al eerder gepubliceerd in Atom Nieuws, het clubblad van de
Federatie van Atom Computerclub Nederland/Belgie. Ondanks deze publikaties verschijnt
er een nieuwe handleiding die al deze informatie bij elkaar bundelt in één boekwerk.
Een van die technieken is het Internet / Intranet. Ik ben nog wel eens bezig met deze
laatste. Om de HTML-taal eens te gebruiken heb ik de derde druk van de handleiding
grotendeels handmatig omgezet naar dit HTML document. Voordelen van deze versie zijn
het snelle zoeken via de browser,gebruik van kleuren en de links die samenhangende
onderwerpen met elkaar koppelen.
Het lijkt erop dat de actieve interesse van de Atom-in-PC wat begint af te nemen.
Vooralsnog geen enkele reden om de ontwikkelingen te stoppen. In deze handleiding zijn
de nieuwe uitbreidingen voor terminal versie 4.00 opgenomen. Daarnaast is deze
handleiding prima bruikbaar voor versie 3.x
Nieuw in deze versie zijn o.a. implementatie van de XMS driver, gebruik van maximaal
1024 sprites, nieuwe startmogelijkheden van Atom programma's via drag 'n drop en
uitgebreide support voor Atomic Windows. Een release van Atomic Windows
(AWROM.ROM) is opgenomen in de system roms; Word Master 2.0 is vervallen.
Veel plezier ermee!
Het totale pakket bestaat uit de volgende onderdelen:
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.
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.
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.
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 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:
De software probeert zelf de kaart te vinden in bovenstaand I/O gebied. Als er geen
andere kaarten in dit gebied geplaatst zijn lukt dit altijd. Mocht het de software niet
lukken om het juiste basisadres te bepalen kan dit met een optie alsnog opgegeven
worden.
Met jumper JP4 kan de klokfrequentie voor de R65C02 processor ingesteld worden (1 of
2 MHz). De overige jumpers op de kaart zijn vervallen. Dit wordt uitgebreid toegelicht in
het hoofdstuk 'I/O uitbreidingen'.
De software heeft vanaf versie 3.10 installatie op een harddisk nodig. Plaats de
bijgeleverde diskette in een drive; geef het MS-DOS commando INSTALL. De installatie
gaat uit van drive A: als source en de bestemming is C:\ATOM. Als uw 3½" drive niet
A: maar B: is kunt u die wisselen met het (oude) doscommando ASSIGN A=B B=A.
Na de installatie gaat u naar de directory ATOM op de C: drive en u kunt beginnen. Het
terminalprogramma wordt opgestart met het commando 'ATOM', eventueel gevolgd door
de volgende opties:
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.
Om de nieuwe Atom flexibeler te maken dan de originele computer zijn nog vijf
systeemvectoren toegevoegd. Hiervan worden er vier op de oude manier aangeroepen en
één wordt met een OSBYTE aangeroepen. De nieuwe vectoren zijn:
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 reentrant, 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.
Opmerking - deze aanroep wacht ongeveer 1/18 seconde en wordt
o.a. gebruikt bij het wachten op de flyback op adres #FE66.
gewijzigde registers: Accu en 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.
De afzonderlijke bits van de keyboard status hebben de volgende
betekenis:
De PC krijgt van de Atom opdrachten aangeboden welke uitgevoerd worden. Hiertoe
wordt door de Atom een byte gezonden via de vector #FFC8. Als dit byte ongelijk aan
#00 is dan wordt deze waarde als ascii waarde afgedrukt. Als het aangeboden byte wel
#00 is wordt nog een tweede byte, het commandonummer, overgedragen.
Afhankelijk van het commando worden meerdere parameters, danwel data overgedragen.
Daar er slechts één datapad is tussen de Atom en de PC zijn deze commando's gebonden
aan een protocol waar niet van afgeweken mag worden. Gebeurt dat wel dan leidt dat
meestal tot het vasthangen van het systeem.
Het gebruik van deze commando's betekent dus dat alle eventuele parameters en
resultaten geschreven en gelezen moeten worden, ook als niet alle gegevens gebruikt
worden. Dus als de PC twee parameters verlangt en drie resultaatbytes terugstuurt, moet
de Atom deze in de juiste volgorde aanbieden cq lezen.
Een en ander verloopt bij normale toepassing zonder problemen, echter wanneer een
commando met parameter of data overdracht uitgevoerd wordt, en er treedt een interrupt
op waarbij ook communicatie met de PC gebruikt wordt dan liggen de problemen (zeg
maar vasthangen van het systeem) voor de hand.
Een praktijkvoorbeeld is bijvoorbeeld het laden van een grafisch scherm op #8000
wanneer video emulatie gebruikt wordt. De Atom leest enerzijds data van de disk (via de
PC) en plaatst deze in het videogeheugen. Direct daarna wil de NMI routine ook een
commando aan de PC doorgeven, dus de PC biedt data aan de Atom aan en de Atom
geeft een commando aan de PC. Beiden zullen dus tot aan een reset wachten.
Uiteraard is daar een oplossing voor gevonden. Met behulp van OSBYTE #0A en #0B
kan een z.g. semafoor gezet en opgevraagd worden. Een semafoor is een simpele vlag die
aangeeft of een bepaalde routine gebruikt mag worden door twee processen. In
bovenstaand voorbeeld is het lezen van disk een proces en het emuleren van het Atom
videogebeuren is een ander proces. Bij het schrijven van programma's hoeft de
programmeur alleen maar OSBYTE #0B aan te roepen waarna het resultaat in de carry
vlag staat. Als de carry '1' is dan mag de opvragende routine zo veel gebruik maken van
de communicatie vectoren als nodig. Zolang de semafoor niet gereset is, zullen volgende
aanvragers altijd de waarde '0' in de carry terugkrijgen. In zo'n geval kan gewacht
worden totdat de routines vrijgegeven zijn of het opvragende programma wordt
vroegtijdig afgebroken.
De semafoor wordt gewist met OSBYTE #0A.
De semafoor is in de eerste operating systeem versies opgeslagen in #CF. Het verdient
aanbeveling om dit adres alleen maar via eerder genoemde OSBYTE routines te
benaderen. Als het ooit nodig blijkt te zijn om de semafoor in een ander adres op te slaan
dan hoeven alleen deze twee OSBYTE routines gewijzigd te worden. Hieruit blijkt meteen
het voordeel van deze OSBYTE routines.
Nu volgt een opsomming en een beschrijving van de commando's die door de PC herkend
worden. Een niet-herkend commando levert de melding '*** Onbekend commando #xx'
op.
Het disk operating systeem heeft ook de nodige veranderingen ondergaan. Diverse
Atomdos commando's zijn vervallen en nieuwe commando's zijn toegevoegd. De nieuwe
commando's hebben betrekking op commando's die in MS-DOS algemeen gebruikt
worden.
Sommige dos commando's roepen via de shell functie hun gelijknamige MS-DOS
commando of programma op. Deze commando's mogen niet afgekort worden omdat ze
als afkorting niet herkend worden door MS-DOS. Het betreft de volgende commando's:
Begrippen:
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.
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.
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.
Syntax: *DELETE
Als *MON actief is worden alle gevonden files waarvan het read-only ‚n het hidden
attribuut gewist zijn op het scherm getoond. De Atom vraagt daarna een bevestiging om
de files te verwijderen. Als *MON niet actief is worden de files niet op het scherm
getoond en worden ze zonder om bevesting te vragen meteen verwijderd.
Syntax: *DRIVE
Syntax: *EXEC
De opgegeven file wordt geopend en alle toetsenbord invoer via de vector #FFE3 (#20A)
wordt gelezen uit het opgegeven bestand. Het exec commando wordt alleen beeindigd
door het tussentijds herstellen van de leesvector (het bestand wordt dan niet gesloten) of
als de waarde 26 gelezen wordt (het bestand wordt dan wel gesloten).
De filehandle van deze file is opgeslagen in adres #BC.
Syntax: *FIND [
Dit commando zoekt een passende file aan de hand van de opgegeven filespecificatie.
Voor de eerste zoekactie dient een filespecificatie opgegeven te worden. Voor verdere
zoekacties moet alleen *FIND gegeven worden.
Resultaten worden opgeslagen vanaf adres #140. Na het geven van een *FIND commando
bevat adres #140 het resultaat; een 0 geeft aan dat er een file gevonden is. Informatie
omtrent deze file is opgeslagen van #141 t/m #157. Hierin is de disk transfer area
opgeslagen. De filenaam is te vinden vanaf adres #14A.
Voor uitgebreide informatie over de DTA wordt verwezen naar bijlage II.
Syntax: *HELP
Een beknopt overzicht van alle dos commando's wordt op het scherm afgebeeld.
Syntax: *HIDE
Van alle gevonden files wordt het hidden attribuut bit gezet, zodat deze files niet herkend
worden door *CAT, *DELETE, *LOCK en *UNLOCK.
Syntax: *INFO
Van de opgegeven file worden het moment van aanmaken, load adres, executie adres, file
lengte en attributen weergegeven. Vanaf versie 1.27 zijn in de filenaam ook de jokers *
en ? toegestaan.
Syntax: *LOAD
De opgegeven file wordt in het geheugen van de Atom geladen. Als er geen load adres
wordt opgegeven dan wordt het load adres uit de file header gebruikt. Hier zijn in de
filenaam geen jokers * en ? toegestaan.
Syntax: *LOCK
Van alle gevonden files wordt het read-only attribuut bit gezet zodat deze niet meer
gewist of overschreven kunnen worden. De files kunnen alleen nog maar gelezen worden.
Syntax: *MD
Een nieuwe directory wordt aangemaakt indien het path geldig bevonden is.
Syntax: *MON
Als MON actief is wordt de informatie van de file(s) weergegeven op het scherm na de
uitvoering van de commando's *HIDE, *LOCK, *LOAD, *RUN, *SAVE, *UNHIDE en
*UNLOCK. Voor het *DELETE commando geldt dat de files eerst op het scherm
getoond worden en er vervolgens nog om een bevestiging gevraagd wordt alvorens de
files te wissen.
Syntax: *NOMON
Heft de werking van *MON op. Er wordt na *HIDE, *LOCK, *LOAD, *RUN, *SAVE,
*UNHIDE en *UNLOCK geen file informatie gegeven. Bij het *DELETE commando
worden de files zonder verdere vragen gewist.
Na het initialiseren van PC-DOS is *NOMON actief.
Syntax: *PC [msdos-commando]
Als er geen MS-DOS commando opgegeven is dan wordt het Atom terminal programma
beeindigd. Als er wel een commando opgegeven is dan wordt dit uitgevoerd. Daarna
draait het Atom terminal programma verder.
Syntax: *RD
De opgegeven directory wordt van disk verwijderd als deze leeg is en niet de actuele
directory is.
Syntax: *RESET
Dit commando heeft niets met een Disk Operating Systeem te maken. Het zet eerst het
reset type op #2 en laat vervolgens de Atom resetten.
Syntax: *RUN
De opgegeven file wordt van disk geladen en gestart op het
executie adres. Als er geen loadadres gegeven is dan wordt het loadadres uit de file
header gebruikt. Hier zijn in de filenaam geen jokers * en ? toegestaan.
De default extensie voor een uitvoerbaar programma is '.RUN'. Als het opgegeven
bestand niet gevonden wordt probeert PCDOS het bestand met deze extensie te laden. De
gehele command line blijft vanaf adres #100 in het geheugen staan. Hierdoor kan het
programma eventuele parameters opzoeken.
Syntax: *SAVE
Het geheugen van beginadres tot eindadres wordt onder de opgegeven naam naar disk
geschreven. Bij het ontbreken van het executieadres wordt het beginadres op deze plaats
ingevuld. Hier zijn in de filenaam geen jokers * en ? toegestaan.
Syntax: *SPOOL
Alle beeldschermuitvoer via de vector #FFF4 (#208) wordt eerst naar het opgegeven
bestand geschreven. Dit commando wordt net als *EXEC beeindigd door het herstellen
van de schrijfvector (bestand wordt niet afgesloten) of door het schrijven van de code 26
(het bestand wordt wel afgesloten). De handle van deze file is opgeslagen in adres #B9.
Syntax: *UNHIDE
Van alle gevonden files wordt het hidden attribuut bit gewist.
Syntax: *UNLOCK
Van alle gevonden files wordt het read-only attribuut bit gewist.
Wat betreft de Random Access files is het systeem compatible met de originele AtomDos
met uitzondering van de SHUT routine. Normaal worden met handle 0 alle geopende files
gesloten. Voor PC-DOS geldt dat niet! In dit geval moeten alle geopende files
afzonderlijk gesloten worden. Voor bestaande programma's is dit het enige punt waar een
aanpassing nodig kan zijn. Nieuwe programma's kunnen maximaal 15 files openen van
elk 2 gigabytes lang (mits de PC dat ondersteunt...)
Bij de meeste PC gebruikers zal bekend zijn dat in de CONFIG.SYS het maximaal aantal
te openen files opgegeven kan worden met FILES=xxx. Dit aantal is echter het maximale
aantal voor alle in de PC aanwezige programma's. Een programma krijgt bij het opstarten
maximaal 20 filehandles toegewezen van MS-DOS; vijf hiervan worden echter al gebruikt
voor standaard apparaten. Houdt er verder rekening mee dat ook diverse diskcommando's
gebruik maken van een handle. Als alle beschikbare handles in gebruik zijn kan dat een
foutmelding opleveren.
In dit hoofdstuk worden de nieuwe toolboxen beschreven. Deze toolboxen zorgen voor
een eenvoudig gebruik van de mogelijkheden die het terminal programma, en dus de PC,
biedt.
De PCBOX is een utility rom, bestemd voor het Axxx-blok. Deze rom ondersteund een
groot aantal faciliteiten die de PC aan de Atom te bieden heeft, zoals uitgebreide video
handelingen, muis toepassingen en I/O.
In de zeropage gebruikt de PCBOX alleen zeropage adressen #90 t/m #9F; verder worden
de adressen #700 t/m #70F gebruikt als de escape-toets uitgeschakeld is d.m.v.
ESCAPE=OFF. De PCBOX werkt probleemloos in het schakelkaart systeem.
Syntax: ASC2BAS [drive][path]
Veel tekst-editors voor PC's werken prettiger dan de Atom basic editor. Een programma
kan met zo'n editor ingetypt worden en met dit statement ingeladen worden, waarbij de
ascii-file automatisch omgezet wordt naar een basicprogramma. Voor een goede werking
dient de ascii-file uitsluitend uit basic regels te bestaan, eventuele spaties voor het
regelnummer zijn toegestaan; regels zonder regelnummer alsook lege regels niet!
Het basicprogramma wordt geladen vanaf #2900.
Syntax: ATOMVDU
Met dit statement wordt de schrijfvector gezet naar de originele Atom schrijfroutine op
#FE52. Alle tekst wordt dan in een 32*16 tekstscherm afgebeeld. Deze mode kan alleen
gebruikt worden om tekst af te drukken, niet voor het editen van programma's.
Voordat dit statement uitgevoerd wordt moet eerst een goede karakterset geladen zijn,
bijvoorbeeld ATOMVDU.FNT. Genoemd font wordt automatisch geladen als dit zich
bevindt in de directory C:\ATOM\FONT.
Syntax: ATTRIB a
Het attribuut bepaalt de (achtergrond)kleur en intensiteit van een karakter in tekstmode.
Voor kleurentekst modi hebben de bits de volgende betekenis:
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.
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.
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.
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.
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.
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.
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 ?.
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 ?.
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.
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.
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.
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
Alle programma's die eindigen met het EXIT statement of met OSBYTE #6 laden
automatisch de !BOOT-file opnieuw.
Een programma dat eindigt met END of een RTS instructie komt terug in basic. Door
dan het commando EXIT te geven wordt het menu alsnog gestart.
Syntax: MOUSE commando parameters
Na het MOUSE statement volgt nog een tweede statement. Een beschrijving van deze
statements staat hieronder beschreven.
MOUSE BUTTON knop,P/R,result,x,y
Hiermee kan de beweging van de afzonderlijke muistoetsen gelezen worden.
Met de waarde 'knop' wordt een van de toetsen opgegeven. P/R leest het
aantal keren dat een toets ingedrukt of losgelaten is. Het aantal keren komt
in de variabele 'result' en de muispositie van de laatste actie staat in de
variabelen x en y.
MOUSE CHAR c
In tekstmode wordt het karakter op de muiscursor-positie gelezen en in de
variabele c gezet. In grafische modi is het resultaat niet gedefinieerd.
MOUSE CURTYPE S,screenmask,cursormask
Met curtype kan bepaald worden hoe de muiscursor op het scherm
verschijnt. De tekstcursor kan bestaan uit een hardware cursor (de
"normale" cursor) of een software cursor.
Met bovenstaand commando wordt de software tekstcursor zichtbaar
gemaakt. Om deze cursor op het scherm zichtbaar te maken voert de
muisdriver eerst een AND functie uit met het screenmask en het resultaat
daarvan ondergaat een EXOR met het cursormask. Aangezien zowel het
karakter als het attribuut gewijzigd kunnen worden, zijn screenmask en
cursormask 16-bits getallen. Houdt er rekening mee dat het hoge byte van
deze waarden betrekking heeft op het attribuut en het lage byte heeft
betrekking op het karakter.
Om bijvoorbeeld de muiscursor te wijzigen in een * kan gegeven worden
'MOUSE CURTYPE S,#FF00,#2A'.
MOUSE CURTYPE H,upper_scanline,lower_scanline
De hardware muiscursor is dezelfde als de hardware tekstcursor (dat
zenuwachtig knipperend streepje). De twee parameters geven de eerste en
laatste beeldlijn van de cursor aan.
MOUSE CURTYPE G,maskeradres,x_hotspot,y_hotspot
De grafische muiscursor kan ook geheel door de programmeur gedefinieerd
worden. Deze definitie bestaat net als bij de software textcursor uit een
screenmask en een cursormask. Bij het plaatsen van de muiscursor op het
scherm wordt eerst een AND uitgevoerd van de inhoud van het beeldscherm
en het screenmask, vervolgens wordt een EXOR uitgevoerd met het
resultaat van voorgaande AND functie en het cursormask.
Het maskeradres wijst naar een datablok dat beide maskers bevat, de eerste
32 bytes zijn het screenmask (16 * 16 bits) en de tweede 32 bytes zijn het
cursormask (16 * 16 bits).
De overige twee parameters geven aan waar de hot-spot van de muis zich in
de cursor bevind.
MOUSE COUNT x,y
De verplaatsing van de muis sinds de laatste oproep wordt geplaatst in de
variabelen x en y.
MOUSE INIT [b]
De muis wordt geïnitialiseerd. Als een variabele meegegeven is wordt het
aantal muisknoppen in deze variabele gezet. Als op de PC geen muisdriver
actief is dan krijgt deze variabele de waarde 255.
MOUSE KVO
De afkorting KVO staat voor Kees van Oss. Bij dit statement wordt de
positie van de muis gelezen, omgerekend naar het formaat van de
muisdriver 'mINTER' van Kees en in de variabelen X, Y en Z geplaatst.
Hiermee kunnen bestaande muisgestuurde programma's eenvoudig
aangepast worden. Voor een goede werking dient de muis opgesloten te
worden in een window middels MOUSE WINDOW 0,191,255,0.
MOUSE OFF
Hiermee wordt de muiscursor van het scherm gehaald. De muisbewegingen
en toetsen worden wel nog door de PC bijgewerkt en kunnen altijd
opgevraagd worden.
Door de muiscursor uit te schakelen kunnen sprites van het Gagsrom door
de muis bewogen worden.
MOUSE ON
Maak de muiscursor zichtbaar op het scherm.
MOUSE POS x,y,k
De positie van de muis wordt opgeslagen in de variabelen x en y. De status
van de knoppen wordt in de laagste drie bits van de variabele k
opgeborgen. Bit 0 is rechter muisknop, bit 1 is linkerknop en bit 2 is,
indien aanwezig, de middelste knop.
MOUSE TO x,y
Zet de muiscursor op de positie x,y.
MOUSE WINDOW xlo,ylo,xrb,yrb
De bewegingsvrijheid van de muis wordt beperkt in het opgegeven venster.
Als bij het initialiseren van het venster de muis zich buiten dit venster
bevind, dan wordt deze alsnog in het venster geplaatst.
Enkele opmerkingen:
Syntax: MSB = masker
Waarbij masker de waarde voor masker 0 of 1 is. Als het masker '0' is dan wordt van
ieder af te drukken karakter bit 7 gewist. De asciiwaarden #80 t/m #9F geven dan de
speciale symbolen die vervallen in verband met de controlcodes.
Syntax: PRN= printernummer
Het kiezen van een printer kan met dit statement. Alle printeruitvoer na $2 wordt naar de
opgegeven printer gestuurd. Dit statement is identiek aan het
LPT= statement.
Syntax: OUT adres,data
Met dit statement kan I/O hardware, die op de PC is aangesloten, direct worden
aangesproken. De opgegeven data wordt naar het opgegeven PC I/O bus adres
geschreven.
Syntax: PCBOX
Syntax: REPORT errornummer
Standaard worden foutmeldingen als tekst gegeven. In sommige gevallen, bijvoorbeeld als
een programma begint met het PROGRAM statement uit P-Charme, verschijnt toch nog
de oude foutmelding. Aan de hand van de foutcode kan alsnog om de betekenis van de
foutmelding gevraagd worden.
Syntax: SCAN functie,resultaat
Afhankelijk van het functienummer wordt een routine van PC INT 16H uitgevoerd. Het
register AX wordt in de variabele 'resultaat' geplaatst.
Bij gebruik van het SCAN statement dient u er rekening mee te houden dat er
verschillende kunnen optreden bij gebruik van een XT of AT. Met name de scan-codes
kunnen afwijken!
Syntax: TIME [$x]
Als er geen string wordt opgegeven wordt de tijd op het scherm afgedrukt. Als wel een
string opgegeven wordt komt de tijd als ascii tekst in deze string te staan.
Syntax: TSIZE x,y
Met dit statement kunnen de afmetingen van karakters in GTEXT ingesteld worden. De
eerste parameter zorgt voor bredere karakters en de tweede parameter zorgt voor hogere
karakters.
Syntax: TWINDOW xlo,ylo,xrb,yrb
De opgegeven coordinaten bepalen de positie van het tekstvenster. Buiten dit venster kan
de Atom niet schrijven. Deze coordinaten gelden altijd ten opzichte van de linker
bovenhoek van het scherm.
Syntax: TWOFF
Het tekstvenster wordt opgeheven. Hierbij wordt het scherm niet gewist.
Syntax: UDS karakter,d0,...,d15
Voor de grafische karakterset kunnen met UDS karakters gedefinieerd worden. De eerste
parameter is de ascii waarde van het te definieren karakter. De overige zestien parameters
bepalen het bitpatroon van het karakter.
Een andere toolbox waarbij de commando's van het terminal-programma eenvoudig vanuit
BASIC aan te roepen zijn is de PC Utility Box. Ook deze box gebruikt de zeropage
adressen #90-#9F en werkt probleemloos in het Branquar Schakelkaart Operating System.
Syntax: CHAIN "filespec"
Het CHAIN statement laadt een basicprogramma in de actuele tekstpagina en start het
programma. Het executieadres maakt in dit geval niets uit omdat het programma altijd
gestart wordt vanaf #F144. De filespecificatie mag een drive en directory bevatten maar
geen wildcards * en ?.
Syntax: FILECNV filespec1 filespec2 H+ [start exec]
of FILECNV filespec1 filespec2 H-
De files voor de Atom bevatten altijd een header van 16 bytes aan het begin van de file.
Met het statement FILECNV kan deze header toegevoegd of weggehaald worden,
bijvoorbeeld als er files van een "echte" Atom en de Atom in PC worden uitgewisseld.
Filespec1 bevat het pad en filenaam van de oorspronkelijke file; deze file wordt niet
veranderd. Filespec2 is het pad en de filenaam van de nieuwe file waar de header is
toegevoegd of weggehaald. H+ geeft aan dat de header wordt toegevoegd; H- betekent
header weghalen. Het start en executie adres mogen weggelaten worden. In dat geval
worden de waarden #2900 en #F144 gebruikt. Geef deze adressen met # teken en zonder
komma tussen de parameters.
Let erop dat de originele file en de nieuwe file niet hetzelfde zijn; dan gaan alle data
verloren!
Syntax: GETWIN handle,xlo,ylo
Met GETWIN kan een grafisch venster dat met SAVWIN naar disk geschreven is weer
teruggehaald worden. De opgegeven coordinaten zijn de linker benedenhoek waar het
venster teruggezet wordt.
De file moet vooraf als random access file geopend zijn. Na het statement is de file niet
gesloten; dat zal alsnog moeten gebeuren met het SHUT statement.
Syntax: GWINDOW xlo,ylo,xrb,yrb
Dit statement werkt alleen in de extended videomodi. Er wordt een grafisch venster
gecreeerd waarin getekend mag worden. De vier parameters geven de X en Y coordinaten
aan van de linker benedenhoek en de rechter bovenhoek. Deze coordinaten gelden altijd
ten opzichte van de linker bovenhoek van het beeldscherm.
Syntax: GWOFF
Het grafische venster wordt gereset zodat weer over het gehele scherm getekend mag
worden.
Syntax: HELP [trefwoord]
Hoe was de syntax ook alweer van het HLINE commando? Hoeveel parameters krijgt het
UDS statements mee? Met welk PC-commando wordt de printerstatus opgevraagd?
Inmiddels zijn er voor de Atom zovele toolboxen en nog meer extra statements
toegevoegd dat het bijna onmogelijk is om nog een eenvoudig overzicht te houden.
Bovenstaande vragen kunnen nu snel beantwoord worden met het HELP statement. Op
het scherm verschijnt razendsnel voldoende maar toch beknopte uitleg.
HELP gebruikt twee datafiles, ATOMHELP.IDX en ATOMHELP.TXT; het pad en de
naam van deze datafiles zijn opgeslagen als ascii string vanaf adres #AFC0 resp. #AFE0.
Bij gebruik van HELP wordt eerst het trefwoord opgezocht in de indexfile. Als het daar
gevonden is, wordt een pointer gelezen naar het begin van de helptekst in de file
ATOMHELP.TXT. Die tekst wordt vervolgens op het scherm afgebeeld.
Het wijzigen of toevoegen van de helptekst kan met een gewone tekst editor. Plaats de
trefwoorden aan het begin van de regel, voorafgegaan door een golfje ~. Achter het
trefwoord moet minstens één spatie staan. Het laatste trefwoord moet ~end zijn. In de
eerste regel staan zestien apestaartjes (@); deze niet verwijderen want zij vormen de
header van de tekstfile.
In de helptekst kan een woord voorafgegaan worden door een achterwaards accent ` . Het
betreffende woord wordt dan in de helptekst in een andere kleur weergegeven. Zodoende
kunnen trefwoorden in de tekst gemarkeerd worden.
Na het wijzigen of toevoegen aan de helptekst moet de indexfile opnieuw aangemaakt
worden. Verwijder de oude ATOMHELP.IDX file en laat het programma HELPMKR
even lopen. Doe dit bij voorkeur op een ramdisk (in verband met snelheid).
Syntax: HFILL x,y1 TO y2,g
Met HFILL kunnen horizontale lijnen gekleurd worden. Het kleuren begint bij x,y1 en
kleurt naar links en rechts totdat een pixel wordt aangetroffen die de grenskleur g heeft.
Vervolgens wordt de y-coordinaat verhoogd en wordt de volgende lijn ingekleurd. HFILL
werkt alleen in extended videomodi en houdt rekening met een grafisch venster en een
verschoven oorsprong.
Syntax: POWERDOWN
Dit statement is bedoeld om snel de geheugeninhoud van #300 tot #A000 op disk te
bewaren als de computer uit wordt gezet. Na het opnieuw opstarten kan de geheu-
geninhoud hersteld worden met *LOAD MEMORY.PD
Syntax: ORIGIN x,y
De grafische oorsprong (het punt 0,0) wordt voor extended videomodi verschoven naar
het punt x,y; dit punt is opgegeven ten opzichte van de linker bovenhoek van het
beeldscherm.
Syntax: OSCLI string,$13
In PC-DOS is het niet toegestaan om variabelen te gebruiken bij de *-commando's. Met
OSCLI is dat gemis te omzeilen. De op te geven string kan bestaan uit tekst tussen
aanhalingstekens en (string)variabelen. Let erop dat dit statement altijd wordt afgesloten
met een $13 !
Syntax: PCC p1,p2,p3,.....
Als de printer aangezet is met $2 stuurt PCC alle opgegeven parameters uitsluitend naar
de geselecteerde printer. Ook de codes $2, $3 en de inhoud van #FE worden naar de
printer gestuurd. De printer kan met PCC niet aan of uitgezet worden.
Syntax: PDMENU x,y,breedte,items,S/D,attr,$tekst,var[,begin]
Dit statement geeft een kompleet pull down menu in zowel tekst als grafische mode.
Bediening kan met de cursortoetsen of met de muis. Het menu is omgeven door een
kader.
De coordinaten x en y geven de linker bovenhoek van het menu aan. De 'breedte' is het
aantal karaters dat de menu-items breed zijn. De parameter 'S/D' geeft aan of het kader
met enkele (S) of dubbele (D) lijnen getekend moet worden. 'Attr' is de kleur of attribuut
van het menu. $tekst wijst naar een string in het geheugen die de menu-items bevat. Het
uiteindelijk gekozen item komt in de 'var' (A..Z) terecht. De laatste parameter is
optioneel. Zonder deze parameter licht het eerste menu-item op bij het begin van het
statement PDMENU. Als deze parameter wordt opgegeven licht het overeenkomstige item
op.
Syntax: RGET handle, bufferadres, recordlengte
Uit de geopende file wordt geprobeerd het aantal gevraagde bytes (de recordlengte) te
lezen. De data wordt opgeslagen vanaf het bufferadres. Het aantal gelezen bytes is direct
na uitvoering van dit statement beschikbaar op zeropage adres #90/#91. De maximale
recordlengte is 16 kb.
Snelle kennismaking
Videodrivers zijn verbeterd. In combinatie met het nieuwe terminal programma
werken de extended graphics modi volgens de VESA standaard. De videokaart
wordt automatisch gedetecteerd.
Compatibiliteit met vorige versies is functioneel gelijk gebleven; echter de EPOS/3 rom
maakt gebruik van pc-commando's uit het terminal programma v3.10 en zal vastlopen bij
oudere versies van het terminal programma. De oude rom werkt echter wel samen met
terminal v3.10.
Voorwoord bij eerste druk
Roland Leurs,
Geldermalsen, 20 september 1995
Voorwoord bij electronische versie
Er is inmiddels een nieuw tijdperk aangebroken. De Atom lijkt wat op de achtergrond te
raken. Nieuwe technieken komen er aan. Echter deze zijn nog steeds goed te combineren
met de Atom.
Roland Leurs,
Geldermalsen, 16 februari 1998
1. Het Atom-in-PC pakket
1.1 Versie problematiek
2. MS-DOS en PC systeem eisen
2.1 Vrijwaring
3. Bouw en installatie van de ATOM-IN-PC kaart
/?
Geeft het versienummer van de software, beknopte infor-matie omtrent het
opstarten van de software en het door het systeem bepaalde basisadres van de
Atomkaart.
/A=aaa
Waarbij 'aaa' het hexadecimale basisadres van de Atomkaart is. Dit adres heeft
voorrang op het automatisch bepaalde adres.
/R=rrr
Standaard wordt CTRL-ALT-DEL gebruikt om de Atom een reset te geven. Als
de voorkeur aan CTRL-ALT-ESC gegeven wordt vul dan op de plaats van 'rrr'
ESC in. In versie 3.10 is de optie /R=F12 toegevoegd omdat met name
Windows'95 moeite heeft met de overige toetscombinatie's.
/V=vvv
Het terminalprogramma probeert vanaf versie 3.10 zelf de juiste videokaart te
detekteren. Als deze detektie niet juist is kan met deze parameter alsnog de juiste
kaart aangegeven worden. De aanwezigheid van een andere video kaart kan
kenbaar gemaakt worden door 'vvv' de waarde EGA, VGA of HGC te geven.
/X=xxx (vanaf versie 4.0)
Deze optie is nieuw in versie 4.0 en moet gebruikt worden om XMS geheugen te
reserveren. De opgegeven waarde is de hoeveelheid XMS geheugen dat de Atom
mag gebruiken en deze moet liggen tussen 16 en 4096 kBytes. Indien er minder
XMS geheugen beschikbaar is dan de opgegeven waarde reserveert het terminal
programma al het beschikbare XMS geheugen.
/F=fff (t/m versie 3.1x)
Met de switch /F kan een font automatisch geladen worden bij het opstarten
waarbij 'fff' de filenaam is. Hier mag eventueel een drive specificatie en een pad
opgegeven worden, maar geen wildcard (* en ?). Als het font niet gevonden wordt
dan wordt deze switch genegeerd; er volgt geen (fout)melding.
In verband met de autostart functie in terminal versie 4.0 is deze switch niet meer
beschikbaar vanaf de command-line. Indien een font geladen moet worden kan dit
geregeld worden vanuit de INIT-file.
4. Nieuwe Operating Systeem vectoren
OSBYTE 6 (#224)exit vector
#FFBF JMP (#222)joystick leesroutine
#FFC2 JMP (#220)osbyte routines
#FFC5 JMP (#21E)lees byte van pc
#FFC8 JMP (#21C)zend byte naar pc
4.1 OSBYTE routines
OSBYTE #00 druk o.s. versie nummer af
invoer : 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 mode
invoer : X = alternatieve mode
uitvoer: error 129 bij verkeerde mode
gewijzigde registers: vlaggen
OSBYTE #03 initialiseren/opvragen VDU mode
invoer : X = 0 -> opvragen vdu mode
X <> 0 -> init vdu mode
uitvoer: carry = 0 -> alles in orde, X = mode
carry = 1 -> illegale mode opgegeven
gewijzigde registers: X en vlaggen
OSBYTE #04 wacht op PC timertick
invoer : geen
uitvoer: geen
gewijzigde registers: geen
OSBYTE #05 produceer geluid
invoer : X = frequentie
Y = duur in 18e seconden
uitvoer: geen
gewijzigde registers: geen
OSBYTE #06 spring naar exit vector
invoer : geen
uitvoer: onbepaald
gewijzigde registers: onbepaald
OSBYTE #07 opvragen/wijzigen exit vector
invoer : X = 0 -> opvragen exit vector
X <> 0 -> wijzig exit vector naar XY
uitvoer: X = high byte exit vector
Y = low byte exit vector
Gewijzigde registers: X en Y
OSBYTE #08 opvragen processor gegevens
invoer : geen
uitvoer: accu bevat volgende informatie:
OSBYTE #09 instellen van pieptoon $7
invoer : X = frequentie
Y = duur in 18e seconden
uitvoer: geen
gewijzigde registers: geen
OSBYTE #0A reset semafoor voor PC communicatie
invoer : geen
uitvoer: geen
gewijzigde registers: geen
OSBYTE #0B test en set semafoor voor PC communicatie
invoer : geen
uitvoer: carry = 0 -> toegang tot PC geweigerd
carry = 1 -> toegang tot PC toegestaan
gewijzigde registers: vlaggen
OSBYTE #0C wek foutmelding op
invoer : 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
OSBYTE #0E keyboard scan
invoer : geen
uitvoer: accu = keyboard status
X-register = ascii waarde
Y-register = scan code
Bit 1 van de accu geeft aan of er een toets ingedrukt is. Alleen in
dat geval bevatten X en Y zinnige informatie.
OSBYTE #F0 XMS versie opvragen
invoer: geen
uitvoer: A=aantal xms pagina's
X=versienummer
Y=releasenummer
OSBYTE #F1 XMS pagina voorzetten (no save)
invoer: Y=pagina nummer
uitvoer: geen
Bij dit commando wordt de huidige pagina niet opgeslagen in xms
geheugen.
OSBYTE #F2 XMS pagina voorzetten (no load)
invoer: Y=pagina nummer
uitvoer: geen
Bij dit commando wordt de nieuwe pagina niet gelezen in het
atomgeheugen.
OSBYTE #F3 XMS pagina voorzetten
invoer: Y=pagina nummer
uitvoer: geen
De huidige pagina wordt opgeslagen in het xms geheugen en de
nieuwe pagina wordt in het atomgeheugen gelezen.
OSBYTE #F4 XMS paginaframe instellen/opvragen
invoer: Y=hoge byte paginaframe
uitvoer: Y=hoge byte paginaframe
Het paginaframe is 16 kb groot en kan liggen tussen #2000-#9FFF;
de parameter voor deze functie ligt in het bereik #20...#60. Bij een
ongeldige parameter wordt de functie niet uitgevoerd, alleen wordt
het huidige frame teruggemeld. Na een reset staat het frame op
#4000.
5. Communicatie met de PC
5.1 PC-COMMANDO API
Opmerkingen vooraf:
- Als een word (16 bits getal) wordt overgestuurd dan wordt eerst het lage byte en
daarna het hoge byte overgezonden.
- Bij de omschrijving van invoer/uitvoer geeft het woord 'geen' aan dat er geen
parameters en/of gegevens overgezonden worden. Het commando levert natuurlijk
wel enige uitvoer op, bijvoorbeeld op het beeldscherm.
- Een ASCIIZ string is een string die wordt afgesloten met de code #00 i.p.v. #0D
of 13.
- Als een filenaam opgegeven wordt dan mag deze een compleet zoekpad met
wildcards (* of ?) bevatten, tenzij dat anders vermeld is. Filenamen worden nooit
met aanhalingstekens doorgegeven bij het gebruik van deze commando's.
- Disk commando's geven meestal een errorcode terug. Als er geen fout opgetreden
is dan is deze code #00. Bij fouten is deze code de errorcode zoals die door MS-
DOS afgegeven wordt. De meest voorkomende errorcodes staan in bijlage I.
- Vanaf terminalprogramma v3.xx zijn er enkele commando's met diverse
subfuncties; dit is een manier van commando implementatie om een groep functies
onder de zelfde noemer toe te voegen. Commando's met subfuncties verwachten
als eerste parameter het subfunctienummer.
#00 Druk $0 af
Invoer: geen
Uitvoer: geen
#01 Keyboard scan
Invoer: geen
Uitvoer: scan code (1 byte)
keyboard status (1 byte)
De scan codes zijn niet gelijk aan de standaard PC-scancodes. Deze codes worden
door de Atom als index gebruikt om de bijbehorende ascii waarde te bepalen uit
een tabel.
Als u gebruik wil maken van keyboard codes wordt commando #3A aanbevolen;
daarmee zijn ook functietoetsen uit te lezen.
De keyboard status bits hebben de volgende betekenis:
#02 Lees karakter op cursorpositie
Invoer: geen
Uitvoer: ascii waarde van teken op cursorpositie
Wordt o.a. gebruikt bij afhandeling van copy toets.
#03 Plot pixel
Invoer: X-coordinaat (1 word)
Y-coordinaat (1 word)
Plot mode (1 byte)
Uitvoer: geen
De coordinaten zijn afhankelijk van de grafische resolutie van de videokaart. Voor
Hercules is dat 720*348 en voor CGA is dat 640*200. Dit commando voert een
bewerking uit met het opgegeven pixel. Deze bewerkingen zijn:
mode = 1 -> zet pixel
mode = 2 -> inverteer pixel
mode = 3 -> wis pixel
#04 Initialiseer grafische mode voor Atom video emulatie
Invoer: geen
Uitvoer: geen
Dit commando schakelt de videokaart om naar de grafische mode met een resolutie
van 320*200.
#05 Plot pixel in clear 4 coordinatenstelsel
Invoer: X-coordinaat (1 word)
Y-coordinaat (1 word)
Plot mode (1 byte)
Uitvoer: geen
De coordinaten zijn in dit geval gelijk aan de grafische resolutie van de Atom
(256*192). Verder is dit commando hetzelfde als #03.
mode = 1 -> zet pixel
mode = 2 -> inverteer pixel
mode = 3 -> wis pixel
#06 Ramfont laden
Invoer: filenaam van het ramfont als ASCIIZ string
Uitvoer: errorcode
De naam van het te laden font wordt als ascii string overgestuurd. Deze string
eindigt met de code #00. De filenaam mag een kompleet pad bevatten maar geen
wildcards (* of ?).
Als het font geladen is, is de errorcode #00. Als een fout opgetreden is (bijv. font
niet gevonden) dan duidt de uitvoer de aard van de fout aan.
#07 Schrijf string in grafische mode
Invoer: X-coordinaat (1 word)
Y-coordinaat (1 word)
ASCIIZ string
Uitvoer: geen
De opgegeven string wordt geplot vanaf de coordinaten X en Y.
#08 Zet horizontale en vertikale schaalfactor
Invoer: horizontale schaalfactor (1 byte)
vertikale schaalfactor (1 byte)
Uitvoer: geen
De horizontale en vertikale schaalfactoren bepalen de afmetingen van de karakters
die met commando #07 worden afgedrukt.
#09 Zet cursor aan
Invoer: geen
Uitvoer: geen
De cursor verschijnt als knipperend streepje op het scherm.
#0A Zet cursor uit
Invoer: geen
Uitvoer: geen
De cursor verdwijnt van het scherm.
#0B File van disk laden
Invoer: filenaam als ASCIIZ string
Uitvoer: errorcode, bloklengte(n) en data
Als de PC de filenaam ontvangen heeft wordt de file geopend. Als dit lukt wordt
de errorcode #00 (geen error) teruggestuurd. Vervolgens wordt een datablok van
max. 255 bytes gelezen. De lengte van dit datablok wordt naar de Atom gestuurd,
direct gevolgd door de data. Als het einde van de file bereikt is dan ontvangt de
Atom een bloklengte van #00.
#0C File naar disk schrijven
Invoer: filenaam als ASCIIZ string
bloklengte(n)
data
Uitvoer: errorcode
De PC leest de filenaam en probeert de file te openen. Als de file reeds bestond
dan wordt deze overschreven (zonder vermelding). Als de file nog niet bestond
dan wordt deze aangemaakt. Als de file geopend is wordt het resultaat
overgestuurd naar de Atom; errorcode #00 geeft aan dat er geen fout opgetreden
is. Daarna begint de data-overdracht. Eerst geeft de Atom de bloklengte, direct
gevolgd door data. Als een blok overgestuurd is van Atom naar PC en het blok is
naar disk geschreven dan meldt de PC het aantal geschreven bytes naar de Atom.
Als dit niet gelijk is aan de bloklengte dan is de disk vol.
Als de PC een bloklengte #00 ontvangt wordt de file gesloten.
#0D Disk catalog op scherm afbeelden
Invoer: zoekpad/filespec als ASCIIZ string
Uitvoer: geen
De PC leest de filespecificatie, deze mag een drive, directory en een file-
aanduiding met wildcards bevatten, en drukt deze op het scherm af. De uitvoer
wordt door de PC direct op het scherm gezet en komt niet ter beschikking van de
Atom. Een lege string wordt behandeld als *.*
Hidden files worden niet op het scherm weergegeven.
#0E Veranderen/opvragen van huidige directory
Invoer: nieuwe directory als ASCIIZ string
Uitvoer: foutcode
huidige directory als ASCIIZ string
Dit commando verandert van directory naar de opgegeven directory. Als er geen
fout opgetreden is, wordt de foutcode #00, gevolgd door de actuele directory als
ASCIIZ string naar de Atom gestuurd.
Als de foutcode niet #00 is, dan volgt er geen ASCIIZ string.
#0F Verwijder directory
Invoer: te verwijderen directory als ASCIIZ string
Uitvoer: foutcode
lege ASCIIZ string
De opgegeven directory wordt indien mogelijk van de disk verwijderd. Als dat
gelukt is dan volgt nogmaals een #00 byte na de foutcode. Als de foutcode niet
#00 is, dan volgt er geen ASCIIZ string.
#10 Maak directory aan
Invoer: aan te maken directory als ASCIIZ string
Uitvoer: foutcode
lege ASCIIZ string
De opgegeven directory wordt indien mogelijk op de disk aangemaakt. Als dat
gelukt is dan volgt nogmaals een #00 byte na de foutcode. Als de foutcode niet
#00 is, dan volgt er geen ASCIIZ string.
#11 Verwijder file van disk
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode
Deze functie verwijdert de opgegeven files van disk, mits deze niet Read-Only
en/of Hidden zijn. Als er geen files gewist kunnen worden dan is de foutcode niet
gelijk aan #00. Als er één of meerdere files gewist zijn, dan is de foutcode #00.
#12 Lock files
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode
Deze functie zet van de opgegeven files het Read-Only bit. Als er geen files
gelocked kunnen worden dan is de foutcode niet gelijk aan #00. Als er één of
meerdere files gelocked zijn, dan is de foutcode #00. De filespecificatie mag
bestaan uit een drive, directory en wildcards.
#13 Unlock files
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode
Deze functie reset van de opgegeven files het Read-Only bit. Als er geen files
geunlocked kunnen worden dan is de foutcode niet gelijk aan #00. Als er één of
meerdere files geunlocked zijn, dan is de foutcode #00. De filespecificatie mag
bestaan uit een drive, directory en wildcards.
#14 Verander actuele drive
Invoer: drive nummer (1 byte)
Uitvoer: geen
Met dit commando kan de actuele drive gewijzigd worden. Voor drive A: is het
drivenummer 0, drive B: is drive nummer 1 etc.
Er is geen terugmelding en controle op geldigheid van het drive nummer.
#15 Ga naar MS-DOS
Invoer: geen
Uitvoer: geen
Dit commando beeindigt het Atom terminal programma op de PC en de besturing
wordt teruggegeven aan het oproepende programma. Voordat dit commando wordt
uitgevoerd dienen geopende bestanden eerst gesloten te worden.
#16 Maak file verborgen
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode (1 byte)
Deze functie zet van de opgegeven files het Hidden bit. Als er geen files
verborgen kunnen worden dan is de foutcode niet gelijk aan #00. Als er één of
meerdere files verborgen zijn, dan is de foutcode #00. De filespecificatie mag
bestaan uit een drive, directory en wildcards.
#17 Maak files weer zichtbaar
Invoer: filespec als ASCIIZ string
Uitvoer: foutcode (1 byte)
Deze functie reset van de opgegeven files het Hidden bit. Als er geen files
zichtbaar kunnen worden gemaakt dan is de foutcode niet gelijk aan #00. Als er
één of meerdere files zichtbaar gemaakt zijn, dan is de foutcode #00. De
filespecificatie mag bestaan uit een drive, directory en wildcards.
#18 Opvragen file informatie
Invoer: filenaam als ASCIIZ string
Uitvoer: foutcode (1 byte)
file header (16 bytes)
attribuut (1 byte)
tijd en datum van laatste schrijfopdracht(2 words)
De opgegeven file wordt gezocht en indien gevonden wordt de file header
overgestuurd naar de Atom. Bij succes is de foutcode #00.
De fileheader bevat de volgende informatie:
- load adres van file, twee bytes
- exec adres van file, twee bytes
- dataveld lengte, vier bytes
- gereserveerd, acht bytes
Aangezien de header in de file zelf is opgeslagen, is de totale file lengte zestien
bytes langer dan de doorgegeven lengte; deze bytes zijn niet meegeteld in de
dataveld lengte.
De tijd en datum van de laatste schrijfopdracht naar de file, normaal gesproken is
dat het moment waar de file naar disk is geschreven, wordt in twee woorden
doorgegeven. Hiervan hebben de bits de volgende betekenis:
Tijd: bit 0-4: seconden/2 (0-29)
bit 5-10: minuten (0-59)
bit 11-15: uren (0-23)
Datum: bit 0-4: dag van de maand (0-31)
bit 5-8: maand (1-12)
bit 9-15: jaar-1980 (0-127)
#19 Produceer geluid
Invoer: toonhoogte (1 byte)
toonduur (1 byte)
Uitvoer: geen
De toonhoogte en de toonduur zijn beiden één byte lang. De maximale toonhoogte
ligt rond de waarde 100. Dit is al een behoorlijk hoge toon. De waarden vanaf 128
geven een ongedefinieerde toon. De toonduur wordt gegeven in 18den van
seconden.
Als de toonhoogte 0 bedraagt dan wordt geen geluid geproduceerd; het commando
kan dan gebruikt worden om de opgegeven toonduur te wachten.
#1A Instelling bell-toon
Invoer: toonhoogte (1 byte)
toonduur (1 byte)
Uitvoer: geen
Met dit commando worden de toonhoogte en de toonduur ingesteld voor het bell-
signaal. Dit is de pieptoon die gegeven wordt voor de ASCII code #07. Wat de
waarden betreft zijn deze gelijk als voor het commando #19.
#1B Druk foutmelding af
Invoer: Atom errorcode (1 byte)
Uitvoer: geen
Dit commando drukt een tekststring, behorende bij de gegeven errorcode, af op
het beeldscherm van de PC. Dit schrijven doet de PC zelf. Er wordt geen
informatie overgestuurd naar de Atom.
#1C Oproepen muisfunctie (PC INT 33)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)
Hiermee kunnen functies van de PC-muisdriver opgeroepen worden. De registerset
bestaat uit acht bytes, die de registers AX, BX, CX en DX van de 8088/80x86
processor voorstellen. Voor het gebuik van deze functie wordt verwezen naar de
handleiding voor muizen.
Vanaf versie 4.00 zijn de volgende subfuncties voor de muis toegevoegd:
#1C subfunctie #80: initialiseer muis
Invoer: geen
Uitvoer: aantal muisknoppen (1 byte)
Deze functie initialiseert de muis en retourneert het aantal beschikbare
muisknoppen. Indien er geen muisdriver geïnstalleerd is is het aantal knoppen 0.
#1C subfunctie #81: initialiseer muis voor CLEAR 4
Invoer: geen
Uitvoer: geen
Functie #81 is een aanvulling op functie #80 indien de muis gebruikt wordt binnen
een CLEAR 4 scherm. De het muiswindow wordt afgestemd op het effectieve
grafische scherm. Tevens wordt ervoor gezorgd dat de muiscursor uitgezet wordt
indien de Atom naar het eigen videogeheugen schrijft. Na de emulatie wordt de
muiscursor weer aangezet. M.a.w. de muis wordt voor de Atom in CLEAR 4
geheel transparant.
#1C subfunctie #82: muis informatie opvragen
Invoer: geen
Uitvoer: muis X coordinaat (1 word)
muis Y coordinaat (1 word)
knoppenstatus (1 byte)
Informatie omtrent de muisstatus wordt hiermee opgevraagd; de coordinaten zijn
16 bits groot, de knoppenstatus is weergegeven als in onderstaand schema:
#1C subfunctie #83: muis cursor aanzetten
Invoer: geen
Uitvoer: geen
De muiscursor wordt zichtbaar op het scherm.
#1C subfunctie #84: muis cursor uitzetten
Invoer: geen
Uitvoer: geen
De muiscursor verdwijnt van het scherm.
#1C subfunctie #85: muis informatie opvragen binnen CLEAR 4
Invoer: geen
Uitvoer: muis X coordinaat (1 byte)
muis Y coordinaat (1 byte)
knoppenstatus (1 byte)
Deze functie lijkt op functie #84, maar de muiscoordinaten zijn aangepast naar een
CLEAR 4 coordinaten stelsel; elke coordinaat is slechts 1 byte groot. De
knoppenstatus is hetzelfde als in bovengenoemde functie.
Om compatibiliteit te behouden met de hardware muispointer van Kees van Oss is
de Y coordinaat van de bovenste lijn binnen het CLEAR 4 scherm 255; de
onderste lijn is 0.
#1C subfunctie #86: CLEAR 4 muiscursor selecteren
Invoer: muiscursor (1 byte)
Uitvoer: geen
In het terminalprogramma zijn 32 voorgedefinieerde muiscursors
opgenomen welke met deze functie gekozen kunnen worden. Deze zijn
gelijk aan de hardware muiscursors van Kees van Oss.
Deze functie dient gebruikt te worden in CGA modi of in emulatie
van Atom grafische modi; de cursor verschijnt dan in een andere
kleur zodat deze duidelijker zichtbaar is.
#1C subfunctie #87: muiscursor selecteren
Invoer: muiscursor (1 byte)
Uitvoer: geen
In het terminalprogramma zijn 32 voorgedefinieerde muiscursors
opgenomen welke met deze functie gekozen kunnen worden. Deze zijn
gelijk aan de hardware muiscursors van Kees van Oss.
#1D Definieer muiscursor
Invoer: muismasker (64 bytes)
Uitvoer: geen
Met muisfunctie #09 kan de vorm van de grafische muiscursor opgegeven worden.
Deze dient dan echter wel eerst in het geheugen van de PC te staan. Met
commando #1D kan de vorm van de muiscursor in het PC geheugen geplaatst
worden. Voor het verdere gebruik van deze functie wordt ook verwezen naar de
handleiding voor muizen.
#1E Opvragen cursorpositie
Invoer: geen
Uitvoer: X en Y coordinaat tekstcursor (2 bytes)
Dit commando geeft de positie van de tekstcursor naar de Atom. De
linkerbovenhoek is (0,0)
#1F Oproepen video functies (PC INT 10)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)
Hiermee kunnen videofuncties van het PC-BIOS opgeroepen worden. De
registerset bestaat uit acht bytes, die de registers AX, BX, CX en DX van de
8088/80x86 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/80x86 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/80x86 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/80x86
processor voorstellen.
Omdat niet alle functies uitsluitend gebruik maken van bovengenoemde registers,
kunnen sommige functies niet uitgevoerd worden. Voor het gebuik van deze
functie wordt verwezen naar betreffende literatuur.
#23 Lees I/O byte
Invoer: I/O adres (1 word)
Uitvoer: gelezen data (1 byte)
De PC leest het opgegeven I/O adres uit en geeft deze waarde aan de Atom. Het
I/O adres ligt in het algemeen in het gebied $0000 - $03FF.
#24 Schrijf I/O byte
Invoer: I/O adres (1 word)
data (1 byte)
Uitvoer: geen
De PC stuurt de data naar het opgegeven I/O adres. Het I/O adres ligt in het
algemeen in het gebied $0000 - $03FF.
#25 Definieer grafische letter
Invoer: ASCII waarde van karakter (1 byte)
karakter patroon (16 bytes)
Uitvoer: geen
Karakters die met commando #07 in de grafische mode geschreven worden kunnen
met deze functie gedefinieerd worden. Het eerst gelezen byte vormt de bovenste
regel van het karakter.
#26 Opvragen muis aktiviteiten
Invoer: geen
Uitvoer: horizontale beweging (1 byte)
vertikale beweging (1 byte)
status van knoppen (1 byte)
Deze functie biedt de mogelijk om snel de beweging van de muis op te vragen. Dit
is relatief t.o.v. de laatst gelezen positie.
#27 Opvragen PC informatie
Invoer: geen
Uitvoer: PC identificatie (1 word)
Het PC identificatie woord geeft enige informatie omtrent de beschikbare hardware
die op de PC is aangesloten. Dit woord is als volgt samengesteld:
bit 0 gezet als drive(s) aanwezig
bit 1 gezet als 80x87 coprocessor aanwezig is
bit 2 pc type (0=XT, 1=AT)
bit 3 video type (1=Hercules mono, 0=kleurenkaart)
bit 4,5 video mode bij opstarten
bit 6,7 aantal drives als bit 0 gezet is
bit 8 0 = dos, 1 = windows terminal programma
bit 9,11 aantal seriele poorten
bit 12,13 video kaart (00=CGA, 01=EGA, 10=VGA, 11=HGC)
bit 14,15 aantal printerpoorten
#28 Emulatie clear 0
Invoer: video adres (1 word)
video data (1 byte)
Uitvoer: geen
De opgegeven data wordt overeenkomstig met Atom grafics op het beeldscherm
weergegeven. De positie van deze data wordt opgegeven met het videoadres. Het
font ATOMVDU.FNT dient geladen te zijn. Dit is nodig omdat bij het emuleren
van CLEAR 0 gebruik wordt gemaakt van een karaktertabel.
#29 Wijzigen van palet of achtergrondkleur in CGA modi
Invoer: paletnummer of kleurnummer (1 byte)
Uitvoer: geen
In de grafische modi kan met deze functie gekozen worden tussen de twee
kleurensets van een CGA kaart. Als bit 7 van de kleur gezet is dan wordt de
achtergrondkleur ingesteld.
Palet 0: groen, rood, geel
Palet 1: ultramarijn, violet, wit
Dit commando kan ook gebruikt worden in tekstmode. In dat geval wordt, indien
bit 7 gezet is, de kaderkleur van het scherm ingesteld.
#2A t/m #31 Emulatie grafische Atom modi
Deze commando's werken op dezelfde manier als commando #28. De geemuleerde
modi zijn:
#2A clear 1 monochroom
#2B clear 1 kleur
#2C clear 2 monochroom
#2D clear 2 kleur
#2E clear 3 monochroom
#2F clear 3 kleur
#30 clear 4 monochroom
#31 clear 4 kleur
In de kleurenmodi kan met behulp van commando #29 gekozen worden tussen
twee kleurensets. In monochroom modi kan op dezelfde wijze een van de
achtergrondkleuren gekozen worden. Dus monochroom is niet altijd zwart/wit.
Voor emulatie van een van deze modi hoeft geen speciale karakterset geladen te
worden.
#32 Inschakelen extended video mode
Invoer: schermmode (1 byte)
Uitvoer: geen
De PC schakelt de aanwezige videokaart over naar de opgegeven mode. Hiermee
kunnen dus hogere grafische modi opgeroepen worden. De toegestane waarden
zijn afhankelijk van de aanwezige videokaart.
Als een extended video mode gekozen wordt dient het tekstvenster met de juiste
waarden gedefinieerd te worden om problemen bij het scrollen te voorkomen.
Of de muis gebruikt kan worden in deze modi is afhankelijk van de gebruikte
muisdriver.
#33 Zet graphics kleur voor extended video mode
Invoer: pixelkleur (1 byte)
Uitvoer: geen
De opgegeven kleur wordt gebruikt bij plot opdrachten in extended video modi.
De toegestane waarden zijn afhankelijk van de videomode.
#34 Schrijf grafisch pixel in extended video mode
Invoer: X-coordinaat (1 word)
Y-coordinaat (1 word)
plot opdracht (1 byte)
Uitvoer: geen
Met dit commando kunnen punten in de extended video modi gezet of gewist
worden. De bewerking wordt gegeven door de plot opdracht, 1=zet pixel, 2=wis
pixel en 3=exor pixel met kleur.
De X en Y-coordinaten zijn afhankelijk van de grafische resolutie van de
geselecteerde video mode. In theorie kan een resolutie van 65535*65535 met 256
kleuren gebruikt worden. Slechts weinig videokaarten ondersteunen deze mode.
Let erop dat in extended video modi de punt (0,0) links boven op het scherm is en
niet zoals bij de Atom modi links onder!
#35 Instellen tekstvenster
Invoer: X-links onder (1 byte)
Y-links onder (1 byte)
X-rechts boven (1 byte)
Y-rechts boven (1 byte)
Uitvoer: geen
Het tekstvenster kan met dit commando ingesteld worden. Alle door de Atom
geproduceerde beeldscherm uitvoer wordt in dit venster afgedrukt.
Uitvoer die door de PC op het scherm afgebeeld wordt zoals een catalog of
foutmelding kan buiten het venster vallen.
Zoals bij de beschrijving van commando #32 al is vermeld moeten bij extended
video modi de tekstvensters expliciet opgegeven worden. De windowbreedte klopt
meestal wel, maar de hoogte is altijd 25 regels. Dit omdat in het PC-BIOS wel het
aantal tekens per regel kan worden opgevraagd, maar niet het aantal regels per
scherm. Daarom is gekozen voor de meest voorkomende waarde van 25 regels per
scherm.
#36 Opheffen tekstvenster
Invoer: geen
Uitvoer: geen
Dit commando heft een gedefinieerd tekstvenster op.
#37 Joystick uitlezen
Invoer: geen
Uitvoer: stand joystick en vuurknoppen (1 byte)
De analoge joystick van de PC wordt uitgelezen en omgezet naar digitale waarden
die voor de Atom joystick gebruikelijk zijn. Voor de volledigheid de betekenis van
de afzonderlijke bits:
#38 Joystick calibreren
Invoer: geen
Uitvoer: geen
Een analoge joystick moet altijd gecalibreerd worden. Bij deze gebeurtenis wordt
de stand van de joystick gelezen en deze stand wordt als "neutraal" beschouwd.
Alle joystick bewegingen gelden ten opzichte van deze neutraalstand.
Bij het opstarten van het terminal programma en bij een reset van de Atom wordt
de joystick automatisch gecalibreerd; deze functie is alleen nodig indien tijdens het
werken met de Atom van joystick gewisseld wordt of als de PC van snelheid
veranderd. Dit laatste geval omdat het uitlezen van de joystick tijdafhankelijk is.
#39 Masker bit 7 instellen
Invoer: 0 -> bit 7 is altijd '0'
1 -> bit 7 blijft ongewijzigd.
Uitvoer: geen
De ascii-codes #00 t/m #1F worden door de Atom als controlcodes opgevat. De
PC kent echter voor deze codes ook nog een aantal symbolen. Als het masker voor
bit 7 gezet is, worden alle ascii-codes normaal afgehandeld; als dit masker gewist
is wordt van ieder, op het scherm af te drukken karakter, bit 7 gewist. Hiermee
kunnen de speciale symbolen door middel van de ascii waarden #80 t/m #9F ook
op het scherm afgebeeld worden.
#3A Oproepen keyboard functies (PC INT 16)
Invoer: registerset (4 words)
Uitvoer: registerset (4 words)
Hiermee kunnen de keyboard functies van het PC-BIOS opgeroepen worden. De
registerset bestaat uit acht bytes, die de registers AX, BX, CX en DX van de
8088/80x86 processor voorstellen. Bit 0 van DH (het laatst overgezonden byte van
het resultaat) bevat de waarde van de ZeroFlag van de 80x86; hiermee kan de
keyboard scan beter gebruikt worden. Voor het gebuik van deze functie wordt
verwezen naar betreffende literatuur.
Let erop dat er bij het gebruik van deze interrupt verschillen kunnen zijn bij de
XT en AT!
#3B Shell naar DOS
Invoer: MSDOS commando als ASCIIZ string
Uitvoer: geen
Als men tijdens het werken behoefte krijgt om een MS-Dos programma te
gebruiken (bijvoorbeeld FORMAT of DISKCOPY) kan met dit commando ieder
geldig MS-DOS commando uitgevoerd worden. Als men tijdelijk naar MS-DOS
wil kan dat door het opstarten van een tweede COMMAND.COM. Geef om terug
te keren naar de Atom dan het commando EXIT.
#3C Zoek eerste passende file
Invoer: filespecificatie als ASCIIZ string
Uitvoer: resultaat (1 byte)
DTA informatie (22 bytes)
MS-DOS biedt de mogelijkheid om files te zoeken die voldoen aan de opgegeven
filespecificatie. Hierin mogen wildcards * en ? voorkomen. Dit zoeken naar files
gaat in twee stappen.
Bij de eerste zoekactie dient dit commando gebruikt te worden. Als een file
gevonden is dan wordt als resultaat een 0 overgezonden. Het resultaat geeft de
foutcode weer als geen passende file gevonden is; in dat geval volgt er geen DTA.
In de DTA, dit staat voor Disk Transfer Area, is alle MS-DOS directory
informatie opgenomen. Voor de exacte inhoud wordt verwezen naar bijlage II.
#3D Zoek volgende passende file
Invoer: geen
Uitvoer: resultaat (1 byte)
DTA informatie (22 bytes)
De tweede stap bij het zoeken naar files krijgt geen parameters mee omdat deze
nog bekend is vanuit de eerste zoekactie. Een voorwaarde is dat er tussen twee
zoektochten geen disk activiteiten hebben plaats gevonden.
De teruggegeven informatie is het zelfde als bij functie #3C.
#3E Selecteer printer
Invoer: printernummer (1 byte)
Uitvoer: printerstatus (1 byte)
Met deze functie wordt een printer gekozen die aangesproken wordt als de printer
aangezet wordt met $2 of CTRL-B. De uitvoer is de status van de betreffende
printer. Als deze status #90 bedraagt is de printer gereed om data te ontvangen en
af te drukken.
#3F Open random access file
Invoer: filenaam als ASCIIZ-string
file-attribuut (1 byte)
Uitvoer: handle (1 byte)
Bij het openen van een file bepaalt het attribuut op welke wijze de file
aangesproken mag worden. Het attribuut is gewijzigd sinds de vorige versies. De
afzonderlijke bits hebben de volgende betekenis:
#40 Sluit random access file
Invoer: handle (1 byte)
Uitvoer: geen
De opgegeven file wordt afgesloten en de handle wordt vrijgegeven. De handle
moet een waarde hebben groter dan 4 omdat anders een MS-DOS standaard
apparaat gesloten kan worden. Zie bijlage II.
#41 Schrijf byte naar random access file
Invoer: handle (1 byte)
data (1 byte)
Uitvoer: resultaat (1 byte)
De data wordt naar de file met de betreffende handle gestuurd. Bij succes is het
resultaat 1. Een resultaat 0 geeft aan dat er geen byte meer naar de file geschreven
kon worden; de disk is dan vol.
#42 Lees byte van random access file
Invoer: handle (1 byte)
Uitvoer: resultaat (1 byte)
data (1 byte)
De data wordt van de file met de betreffende handle gelezen. Bij succes is het
resultaat 1. Een resultaat 0 geeft aan dat er geen byte meer gelezen kon worden;
het einde van de file is dan bereikt. Er moet dan toch nog een leesopdracht plaats
vinden omdat de PC een willekeurig byte overstuurd.
#43 Verplaats random access file pointer
Invoer: handle (1 byte)
offset van pointer (4 bytes)
offset code (1 byte)
Uitvoer: resultaat (1 byte)
absolute waarde van pointer (4 bytes)
De pointer naar een random access file kan met deze functie opgevraagd worden.
Hiertoe wordt eerst de handle van de betreffende file gegeven en daarna een 32
bits offset voor de pointer. Tenslotte volgt de offset code, hiermee wordt
aangegeven hoe de offset geïnterpreteerd dient te worden:
0: offset heeft betrekking op begin van het bestand
1: offset heeft betrekking op actuele positie van pointer
2: offset heeft betrekking op einde van het bestand
Als er geen fout optreedt is het resultaat 0, gevolgd door de waarde van de pointer
ten opzichte van het begin van het bestand. De offset mag 0 of negatief zijn bij
offset codes 1 en 2. Het is zelfs mogelijk om de pointer voor het begin of achter
het eind van het bestand te zetten. Hiervoor wordt geen foutmelding gegeven. De
fout treedt pas op bij de eerstvolgende lees of schrijfopdracht voor die file.
Met dit commando kan de actuele waarde van de pointer opgevraagd worden door
een offset 0 te geven en offset code 1; hierdoor wordt de pointer 0 bytes verplaatst
ten opzichte van de actuele positie -> deze blijft dus staan.
#44 Opvragen extensie van random access file
Invoer: handle (1 byte)
Uitvoer: resultaat (1 byte)
extensie van file (4 bytes)
De extensie is in dit geval niet het laatste stukje van de filenaam maar de lengte
van de file. Bij een resultaat 0 volgt de lengte van de file.
#45 Lees teken onder muiscursor
Invoer: geen
Uitvoer: teken onder muiscursor (1 byte)
Deze functie is analoog aan functie #02, behalve dat nu het karakter gelezen wordt
op de plaats van de muiscursor; deze functie werkt alleen in tekstmodi 40*25 en
80*25.
#46 Opvragen versienummer terminal programma
Invoer: geen
Uitvoer: release/update nummer (1 byte)
hoofdversienummer (1 byte)
Het is zinnig om het versienummer van het terminal programma op te vragen als
er gebruik wordt gemaakt van deze serie PC-commando's. Hiermee kan de
gebruiker gewaarschuwd worden dat hij/zij mogelijk een recentere versie van het
terminal programma dient te gebruiken.
Alle commando's in deze handleiding zijn beschikbaar vanaf versie 3.10.
#47 Teken naar printer sturen
Invoer: teken (1 byte)
Uitvoer: geen
Het gelezen teken wordt naar de printer gestuurd indien deze aangezet is met $2 of
^B. Als de printer niet aangezet is dan voert dit commando niets uit. In het geval
dat de printer wel aangezet is maar de printer is niet on-line wordt gewacht totdat
de printer on-line komt.
#48 CGA grafisch teken definieren
Invoer: ascii waarde van teken (1 byte)
bitpatroon van teken (8 bytes)
Uitvoer: geen
In de grafische CGA mode is het mogelijk om zelf de tekens 128 t/m 255 te
definieren (iets dat MS-DOS doet met het commando GRAFTABL). Deze
mogelijkheid is nu ook beschikbaar voor de Atom.
Nadat de ascii waarde van het te definieren teken is overgezonden worden de
volgende acht bytes opgeslagen als bitpatroon.
De nieuwe tekens worden in hetzelfde gebied opgeslagen als het font voor GTEXT
en Atomvdu; het is dus niet mogelijk om deze drie fonts gelijktijdig te gebruiken
of de fonts moeten om en om geladen worden.
Het is al aan te voelen dat een komplete karakterset geladen kan worden. Om een
nieuwe karakterset te laden kan het bekende FONT statement of commando #06
gebruikt worden.
#49 Horizontaal vullen
Invoer: coordinaten beginpunt (2 words)
grenskleur (1 byte)
Uitvoer: geen
Vanaf het opgegeven punt wordt de beeldlijn naar links en naar rechts gekleurd in
de aktuele kleur. Dit kleuren gaat door totdat een pixel ontmoet wordt dat gelijk is
aan de grenskleur.
Bij het kleuren wordt rekening gehouden met een eventueel grafisch venster en een
verschoven oorsprong. Voorwaarde is wel dat het beginpunt in het grafisch venster
ligt.
#4A Vertikaal vullen
Invoer: coordinaten beginpunt (2 words)
grenskleur (1 byte)
Uitvoer: geen
Vanaf het opgegeven punt wordt de beeldlijn naar boven en naar beneden gekleurd
in de aktuele kleur. Dit kleuren gaat door totdat een pixel ontmoet wordt dat gelijk
is aan de grenskleur.
Bij het kleuren wordt rekening gehouden met een eventueel grafisch venster en een
verschoven oorsprong. Voorwaarde is wel dat het beginpunt in het grafisch venster
ligt.
#4B Aanroepen INT 61h
Invoer: afhankelijk van aangeroepen programma
Uitvoer: afhankelijk van aangeroepen programma
Om het Atom terminal programma zelf uit te breiden kan op de PC een resident
programma gestart worden dat geaktiveerd wordt bij een oproep van INT 61h.
Parameters en resultaten kunnen afhankelijk van het opgeroepen programma
uitgewisseld worden.
Zie het hoofdstuk "communicatie met andere programma's" voor meer uitleg.
#4C Definieer een grafisch venster
Invoer: X-coordinaat linker benedenhoek (1 word)
X-coordinaat linker benedenhoek (1 word)
Y-coordinaat rechter bovenhoek (1 word)
Y-coordinaat rechter bovenhoek (1 word)
Uitvoer: geen
Voor de Atom grafische mode bood het Gagsrom al mogelijkheden voor grafische
vensters. Voor de extended video mode kan dit commando gebruikt worden om
een grafisch venster vast te leggen. Dat houdt in dat alleen binnen dat venster
getekend kan worden.
Na het gebruiken van een CLEAR opdracht wordt het venster automatisch
opgeheven.
#4D Grafisch venster opheffen
Invoer: geen
Uitvoer: geen
Hiermee wordt een grafisch venster opgeheven.
#4E Grafische oorsprong verschuiven
Invoer: coordinaten van nieuwe oorsprong (2 words)
Uitvoer: geen
Het grafische nulpunt ligt normaal in de linker bovenhoek van het scherm. Met dit
commando kan het punt (0,0) verschoven worden naar een willekeurige plaats op
het scherm.
Bij het verschuiven van de grafische oorsprong wordt geen rekening gehouden met
een eerder verschoven oorsprong en een grafisch venster. De nieuwe positie is dus
altijd ten opzichte van de linker bovenhoek van het scherm.
Na een CLEAR opdracht bevindt de oorsprong zich altijd in de linker bovenhoek.
#4F Selecteer schermpagina voor monitor
Invoer: schermpagina nummer (1 byte)
Uitvoer: geen
Bij gebruik van een tekstmode kan gebruik gemaakt worden van verschillende
schermpagina's. Er zijn in feite twee mogelijkheden bij het werken met
verschillende pagina's, te weten: werkpagina is zichtbaar op scherm of de werkpa-
gina en de getoonde pagina zijn verschillend. Met het commando #4F kan de
pagina gekozen worden die op de monitor getoond wordt.
Zie voor meer informatie het hoofdstuk "Schermpagina's".
#50 Selecteer schermpagina voor bewerkingen
Invoer: schermpagina nummer (1 byte)
Uitvoer: geen
Bij gebruik van een tekstmode kan gebruik gemaakt worden van verschillende
schermpagina's. Er zijn in feite twee mogelijkheden bij het werken met
verschillende pagina's, te weten: werkpagina is zichtbaar op scherm of de werkpa-
gina en de getoonde pagina zijn verschillend. Met het commando #50 kan de
pagina gekozen worden waar de schrijfopdrachten naar toe gestuurd worden.
Zie voor meer informatie het hoofdstuk "Schermpagina's".
#51 Zet cursor lijnen
Invoer: bovenste cursorlijn (1 byte)
onderste cursorlijn (1 byte)
Uitvoer: geen
De vorm van de cursor kan ingesteld worden met dit commando. De cursorlijnen
worden van boven naar beneden geteld. De eerste parameter zal dus altijd groter
zijn dan de tweede. Bij ongeldige waarden verdwijnt de cursor van het scherm.
Het aantal lijnen verschilt per videokaart.
#52 Gereserveerd
#53 Gereserveerd
#54 Gereserveerd
#55 Selecteer user font voor EGA/VGA tekstmode
Invoer: geen
Uitvoer: geen
Dit commando laadt het geladen font in het fontram van de EGA of VGA kaart.
Hiermee kunnen de karakters in tekstmode gewijzigd worden.
#56 Selecteer EGA 8*14 ROM font
Invoer: geen
Uitvoer: geen
Hiermee wordt het standaard EGA 8*14 karakterset in de fontram van de EGA of
VGA kaart geladen. Automatisch wordt omgeschakeld naar 25 regels per scherm.
Het kan nodig zijn om het tekstwindow te herdefinieren.
#57 Selecteer EGA 8*8 ROM font
Invoer: geen
Uitvoer: geen
Hiermee wordt het standaard EGA 8*8 karakterset in de fontram van de EGA of
VGA kaart geladen. Automatisch wordt omgeschakeld naar 43 regels per scherm
voor EGA en 50 regels per scherm voor VGA. Het tekstwindow zal aangepast
moeten worden.
#58 Schrijf grafisch venster naar disk
Invoer: x-coordinaat links onder (1 word)
y-coordinaat links onder (1 word)
x-coordinaat rechts boven (1 word)
y-coordinaat rechts boven (1 word)
filehandle (1 byte)
Uitvoer: geen
Schrijft een grafisch window in een extended video mode naar file. De file moet
reeds geopend zijn. De coordinaten van het window en de file handle worden als
parameter opgegeven. De coordinaten gelden vanaf de logische oorsprong. Er
wordt dus rekening gehouden met een verschoven oorsprong. Er wordt geen
resultaat teruggegeven; het is dus niet bekend of alle data op de disk terecht zijn
gekomen. Dit commando is hoofdzakelijk bedoeld om stukken van een grafisch
scherm tijdelijk in een bestand op te slaan. Na beeindiging van het commando
wordt de file niet automatisch afgesloten.
#59 Lees grafisch venster van disk
Invoer: x-coordinaat links onder (1 word)
y-coordinaat links onder (1 word)
filehandle (1 byte)
Uitvoer: geen
Een grafisch window dat met commando #58 naar file geschreven is kan hiermee
teruggezet worden op het scherm. Dit hoeft niet op dezelfde plaats te zijn. De file
moet al geopend zijn. Er wordt geen resultaat teruggemeld zodat niet bekend is of
de data goed gelezen zijn. Na het inlezen wordt het bestand niet automatisch
gesloten.
#5A Diverse grafische functies
SHAPES - leest een sub-commando nummer en voert vervolgens de functie uit.
Bij deze functies wordt rekening gehouden met een verschoven grafische
oorsprong en het huidige grafische venster.
#5A subfunctie #0: teken een cirkel
Invoer: x-coordinaat middelpunt (1 word)
y-coordinaat middelpunt (1 word)
straal (1 word)
Uitvoer: geen
In extended video mode wordt een cirkel getekend met het middelpunt op de
opgegeven coordinaten en met de opgegeven straal.
#5A subfunctie #1: teken een cirkel en vul deze
Invoer: x-coordinaat middelpunt (1 word)
y-coordinaat middelpunt (1 word)
straal (1 word)
Uitvoer: geen
In extended video mode wordt een cirkel getekend met het middelpunt op de
opgegeven coordinaten en met de opgegeven straal. Deze cirkel wordt opgevuld in
de geldende voorgrondkleur.
#5A subfunctie #2: teken een rechthoek
Invoer: x-coordinaat linker benedenhoek (1 word)
y-coordinaat rechter benedenhoek (1 word)
x-coordinaat linker bovenhoek (1 word)
y-coordinaat rechter bovenhoek (1 word)
Uitvoer: geen
In extended video mode wordt een rechthoek getekend tussen de opgegeven
hoekpunten.
#5A subfunctie #3: teken een rechthoek en vul deze
Invoer: x-coordinaat linker benedenhoek (1 word)
y-coordinaat rechter benedenhoek (1 word)
x-coordinaat linker bovenhoek (1 word)
y-coordinaat rechter bovenhoek (1 word)
Uitvoer: geen
In extended video mode wordt een rechthoek getekend tussen de opgegeven
hoekpunten. Deze rechthoek wordt opgevuld in de geldende voorgrondkleur.
#5A subfunctie #4: teken een driehoek
Invoer: x en y-coordinaten eerste hoekpunt (2 words)
x en y-coordinaten tweede hoekpunt (2 words)
x en y-coordinaten derde hoekpunt (2 words)
In extended video mode wordt een driehoek getekend tussen de opgegeven
hoekpunten.
#5A subfunctie #5: teken een driehoek en vul deze
Invoer: x en y-coordinaten eerste hoekpunt (2 words)
x en y-coordinaten tweede hoekpunt (2 words)
x en y-coordinaten derde hoekpunt (2 words)
In extended video mode wordt een driehoek getekend tussen de opgegeven
hoekpunten. Deze driehoek wordt opgevuld in de geldende voorgrondkleur.
#5A subfunctie #6: zet lijn patroon
Invoer: bitpatroon van de lijn (1 word)
Uitvoer: geen
Om niet-aaneengesloten lijnen te tekenen kan met deze functie een 16-bits patroon
opgegeven worden.
#5A subfunctie #7: teken een rechte lijn
Invoer: x-coordinaat beginpunt (1 word)
y-coordinaat beginpunt (1 word)
x-coordinaat eindpunt (1 word)
y-coordinaat eindpunt (1 word)
Uitvoer: geen
In extended video mode wordt een lijn getekend tussen het opgegeven begin en
eindpunt. Hierbij geldt dat een '1' in het lijn patroon (zie ook subfunctie #06)
geplot wordt de geldende voorgrondkleur. Een '0' in het lijn patroon laat
het pixel ongewijzigd.
#5A subfunctie #8: huidige kleur/attribuut opvragen
Invoer: geen
Uitvoer: attribuut (1 byte)
De waarde van het huidige attribuut of van de huidige voorgrondkleur kan hiermee
opgevraagd worden.
#5A subfunctie #9: video mode support opvragen
Invoer: video mode (1 byte)
Uitvoer: support status (1 byte)
De PC controleert of de gevraagde video mode ondersteund wordt door de huidige
videokaart. Bij status #FF wordt de mode niet ondersteund. Er wordt niet van
mode veranderd.
#5B Directe toegang tot PC-video geheugen
Met directe toegang tot het PC-video geheugen kunnen bepaalde bewerkingen veel
sneller gebeuren dan via het BIOS. Deze functies zullen in de windows versie van
het terminal programma niet geimplementeerd zijn; gebruik ervan is dus vanuit
vanwege de compatibiliteit niet aan te raden.
#5B subfunctie #0: Lees direct PC videogeheugen
Invoer: offset adres videogeheugen (1 word)
Uitvoer: data uit videogeheugen (1 byte)
Deze call maakt het mogelijk om het PC videogeheugen direct uit te lezen, dus
niet via het BIOS. Deze werkwijze is over het algemeen wat sneller. Bovendien
worden hiermee ook systemen met twee monitoren ondersteund.
#5B subfunctie #1: Schrijf direct PC videogeheugen
Invoer: offset adres videogeheugen (1 word)
data (1 byte)
Uitvoer: geen
Deze call maakt het mogelijk om direct naar het PC videogeheugen te schrijven,
dus niet via het BIOS. Deze werkwijze is over het algemeen wat sneller.
Bovendien worden hiermee ook systemen met twee monitoren ondersteund.
#5B subfunctie #2: Verplaats datablok in PC videogeheugen
Invoer: offset adres bron (1 word)
offset adres bestemming (1 word)
bloklengte (1 word)
Uitvoer: geen
Het datablok beginnende vanaf 'offset adres bron' met lengte 'bloklengte' wordt
gekopieerd naar 'offset adres bestemming'. Hierme kunnen snel stukken tekst over
het scherm verplaatst worden, data kan tussen verschillende schermpagina's
gekopieerd worden of in twee-monitor systemen van de ene monitor naar de
andere.
#5B subfunctie #5B: Opvragen reset type
Invoer: geen
Uitvoer: reset type (1 byte)
De Atom kan opvragen wat de reden was van de laatste reset. Door het terminal
programma worden de volgende typen gebruikt:
Reset type #0 - terminal programma start
Reset type #1 - reset door CTRL-ALT-#5B subfunctie #5C: Instellen reset type
Invoer: reset type (1 byte)
Uitvoer: geen
Voor een software reset kan met dit commando het reset type ingesteld worden.
Ofschoon type #0 en #1 gereserveerd zijn door het terminal programma kunnen
deze codes alsnog ingesteld worden om een dergelijke reset te simuleren.
#5B subfunctie #5D: Software reset genereren
Invoer: geen
Uitvoer: geen
Het terminal programma geeft de Atom kaart een reset signaal. Het reset type kan
van te voren worden ingesteld met commando #5B, subfunctie #5C.
#5C Tekstpagina's kopieren, saven en laden
De volgende serie commando's bieden mogelijkheden om tekstschermen onderling
te kopieren of om ze (tijdelijk) te bewaren of te laden van disk. Aangezien het
videosegment van een Herculeskaart begint op adres B000h en van de overige
videokaarten op B800h moet met behulp van de command line parameter /V=vvv
de juiste videokaart opgegeven zijn om deze functies goed te laten werken.
#5C subfunctie #0: kopieer schermpagina
Invoer: bron schermpagina (1 byte)
bestemming schermpagina (1 byte)
Uitvoer: geen
De inhoud van de 'bron'pagina wordt gekopieerd naar de bestemming.
#5C subfunctie #1: bewaar schermpagina op disk
Invoer: schermpagina nummer (1 byte)
file handle (1 byte)
Uitvoer: geen
De inhoud van de opgegeven schermpagina wordt inclusief de attributen in een
bestand opgeslagen. Dit bestand dient van te voren als random access file geopend
te zijn. Er volgt geen terugmelding; het is dus niet na te gaan of het scherm goed
opgeslagen is. Na afloop wordt het bestand niet afgesloten.
#5C subfunctie #2: haal schermpagina van disk
Invoer: schermpagina nummer (1 byte)
file handle (1 byte)
Uitvoer: geen
De inhoud van het opgegeven "pagina-bestand" wordt in de opgegeven
schermpagina geladen. Dit bestand dient van te voren als random access file
geopend te zijn. Er volgt geen terugmelding; het is dus niet na te gaan of het
scherm goed geladen is. Na afloop wordt het bestand niet afgesloten.
#5D Ascii keyboard scan
Invoer: geen
Uitvoer: keyboard status (1 byte)
ascii waarde -als toets gedrukt- (1 byte)
scancode -als toets gedrukt- (1 byte)
Dit commando is een combinatie van de commando's #1 en #3A. De keyboard
status wordt altijd als resultaat terug gegeven. De afzonderlijke bits hebben de
volgende betekenis:
#5E Diverse wachtfuncties
Let op: de functies van commando #5E maken gebruik van BIOS INT 15H; deze is
niet in een PC/XT geimplementeerd!
#5E subfunctie #0: Wacht gedurende ingestelde tijd
Invoer: geen
Uitvoer: dummy (1 byte)
De PC wacht gedurende een van te voren opgegeven tijd. Na het verstijken van
deze tijd wordt een dummy byte naar de Atom gestuurd om beide systemen te
synchroniseren. De wachttijd kan met subfunctie #1 van commando #5E ingesteld
worden.
#5E subfunctie #1: Stel wachttijd in
Invoer: tijd in microseconden (4 bytes)
Uitvoer: geen
Met deze functie wordt de wachttijd ingesteld voor de functies #0 en #2 van
commando #5E. Het meest lage byte wordt als eerste overgestuurd.
#5E subfunctie #2: Vlag zetten na wachttijd
Invoer: geen
Uitvoer: geen
In de PC wordt een vlag gewist die na de opgegeven wachttijd gezet wordt. De
wachttijd wordt ingesteld met commando #5E subfunctie #1. De status van deze
vlag kan opgevraagd worden met commando #5E subfunctie #3.
#5E subfunctie #3: Timer vlag uitlezen
Invoer: geen
Uitvoer: status van de vlag (1 byte)
Als de wachtperiode, die met commando #5E subfunctie #2 gestart werd,
verstreken is heeft bit 7 de waarde '1'.
#5E subfunctie #4: 1/60 seconde wachten
Invoer: geen
Uitvoer: dummy byte (1 byte)
Deze functie laat de PC 1/60 seconde wachten waarna een dummy byte naar de
Atom gestuurd wordt om de twee systemen te synchroniseren.
#5E subfunctie #5: 1/50 seconde wachten
Invoer: geen
Uitvoer: dummy byte (1 byte)
Deze functie laat de PC 1/50 seconde wachten waarna een dummy byte naar de
Atom gestuurd wordt om de twee systemen te synchroniseren.
#5F Paint functies
Deze functies kleuren gesloten vlakken in met gedefinierde patronen. Hierbij
wordt rekening gehouden met een verschoven oorsprong en grafisch venster.
Paint-patronen worden samen met de geplande sprites opgeslagen in het geheugen
van de PC. In totaal zijn 64 patronen en sprites beschikbaar. Beiden hebben
hetzelfde formaat, met afmetingen van 16*16 pixels.
#5F subfunctie 0: vlak inkleuren in voorgrondkleur
Invoer: x-coordinaat (1 word)
y-coordinaat (1 word)
grenskleur (1 byte)
Uitvoer: geen
Een vlak, ingesloten door lijnen in de grenskleur, wordt gevuld in de geldende
voorgrondkleur. De grenskleur mag hetzelfde zijn als de huidige voorgrondkleur.
#5F subfunctie n: vlak inkleuren volgens patroon n
waarbij geldt: 1 < n < 64
Invoer: x-coordinaat (1 word)
y-coordinaat (1 word)
grenskleur (1 byte)
Uitvoer: geen
Een vlak, ingesloten door lijnen in de grenskleur, wordt gevuld met het opgegeven
patroon. De grenskleur mag hetzelfde zijn als de huidige voorgrondkleur.
#5F subfunctie #FD: patroonfile laden van disk
Invoer: pad+filenaam als ASCIIZ
Uitvoer: error code (1 byte)
Om een set met patronen te laden van disk dient dit commando gebruikt te
worden. De filenaam mag vooraf gegaan worden door een drive en pad
aanduiding. Wildcards zijn niet toegestaan.
#5F subfunctie #FE: patroonfile schrijven naar disk
Invoer: pad+filenaam als ASCIIZ
Uitvoer: error code (1 byte)
Een set met patronen wordt met dit commando op disk opgeslagen. De filenaam
mag vooraf gegaan worden door een drive en pad aanduiding. Wildcards zijn niet
toegestaan.
#5F subfunctie #FF: patroon definieren
Invoer: patroonnummer (1 byte)
patroon (256 bytes)
Uitvoer: geen
Een patroon heeft de afmetingen van 16x16 bytes. Ieder byte bevat de kleurwaarde
van één pixel. Op deze manier kunnen dus maximaal 256 kleuren in een patroon
verwerkt worden. De eerste 16 bytes vormen de bovenste rij van de patroon, de
daaropvolgende 16 bytes de tweede rij enz.
#60 Zet PC in CLEAR 0 emulatie mode
Invoer: geen
Uitvoer: geen
In het windows terminal programma moet bij emulatie van de grafische modi
duidelijk aangegeven worden of het CLEAR 0 betreft of een van de overige Atom
grafische modi. Daartoe wordt CLEAR 0 met een apart commando geïnitialiseerd.
In de DOS versie wordt automatisch het benodigde 'ATOMVDU.FNT' geladen
mits deze geplaatst is in de directory C:\ATOM\FONT.
#61 Record lezen/schrijven
Om data uit een bestand te lezen kan het lezen van de gegevens in een blok
handiger danwel sneller zijn door het datablok in één commando te lezen in plaats
van de afzonderlijke bytes. Een record mag maximaal 16 kb groot zijn. Als buffer
wordt het opslag gebied voor patronen en sprites gebruikt. Deze zijn na het lezen
of schrijven van een record gewist!
#61 subfunctie #0: record lezen
Invoer: handle (1 byte)
aantal te lezen bytes (1 word)
Uitvoer: errorcode (1 byte)
aantal gelezen bytes (1 word)
xxx bytes
Als invoer worden de file handle en het aantal te lezen bytes doorgegeven aan de
PC. Deze probeert het aantal bytes te lezen. Indien er geen toegangsfout optreedt
is de errorcode gelijk 0. In dat geval wordt vervolgens het aantal gelezen bytes
teruggemeld. Deze bytes worden als laatste overgestuurd van PC naar Atom. Als
er een fout optradt volgen er na de errorcode geen data meer.
Als er geen fout optreedt, maar het aantal gelezen bytes is kleiner dan het aantal
gevraagde bytes, is het einde van het bestand bereikt.
#61 subfunctie #1: record schrijven
Invoer: handle (1 byte)
aantal te schrijven bytes (1 word)
xxx bytes
Uitvoer: errorcode (1 byte)
aantal geschreven bytes (1 word)
De Atom stuurt de file handle, het aantal te schrijven bytes en de data naar de PC.
De data worden naar het bestand geschreven en er volgt een terugkoppeling. Als
er een fout optrad tijdens het schrijven is de errorcode ongelijk 0 en volgt er geen
data meer. Bij succes wordt het aantal geschreven bytes teruggemeld. Als dit
aantal kleiner is dan het oorspronkelijk aantal is de disk vol.
#62 Floating point functies
Dit commando biedt de mogelijkheid om gebruik te maken van de rekenkracht van
een 80x87 coprocessor. Hierbij worden twee modi ondersteund: de standaard
Atom notatie (40 bits getallen) of de Intel8 (64 bits getallen). Dit formaat dient
gegeven te worden alvorens de floating point functies gebruikt worden. Voor de
floating point functies is een 287 of hoger nodig. Voor het gebruik van
goniometrische functies (sin, cos, tan e.d.) is zelfs een 387 of hoger vereist.
Alvorens de functies te gebruiken dient met subfunctie 0 getest te worden welke
mathematische coprocessor in de pc aanwezig is.
#62 subfunctie #00: fp-formaat instellen en processor opvragen
Invoer: floating point formaat (1 byte)
Uitvoer: floating point processor code (1 byte)
Voor het floating point formaat wordt '0' gegeven voor Atom formaat of '1' voor
het Intel8 formaat. De processor code is voor de diverse typen:
0 geen coprocessor aanwezig
1 80287 aanwezig
2 80387 of hoger aanwezig
#62 subfunctie #01: optellen
Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: som van beide getallen (5/8 bytes)
De ingevoerde getallen worden bij elkaar opgeteld.
62 subfunctie #02: aftrekken
Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: verschil van beide getallen (5/8 bytes)
Getal2 wordt van getal1 afgetrokken.
#62 subfunctie #03: vermenigvuldigen
Invoer: getal1 (5/8 bytes)
getal2 (5/8 bytes)
Uitvoer: product van beide getallen (5/8 bytes)
De twee ingevoerde getallen worden met elkaar vermenigvuldigd.
62 subfunctie #04: delen
Invoer: getal1 (teller) (5/8 bytes)
getal2 (noemer) (5/8 bytes)
Uitvoer: quotiënt van beide getallen (5/8 bytes)
Getal1 wordt gedeeld door getal2.
62 subfunctie #05: absolute waarde bepalen
Invoer: getal (5/8 bytes)
Uitvoer: absolute waarde van getal (5/8 bytes)
Van het ingevoerde getal wordt de absolute waarde teruggegeven.
62 subfunctie #06: afronden naar integer waarde
Invoer: getal (5/8 bytes)
Uitvoer: afgeronde integer waarde van getal (5/8 bytes)
Van het ingevoerde getal wordt de afgeronde integer waarde teruggegeven. Dit is
echter nog steeds in floating point formaat genoteerd. (Bijv. 1,23 wordt 1,00)
#62 subfunctie #07: vierkantswortel
Invoer: getal (5/8 bytes)
Uitvoer: vierkantswortel van getal (5/8 bytes)
Deze functie retourneert de vierkantswortel van het opgegeven getal.
62 subfunctie #08: tangens (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: tangens van getal (5/8 bytes)
Deze functie retourneert de tangens van het opgegeven getal. Dit getal moet in
radialen gegeven worden.
62 subfunctie #09: sinus (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: sinus van getal (5/8 bytes)
Deze functie retourneert de sinus van het opgegeven getal. Dit getal moet in
radialen gegeven worden.
62 subfunctie #0A: cosinus (387+ vereist)
Invoer: getal (5/8 bytes)
Uitvoer: cosinus van getal (5/8 bytes)
Deze functie retourneert de cosinus van het opgegeven getal. Dit getal moet in
radialen gegeven worden.
62 subfunctie #0B: omrekenen naar graden
Invoer: hoek in radialen (5/8 bytes)
Uitvoer: hoek in graden (5/8 bytes)
De ingevoerde hoek wordt omgerekend van radialen naar graden.
62 subfunctie #0C: omrekenen naar radialen
Invoer: hoek in graden (5/8 bytes)
Uitvoer: hoek in radialen (5/8 bytes)
De ingevoerde hoek wordt omgerekend van graden naar radialen.
62 subfunctie #0D: machtverheffen
Invoer: m (macht) (5/8 bytes)
n (getal) (5/8 bytes)
Uitvoer: n^m (5/8 bytes)
Teruggegeven wordt de m-de macht van n. Uiteraard zijn floating point getallen
hier toegestaan.
#63 AIC Communicatie
De Atom-in-PC kan via een AIC-kabel communiceren met een andere Atom die op
de printerpoort is aangesloten. Alvorens te communiceren dient de gebruikte poort
geïnitialiseerd te worden. Bij de overige commununicatie hoeft de printerpoort niet
meer opgegeven te worden.
63 subfunctie #00: initialiseer AIC poort
Invoer: adres printerpoort (1 word)
Uitvoer: geen
Het adres van de gebruikte printerpoort (378 voor LPT1 en 278 voor LPT2) wordt
intern opgeslagen. Verder worden de handshakelijnen ingesteld voor de
communicatie.
63 subfunctie #01: stuur byte naar andere computer
Invoer: data (1 byte)
Uitvoer: geen
Het opgegeven byte wordt naar de andere computer gestuurd.
63 subfunctie #02: lees byte van andere computer
Invoer: geen
Uitvoer: ontvangen data (1 byte)
Er wordt gewacht totdat een byte van de andere computer ontvangen is. Dit byte
wordt geretourneerd naar de Atom-in-PC.
#64 Extended Memory Support
Het gebruik van XMS geheugen is nu standaard opgenomen in het terminal
programma. Het gebruik van een losse XMS-driver is niet meer nodig. De
maximale hoeveelheid beschikbaar XMS geheugen wordt als command line
parameter opgegeven bij het starten van het terminal programma. Als er XMS
geheugen beschikbaar is kan dit zonder verdere initialisatie gebruikt worden.
Wellicht ten overvloede, minimaal een pc met een 80286 processor is
noodzakelijk.
Het directe gebruik van dit commando wordt niet aanbevolen omdat reeds
bestaande software dat wel XMS geheugen nodig heeft hiermee niet werkt. Het
gebruik van XMS geheugen dient te verlopen via de daarvoor bestemde OSBYTE
functies.
64 subfunctie 0: versie opvragen
Invoer: geen
Uitvoer: versienummer (1 byte)
releasenummer (1 byte)
aantal xms pagina's (1 byte)
64 subfunctie 1: pagina voorzetten
Invoer: nieuw paginanummer (1 byte)
Uitvoer: 16 kb data
Bij dit commando wordt de huidige pagina niet opgeslagen in xmsgeheugen.
64 subfunctie 2: pagina voorzetten
Invoer: huidig paginanummer (1 byte)
16 kb data
Uitvoer: geen
Bij dit commando wordt de nieuwe pagina niet gelezen in het atomgeheugen.
64 subfunctie 3: pagina voorzetten
Invoer: huidig paginanummer (1 byte)
16 kb data
nieuw paginanummer (1 byte)
Uitvoer: 16 kb data
De huidige pagina wordt opgeslagen in het xms geheugen en de nieuwe pagina
wordt in het atomgeheugen gelezen.
#65 Sprite support commando's
De opzet is om de administratie, het bewaren van de scherminhoud en het plaatsen
van de sprites door de PC uit te laten voeren en dus een hogere snelheid te
bereiken. De sprites werken alleen in extended video modi. Elke sprite is 32x32
pixels in maximaal 255 kleuren, de kleurcode 255 (#FF) betekent
achtergrondkleur; per sprite is 2kb XMS geheugen nodig.
Functie 0 geeft het aantal beschikbare sprites terug. De overige functies geven
minimaal een statusbyte retour. De betekenis van de bits in deze statuscode zijn:
65 subfunctie 00: Definieer sprite base en initialisatie
Invoer: XMS paginanummer (1 byte)
Uitvoer: aantal beschikbare sprites (1 word)
Alle sprites (max. 1024) worden in XMS geheugen opgeslagen vanaf de
opgegeven pagina. Hierdoor is het mogelijk om nog een hoeveelheid XMS
geheugen te reserveren voor andere doeleinden, zoals bijvoorbeeld data-opslag.
Als tegenprestatie geeft dit commando het hoogste spritenummer terug.
65 subfunctie 01: Definieer sprite
Invoer: spritenummer (1 word)
spritedata (1024 bytes)
Uitvoer: statuscode (1 byte)
Om een sprite te definieren stuurt de Atom eerst het betreffende spritenummer
naar de pc. Direct daarna stuurt de pc het statusbyte terug. Indien alles ok is,
statuscode is #00, kunnen de 1024 bytes verstuurd worden. Een sprite bevat
horizontaal en vertikaal 32 pixels. Voor elk pixel wordt één byte gebruikt. Een
sprite kan 255 kleuren hebben. De kleurwaarde 255 (#FF) geeft aan dat er geen
pixel geplot moet worden, de achtergrond blijft dan zichtbaar. Sprites hoeven dus
niet per definitie vierkant te zijn.
65 subfunctie 02: Plaats sprite op het scherm
Invoer: spritenummer (1 word)
x-coordinaat (1 word)
y-coordinaat (1 word)
Uitvoer: statuscode (1 byte)
Het opgegeven spritenummer wordt gecontroleerd op geldigheid en de statuscode
wordt teruggestuurd. Indien alles ok is, statuscode is #00, kunnen de coordinaten
verzonden worden. Deze coordinaten gelden ten opzichte van een eventuele
verschoven oorsprong. De sprite wordt op het scherm getekend. Hierbij wordt
geen rekening gehouden met een eventueel ingesteld grafisch venster.
De scherminhoud op de positie wordt automatisch bewaard. De coordinaten
worden in de administratie bijgewerkt.
65 subfunctie 03: Verwijder sprite van het scherm
Invoer: spritenummer (1 word)
Uitvoer: statuscode (1 word)
Met deze functie wordt een sprite van het scherm verwijderd. De oude
scherminhoud wordt weer hersteld. De coordinaten blijven ongewijzigd in de
administratie achter. Alvorens dit alles uit te voeren wordt eerst de statuscode
teruggestuurd naar de Atom.
65 subfunctie 04: Verplaats sprite op het scherm
Invoer: spritenummer (1 word)
x-coordinaat (1 word)
y-coordinaat (1 word)
Uitvoer: statuscode (1 byte)
Om een sprite te verplaatsen wordt eerst subfunctie #03 aangeroepen en direct
daarna subfunctie #02. Op de gebruikelijke wijze wordt de sprite van het scherm
verwijderd en vervolgens op de nieuwe positie getekend.
65 subfunctie 05: Plaats sprite op scherm, zonder administratie
Invoer: spritenummer (1 word)
x-coordinaat (1 word)
y-coordinaat (1 word)
Uitvoer: statuscode (1 byte)
Deze functie is gelijk aan subfunctie #02 met uitzondering van het bewaren van
schermdata en coordinaten. Deze functie is geoptimaliseerd om dezelfde sprite
meerdere malen op het scherm te plaatsen.
Het terminalprogramma controleert eerst of de opgegeven sprite al in de XMS
buffer geladen is. Als dat zo is wordt deze niet nogmaals uit het XMS geheugen
gekopieerd. Daardoor is de gehele routine sneller dan functie #02. Maar let erop
dat er geen beeldschermdata bewaard wordt; de sprite kan niet met subfunctie #03
verwijderd worden.
65 subfunctie 06: Opvragen sprite coordinaten
Invoer: spritenummer (1 word)
Uitvoer: statuscode (1 byte)
x-coordinaat (1 word)
y-coordinaat (1 word)
Na terugmelding van de statuscode, #00 betekent alles ok, worden de coordinaten
van de opgegeven sprite teruggemeld aan de Atom.
65 subfunctie 07: Test overlap van twee sprites
Invoer: spritenummer1 (1 word)
spritenummer2 (1 word)
Uitvoer: statuscode (1 byte)
Het terminalprogramma berekent aan de hand van de opgeslagen coordinaten of de
twee opgegeven sprites elkaar overlappen. Indien er een overlapping bestaat wordt
dit kenbaar gemaakt in bit7 van de statuscode. Dit bit is dan gezet.
65 subfunctie 08: Test overlap van een sprite met muis
Invoer: spritenummer (1 word)
Uitvoer: statuscode (1 byte)
Het terminalprogramma berekent aan de hand van de opgeslagen coödinaten of de
opgegeven sprite en de muiscursor elkaar overlappen. Een overlapping wordt
kenbaar gemaakt doordat bit7 van de statuscode '1' is. De bits 0,1 en 2 bevatten
de status van de muisknoppen.
6. PCDOS - een nieuw disk operating systeem
*COMMAND *FORMAT
*COPY *LABEL
*DIR *RENAME
*DISKCOPY *VOL
*ERASE *XCOPY
Voor de syntax van deze commando's wordt verwezen naar het MS-DOS handboek van
uw DOS-versie. Alle geldige MS-DOS parameters mogen meegegeven worden. Deze
commando's leveren nooit foutmeldingen op voor de Atom.
filespec: [drive][path][filenaam.ext]
[...]gegeven is optioneel
<...> gegeven is verplicht
Tenzij anders vermeld zijn in de filenaam zijn de jokers * en ? toegestaan; zowel filenaam
als extensie zijn verplicht.
PC-DOS v1.27 heeft enkele wijzigingen ten opzichte van v1.25 en v1.26:
- *MON/*NOMON functie
- *INFO kent nu wildcards
- filenamen mogen tussen aanhalingstekens
- *<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 (*.)
*CD change directory
*COMMAND ga tijdelijk naar MS-DOS
*DELETE wis file(s) (*D.)
*DRIVE verander actuele drive (*DR.)
*EXEC execute file (*EX.)
*FIND zoek passende file (*FI.)
*HELP geeft beknopte hulp (*H.)
*HIDE zet hidden attribuut (*HI.)
*INFO file informatie opvragen (*I.)
*LOAD file laden van disk (*L.)
*LOCK maak file read-only (*LO.)
*MD maak directory
*MON message monitor
*NOMON message monitor off
*PC geeft besturing aan MS-DOS
*RD verwijder directory
*RESET Reset de Atom (*RE.)
*RUN laadt en start file (*R.)
*SAVE schrijf file naar disk (*S.)
*SPOOL beeldschermuitvoer naar disk schrijven (*SP.)
*UNHIDE reset hidden attribuut (*U.)
*UNLOCK reset read-only attribuut (*UNL.)
Bij het aanroepen van de LOAD of SAVE vector #20C/#20D resp. #20E/#20F is
de semafoor NIET gezet. Dit kan tot vasthangen leiden als er in het video
geheugen geladen wordt of als er tijdens het laden/saven een interrupt
optreedt waarbij gecommuniceerd wordt met de PC.
Programma's die van deze vectoren gebruik maken dienen zelf de semafoor
te zetten d.m.v. OSBYTE #0B. Dit geldt niet voor de DOS commando's *LOAD
en *SAVE en niet voor random access files.
7. Nieuwe toolboxen
7.1 PC-BOX
ASC2BAS Lees asciifile en converteer naar basicprogramma
ATOMVDU Standaard Atom tekstscherm
ATTRIB Zet tekst attribuut
CENTER calibreer joystick
CLW wis tekstvenster
CURSOR cursor controle
DATE opvragen systeemdatum
DAY opvragen systeemdag
ESCAPE uit- en inschakelen van escape toets
FONT laden van ramfont
GTEXT initialiseren grafische tekstmode
INP lees byte van PC I/O bus
KADER teken kader
LPT selecteer printer
MENU opstarten !BOOT file
MOUSE muis controle
- de muiscoordinaten gaan altijd uit van grafische pixels. Ook in een
tekstscherm! Voor de juiste positie in een tekstscherm dienen de
coordinaten door acht gedeeld te worden.
- de oorsprong van de muis bevindt zich altijd in de linkerbovenhoek
van het beeldscherm.
- een uitzondering op bovenstaande regels is het statement MOUSE
KVO.
- als de muiscursor op het beeld staat en het beeld gaat scrollen dient
voor het scrollen de muis van het scherm afgehaald te worden;
daarna kan de muis weer op het scherm geplaatst worden.
- na het veranderen van grafische mode is de muiscursor van het
scherm gehaald.
- in tekstmode is de standaard muiscursor een blokje; in grafische
mode een pijltje.
MSB masker voor 7e bit in tekstmodi
PRN selecteer printer
OUT schrijf byte naar PC I/O bus
PCBOX geeft versienummer en overzicht statements
REPORT verklaar nummer van foutmelding
SCAN uitvoeren van bios toetsenbordroutines
Functie 0:Deze functie leest een teken uit het toetsenbord buffer. Als deze leeg is
wordt gewacht totdat een toets wordt ingedrukt. Het gelezen teken wordt
uit de buffer verwijderd.
Functie 1:Deze functie kijkt of een teken in de toetsenbordbuffer klaarstaat. Als dat
het geval is wordt de waarde ervan als resultaat teruggegeven. (Bij een lege
buffer is het resultaat #0101). Het gelezen teken wordt niet uit de buffer
verwijderd zodat het nogmaals met functie 0 of functie 1 gelezen kan
worden.
Functie 2:Deze functie bepaalt de status van een aantal toetsenbord-modi en geeft de
status van de shift, ctrl en alt toetsen weer.
Zie bijlage III voor beschrijving van resultaten.
TIME opvragen systeemtijd
TSIZE zet afmetingen tekst
TWINDOW zet tekstvenster
TWOFF reset tekstvenster
UDS definieer karakter
7.2 PC UTILITY BOX
CHAIN laadt en start Atom basicprogramma
FILECNV fileheader toevoegen of weghalen
GETWIN grafisch venster naar disk schrijven
GWINDOW definieeren grafisch venster
GWOFF grafisch venster opheffen
HELP on-line helpfunctie
HFILL horizonale lijnen kleuren
POWERDOWN snel geheugeninhoud op disk bewaren
ORIGIN verplaatsen grafische oorsprong
OSCLI aanroep *-commando
PCC printer control code
PDMENU pull down menu
RGET lees record uit random access file