@@@@@@@@@@@@@@@@ ~HELPTEXT versie 1.00 5 maart 1994 (c) 1993 Pascalle en Roland Leurs De help-functie maakt gebruik van twee datafiles; ATOMHELP.IDX en ATOMHELP.TXT Deze laatste file kunt u met een normale ascii teksteditor zelf uitbreiden. Plaats het sleutelwoord aan het begin van de regel, vooraf gegaan door een golfje. Achter het sleutelwoord moet minstens 1 spatie staan. Het laatste sleutelwoord moet 'end' blijven. Na het wijzigen van de helptekst moet de indexfile opnieuw aangemaakt worden. Verwijder de oude ATOMHELP.IDX en laat het programma HELPMKR even lopen. Doe dit bij voorkeur op een ramdisk. In de helptekst ziet u op de bovenste regel 16 @ staan. Deze niet verwijderen! ~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 Opmerking - deze aanroep wacht ongeveer 1/18 seconde en wordt o.a. gebruikt bij het wachten op de flyback op adres #FE66. ~OSBYTE#05 produceer geluid invoer : X = frequentie Y = duur in 18e seconden uitvoer: geen gewijzigde registers: geen ~OSBYTE#06 spring naar exit vector invoer : geen uitvoer: onbepaald gewijzigde registers: onbepaald ~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: ÚÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄ¿ ³7 ³6 ³5 ³4 ³3 ³2 ³1 ³0 ³ ÀÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÙ ³ ³ ³ ³ ³ ³ ³ ³ '0' '1' ³ ³ ³ ³ ³ ³ ³ ÀÄÄ 6502 65C02 0 0 0 0 0 0 ÀÄÄÄÄÄ 1 MHz 2 MHz gewijzigde registers: Accu en vlaggen ~OSBYTE#09 instellen van pieptoon $7 invoer : X = frequentie Y = duur in 18e seconden uitvoer: geen gewijzigde registers: geen ~OSBYTE#0A reset semafoor voor PC communicatie invoer : geen uitvoer: geen gewijzigde registers: geen ~OSBYTE#0B test en set semafoor voor PC communicatie invoer: geen uitvoer: carry = 0 -> toegang tot PC geweigerd carry = 1 -> toegang tot PC toegestaan gewijzigde registers: vlaggen Als toegang tot de PC gegeven is, wordt voor andere aanvragers automatisch de toegang geweigerd. Na het be‰indigen van de betreffende routine moet de semafoor gereset worden met OSBYTE #0A. ~OSBYTE#0C wek foutmelding op invoer : X is errorcode uitvoer: aanroep brkvector #202 gewijzigde registers: alle ~OSBYTE#0D druk tekst van foutmelding af invoer : foutcode in adres #00 uitvoer: foutmelding door PC op scherm gewijzigde registers: alle ~PCCOM#00 Druk $0 af Invoer: geen Uitvoer: geen ~PCCOM#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: ÚÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄ¿ ³7 ³6 ³5 ³4 ³3 ³2 ³1 ³0 ³ ÀÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÙ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄ toets gedrukt ³ ³ ³ 0 0 0 0 ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ alt toets gedrukt ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ctrl toets gedrukt ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ shifttoets gedrukt Door de Atom wordt de TAB toets gebruikt als COPY toets. ~PCCOM#02 Lees karakter op cursorpositie Invoer: geen Uitvoer: ascii waarde van teken op cursorpositie Wordt o.a. gebruikt bij afhandeling van copy toets. ~PCCOM#03 Plot pixel Invoer: X-co”rdinaat (1 word) Y-co”rdinaat (1 word) Plot mode (1 byte) Uitvoer: geen De co”rdinaten 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 ~PCCOM#04 Initialiseer grafische mode Invoer: geen Uitvoer: geen Dit commando schakelt de videokaart om naar de grafische mode. Voor EGA/VGA kaarten wordt de CGA mode ingeschakeld met een resolutie van 640*200. ~PCCOM#05 Plot pixel in clear 4 co”rdinatenstelsel Invoer: X-co”rdinaat (1 word) Y-co”rdinaat (1 word) Plot mode (1 byte) Uitvoer: geen De co”rdinaten 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 ~PCCOM#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. ~PCCOM#07 Schrijf string in grafische mode Invoer: X-co”rdinaat (1 word) Y-co”rdinaat (1 word) ASCIIZ string Uitvoer: geen De opgegeven string wordt geplot vanaf de co”rdinaten X en Y. ~PCCOM#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. ~PCCOM#09 Zet cursor aan Invoer: geen Uitvoer: geen De cursor verschijnt als knipperend streepje op het scherm. ~PCCOM#0A Zet cursor uit Invoer: geen Uitvoer: geen De cursor verdwijnt van het scherm. ~PCCOM#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 filelengte van #00. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. De filespecificatie mag geen drive en directory bevatten, eventueel wel wildcards. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#15 Ga naar MS-DOS Invoer: geen Uitvoer: geen Dit commando be‰indigt 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. ~PCCOM#16 Maak file verborgen Invoer: filespec als ASCIIZ string Uitvoer: foutcode 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. ~PCCOM#17 Maak files weer zichtbaar Invoer: filespec als ASCIIZ string Uitvoer: foutcode 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. ~PCCOM#18 Opvragen file informatie Invoer: filenaam als ASCIIZ string Uitvoer: foutcode file header (16 bytes) tijd en datum van laatste schrijfopdracht 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) ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#1E Opvragen cursorpositie Invoer: geen Uitvoer: X en Y co”rdinaat tekstcursor (2 bytes) Dit commando geeft de positie van de tekstcursor naar de Atom. De linkerbovenhoek is (0,0) ~PCCOM#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. ~PCCOM#20 Oproepen seri‰le 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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#25 Defini‰er 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 gedefini‰erd worden. Het eerst gelezen byte vormt de bovenste regel van het karakter. ~PCCOM#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. ~PCCOM#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 --- 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 --- bit 9,11 aantal seri‰le poorten bit 12,13 video kaart (00=CGA, 01=EGA, 10=VGA) bit 14,15 aantal printerpoorten De bits 12 en 13, welke het type videokaart aangeven, kunnen vanuit de MS-DOS commandline met de optie /V= gezet worden. De niet gebruikte bits zijn '0'. Deze kunnen in de toekomst nog ingevuld worden. ~PCCOM#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. V¢¢r het gebruik van dit commando dient het font ATOMVDU.FNT geladen te zijn m.b.v. commando #06. Dit is nodig omdat bij het emuleren van CLEAR 0 gebruik wordt gemaakt van een karaktertabel. ~PCCOM#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. ~PCCOM#2A clear 1 monochroom emulatie, zie PCCOM#28 ~PCCOM#2B clear 1 kleur emulatie, zie PCCOM#28 ~PCCOM#2C clear 2 monochroom emulatie, zie PCCOM#28 ~PCCOM#2D clear 2 kleur emulatie, zie PCCOM#28 ~PCCOM#2E clear 3 monochroom emulatie, zie PCCOM#28 ~PCCOM#2F clear 3 kleur emulatie, zie PCCOM#28 ~PCCOM#30 clear 4 monochroom emulatie, zie PCCOM#28 ~PCCOM#31 clear 4 kleur emulatie, zie PCCOM#28 ~PCCOM#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. ~PCCOM#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. ~PCCOM#34 Schrijf grafisch pixel in extended video mode Invoer: X-co”rdinaat (1 word) Y-co”rdinaat (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-co”rdinaten 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! ~PCCOM#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. ~PCCOM#36 Opheffen tekstvenster Invoer: geen Uitvoer: geen Dit (overbodige) commando heft een gedefini‰erd tekstvenster op. ~PCCOM#37 Joystick uitlezen Invoer: geen Uitvoer: stand joystick en vuurknoppen 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: ÚÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄÂÄÄ¿ ³7 ³6 ³5 ³4 ³3 ³2 ³1 ³0 ³ ÀÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÁÂÄÙ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄ 0 = vuurknop gedrukt ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄ 0 = knuppel links ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄ 0 = knuppel omlaag ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄ 0 = knuppel rechts ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 0 = knuppel omhoog 1 1 1 ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. 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! ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. De volgende attributen worden geaccepteerd: #00 alleen lezen #01 alleen schrijven #02 lezen en schrijven De computer zoekt het opgegeven bestand. Als dit gevonden is wordt het geopend voor de gewenste toegang. Bestanden waarnaar geschreven mag worden worden aangemaakt als zij niet gevonden worden. Bij een niet geopend bestand is de afgegeven handle 0; het is niet te achterhalen waarom de file niet gevonden is. Iedere andere waarde voor de handle duidt erop dat de file geopend is. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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 geinterpreteerd dient te worden: 0: offset heeft betrekking op begin van het bestand 1: offset heeft betrekking op acuele positie van pointer 2: offset heeft betrekking op einde van het bestand Als er geen fout optreed 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. ~PCCOM#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. ~PCCOM#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. ~PCCOM#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 1.05. ~PCCOM#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. ~PCCOM#48 CGA grafisch teken defini‰ren 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 defini‰ren (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 defini‰ren 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 gebruikt worden. ~PCCOM#49 Horizontaal vullen Invoer: co”rdinaten 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. ~PCCOM#4A Vertikaal vullen Invoer: co”rdinaten 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. ~PCCOM#4B Aanroepen INT 61h Invoer: registerset (4 words) Uitvoer: registerset (4 words) 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 eventueel via de registers doorgegeven worden. Zie het hoofdstuk "communicatie met andere programma's" voor meer uitleg. ~PCCOM#4C Defini‰er een grafisch venster Invoer: X-co”rdinaat linker benedenhoek (1 word) X-co”rdinaat linker benedenhoek (1 word) Y-co”rdinaat rechter bovenhoek (1 word) Y-co”rdinaat 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. ~PCCOM#4D Grafisch venster opheffen Invoer: geen Uitvoer: geen Hiermee wordt een grafisch venster opgeheven. ~PCCOM#4E Grafische oorsprong verschuiven Invoer: co”rdinaten 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. ~PCCOM#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 werkpagina en de getoonde pagina zijn verschillend. Met het commando #4F kan de pagina gekozen worden die op de monitor getoond wordt. ~PCCOM#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 werkpagina en de getoonde pagina zijn verschillend. Met het commando #50 kan de pagina gekozen worden waar de schrijfopdrachten naar toe gestuurd worden. ~PCCOM#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 com- mando. 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 video- kaart. ~PCCOM#52 Gereserveerd ~PCCOM#53 Gereserveerd ~PCCOM#54 Gereserveerd ~PCCOM#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 tekstmo- de gewijzigd worden. ~PCCOM#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 herdefini‰ren. ~PCCOM#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 aange- past moeten worden. ~*CAT catalog disk (*.) Syntax: *CAT [filespec] Alle files die aan de opgegeven filespecificatie voldoen worden op het scherm weergegeven. Als er geen filespecificatie wordt opgegeven worden alle files van de actuele drive en directory afgebeeld. Files waarvan het hidden attribuut gezet is worden niet afgebeeld. ~*CD change directory Syntax: *CD [path] Als een path wordt opgegeven dan wordt de actuele directory gewijzigd in dit path mits het gevonden is. Als geen path opgegeven wordt, of alleen een drive aanduiding, dan wordt de actuele directory op de betreffende drive op het scherm aangegeven. ~*COMMAND ga tijdelijk naar MS-DOS Syntax: *COMMAND Hiermee kan het Atom programma tijdelijk onderbroken worden om in MS-DOS te werken. Vanuit MS-DOS kan met het EXIT commando teruggekeerd worden naar de Atom. Deze gaat dan verder waar het programma onderbroken werd. Dit commando werkt ook in een basic programma. ~*DELETE wis file(s) (*D.) Syntax: *DELETE Alle gevonden files worden zonder vragen van de disk verwijderd mits het read-only en het hidden attribuut gewist zijn. ~*DRIVE verander actuele drive (*DR.) Syntax: *DRIVE Hiermee kan de actuele drive veranderd worden. Als een ongeldige driveletter opgegeven is, wordt het commando zonder foutmelding geweigerd. Een dubbele punt achter de driveletter is bij dit commando optioneel. ~*EXEC execute file (*EX.) Syntax: *EXEC De opgegeven file wordt geopend en alle toetsenbord invoer via de vector #FFE3 (#20A) wordt gelezen uit het opgegeven bestand. Het exec commando wordt alleen be‰indigd door het tussentijds herstellen van de leesvector (het bestand wordt dan niet gesloten) of als de waarde 26 gelezen wordt (het bestand wordt dan wel gesloten). De filehandle van deze file is opgeslagen in adres #BC. ~*FIND zoek passende file (*FI.) Syntax: *FIND [] Dit commando zoekt een passende file aan de hand van de opgegeven filespecificatie. Voor de eerste zoekactie dient een filespecificatie opgegeven te worden. Voor verdere zoekacties moet alleen *FIND gegeven worden. Resultaten worden opgeslagen vanaf adres #140. Na het geven van een *FIND commando bevat adres #140 het resultaat; een 0 geeft aan dat er een file gevonden is. Informatie omtrent deze file is opgeslagen van #141 t/m #157. Hierin is de disk transfer area opgeslagen. De filenaam is te vinden vanaf adres #14A. Voor uitgebreide informatie over de DTA kunt u HELP DTA oproepen. ~*HELP geeft beknopte hulp (*H.) Syntax: *HELP Een beknopt overzicht van alle dos commando's wordt op het scherm afgebeeld. ~*HIDE zet hidden attribuut (*HI.) Syntax: *HIDE Van alle gevonden files wordt het hidden attribuut bit gezet, zodat deze files niet herkend worden door *CAT, *DELETE, *LOCK en *UNLOCK. ~*INFO file informatie opvragen (*I.) Syntax: *INFO Van de opgegeven file worden het moment van aanmaken, load adres, executie adres, file lengte en attributen weergegeven. Hier zijn in de filenaam geen jokers * en ? toegestaan. ~*LOAD file laden van disk (*L.) Syntax: *LOAD [loadadres] De opgegeven file wordt in het geheugen van de Atom geladen. Als er geen load adres wordt opgegeven dan wordt het load adres uit de file header gebruikt. Hier zijn in de filenaam geen jokers * en ? toegestaan. ~*LOCK maak file read-only (*LO.) Syntax: *LOCK Van alle gevonden files wordt het read-only attribuut bit gezet zodat deze niet meer gewist of overschreven kunnen worden. De files kunnen alleen nog maar gelezen worden. ~*MD maak directory Syntax: *MD Een nieuwe directory wordt aangemaakt indien het path geldig bevonden is. ~*PC geeft besturing aan MS-DOS Syntax: *PC [msdos-commando] Als er geen MS-DOS commando opgegeven is dan wordt het Atom terminal programma be‰indigd. Als er wel een commando opgegeven is dan wordt dit uitgevoerd. Daarna draait het Atom terminal programma verder. ~*RD verwijder directory Syntax: *RD De opgegeven directory wordt van disk verwijderd als deze leeg is en niet de actuele directory is. ~*RUN laadt en start file (*R.) Syntax: *RUN [loadadres] 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. ~*SAVE schrijf file naar disk (*S.) Syntax: *SAVE [execadres] Het geheugen van beginadres tot eindadres wordt onder de opgegeven naam naar disk geschreven. Bij het ontbreken van het executieadres wordt het beginadres op deze plaats ingevuld. Hier zijn in de filenaam geen jokers * en ? toegestaan. ~*SPOOL beeldschermuitvoer naar disk schrijven (*SP.) Syntax: *SPOOL Alle beeldschermuitvoer via de vector #FFF4 (#208) wordt eerst naar het opgegeven bestand geschreven. Dit commando wordt net als *EXEC be‰indigd door het herstellen van de schrijfvector (bestand wordt niet afgesloten) of door het schrijven van de code 26 (het bestand wordt wel afgesloten). De handle van deze file is opgeslagen in adres #B9. ~*UNHIDE reset hidden attribuut (*U.) Syntax: *UNHIDE Van alle gevonden files wordt het hidden attribuut bit gewist. ~*UNLOCK reset read-only attribuut (*UNL.) Syntax: *UNLOCK Van alle gevonden files wordt het read-only attribuut bit gewist. ~ASC2BAS Lees asciifile en converteer naar basicprogramma Syntax: ASC2BAS [drive][path] Veel tekst-editors voor PC's werken prettiger dan de Atom basic editor. Een programma kan met zo'n editor ingetypt worden en met dit statement ingeladen worden, waarbij de ascii-file automatisch omgezet wordt naar een basicprogramma. Voor een goede werking dient de ascii-file uitsluitend uit basic regels te bestaan, eventuele spaties voor het regelnummer zijn toegestaan; regels zonder regelnummer niet! Het basicprogramma wordt geladen vanaf #2900. ~ATOMVDU Standaard Atom tekstscherm Syntax: ATOMVDU Met dit statement wordt de schrijfvector gezet naar de originele Atom schrijfroutine op #FE52. Alle tekst wordt dan in een 32*16 tekstscherm afgebeeld. Deze mode kan alleen gebruikt worden om tekst af te drukken, niet voor het editen van programma's. Alvorens dit statement te geven dient de Atom in CLEAR 0 gezet te zijn. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Voordat ATOMVDU gebruikt kan worden moet de karakterset ³ ³ ATOMVDU.FNT geladen zijn. ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ~ATTRIB Zet tekst attribuut Syntax: ATTRIB a Het attribuut bepaalt de (achtergrond)kleur en intensiteit van een karakter in tekstmode. Voor kleurentekst modi hebben de bits de volgende betekenis: 7 6 5 4 3 2 1 0 ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿ ³ K ³ achtergrond ³ I ³ voorgrond ³ ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ K: knipperen I: Intensiteit Voor de achtergrondkleur gelden de volgende waarden: 000 0 zwart 100 4 rood 001 1 blauw 101 5 magenta 010 2 groen 110 6 bruin 011 3 cyaan 111 7 wit Voor de voorgrondkleur gelden de volgende waarden: I = 0 I = 1 000 0 zwart 000 0 grijs 001 1 blauw 001 1 lichtblauw 010 2 groen 010 2 lichtgroen 011 3 cyaan 011 3 lichtcyaan 100 4 rood 100 4 lichtrood 101 5 magenta 101 5 lichtmagenta 110 6 bruin 110 6 geel 111 7 wit 111 7 helder wit Voor monochroomtekst modi hebben de bits de volgende betekenis: 7 6 5 4 3 2 1 0 ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄ¿ ³ K ³ achtergrond ³ I ³ voorgrond ³ ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÙ K: knipperen I: Intensiteit achtergrond voorgrond beeldscherm 000 000 geen beeld zwart 111 111 geen beeld wit (alleen VGA) 000 001 onderstreept 000 111 normaal 111 000 ge‹nverteerd ~CENTER calibreer joystick Syntax: CENTER Een analoge joystick dient voor gebruik eerst gecalibreerd te worden. Daarmee wordt als het ware het referentiepunt voor de neutraalstand bepaald. Bij het opstarten van het terminal programma wordt de joystick automatisch gecalibreerd. Als tijdens het werken met de Atom een (andere) joystick aangesloten wordt dient deze eerst met dit statement gecalibreerd te worden. ~CLW wis tekstvenster Syntax: CLW Hiermee kan het actieve tekstvenster gewist worden. De achtergrond wordt gevuld met de waarde in het attribuut byte. Dit in tegenstelling tot het CLS commando uit het Gagsrom; daar wordt de achtergrond zwart gemaakt en wordt het tekstwindow gereset. ~CURSOR cursor controle Syntax: CURSOR ON De knipperende cursor wordt aangezet. Syntax: CURSOR OFF De knipperende cursor wordt uitgezet. Syntax: CURSOR TO x,y De cursor wordt geplaatst op de positie (x,y) waarbij (0,0) de linker bovenhoek van het actieve tekstvenster is. Syntax: CURSOR POS x,y De positie van de cursor wordt opgeslagen in de variabelen x en y. Hierbij wordt geen rekening gehouden met eventueel actieve tekstvensters! Syntax: CURSOR POS c De variabele c wordt gevuld met de asciiwaarde van het karakter dat zich bevind op de cursorpositie. ~DATE opvragen systeemdatum Syntax: DATE [$x] Als er geen string wordt opgegeven wordt de datum op het scherm afgedrukt. Als wel een string opgegeven wordt komt de datum als ascii tekst in deze string te staan. ~DAY opvragen systeemdag Syntax: DAY [$x] Als er geen string wordt opgegeven wordt de dag op het scherm afgedrukt. Als wel een string opgegeven wordt komt de dag als ascii tekst in deze string te staan. ~ESCAPE uit- en inschakelen van escape toets Syntax: ESCAPE=ON of OFF Als een programma niet onderbroken mag worden door een druk op de escape toets kan deze hiermee uitgeschakeld worden. Hiertoe wordt de OSBYTE-vector verlegd naar #703. OSBYTE-call #1 kan dan niet meer gebruikt worden. Een ander gebruik van dit statement kan zijn om te voorkomen dat de keyboard buffer van de PC steeds leeg is als een keyboardscan uitgevoerd wordt (OSBYTE #1 leest langzaam de keyboardbuffer leeg). Met ESCAPE=ON wordt de escape toets weer aangezet en het gebied #700 t/m #710 weer vrijgegeven. ~FONT laden van ramfont Syntax: FONT filespec Voor de grafische tekstmode GTEXT, grafische CGA-karakters 128-256 en voor EGA/VGA tekstmodi kunnen hiermee karaktersets geladen worden. De filespec mag een driveletter en een zoekpad bevatten maar geen jokers * of ?. ~GTEXT initialiseren grafische tekstmode Syntax: GTEXT [filespec] GTEXT laat alle beeldschermuitvoer, die door de Atom geproduceerd wordt, in een grafische mode tekenen. Hierbij wordt de schrijfvector verzet naar de PCBOX. Deze tekstmode is niet geschikt voor het editen van programma's. Tevens zullen foutmeldingen en het *CAT commando schrijven in de normale PC mode. Als een filespec wordt opgegeven wordt eerst een karakterset geladen. Deze filespec mag een driveletter en een zoekpad bevatten maar geen jokers * of ?. ~INP lees byte van PC I/O bus Syntax: INP adres,var Met dit statement kan I/O hardware, die op de PC is aangesloten, direct worden aangesproken. Het opgegeven adres wordt van de PC I/O bus gelezen en in de opgegeven variabele geplaatst. ~KADER teken kader Syntax: KADER xlo,ylo,xrb,yrb,mode,kleur De eerste vier parameters bepalen de afmetingen van het kader; xlo en ylo zijn de co”rdinaten van de linker onderhoek en xrb en yrb zijn de co”rdinaten van de rechter bovenhoek. Deze co”rdinaten 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 be‰indiging van het statement bevind de cursor zich in de linker bovenhoek van het kader. NB: Let erop dat het 7e bit niet gereset wordt. Zie het statement MSB. ~LPT selecteer printer Syntax: LPT = printernummer Het kiezen van een printer kan met dit statement. Alle printeruitvoer na $2 wordt naar de opgegeven printer gestuurd. Dit statement is identiek aan het PRN= statement. ~MENU opstarten !BOOT file Syntax: MENU Een mogelijkheid om een menu of grafisch gebruikersinterface te maken begint met het menu statement. De exit-vector wordt gezet naar een routine die van de actuele drive de file !BOOT in de directory \ATOM opstart. Deze !BOOT-file mag een basic of assembler programma zijn, zolang deze maar gestart kan worden met *RUN. Als de file \ATOM\!BOOT niet gevonden wordt volgt een melding. Met wordt het statement afgebroken, met wordt opnieuw geprobeerd, maar dan op een andere disk. Alle programma's die eindigen met het EXIT statement of met OSBYTE #6 laden automatisch de !BOOT-file opnieuw. Een programma dat eindigt met END of een RTS instructie komt terug in basic. Door dan het commando EXIT te geven wordt het menu alsnog gestart. ~MOUSE muis controle Syntax: MOUSE commando parameters Na het MOUSE statement volgt nog een tweede statement. Een beschrijving van deze statements staat hieronder beschreven. MOUSE BUTTON knop,P/R,result,x,y Hiermee kan de beweging van de afzonderlijke muistoetsen gelezen worden. Met de waarde 'knop' wordt een van de toetsen opgegeven. P/R leest het aantal keren dat een toets ingedrukt of losgelaten is. Het aantal keren komt in de variabele 'result' en de muispositie van de laatste actie staat in de variabelen x en y. MOUSE CHAR c In tekstmode wordt het karakter op de muiscursor- positie gelezen en in de variabele c gezet. In grafische modi is het resultaat niet gedefini‰erd. 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 gedefini‰erd 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. ~MSB masker voor 7e bit in tekstmodi Syntax: MSB = masker Waarbij masker de waarde voor masker 0 of 1 is. Als het masker '0' is dan wordt van ieder af te drukken karakter bit 7 gewist. De asciiwaarden #80 t/m #9F geven dan de speciale symbolen die vervallen in verband met de controlcodes. ~PRN selecteer printer Syntax: PRN = printernummer Het kiezen van een printer kan met dit statement. Alle printeruitvoer na $2 wordt naar de opgegeven printer gestuurd. Dit statement is identiek aan het LPT= statement. ~OUT schrijf byte naar PC I/O bus Syntax: OUT adres,data Met dit statement kan I/O hardware, die op de PC is aangesloten, direct worden aangesproken. De opgegeven data wordt naar het opgegeven PC I/O bus adres geschreven. ~PCBOX geeft versienummer en overzicht statements Syntax: PCBOX ~REPORT verklaar nummer van foutmelding Syntax: REPORT errornummer Standaard worden foutmeldingen als tekst gegeven. In sommige gevallen, bijvoorbeeld als een programma begint met het PROGRAM statement uit P-Charme, verschijnt toch nog de oude foutmelding. Aan de hand van de foutcode kan alsnog om de betekenis van de foutmelding gevraagd worden. ~SCAN uitvoeren van bios toetsenbordroutines Syntax: SCAN functie,resultaat Afhankelijk van het functienummer wordt een routine van PC INT 16H uitgevoerd. Het register AX wordt in de variabele 'resultaat' geplaatst. Functie 0: Deze functie leest een teken uit het toetsenbord buffer. Als deze leeg is wordt gewacht totdat een toets wordt ingedrukt. Het gelezen teken wordt uit de buffer verwijderd. Functie 1: Deze functie kijkt of een teken in de toetsenbordbuffer klaarstaat. Als dat het geval is wordt de waarde ervan als resultaat teruggegeven. (Bij een lege buffer is het resultaat #0101). Het gelezen teken wordt niet uit de buffer verwijderd zodat het nogmaals met functie 0 of functie 1 gelezen kan worden. Functie 2: Deze functie bepaalt de status van een aantal toetsenbord-modi en geeft de status van de shift, ctrl en alt toetsen weer. Bij gebruik van het SCAN statement dient u er rekening mee te houden dat er verschillende kunnen optreden bij gebruik van een XT of AT. Met name de scan-codes kunnen afwijken! ~TIME opvragen systeemtijd Syntax: TIME [$x] Als er geen string wordt opgegeven wordt de tijd op het scherm afgedrukt. Als wel een string opgegeven wordt komt de tijd als ascii tekst in deze string te staan. ~TSIZE zet afmetingen tekst Syntax: TSIZE x,y Met dit statement kunnen de afmetingen van karakters in GTEXT ingesteld worden. De eerste parameter zorgt voor bredere karakters en de tweede parameter zorgt voor hogere karakters. ~TWINDOW zet tekstvenster Syntax: TWINDOW xlo,ylo,xrb,yrb De opgegeven co”rdinaten bepalen de positie van het tekstvenster. Buiten dit venster kan de Atom niet schrijven. Deze co”rdinaten gelden altijd ten opzichte van de linker bovenhoek van het scherm. ~TWOFF reset tekstvenster Syntax: TWOFF Het tekstvenster wordt opgeheven. Hierbij wordt het scherm niet gewist. ~txmod schakel naar normaal tekstscherm Syntax: TXMOD De grafische modi, GRMOD uit josbox en GTEXT worden hiermee afgesloten. Testvensters worden gereset en het scherm wordt gewist. Verder wordt het video interrupt geblokkeerd. ~UDS defini‰er karakter Syntax: UDS karakter,d0,...,d15 Voor de grafische karakterset kunnen met UDS karakters gedefini‰erd worden. De eerste parameter is de ascii waarde van het te defini‰ren karakter. De overige zestien parameters bepalen het bitpatroon van het karakter. ~CHIP x - Dit statement schakelt de opgegeven rombank voor. ~EXIT - Veroorzaakt een sprong naar de EXIT-vector. Deze wijst normaal naar het END-statement. ~LATCH - geeft de status van de latch op de Atomkaart weer. Hiertoe worden beide schaduwbytes gelezen. ~LOCK x - Dit commando schakelt de opgegeven rombank voor en zet deze vast. ~OSV - Toont alle operating systeem vectoren met hun adressen. ~SYST - Geeft een lijstje met alle statements en hun beginadressen. ~SYSV - Geeft versienummer van operating systeem en schakelsoft, alsmede het processortype. ~WP - Write protect; WP ON zet write protect aan; WP OFF zet write protect uit. ~SCAN_CODES : Shift-Tab 15 F1 ... F10 59 - 68 Shift-F1 ... Shift-F10 84 - 93 Ctrl-F1 ... Ctrl-F10 94 - 103 Alt-F1 ... Alt-F10 104 - 113 Alt-1,2,3,4,5,6,7,8,9,0,-,= 120 - 131 Alt-Q,W,E,R,T,Y,U,I,O,P 16 - 25 Alt-A,S,D,F,G,H,J,K,L 30 - 38 Alt-Z,X,C,V,B,N,M 44 - 50 Cursor omhoog 72 Cursor omlaag 80 Cursor links 75 Cursor rechts 77 Ctrl-cursor links 115 Ctrl-cursor rechts 116 Ins, Del, Home, End, PageUp,PageDown 82, 83, 71, 79, 73, 81 Ctrl-Home, Ctrl-End 119, 117 Ctrl-PageUp, Ctrl-PageDown 132, 118 ~DTA - MSDOS Disk Transfer Area De DTA is een blok van oorspronkelijk minstens 43 bytes. Hiervan zijn er 21 gereserveerd voor MS-DOS en deze worden door de Atom niet gebruikt. De Atom kan alleen informatie lezen uit de DTA en heeft zodoende aan de overige 22 bytes genoeg. In het DTA is de volgende informatie opgeslagen: byte 0 : attribuut van het gevonden bestand byte 1-2 : tijd laaste wijziging byte 3-4 : datum laatste wijziging byte 5-8 : lengte van het bestand byte 9-21 : naam van het bestand (normale ascii string) Deze informatie heeft betrekking op de DTA die bij de Atom bekend is en niet de originele MS-DOS DTA. De tijd heeft de volgende vorm: ÚÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄ¿ ³u³u³u³u³u³m³m³m³m³m³m³s³s³s³s³s³ ÀÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÙ ÀÄÄÄÂÄÄÄÙ ÀÄÄÄÄÂÄÄÄÄÙ ÀÄÄÄÂÄÄÄÙ ³ ³ ÀÄÄÄÄÄÄÄÄ seconden/2 (0..29) ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ minuten (0..59) ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ uren (0..23) De datum heeft de volgende vorm: ÚÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄ¿ ³j³j³j³j³j³j³j³m³m³m³m³d³d³d³d³d³ ÀÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÙ ÀÄÄÄÄÂÄÄÄÄÄÄÙ ÀÄÄÂÄÄÙ ÀÄÄÄÂÄÄÄÙ ³ ³ ÀÄÄÄÄÄÄÄÄ dag (1..31) ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ maand (1..12) ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ jaar-127 (0..127) Het attribuutbyte heeft de volgende betekenis: ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ ³ 0 ³ 0 ³ A ³ D ³ V ³ S ³ H ³ R ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ ³ ³ ³ ³ ³ ÀÄÄÄ 1 = read-only ³ ³ ³ ³ ÀÄÄÄÄÄÄÄ 1 = hidden ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄ 1 = system ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 1 = volume label ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 1 = directory ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ 1 = archief ~ROLAND LEURS Is een zeer slimme knul uit het zuiden des lands die een PC-insteekkaart ontwikkelde waarop een hele Atom is opgebouwd. Samen met een uitgebreid terminalprogramma {Atom.Com} kunnen alle mogelijkheden van een PC worden benut. Roland werd in 1984 lid van de Atom Computerclub en heeft sindsdien vele artikelen en ontwerpen uit Atom Nieuws op zijn naam staan. In 1988 werd hij free-lance redactie-medewerker en in 1989 redactielid van zojuist genoemd blad. ~PASCALLE LEURS Is een van de liefste vrouwen op de hele wereld. Zij is in juli 1992 met Roland getrouwd (zie voorpagina AtomNieuws 11.2, op het TV-schermpje bovenaan in het midden. Pascalle geeft soms zeer goede tips in verband met het oplossen van een moeilijk COMPUTERprobleem. Ook deze helptekst is van haar hand (behalve dit trefwoord). Verder is ze ook graag bezig met computers en houdt zij van soap-series zodat ze niet altijd verveeld op Roland hoeft te wachten .... ~AUTO regelnr,stap Automatisch regelnummers genereren Het AUTO statement vereenvoudigt het intikken van programma's met zijn dubbele functie. Behalve automatisch regelnummers aanmaken wordt er bij de volgende regel automatisch ingesprongen. De parameter 'regelnr' is het eerste regelnummer, 'stap' is de stapgrootte tussen twee regelnummers. Beide parameters zijn optioneel en mogen dus weggelaten worden. In dat geval is de standaardwaarde 10. ~BEEP hoogte,duur Geluid opwekken Met dit statement wordt een toon opgewekt d.m.v. OSBYTE#05. De hoogte mag niet boven 96 liggen. De duur van de toon wordt opgegeven in 18den van seconden. ~BSAVE "filenaam" Basic programma saven Dit statement is speciaal bedoeld om basic programma's te saven. De syntax is hetzelfde als die van SAVE. Het executie-adres van de ge-save-de file is #AFAF. NB: Voor de Atom in PC is dit statement overbodig; het normale SAVE statement geeft nu als executieadres #F144. Hier staat een verbeterde auto-start routine. ~CASE expressie OF case-blok Het begin van een CASE blok. Het is bedoeld om uit verschillende mogelijkheden er slechts een te kiezen. De expressie kan een variabele of een berekening zijn. De volgende regels beginnen met een case-label <....>; als in een case-blok de expressie voldoet aan een case-label dan wordt de regel achter dat label afgewerkt. Een case-blok eindigt met het CEND statement. voorbeeld: 10 CASE J-48 OF 20 <2> PRINT "DIT IS EVEN"' 30 <3> PRINT "DIT IS " 40 PRINT "ONEVEN"' 50 <1> PRINT "J=49"' 60 CEND ~CAT catalog Hiermee kunnen alle basicprogramma's tussen #400 en #A000 opgezocht worden, mits deze met het PROGRAM statement beginnen. Op het scherm verschijnt een lijstje met de programma's en hun beginpagina. ~CEND afsluiten van case-blok Hiermee wordt een case-blok, dat begint met het CASE-statement, afgesloten. Voor een goede werking dient CEND aan het begin van een regel te staan en mag het niet worden afgekort. ~CONT ga verder met programma Met het statement STOP kan een programma op een bepaalde plaats gestopt worden. Er volgt dan de melding STOP AT xxx. Met CONT kan met de uitvoering van het programma vanaf die plaats verder gegaan worden. ~COPY bbbb, eeee, dddd geheugenblok kopieren Het geheugengebied van bbbb tot en met eeee wordt gekopieerd naar dddd. Als dddd tussen bbbb en eeee in ligt dan volgt een soort fill-statement waarbij het geheugen gevuld wordt met de bytes tussen bbbb en dddd. Voorbeeld: COPY 32000,33000,32004 Na afloop van dit statement is het gebied tussen 32000 en 33000 gevuld met steeds dezelfde 4 bytes. ~COS speed selecteer 300/1200 baud cassette systeem Een 1200 baud routine wordt ingeschakeld met COS 1 en een 300 baud routine wordt ingeschakeld met COS 0. Aangezien de Atom-in-PC geen cassette operating systeem ondersteund is dit statement geheel overbodig geworden. ~DATA gegevensopslag in basicregels De regel achter DATA wordt niet verder geinterpreteerd; die is bedoeld voor opslag van gegevens die met het READ statement opgevraagd kan worden. Dit statement dient het eerste van een regel te zijn en mag niet worden afgekort. ~DEL regels verwijderen Met DEL kunnen op snelle manier regels uit een basicprogramma verwijderd worden. Als parameters kunnen opgegeven worden: DEL x , y verwijder regel x t/m y DEL x , verwijder alles vanaf regel x DEL , y verwijder alles tot en met regel y DEL /string/ verwijder alle regels waar 'string' in voorkomt Als extra optie kan gegeven worden V - vraag eerst of regel verwijderd mag worden L - laat alle verwijderde regels nog even zien ~ELSE alternatief bij XIF statement Dit statement heeft twee betekenissen: - moeder van Pascalle, dus schoonmoeder van Roland - alternatie bij XIF statement, zie aldaar ~EVEN (argument) functie Als het argument even is dan geeft deze functie de waarde TRUE (=1) terug. In het andere geval wordt de waarde FALSE (=0) teruggegeven. ~FALSE functie Deze functie geeft altijd de waarde 0 terug. ~FEND einde FUNCTION blok Dit is het statement dat het eind aangeeft van een function-blok. FEND behoort het eerste statement op de regel te zijn en mag niet worden afgekort. ~FUNCTION definitie van een functie Functies kunnen gebruikt worden om in een stuk programma een waarde te berekenen en die waarde vervolgens te gebruiken in een expressie. Het functie blok begint met het woord FUNCTION en eindigt met FEND. Voor een uitgebreide uitleg wordt toch verwezen naar de handleiding van P-Charm of naar de vele artikelen hierover in Atom Nieuws. ~HEX adres hex/ascii dump Vanaf het opgegeven adres wordt een gecombineerde hexdump/asciidump gegeven. Alle niet-ascii tekens worden weergegeven als een '.' Hex dumpt in een 32 kolommen scherm. ~HTAB x horizontale tab De cursor wordt x karakters van de linker kantlijn gezet. ~ICOPY bbbb,eeee,dddd intelligent kopieeren Het geheugengebied bbbb tot en met eeee wordt gekopieerd naar dddd. Als dddd tussen bbbb en eeee ligt volgt geen fill effect; het is hierdoor dus mogelijk om een stuk geheugen over bijvoorbeeld 1 byte te verschuiven. ~INKEY k wacht op toetsaanslag Het INKEY statement wacht totdat een toets wordt ingedrukt. De ascii waarde van die toets wordt in de variabele k (A...Z) opgeslagen. ~INSTR in string ? Met behulp van deze integer functie kan in een bepaalde string worden gezocht naar een andere string. De syntax is: INSTR( string1, string2) waarbij de haakjes verplicht zijn. De string mag zowel als $ gegeven worden of als "string". Het resultaat van de functie is de positie waar de tweede string in de eerste string voorkomt. Als de tweede string niet in de eerste voorkomt dan is het resultaat 0. ~KEY k voer toetsenbord scan uit Het KEY statement kijkt of er een toets wordt ingedrukt. Zo ja, dan wordt de variabele k (A...Z) gevuld met de ascii waarde van die toets. Anders wordt de variabele k gelijk aan 0. Dit statement wacht niet totdat een toets wordt ingedrukt. ~NOT ontkennen Deze functie voert een logische ontkenning uit. Als het argument van NOT 0 is, is het resultaat <>0 en vise versa. ~ODD (argument) functie Als het argument oneven is dan geeft deze functie de waarde TRUE (=1) terug. In het andere geval wordt de waarde FALSE (=0) teruggegeven. ~ON diverse mogelijkheden ON ERROR fout opvangen Als er tijdens de uitvoering van een programma een fout optreedt wordt de uitvoering voortgezet achter het ON ERROR statement. Bovendien worden dan FOR....NEXT, DO....UNTIL en GOSUB....RETURN lussen vergeten. Let erop dat in de ON ERROR routine geen fout staat. ON ... GOSUB gosub selector Dit statement geeft de mogelijkheid om te kiezen uit een aantal mogelijke subroutines. Syntax: ON expr GOSUB line, line, line, ... Hierin is line een regelnummer of een label. Afhankelijk van de waarde van de expr wordt gesprongen naar de eerste, tweede, derde etc subroutine. Als expr groter is dan het aantal opgegeven subroutines wordt er niet gesprongen. ON ... GOTO goto selector Hetzelfde als ON ... GOSUB, maar dan voor sprongen via GOTO. ~PAUSE duur pauze, lekker niets doen Er wordt gewacht in eenheden van 1/18e seconden. De totale schafttijd is dus duur/18 seconden. ~PEND einde procedureblok Dit is het statement dat het eind aangeeft van een function-blok. PEND behoort het eerste statement op de regel te zijn en mag niet worden afgekort. ~PROC definitie van een functie Procedures kunnen gebruikt worden om een sub-programma te creeeren die aangeroepen kunnen worden vanuit het hoofdprogramma, andere procedures of door zichzelf (dus recursie!). Voor een uitgebreide uitleg wordt toch verwezen naar de handleiding van P-Charm of naar de vele artikelen hierover in Atom Nieuws. ~POP uitnodiging om niet netjes te programmeren Dit statement haalt een returnadres van de GOSUB stack. Dit schijnt handig te zijn indien een programma tijdens het uitvoeren van een programma zich in een subroutine bedenkt en geen RETURN wil uitvoeren, maar op een andere manier uit de subroutine wil springen. Een POP voorkomt dat er in dat geval problemen met de stack ontstaan, maar bevordert de toch al aantrekkelijke spaghetti programmastructuur. ~PROGRAM programma heading Een programma dat optimaal gebruik wil maken van P-Charme begint met het PROGRAM statement. Achter program mag een naam voor het programma komen te staan en eventueel nog wat extra tekst. Behalve het programma een naam geven doet PROGRAM nog wat meer: Automatische restore aan het begin van het programma Initialisatie van procedures en functies Initialisatie van ingebouwde functies Initialisatie error aanwijsroutine Initialisatie multidimensionale array's Initialisatie while loops Herkenning t.b.v. van statement CAT De BRKVEC wordt voor de duur van het programma verzet naar P-Charme. Een goede naam voor het programma begint met twee verschillende letters en eindigt met een karakter dat kleiner is dan de ascii waarde van de letter 'A', met uitzondering van het - teken. Een programma dat ergens in het geheugen staat en begint met PROGRAM kan door de naam in te geven gestart worden. PROGRAM moet het eerste statement van het programma zijn en mag niet worden afgekort. ~READ lees data Met het read statement kunnen integer, floating point, array en string variabelen worden ingelezen. De gegevens voor het READ statement staan opgeslagen in de regels die met DATA beginnen. De allereerste READ opdracht begint bij de eerste DATA regel te lezen (mits het programma begint met PROGRAM). De pointer voor het READ statement kan gewijzigd worden met het RESTORE statement. ~RENUM regelnr,stap hernummer programma Dit statement hernummert een basic programma waarbij rekening gehouden wordt met GOTO, GOSUB, RESTORE en ON ... GOSUB/GOTO. De parameter 'regelnr' is het eerste regelnummer, 'stap' is de stapgrootte tussen twee regelnummers. Beide parameters zijn optioneel en mogen dus weggelaten worden. In dat geval is de standaardwaarde 10. ~STOP stop het programma Tijdens het foutzoeken kan STOP gebruikt worden om het programma tijdelijk te onderbreken. Er volgt een melding STOP AT LINE xxx. Er kunnen dan bijvoorbeeld variabelen worden bekeken of gewijzigd. Het programma zelf mag niet gewijzigd worden. De uitvoering kan voortgezet worden met CONT. ~TRUE waar Deze functie levert altijd de waarde 1 op. ~VAR variabele dump Dit statement drukt in twee kolommen de variabelen A tot en met Z af. ~VTAB y vertikale tabulatie De cursor wordt aan het begin van regel y gezet. De bovenste regel is regel 0. ~WEND einde WHILE lus Dit statement is het einde van een WHILE lus. WEND behoort het eerste statement op de regel te zijn en mag niet worden afgekort. ~WHILE expr begin WHILE - WEND lus Een WHILE lus, die begrenst moet zijn door WHILE en WEND, wordt net zolang uitgevoerd totdat de expressie achter WHILE gelijk aan FALSE wordt. Indien de expressie al bij het begin false is, wordt het hele WHILE blok overgeslagen. Als de lus verlaten wordt gaat het programma verder achter het WEND statement. WHILE mag tot 10 niveau's genest worden, niet afkorten en moet aan het begin van de regel staan. ~XIF expr THEN ... expanded IF Het XIF statement behoort te worden gebruikt samen met het ELSE statement. Indien de expressie achter XIF de waarde TRUE oplevert wordt het gedeelte achter THEN wel uitgevoerd en het stuk achter ELSE niet. Indien de expressie de waarde FALSE oplevert dan wordt het stuk achter THEN niet uitgevoerd maar wel het stuk achter ELSE. THEN mag eventueel weggelaten worden. Voor een goede werking moeten XIF en ELSE aan het begin van de regel staan en mogen ze niet worden afgekort. Merk op dat het gedeelte achter THEN uit meerdere regels mag bestaan, maar het gedeelte achter ELSE mag maar uit een regel bestaan. ~ZERO variabelen wissen Dit is een statement dat de variabelen A t/m Z vult met de waarde 0. ~FIND string zoek string De opgegeven string wordt gezocht in het aanwezige basicprogramma. De string mag als $ opgegeven worden of als "string". ~FCOS 1200 baud COS - Niet meer van toepassing bij de Atom-in-PC ~SCOS 300 baud COS - Niet meer van toepassing bij de Atom-in-PC ~XDUMP bbbb [,[eeee]] hexadecimale/ascii dump Geeft een 32 koloms hex/ascii dump. ~HDUMP bbbb [,[eeee]] hexadecimale/ascii dump Geeft een 32 koloms hex/ascii dump. ~DISAS bbbb [,[eeee]] dis-assembler Disassembleert het opgegeven geheugengebied. ~STEP [,display] single step routine Een machinetaal programma wordt stap voor stap doorlopen. Na iedere instruktie wordt een disassembler gegeven met de actuele register inhouden. Gewacht wordt op een druk op de spatiebalk. Als display gegeven is wordt pas vanaf dat adres begonnen met het afdrukken op het scherm. Alle instrukties tussen 'start' en 'display' worden dan normaal uitgevoerd. De registers A, X en Y kunnen bij het begin gezet worden door de variabelen A, X en Y. ~PLAY noot [, noot, noot etc] Speelt noten in drie oktaven. Wordt niet ondersteund bij de Atom in PC. ~SHAPE adres teken figuurtje Hiermee wordt een opgegeven figuur op het scherm getekend volgens een "gepackte" tabel op locatie 'adres'. Het eerste byte van de SHAPE tabel geeft de lengte van de tabel aan. De volgende bytes geven informatie over de te plotten figuur. opdracht 1 opdracht 2 ÚÄÄÄÄÄÁÄÄÄÄÄ¿ ÚÄÄÄÄÄÁÄÄÄÄÄ¿ ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿ byte ---> ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ ÀÄÂÄÙ ÀÄÂÄÙ ÀÄÂÄÙ ÀÄÂÄÙ plotpar. richting plotpar richting De plotparameter wordt als volgt bepaald: 00 : move 01 : set (wit) 10 : inv (wit <> zwart) 11 : reset (zwart) De richting wordt als volgt bepaald: 00 : links 01 : rechts 10 : omhoog 11 : omlaag Er komen dus twee plot opdrachten per byte. De positie van het figuurtje wordt met het move statement bepaald. ~RELOC bbbb,eeee,dddd verplaats machinetaal programma Het gebruik van RELOC lijkt op COPY; het geheugenblok van bbbb t/m eeee wordt gekopieerd naar dddd waarbij eventuele adressen automatisch aangepast worden. ~GRMOD tekst in grafische mode Geeft de mogelijkheid om tekst te gebruiken in de Atom clear 4 mode; tekst en grafics kunnen door elkaar heen gebruikt worden. ~DISK reset Disk operating systeem vectoren Dit statement initialiseert het DOS. ~USR aaaa machinetaal programma starten Het statement USR werkt hetzelfde als LINK met het verschil dat de registers A, X en Y in de laagste bytes komen te staan van de gelijknamige basic variabelen. Op die manier kan eenvoudig een eventueel resultaat van een routine via de registers naar het oproepende basicprogramma gegeven worden. ~OSBYTE routines OSBYTE#00 druk o.s. versie nummer af OSBYTE#01 test escape toets OSBYTE#02 initialiseer alternatieve graphics mode OSBYTE#03 initialiseren/opvragen VDU mode OSBYTE#04 wacht op PC timertick OSBYTE#05 produceer geluid OSBYTE#06 spring naar exit vector OSBYTE#07 opvragen/wijzigen exit vector OSBYTE#08 opvragen processor gegevens OSBYTE#09 instellen van pieptoon $7 OSBYTE#0A reset semafoor voor PC communicatie OSBYTE#0B test en set semafoor voor PC communicatie OSBYTE#0C wek foutmelding op OSBYTE#0D geeft tekst voor foutmelding Een osbyte routine wordt opgeroepen via de vector #FFC2 met het nummer van de routine in de Accu. Eventuele parameters kunnen via het X en Y register meegegeven worden. Uitleg over deze routines kan opgevraagd worden met HELP gevolgd door het keyword OSBYTE#xx waarbij xx voor het gewenste nummer staat. ~PC-COMMANDO lijst van PC-commando's Het Atom Terminal programma herkent de volgende commando's: #00 Druk $0 af #01 Keyboard scan #02 Lees karakter op cursorpositie #03 Plot pixel #04 Initialiseer grafische mode #05 Plot pixel in clear 4 co”rdinatenstelsel #06 Ramfont laden #07 Schrijf string in grafische mode #08 Zet horizontale en vertikale schaalfactor #09 Zet cursor aan #0A Zet cursor uit #0B File van disk laden #0C File naar disk schrijven #0D Disk catalog op scherm afbeelden #0E Veranderen/opvragen van huidige directory #0F Verwijder directory #10 Maak directory aan #11 Verwijder file van disk #12 Lock files #13 Unlock files #14 Verander actuele drive #15 Ga naar MS-DOS #16 Maak file verborgen #17 Maak files weer zichtbaar #18 Opvragen file informatie #19 Produceer geluid #1A Instelling bell-toon #1B Druk foutmelding af #1C Oproepen muisfunctie (PC INT 33) #1D Definieer muiscursor #1E Opvragen cursorpositie #1F Oproepen video functies (PC INT 10) #20 Oproepen seri‰le communicatie functies (PC INT 14) #21 Oproepen printer functies (PC INT 17) #22 Oproepen MS-DOS functies (PC INT 21) #23 Lees I/O byte #24 Schrijf I/O byte #25 Defini‰er grafische letter #26 Opvragen muis aktiviteiten #27 Opvragen PC informatie #28 Emulatie clear 0 #29 Wijzigen van palet of achtergrondkleur in CGA modi #2A t/m #31 Emulatie grafische Atom modi #32 Inschakelen extended video mode #33 Zet graphics kleur voor extended video mode #34 Schrijf grafisch pixel in extended video mode #35 Instellen tekstvenster #36 Opheffen tekstvenster #37 Joystick uitlezen #38 Joystick calibreren #39 Masker bit 7 instellen #3A Oproepen keyboard functies (PC INT 16) #3B Shell naar DOS #3C Zoek eerste passende file #3D Zoek volgende passende file #3E Selecteer printer #3F Open random access file #40 Sluit random access file #41 Schrijf byte naar random access file #42 Lees byte van random access file #43 Verplaats random access file pointer #44 Opvragen extensie van random access file #45 Lees teken onder muiscursor #46 Opvragen versienummer terminal programma #47 Teken naar printer sturen #48 CGA grafisch teken defini‰ren #49 Horizontaal vullen #4A Vertikaal vullen #4B Aanroepen INT 61h #4C Defini‰er een grafisch venster #4D Grafisch venster opheffen #4E Grafische oorsprong verschuiven #4F Selecteer schermpagina voor monitor #50 Selecteer schermpagina voor bewerkingen #51 Zet cursor lijnen #52 Gereserveerd #53 Gereserveerd #54 Gereserveerd #55 Selecteer user font voor EGA/VGA tekstmode #56 Selecteer EGA 8*14 ROM font #57 Selecteer EGA 8*8 ROM font Een commando wordt naar de PC gestuurd door via de vector #FFC8 eerst een 0- byte te sturen, direct gevolgd door het commandonummer en eventuele parameters. Let erop dat steeds het juiste aantal bytes geschreven en gelezen moeten worden. Meer informatie over een PC commando is te verkrijgen met het HELP commando met als sleutelwoord PCCOM#xx waarbij xx het gewenste commando nummer is. ~BIN xxxxxxxx waarbij x= 0 of 1 Achter bin mogen maximaal 8 binaire bits gegeven worden. Op het scherm verschijnt dan de hexadecimale waarde ervan. ~BIT x Bit geeft de binaire waarde van het low word van de expressie; dit mag een variabele, constante of functie zijn. ~DAS #xxxx of DAS #xxxx,#yyyy Een disassembler met als bijzonderheid dat teksten, die in een machinetaal- programma worden geschreven via #F7D1, als leesbare tekst worden getoond. Bij invoer van alleen het startadres gaat DAS door tot aan #FFFF. Bij invoer van het eindadres treedt tevens een speciale printeroptie in werking; als de printer on-line is wordt gevraagd of de uitvoer ook op papier afgedrukt moet worden. Antwoord met J of N. Ontsnappen kan altijd met escape. ~FVAR fp vardump Drukt alle floating-point variabelen af op het scherm. ~FZERO fp var wissen Geeft alle floating-point variabelen de waarde 0.0 ~JBOX helpfunctie Geeft een overzicht van alle JBOX commando's. ~HXD #xxxx of HXD #xxxx,#yyyy Een 80-koloms hexdump routine waarbij per regel 16 adressen hexadecimaal en tevens in ASCII weergegeven worden. Bij invoer van alleen het startadres gaat HXD door tot aan #FFFF. Bij invoer van het eindadres treedt tevens een speciale printeroptie in werking; als de printer on-line is wordt gevraagd of de uitvoer ook op papier afgedrukt moet worden. Antwoord met J of N. Ontsnappen kan altijd met escape. ~HIP #xxxx HIP is de afkorting van Hexadecimal InPut. Per adres wordt de geheugeninhoud getoond en verschijnt een vraagteken. Hierachter kan ingevoerd worden: - return , hip gaat dan verder naar het volgende adres - een hexadecimaal getal , hip plaatst het getal in het geheugen - letter T + een karakter , hip plaatst het karakter in het geheugen Het statement kan beeindigd worden met ESCAPE. ~HVAR vardump Toont de inhoud van de variabelen A t/m Z hexadecimaal op het scherm. ~INFO programma status geeft een overzicht van het in de huidige tekstpagina aanwezige basic- programma. PAGE, TOP, DIMTOP, SIZE en FREE memory worden op het scherm gezet. ~LAB label overzicht geeft een overzicht van de gebruikte labels in het aanwezige programma. Eerst worden de assembler labels getoond, daarna de basiclabels met het regelnummer waar ze voorkomen. Tenslotte verschijnt een regel waarin aangegeven wordt welke labels nog vrij zijn en welke al gebruikt zijn. ~LINE x waarbij x een regelnummer is. Als de regel gevonden is verschijnt het adres op het beeldscherm. ~LIB programmageheugen overzicht oftewel 'library', toont de eerste regel van alle in het geheugen aanwezige basicprogramma's, voorafgegaan door hun paginanummer. Een = teken achter het paginanummer geeft aan waar de tekstpointer staat. Vervolgens verschijnt PAG # op het scherm. Een return laat de tekstpagina ongewijzigd, bij invoer van een hexadecimaal getal zet de tekstpagina naar de opgegeven waarden. MFIND #xxxx,#yyyy,??? MultiFIND zoekt in het geheugengebied xxxx t/m yyyy naar ??? en toont de adressen waar het zoekargument gevonden is op het scherm. Voor ??? mag ingevuld worden: een hexadecimaal getal bijv. #40 een assembler mnemonic bijv. LDA #80,X een string bijv. "ATOM" Als het zoeken te lang gaat duren kan het gestopt worden met ESCAPE. ~PACK "stofzuiger" is een supersnelle opruimer van overbodige spaties in een basicprogramma. Let erop dat dit ook in teksten achter REM gebeurt. ~PLIST x,y geeft u, met printeroptie, een listing van een programma. Daarbij wordt voor elk regelnummer x spaties ingesprongen en achter elk regelnummer worden y spaties toegevoegd, behalve bij [ , ] , assembler labels en basiclabels. ~RAM #xxxx,#yyyy Een snelle ramtest; test het geheugen tussen #xxxx en #yyyy waarbij de aanwezige data niet verloren gaan. Stoppen kan met ESCAPE. ~TRACE #xxxx of TRACE #xxxx,#yyyy Een machinetaal programma wordt stap voor stap doorlopen. Na iedere instruktie wordt een disassembler gegeven met de actuele register inhouden. Gewacht wordt op een druk op de spatiebalk. Als yyyy gegeven is wordt pas vanaf dat adres begonnen met het afdrukken op het scherm. Alle instrukties tussen xxxx en yyyy worden dan normaal uitgevoerd. De registers A, X en Y kunnen bij het begin gezet worden door de variabelen A, X en Y. ~VER #xxxx,#yyyy,#zzzz vergelijkt de geheugeninhoud van #xxxx t/m #yyyy met #zzzz en verder. Niet met elkaar overeenkomende adressen worden op het scherm getoond. Ontsnappen met escape. ~#xx page zetten werkt als ?18=xx;END Top wordt goedgezet en getoond. ~GAGS - Geeft het versienummer van het Gagsrom. ~CLS - Wist het scherm; selecteert altijd 80 kolommen tekstmode. ~ATKEY (A,B,C,....)(a,b,c,....) M.b.v. ATKEY worden toetsen toegekend aan regelnummers of labels. Bij het indrukken van de eerste toets zal naar het eerste regelnummer of label gesprongen worden. ~JOYSTK A,B,C De joystick wordt via de joystickvector #FFBF uitgelezen en de opgegeven variabelen worden aangepast aan de hand van de status van de joystick: A - variabele A t/m Z wordt met 1 verhoogd als stick naar rechts of met 1 verlaagd als stick naar links B - variabele A t/m Z wordt met 1 verhoogd als stick omhoog of met 1 verlaagd als stick omlaag C - variabele A t/m Z is 0 als vuurknop niet gedrukt is als vuurknop gedrukt is <> 0 ~INV - Inverteert het Atom beeldscherm. ~BORDER x,y Tekent een lijstje op het beeldscherm x - offset aan linker en rechterzijde van het scherm y - offset aan boven en onderzijde van het scherm ~PAINT x,y,p M.b.v. PAINT kunnen ingesloten vlakken op het beeldscherm gevuld worden met een zelf te definieren patroon. x - x coordinaat startpositie y - y coordinaar startpositie p - patroonnummer (0 ... 31) Als het patroonnummer wordt weggelaten wordt het vlak geheel wit gekleurd. ~CUBE p,m,x,y,b,h Tekent een (gedeelte van) een rechthoek. p - plot mode 0=reset, 1=set, 2=inverteer pixels m - feature mode 0= teken complete rechthoek 1= teken rechthoek TOT eerste gezette pixel 2= teken rechthoek VANAF eerste gezette pixel 3= teken rechthoek TOT eerste gezette pixel en begin weer bij het volgende gezette pixel 4= begin bij het eerste gezette pixel en stop bij het volgende gezette pixel x - x coordinaat linker benedenhoek van rechthoek y - y coordinaat linker benedenhoek b - breedte van rechthoek h - hoogte van rechthoek ~CIRCLE p,x,y,r Tekent een cirkel in elke grafische mode (ook extended video) p - plot mode 0=reset, 1=set, 2=invert pixels x - x coordinaat middelpunt y - y coordinaat middelpunt r - straal in pixels ~PIXEL x,y,z Controleer of pixel in Atom grafische mode gezet is. x - x coordinaat van te controleren pixel y - y coordinaat van te controleren pixel z - variabele A t/m Z, wordt 0 als pixel zwart is, <>0 als pixel wit is ~WINDOW m,x,y,b,h Definieert een denkbeeldig raam in Atom grafische mode waarin wel of juist niet getekent mag worden. m - mode 0 = teken alleen buiten het raam 1 = teken alleen binnen het raam x - x coordinaat linker benedenhoek van venster y - y coordinaat linker benedenhoek van venster b - breedte van rechthoek venster h - hoogte van rechthoek venster ~WOFF - Heft het gedefinieerde raam op. Er mag weer op het hele scherm getekend worden. ~FILL a,b,c Vult het geheugen van a tot b met de waarde c. ~SCROLL e Hiermee is het beeld in elke gewenste richting te scrollen afhankelijk van de extensie e: U - (up) naar boven, 8 pixels D - (down) naar beneden, 8 pixels L - (left) naar links, 8 pixels R - (right) naar rechts, 8 pixels ~HLINE P ,x1 , y1 , x2 , y2 , l , f , a , b Tekent lijn vanuit start positie naar een positie met een bepaalde x-coordinaat, welke zou liggen op de lijn welke getrokken wordt tussen de startpositie en de eindpositie. P - plotting mode: 0=reset, 1=set, 2=invert pixel x1,y1 - coordinaten start positie x2,y2 - coordinaten eind positie l - x coordinaat eind pixel f - pixel feature: =0 tekent tot aan eind pixel =1 tekent tot aan eerst gesette pixel A,B - variable A t/m Z. Wordt gevuld met coordinaten van laatst geplotte pixel. ~VLINE P ,x1 , y1 , x2 , y2 , l , f , a , b Tekent lijn vanuit start positie naar een positie met een bepaalde y-coordinaat, welke zou liggen op de lijn welke getrokken wordt tussen de startpositie en de eindpositie. P - plotting mode: 0=reset, 1=set, 2=invert pixel x1,y1 - coordinaten start positie x2,y2 - coordinaten eind positie l - y coordinaat eind pixel f - pixel feature: =0 tekent tot aan eind pixel =1 tekent tot aan eerst gesette pixel A,B - variable A t/m Z. Wordt gevuld met coordinaten van laatst geplotte pixel. ~INK a Kleurenset van 16 kleuren. Verticale resolutie wordt gehalveerd. a - kleur: 0=transparant groen 8=cyaan 1=licht groen 9=grijs 2=paars 10=blauw 3=donker bruin 11=donker blauw 4=groen(1) 12=groen(2) 5=geel 13=oranje(2) 6=rose 14=magenta 7=oranje(1) 15=rood Mogelijk verschijnen deze kleuren iets anders op het scherm van de PC. ~PAPER a Creeren van een achtergrond kleur a - kleur: 0=zwart 2=rood (magenta) 1=groen (cyaan) 3=geel (wit) De kleuren tussen de haakjes gelden in palet 1. ~MODE a Graphische mode selecteren zonder het beeld te wissen. *** dit statement werkt niet op de Atom in PC *** ~BLOCK m , x , y , b , h Tekent een volledig gevulde rechthoek. m - plotting mode: 0=reset, 2=invert pixel x - x coordinaat linker beneden hoek block y - y coordinaat linker beneden hoek block b - breedte block h - hoogte block ~SOUND p , d Produceert geluid volgens: p - pitch (toonhoogte) 1<=p<=255 d - duur van de toon 1<=d<=255 ~PALET p Een CGA kaart kent twee paletten. Het betreffende palet kan hiermee gekozen worden. Andere mogelijkheden van het PALET statement zijn: þ wijzigen van borderkleur in tekstmode þ wijzigen van achtergrondkleur in 4 kleuren grafische mode. þ wijzigen van voorgrondkleur in 2 kleuren grafische mode. In de laatste drie gevallen ligt p dan tussen #80 en #FF. Dit statement is specifiek voor een CGA kaart; op een EGA/VGA kaart kan de werking iets anders uitvallen. ~CREATE sprites en paint-patronen definities - patroon Create/p:n a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 p - patroon nummer 0 t/m 31 a - 8 bytes welke in totaal het patroon vormen: a1=bovenste rij, a8= onderste rij - horizontale sprite CREATE ,a1a2,a3,.........,a15,a16 CREATE /H ,a1,a2,a3......,a15,a16 - naam van de sprite, maximaal 8 letters /H - switch voor horizontale sprites (optioneel) a1..a16- sprite defenitie volgens: startpositie ---> ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿ ³a8 ³ a16³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´ ³a7 ³ a15³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´ ³a6 ³ a14³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´ ³a5 ³ a13³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´ ³a4 ³ a12³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´ ³a3 ³ a11³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´ ³a2 ³ a10³ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´ ³a1 ³ a9 ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ - vertikale sprite CREATE /V ,a1,a2,a3......,a15,a16 - naam van de sprite, maximaal 8 letters /V - switch voor horizontale sprites (verplicht !) a1..a16- sprite defenitie volgens: startpositie ---> ÚÄÄÄÄÄÄÄ¿ ³ 16 ³ ÃÄÄÄÄÄÄÄ´ ³ 15 ³ ÃÄÄÄÄÄÄÄ´ . ³ . ³ . ÃÄÄÄÄÄÄÄ´ ³ a2 ³ ÃÄÄÄÄÄÄÄ´ ³ a1 ³ ÀÄÄÄÄÄÄÄÙ - auto assignment Als het CREATE statement voor sprites gevolgd wordt door /A:n krijgt het sprite een assignmentnummer waaronder het dan ook bekend is. Zie ook ASSIGN. ~DEF naam,xxxxxxxxxxxxxxxxx DEF: xxxxxxxxxxxxxxxxx Definieren van alleen horizontale sprites. Voor pixels die gezet moeten worden is x een '1' voor zwarte pixels is x een '0'. De regel DEF: komt per sprite zeven keer voor. ~BASE q Bepaalt het geheugenblok waar sprites en paint patronen opge- borgen worden (in totaal 2 kb). Reset tevens het mapbyte voor INT en ATTRIG. q - high byte van begin van geheugenblok ~ASSIGN :naam,a Geeft aan een bepaalde sprite een numerieke waarde. De sprite is dan zowel onder de naam als onder dit nummer bekend. naam - naam van de betreffende sprite a - assignment nummer van de sprite ~DEASS :naam Disabled de herkenning van de sprite onder een assignmentnummer. Het heft de werking van ASSIGN op. ~KILL :naam KILL a Verwijdert een sprite uit de administratie. naam - naam van de te verwijderen sprite a - eventueel assignmentnummer van de sprite ~SET :naam,x,y SET a,x,y Plaats een sprite op het scherm. naam - naam van de sprite a - eventueel assignmentnummer van de sprite x - x coordinaat van de sprite y - y coordinaat van de sprite ~UNSET :naam UNSET a Verwijdert een sprite van het scherm. naam - naam van de sprite a - eventueel assignmentnummer van de sprite ~IMAGE :naam,x,y IMAGE a,x,y Plaats een sprite op het scherm maar neemt het niet op in de administratie. Na het plaatsen is de spritepositie niet meer bekend. naam - naam van de sprite a - eventueel assignmentnummer van de sprite x - x coordinaat van de sprite y - y coordinaat van de sprite ~TURN :naam TURN a Draait een sprite om zijn vertikale as, zowel op het scherm als in de sprite administratie. ~CARRY :naam,x,y CARRY a,x,y Verplaats een sprite dat op het beeldscherm staat naar de opgegeven positie. naam - naam van de sprite a - eventueel assignmentnummer van de sprite x - x coordinaat van de sprite y - y coordinaat van de sprite ~SHOVE :naam,dx,dy SHOVE a,dx,dy Verschuift een sprite dat op het beeldscherm staat volgens de opgegeven verplaatsing. De nieuwe positie wordt bijgewerkt in de administratie. naam - naam van de sprite a - eventueel assignmentnummer van de sprite dx - verplaatsing in horizontale richting dy - verplaatsing in vertikale richting ~POS :naam, A , B POS a,A,B Plaatst de coordinaten van de opgegeven sprite in de opgegeven variabelen. ~ATHIT : , ATHIT : , a2 ATHIT A1 , : ATHIT A1 , a2 Controleert of twee sprites elkaar overlappen. - naam sprite 1 - naam sprite 2 a1 - assignment nummer sprite 1 a2 - assignment nummer sprite 2 Indien de twee sprites elkaar raken wordt de rest van de regel waarop AHIT staat uitgevoerd. Anders zal de regel opgevat worden als commentaar. ~INT c , t ( VIA NODIG ) Biedt de mogelijkheid om 3 zogenaamde channels te gebruiken, welke onder interrupts van timer 1 na verschillende, op te geven tijden aangeroepen zullen worden (lees: routines in het programma). c - channel nummer 0,1 of 2 t - tijd 1<=t<=#ffff Tijdens de declaratie van INT wordt de rest van de regel opgevat als commentaar. Is de verlangde tijd, na het aanzetten van de timer, verstreken, dan zal het statement waarmee de interpretor op dat moment bezig is afgemaakt worden en vervolgens wordt gesprongen naar het gedeelte op de declaratie regel na de parameters. Op dat moment wordt ook de timer uitgezet die men zelf later weer aan moet zetten. INT : P ( VIA NODIG ) Start of stopt de timer. p - =0 stopt de timer =1 start de timer Let op de dubbele punt!! De timer loopt met 50hz, dat wil zeggen, de tijden die men declareert moeten met 0.02 vermenigvuldigd worden. Voor 1 seconde kiest men t=50. ~ATTRG (VIA NODIG) (at trigger) Evenals INT een declaratie. Indien de timer loopt en men drukt op de spatiebalk of men drukt de fire-button van de joystick in, dan zal de interpretot het statement afmaken waarmee het bezig was en vervolgens springen naar het eerst volgende statement op de ATTRG regel achter de declaratie. ~BASIC start PC basic interpreter/compiler Syntax: BASIC Dit statement is een voorbeeld van de categorie statements die een PC programma starten. Vanuit de Atom wordt een Basic interpreter/compiler op de PC gestart. Het pad en de naam van deze Basic is opgeslagen vanaf adres #AFA0, als ascii string van maximaal 31 karakters. ~CHAIN laadt en start Atom basicprogramma Syntax: CHAIN "filespec" Het CHAIN statement laadt een basicprogramma in de actuele tekstpagina en start het programma. Het executieadres maakt in dit geval niets uit omdat het programma altijd gestart wordt vanaf #F144. De filespecificatie mag een drive en directory bevatten maar geen wildcards * en ?. ~EDIT start editor Syntax: EDIT Het statement EDIT is opgenomen om snel een ascii teksteditor op de PC te starten. Het pad en de filenaam van deze editor zijn opgeslagen als ascii string van maximaal 31 karakters vanaf adres #AF20. ~ED64 start tekstverwerker Syntax: ED64 Dit oude bekende commando start een tekstverwerker op de PC. Zo kunt u snel een tekstverwerker starten om bij het zojuist geschreven programma een artikel voor Atom Nieuws te schrij- ven. Het pad en de filenaam van deze tekstverwerker zijn opgeslagen als ascii string van maximaal 31 karakters vanaf adres #AF00. ~FILECNV fileheader toevoegen of weghalen Syntax: FILECNV filespec1 filespec2 H+ [start exec] 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 uitgewis- seld. 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 hetzelf- de zijn; dan gaan alle data verloren! ~GWINDOW definie‰ren grafisch venster Syntax: GWINDOW xlo,ylo,xrb,yrb Dit statement werkt alleen in de extended videomodi. Er wordt een grafisch venster gecre‰erd waarin getekend mag worden. De vier parameters geven de X en Y co”rdinaten aan van de linker benedenhoek en de rechter bovenhoek. Deze co”rdinaten gelden altijd ten opzichte van de linker bovenhoek van het beeld- scherm. ~GWOFF grafisch venster opheffen Syntax: GWOFF Het grafische venster wordt gereset zodat weer over het gehele scherm getekend mag worden. ~HELP on-line helpfunctie Syntax: HELP [trefwoord] Hoe was de syntax ook alweer van het HLINE commando? Hoeveel parameters krijgt het UDS statements mee? Met welk PC-commando wordt de printerstatus opgevraagd? Inmiddels zijn er voor de Atom zovele toolboxen en nog meer extra statements toegevoegd dat het bijna onmogelijk is om nog een eenvoudig overzicht te houden. Bovenstaande vragen kunnen nu snel beantwoord worden met het HELP statement. Op het scherm verschijnt razendsnel voldoende maar toch beknopte uitleg. HELP gebruikt twee datafiles, ATOMHELP.IDX en ATOMHELP.TXT; het pad en de naam van deze datafiles zijn opgeslagen als ascii string vanaf adres #AFC0 resp. #AFE0. Bij gebruik van HELP wordt eerst het trefwoord opgezocht in de indexfile. Als het daar gevonden is, wordt een pointer gelezen naar het begin van de helptekst in de file ATOMHELP.TXT. Die tekst wordt vervolgens op het scherm afgebeeld. ~HFILL horizonale lijnen kleuren Syntax: HFILL x,y1 TO y2,g Met HFILL kunnen horizontale lijnen gekleurd worden. Het kleuren begint bij x,y1 en kleurt naar links en rechts totdat een pixel wordt aangetroffen die de grenskleur g heeft. Ver- volgens wordt de y-co”rdinaat verhoogd en wordt de volgende lijn ingekleurd. HFILL werkt alleen in extended videomodi en houdt rekening met een grafisch venster en een verschoven oorsprong. ~POWERDOWN snel geheugeninhoud op disk bewaren Syntax: POWERDOWN Dit statement is bedoeld om snel de geheugeninhoud van #300 tot #A000 op disk te bewaren als de computer uit wordt gezet. Na het opnieuw opstarten kan de geheugeninhoud hersteld worden met *LOAD MEMORY.PD ~MODEM start communicatie software Syntax: MODEM Dit statement start een communicatie software pakket op de PC. Het pad en de filenaam van dit pakket is als ascii string opgeslagen vanaf adres #AF40. ~ORIGIN verplaatsen grafische oorsprong Syntax: ORIGIN x,y De grafische oorsprong (het punt 0,0) wordt voor extended videomodi verschoven naar het punt x,y; dit punt is opgegeven ten opzichte van de linker bovenhoek van het beeldscherm. ~OSCLI aanroep *-commando Syntax: OSCLI string,$13 In PC-DOS is het niet toegestaan om variabelen te gebruiken bij de *-commando's. Met OSCLI is dat gemis te omzeilen. De op te geven string kan bestaan uit tekst tussen aanhalingstekens en (string)variabelen. Let erop dat dit statement altijd wordt afgesloten met een $13 ! ~PCC printer control code Syntax: PCC p1,p2,p3,..... Als de printer aangezet is met $2 stuurt PCC alle opgegeven parameters uitsluitend naar de geselecteerde printer. Ook de codes $2, $3 en de inhoud van #FE worden naar de printer gestuurd. De printer kan met PCC niet aan of uitgezet worden. ~PCTOOLS start PC-Tools Syntax: PCTOOLS Dit statement start het gelijknamige hulpprogramma. Het pad en filenaam zijn opgeslagen als ascii string van maximaal 31 karakters vanaf #AF60. ~SCREEN selecteren beeldpagina's Syntax: SCREEN s De meeste videokaarten kunnen overweg met meerdere schermpagi- na's. De Atom kan inmiddels ook overweg met meerdere pagina's in tekstmode. Met SCREEN kunnen pagina's opgeroepen worden. Als s tussen 0 en 7 ligt wordt dat de pagina die op de monitor verschijnt en waarin de bewerkingen plaatsvinden. Een s tussen #40 en #47 selecteert alleen de pagina waarin bewerkingen plaatsvinden en s tussen #80 en #87 selecteert alleen de pagina die op de monitor verschijnt. ~TEKENPRG start tekenprogramma Syntax: TEKENPRG Dit statement start een tekenpakket op de PC, waarvan het pad en de naam als ascii string zijn opgeslagen vanaf #AF80. ~TXMOD omschakelen naar tekstmode Syntax: TXMOD [optie] TXMOD /8 Er wordt naar tekstmode geschakeld waarbij het EGA 8*8 karakterfont wordt geladen; automatisch wordt overgescha- keld naar 43 regels per scherm voor EGA kaarten of 50 regels per scherm voor VGA kaarten. Het tekstvenster wordt automatisch goed gezet mits de juiste video-optie is opgegeven bij het starten van het terminal programma. TXMOD /14 De tekstmode wordt ingeschakeld waarbij het EGA 8*14 karakterfont wordt geladen; automatisch wordt overgescha- keld naar 25 regels per scherm voor EGA kaarten of 28 regels per scherm voor VGA kaarten. Het tekstvenster wordt automatisch goed gezet mits de juiste video-optie is opgegeven bij het starten van het terminal programma. TXMOD /F pad+fontnaam De tekstmode wordt ingeschakeld, het opgegeven font wordt van disk geladen en wordt geaktiveerd. TXMOD /C Het in de buffer geladen font (laden m.b.v. het statement FONT) wordt gekopi‰erd naar fontram van de EGA of VGA kaart waarbij de op het scherm aanwezige tekst wordt aangepast aan het nieuwe font. De overige instellingen blijven ongewijzigd. ~UTIL overzicht statements PC Utility Box Syntax: UTIL Het scherm wordt gewist en er verschijnt een overzicht van alle statements uit deze toolbox. ~VCC video control code Syntax: VCC p1,p2,p3,.... VCC stuurt alle opgegeven parameters direct door naar de PC. De semafoor wordt gedurende de uitvoering van dit statement gezet zodat het oversturen niet onderbroken kan worden. Een $0 wordt als slechts ‚‚n 0 overgestuurd. Dit statement is goed te gebruiken om via control codes bepaalde commando's uit te voeren. ~VDU video control code Syntax: VDU p1,p2,p3,... VDU stuurt alle opgegeven parameters direct door naar de PC. De semafoor wordt gedurende de uitvoering van dit statement gezet zodat het oversturen niet onderbroken kan worden. Een $0 wordt als slechts ‚‚n 0 overgestuurd. Dit statement is goed te gebruiken om via control codes bepaalde commando's uit te voeren. ~VFILL vertikale lijnen kleuren Syntax: VFILL x1 TO x2,y,g Met VFILL kunnen vertikale lijnen gekleurd worden. Het kleuren begint bij x1,y en kleurt omlaag en omhoog totdat een pixel wordt aangetroffen die de grenskleur g heeft. Vervolgens wordt de x-co”rdinaat verhoogd en wordt de volgende lijn ingekleurd. VFILL werkt alleen in extended videomodi en houdt rekening met een grafisch venster en een verschoven oorsprong. ~end -