Acorn Atom Emulator v1.33
Noot van de redactie: Deze Atom emulator is geschreven door Wouter Ras ©, Delft 1997. NL vertaling P.Leurs.
De emulator bijgevoegd in de directory
atomarch/Pc99-2/Atom133/Atom133.

          Inhoud  

  1. Introductie
  2. Configuratie
  3. Toetsenbord
  4. Emulator desktop
  1. cassette
  2. opties
  3. monitor
  4. disk
  1. Atomgeheugen
    1. Rom
    2. Ram
    3. I/O-devices
      1. 8255 PPI
      2. 6522 VIA
      3. 8271 FDC
      4. Schakelkaart en latch
      5. Printer
      6. Muis
    4. PC I/O
  2. Bestandsoverdracht
    1. AtomTape utility
    2. AtomCom utililty
  3. Compatibiliteit
  4. Versie overzicht
  5. Problemen oplossen
  6. Referenties
  7. Contacten
1. INTRODUCTIE

De emulator van Wouter Ras maakt het mogelijk om de meeste, originele Acorn Atom software, op uw PC te laten draaien.

Minimum systeem vereisten:

  • 80286 CPU ( 80486 DX-40 is nodig voor real-time emulatie)
  • VGA beeldscherm
  • 300 KB Ram
  • MS-Dos 3.0
Het pakket bevat de volgende files:
  • ATOM.EXE – Acorn Atom software emulator (286+)
  • ATOMTAPE.EXE – programma om Atom cassettes in te lezen in het PC geheugen
  • ATOMCOM.EXE – Atom cassette interface via soundblaster
  • ATOM.DOC – Engelse documentatie

De emulator is getest op diverse computers en het is gebleken dat ze op allen werkt. Het programma is geschreven voor een MS-DOS omgeving maar het werkt ook onder OS/2 Warp, Windows 3.1 en Windows 95 (alleen full-screen). Timing, synchronisatie en geluid werken beter onder MS-DOS dan onder Windows.

2. CONFIGURATIE

De emulator is naar uw eigen wensen te configureren. Uw instellingen worden dan opgeslagen worden in de ATOM.INI file. Als er geen INI-file aanwezig is bij het starten dan zal de emulator gebruik maken van de standaard waarden (aangegeven tussen haakjes, zie ook hoofdstuk 4.2) .

De parameters die met een asterisk (*) zijn aangegeven kunnen vanuit de emulator desktop ingesteld worden.

*ASMLayout (0) De assembler listings in de ingebouwde monitor kunnen weergegeven worden op twee verschillende manieren: de Atom notatie (met @ voor immediate, # voor hexadecimale getallen) of de algemene notatie (met # voor immediate en $ voor hexadecimale getallen).
*Sound (1) Hiermee kan ingesteld worden of geluid via de PC-speaker of via de Soundblaster gemaakt wordt. Soundblaster detectie gebeurt automatisch.
-SpeedIndex (auto) Als de emulator niet onder de juiste snelheid draait dan kunt u een specifiek nummer opgeven dat de emulator op een bepaalde snelheid zet. Hoe hoger het nummer hoe langzamer de emulatie. Voor 486/Pentium machines is dit ongeveer de zelfde snelheid als op uw CPU in MHz. Op de wat langzamere systemen (bijvoorbeeld 486-40 MHz) moet de waarde van de snelheidsindex lager zijn dan de CPU snelheid.
-ExtRomFile (EXTROM.TAP] De emulator is uitgerust met de AXR1 chip (zie hoofdstuk 5.1) in het geheugengebied #A000-#AFFF. Als je op dit adres een andere (EP)ROM wilt gebruiken kunt u de filenaam van het gewenste ROM-image opgeven. De lengte van de file moet 4118 bytes zijn. Het formaat dient het zelfde te zijn als van de .ATM-files (zie hoofdstuk 6). Indien u gebruik maakt van schakelkaart emulatie mag de opgegeven file meerdere rom images bevatten. In de EXTROM.TAP file in de \SOFTWARE\Atom133 directory zijn meerdere boxen opgenomen, waaronder P-Charme, MouseDos Box, GAGSROM en Atomic Windows.
-Use80x87 (0) De emulator kan voor floating point berekeningen de nieuwe Floating Point ROM op #D000 van Leendert Bijnagte gebruiken. Deze ROM, geschreven voor de Atom-in-PC kaart, maakt gebruik van de 80387 coprocessor van de PC voor extreem snelle floating point berekeningen. Indien geen 80387 of hoger beschikbaar is dient deze waarde op 0 gezet te worden.
-IgnoreZpFEh (1) Voordat een teken naar de printer gestuurd wordt vergelijkt de Atom eerst de waarde met de inhoud van zeropage adres #FE. Indien deze gelijk zijn wordt het teken niet naar de printer gestuurd. Na een break bevat het adres #FE de waarde #0A (LineFeed) hetgeen voor de meeste printers inhoudt dat ze telkens op dezelfde regel afdrukken. Als deze parameter in de .INI file op 1 gezet is zal de vergelijking genegeerd worden omdat geheugenadres #FF07 gewijzigd wordt in #00.
BoxSwitch (1) Als u geen gebruik wilt maken van de schakelkaart emulatie zet u deze parameter op 0. De eerste box van ExtROMFile zal dan geladen worden. Als er geen file gevonden kan worden zal AXR1 geladen worden op #Axxx. Zie hoofdstuk 5.3 voor meer informatie.
-Box0onBreak (1) Als deze waarde op 1 gezet wordt zal na een reset altijd Box0 van de schakelkaart actief worden. Bij de waarde 0 blijft de huidige (EP)ROM actief.
-NMIResponse (15) Deze parameter mag een waarde hebben tussen 15 en 255 en bepaalt de reactie tijd waarop de processor antwoordt op een NMI. De echte Atom gebruikt de NMI voor data transfer van of naar de diskdrive. Om dezelfde snelheid te behalen als de Atom dient deze parameter op ongeveer 40 gezet te worden. De default waarde 15 is het minimum voor foutloze data transfer in de Atom DOS routines.
*Colours Hiermee kunnen de zeven kleuren die door de emulator gebruikt worden gekozen worden.
  • BackGr is de achtergrondkleur
  • ForeGr is de voorgrondkleur
  • GreySb is de kleur van de "grijze symbolen" (#C0-#FF)
  • Color0 .. Color3 zijn de kleuren in de Hi-res grafische kleurenmodi
Elke kleur is een 6-digit (3 bytes) hexadecimaal getal; het eerste byte staat voor de hoeveelheid rood, de tweede voor de hoeveelheid groen en de derde voor de hoeveelheid blauw in de kleur. Elk byte heeft een waarde van 00h-3Fh.
*Drives Hiermee wordt vastgelegd welke disk image files gekoppeld worden aan de drives bij het opstarten van de emulator. Deze instellingen maakt u het best vanuit de emulator desktop; zie ook hoofdstuk 4.4.

3. TOETSENBORD

Vanwege het feit dat het Atom-toetsenbord anders is dan dat van de PC zijn een paar toetsen gewijzigd. De belangrijkste zijn:

F12=BreakALT=Rept
TAB=COPYCAPSLOCK=LOCK
`=^   

Bovendien zijn de Atom-cursortoetsen vervangen door de PC cursortoetsen. Daarom is de SHIFT toets niet langer meer nodig om de cursor naar beneden of naar links te laten bewegen.

NB: Als numlock aan staat dan geven alleen de pijltjes op het numerieke toetsenbord de juiste waarden af.

Echter bij veel spellen zou het beter zijn als sommige toetsen ergens anders geplaatst waren. Dit kunt u doen door te wisselen tussen het standaard toetsenbord zoals hier boven beschreven en het alternatieve toetsenbord. Als u het alternatieve toetsenbord kiest moet u de volgende toetsen gebruiken:

Tab: links of rechts bewegen
Capslock: boven of beneden bewegen
Linker shift: Ctrl
Rechter shift: Rept
Ctrl/Alt: Shift
Cursor L: Lock
Cursor R: Copy

Wisselen tussen de standaard en de alternatieve toetsenbord uitvoering wordt gedaan door tijdens de emulatie door de <F4> toets in te drukken. Bij een break of een reset wordt automatisch het standaard toetsenbord geselecteerd.

De volgende toetsen hebben een speciale funktie:

  • F4 Wisselen tussen standaard/alternatief toetsenbord
  • F5 Wisselen tussen orginele en maximum CPU snelheid
  • F6 Laat het toolbox informatie scherm zien
  • F8 Roep de emulator desktop op – Disk scherm
  • F9 Roep de emulator desktop op – Tape scherm
  • F10 Roep de emulator desktop op – Opties scherm
  • F11 Roep de emulator desktop op – Monitor scherm
  • Ctrl+F12 Afsluiten van de emulator
  • Shift+F12 Tijdelijk naar MS-DOS
  • ALT+F12 Boot van disk image in drive 0 (MouseDos Box vereist)
  • Print Scrn kopieert het scherm naar een .BMP file

4. EMULATOR DESKTOP

/images/emuldesk.gif

Druk op F8, F9, F10 of F11 om de emulator desktop op te roepen. Bovenaan krijgt u dan de drie onderdelen van de desktop te zien. Deze kunnen geselecteerd worden door <Alt> en de oplichtende letter gelijktijdig in te drukken.

  • Disk Alt+D (of F8)
  • Tape Alt+T (of F9)
  • Opties Alt+O (of F10)
  • Monitor Alt+M (of F11)

De desktop interface lijkt veel op de C64S desktop van Miha Peternel. Indien u bekend bent met die interface, zult u geen moeilijkheden hebben met het gebruik van de desktop.

4.1   TAPE

Met het Tape menu is het mogelijk om Tape bestanden te selecteren (TAP files) van waaruit Atomfiles inlezen kunnen worden. Het beeldscherm heeft twee verschillende gebieden; het gebied aan de linker kant laat je de adressen van alle Tape bestanden zien, het gebied aan de rechterkant laat u de inhoud van de geselecteerde Tape gebieden zien.

Een tape bestand bevat een aantal Atom files. (.ATM files; zie hoofdstuk 6 voor de beschrijving) bij elkaar gevoegd. Een tape bestand kan tot maximaal 500 Atom files opslaan.

Als de cursor in het linker gebied de Tape bestanden laat zien kunt u de volgende acties ondernemen:

  • Druk op <Cursor Up> of <Page Up> toets om de cursor omhoog te bewegen.
  • Druk op <Cursor Down> of <Page Down> toets om de cursor omlaag te bewegen.
  • Druk op de <N> toets om een nieuw Tape gebied te maken. U moet dan een filenaam intypen. Als er geen file met die naam bestaat dan wordt er een nieuwe file aangemaakt en de lengte is dan 0.
  • Druk op de <O>, <enter> of op de <Rechter Cursor> toets om de cursor naar de rechterkant van het scherm te bewegen, waar de Atom files te zien zijn.

Als de Cursor het rechter gebied laat zien kan het geselecteerde bestand gebruikt of bewerkt worden. De inhoud van het Tape bestand wordt regel voor regel getoond. Elke regel staat voor een atom file waarvan de naam gevolgd wordt door drie hexidecimale getallen: het eerste getal is het laad-adres van het programma, het tweede getal is het executie-adres en het laatste getal is de lengte van het programma in bytes.

De volgende acties zijn mogelijk:

  • Druk op <Cursor Up> of <page Up> toets om de cursor omhoog te bewegen.
  • Druk op <Cursor Down) of <Page Down> toets om de cursor naar beneden te bewegen.
  • Druk op de <S> of de <enter> om de tape file pointer bij cursorpositie te zetten.
  • Druk op de <L> om de file te laden waar de cursor naar verwijst en terug te keren naar de emulator. Nu zijn er drie mogelijkheden:
  1. Het programma start op #2900 en het executieadres is #C2B2; nu wordt het basciccommando Load uitgevoerd. Dit betekent dat de file geladen wordt in het Atom text gebied #2900. Dan zal het text gebied gescand worden om de waarde van de TOP goed te zetten. Denk er wel aan dat als de file geen BASIC programma is de prompt niet zal verschijnen.
  2. Het programma start niet op #2900 maar het executieadres is #C2B2 dan is het COS commando *LOAD nodig. De waarde van de TOP zal dan niet goed gezet worden.
  3. In alle andere gevallen is het COS commando *RUN nodig. Dit zal de file laden vanaf het start adres en dan wordt de executie getransporteerd naar het executie adres gespecificeerd in de file. De waarde van de TOP is niet goed gezet.

Denk er wel aan dat alle commando’s die vooraf gaan bij een asterisk (*) COS commando’s zijn dat wil zeggen dat de waarde in de TOP niet goed gezet kan worden nadat de file geladen is. Statements als DIM zullen de foutmelding Error 216 geven tenzij het END of OLD statement zijn gegeven voordat het programma wordt gestart.

Als u de file wilt openen op een andere manier dan de desktop op te vragen of als u het wilt laden vanaf een ander adres moet de naam wel in de Atom BASIC prompt handmatig vermeld worden. Als geen naam opgegeven is (zoals met het BASIC LOAD "" commando), zal de de file die dan bij de cursor positie is aangegeven geladen worden. De emulator ondersteunt ook de wildcard aan het einde van de filenaam. Als u een file probeert te laden die niet in het huidige Tape bestand voorkomt of als een DOS leesfout optreedt, zal de beroemde ERROR6 (checksum error) gegenereerd worden.

  • Druk op de <R> om de huidige Atom file een nieuwe naam te geven.
  • Druk op de <I> om de Atom file te importeren. In het rechter gebied zullen dan alle, voor import geschikte files in de huidige directory te zien zijn. U kunt een file selecteren door op <Enter> te drukken en dan zal deze op de huidige cursor positie toegevoegd worden.
  • Druk op de <E> om de huidige file te exporteren. De MS-DOS filenaam zal dan door de emulator gegeven worden. De file kan niet geexporteerd worden als er al een file met dezelfde naam is.
  • Druk op de <D> om de huidige file te verwijderen. Er wordt om bevestiging gevraagd.
  • Druk op de <F> om de emulator stil te zetten in de huidige toestand.
  • Druk op de <T> of op de <Linker cursor> toets om de cursor naar de linkerkant van het scherm te bewegen waar de tape bestanden getoond worden.
4.2 OPTIES

Door middel van het optiescherm kunt u de emulator settings veranderen en ze saven op de INI-file. De mogelijke instellingen zijn:

  • CPU snelheid: De emulator kan op twee snelheden draaien, namelijk:
    1. Orgineel: De emulator zal proberen om zo dicht mogelijk bij de orginele 6502 operating snelheid van 1MHz te komen.
    2. Maximum: De emulator zal onder maximum snelheid draaien. Je kunt ook op <F5> drukken tijdens de emulatie om te wisselen tussen deze twee CPU modes. Als je op de BREAK toets drukt zal de CPU snelheid weer in zijn orginele staat terug gereset worden.
  • ASM Layout: De assembly listings van de ingebouwde monitor kunnen weergegeven worden op twee verschillende manieren, de Atom notatie ( @ direkt, # voor de hexadecimal getallen) of de normale notitie (#voor direkt, $ voor hex .getallen.)
  • Colors : Tijdens de emulatie wordt gebruik gemaakt van alle zeven kleuren .
    1. BackGr is de achtergrondkleur.
    2. ForeGr is de voorgrondkleur.
    3. GreySb is de kleur van de "grijze symbolen"(#C0-#FF).
    4. Color0-Color3 zijn de kleuren van de HIRES kleuren modes
      Elke kleur is een 3 bytes hexadecimal getal; het eerste byte staat voor de hoeveelheid ROOD de tweede byte staat voor de hoeveelheid GROEN en de derde byte voor de hoeveelheid BLAUW. Het bereik van elk van deze bytes is 00h tot 3Fh.
  • Geluid: U selecteert hier of de gluidseffecten via de PC luidsprekers of via de SoundBlasterkaart weergegeven worden.
  • Save options : Hiermee worden de ingestelde opties opgeslagen in de .INI-file. Een bestaande .INI-file zal overschreven worden.
4.3 MONITOR

De ingebouwde monitor laat je de programma’s zien terwijl ze draaien. Op het monitorscherm zijn de volgende dingen te zien:

  • 6502 registers (bovenaan rechts)
  • Assembly code (bovenaan links)
  • Geheugen dump (onderaan)

Blader met de cursor toetsen of met de Page Up, Page Down toets.

De acties die mogelijk zijn zijn:

  • Trace: Voert een instruktie uit en werkt het assembly code venster bij. Aangezien het beeldscherm bijgewerkt wordt verschijnen soms enkele pixels tussen de monitor informatie.
  • Step: Stapt over de instructie heen, slaat het assembly code venster over voor de subroutines. (JSR). In het geval van een subroutine wordt deze uitgevoerd in een debug mode. Deze debug mode wordt onderbreken door <F1> in te drukken.
  • Goto: Vraagt voor een nieuw adres en springt er naar toe.
  • Here: Zet een breakpoint op de positie van het code venster en draait de emulatie in debug mode totdat de CPU de instruktie van het breakpoint heeft bereikt of <F1> toets is in gedrukt.
  • Mode: Schakelt tussen de code en dump.
  • Where: Beweegt het assembly code venster naar de positie van de programma teller waar de emulatie was onder broken. Als de emulator draait in debug mode werkt de Break toets (F12) niet. Druk op F1 om de debug mode te beeindigen. Van de diverse I/O poorten worden verder soms de actuele waarden niet weergegeven.
4.4   DISK

Het disk-scherm biedt de mogelijkheid om een disk image (.DSK file) te selecteren. Een disk image wordt als zodanig herkend indien de lengte 102.400 bytes is. Iedere disk heeft 40 tracks, 10 sectoren en 256 bytes per sector.

Aan de linkerkant van het scherm zijn de aanwezige disk image files te zien. De Atom, en ook deze emulator ondersteunt twee dubbelzijdige diskdrives:

+-----------+ +-----------+
| DRIVE 0 | | DRIVE 1 |
| ========= | | ========= |
| DRIVE 2 | | DRIVE 3 |
+-----------+ +-----------+
De drivenummers zijn in het rechter gedeelte van het scherm te zien. Gebruik de volgende toetsen om de instellingen te maken:
  • Gebruik de [CURSOR UP] of [PAGE UP] toetsen om de cursor naar boven te verplaatsen
  • Gebruik de [CURSOR DOWN] of [PAGE DOWN] toetsen om de cursor naar beneden te verplaatsen
  • Druk [TAB] en [SHIFT-TAB] of [0], [1], [2] en [3] om een drive te selecteren.
  • Druk op [N] om een nieuwe disk image file te maken. De emulator vraagt om een filenaam. Indien deze file nog niet bestaat wordt deze aangemaakt. Het is niet nodig om de nieuwe disk te formatteren
  • Druk de [O] of [ENTER] toets om een image aan de geselecteerde drive te koppelen. Indien de cursor op de laatste (=lege) positie staat wordt de disk uit de drive verwijderd.
  • Als u op [S] drukt worden de drives met de daarbij behorende image files in de .INI file opgeslagen en zal bij een volgende start deze configuratie automatisch geladen worden.
  • Om de disk write-protected te maken drukt u op de [P] toets.

Het laden van bestanden vanaf een Atom disk geschiedt vanuit de Atom zelf. Vergeet niet om ATOM-DOS te activeren door middel van het bekende *DOS commando. Terugkeren naar het cassette systeem kan met *COS. Na iedere reset wordt het cassette systeem actief en moet het disk systeem opnieuw aangeroepen worden.

In hoofdstuk 5.1 worden de DOS commando’s toegelicht.

Zoals net beschreven kan een disk op write protect gezet worden. Dit gebeurt door het "ReadOnly" attribuut van de image file te zetten. Een write protect disk wordt in het desktop scherm aangegeven met een # achter de filenaam. Write-protect geldt alleen voor de disk in de overeenkomende drive en niet voor de "achterkant" (Immers bij de echte Atom zijn de "voorkant" en "achterkant" beiden write protect of beiden niet; het is tenslotte één fysieke schijf.) De emulator kent dus ook geen relatie tussen de drives 0-2 en 1-3. Zie het meer als vier enkelzijdige drives i.p.v. twee dubbelzijdige!

Disk activiteit vanuit de Atom wordt visueel weergegeven met een icon in de linker benedenhoek van het scherm waarbij het ledje van de actieve drive oplicht.

ATOM GEHEUGEN

5.1  ROM

De geëmuleerde Acon Atom heeft 96 KB ROM:

  • Assembler en Cassette operating Systeem op #F000 (4kB)
  • Disk Operating System (DOS) op #E000 (4kB)
  • Uitbreidings Rom (floating Point) op #D000 (4kB)
  • Basic Interpreter op #C000 (4kB)
  • 16 toolboxen op #A000 (4kB per toolbox)

Alle Basic Atom funkties en de floating point operaties worden ondersteund. De cassette load en save routines zijn vervangen door snelle ROM-trapped routines zonder de Atom ROM te veranderen. Het *CAT commando is nu ook afgevangen zodat dit een overzicht geeft van de bestanden in de actieve .TAP file. Hierbij is de wildcard * toegestaan. Voorbeeld: *CAT P* laat alle bestanden zien die met de letter ‘P’ beginnnen.

De functies FIN, FOUT, GET, BGET en FGET alsmede de statements SGET, PUT, BPUT, FPUT en SPUT statement voor het Cassette Operating Systeem zijn ook beschikbaar ofschoon ze zich ietwat anders gedragen als bij de echte Atom:

  • Een file kan met de FIN functie geopend worden en in tegenstelling tot de Atom zelf kan hier een filenaam, eventueel met wildcard *, opgegeven worden. Ook het gebruik van variabelen is nodig voor de filenaam (bijv. F=FIN S of F=FIN $S). Indien geen filenaam gegeven wordt zal de file waar de cursor naar wijst (de volgende file als het ware) geopend worden. Bij iedere leesopdracht met GET, BGET, FGET of SGET zal data uit de .TAP file in de emuator gelezen worden. Komt een leesopdracht voor na het einde van de file of zonder dat een file geopend is, dan zal voor elk gelezen byte het teken #0D teruggeven worden.
  • Met de FOUT functie kan een file geopend worden om te lezen en te schrijven. Ook hier kan weer een filenaam met eventueel een wildcard of in de vorm van een variabele gegeven worden. Als er geen filenaam wordt opgegeven zal een bestand met de naam ‘FILE’ gemaakt worden aan het eind van de huidig .TAP file. Achtereenvolgende PUT, BPUT, FPUT of SPUT statements schrijven de data in een buffer. Telkens als de buffer vol is, er op F12 (Break) gedrukt wordt,het desktop tape scherm opgeroepen wordt of de emulator afgesloten wordt zal de inhoud van de buffer naar de .TAP file geschreven worden. Mocht dit om welke reden niet lukken dan klinkt een korte pieptoon en gaat de data verloren.
    Aangezien het SHUT statement onder COS genegeerd wordt blijft een file geopend totdat een bufferfout optreedt, de F12 (Break) toets gedrukt wordt of een nieuwe file geopend wordt. Elke keer als de buffer wordt toegevoegd aan het bestand wordt de naam van het laatste bestand in de .TAP file gecontroleerd. Mocht deze niet kloppen (omdat er bijvoorbeeld een nieuwe file met het SAVE commando is weggeschreven) gaat de bufferinhoud verloren. Tevens wordt ook de naam van de .TAP file gecontroleerd. Daarbij geldt hetzelfde verhaal. Het is dus af te raden om tijdens het wegschrijven van data in Random Access Files de .TAP file te wisselen.
  • In Atom DOS mode werken de statements voor Random Access Files identiek aan de echte Atom.

De AXR1 is een EPROM die ontwikkeld is door de Stichting Electronica Workshop (ECD/SEW), Delft in 1981 tot 1983 en voorziet de Atom van negentien extra commando’s. Zie ook Josbox Omdat het geen standaard Acorn Atom ROM is zijn de extra commando’s in het kort beschreven:

Command Abbr. Description
------- ----- -------------------------------------------------------
DATA DA. A sequential one line file marker
Syntax: [<ARGUMENT0> ... <ARGUMENTn>]
RESTORE RES. Resets the file pointer to a specified DATA line 
Syntax: [<LINENUMBER>|<EXPRESSION>|<LABEL>]
READ REA. Get records from a DATA line 
Syntax: <VARIABLE0>[,<VARIABLE1> ... <VARIABLEn>]
FIND - Locates specified strings in a BASIC program
Syntax: <LITTERAL STRING>|<STRING VARIABLE>
RENUM REN. Renumbers a BASIC program and adjusts GOTO's etc.
Syntax: [<START LINE>,<INCREMENT>]
FCOS FC. Fast 1200 bps COS with visible tape transfer
indication
SCOS SC. Same as FCOS, but with 300 bps
XDUMP X. Gives ASCII/hexadecimal memory dumps
Syntax: <START ADDRESS>[,<END ADDRESS>]
HDUMP H. Gives hexadecimal memory dumps
Syntax: <START ADDRESS>[,<END ADDRESS>]
DISAS DI. A fast 6502 machine code disassembler
Syntax: <START ADDRESS>[,<END ADDRESS>]
COPY COP. Copies memory blocks to a specified destination
Syntax: <START ADDRESS>,<END ADDRESS>,<DESTINATION ADDRESS>
RELOC REL. Relocates 6502 machine code to a specified destination
Syntax: <START ADDRESS>,<END ADDRESS>,<DESTINATION ADDRESS>
STEP STE. A versatile 6502 machine code debugger
Syntax: <START ADDRESS>[,<DISPLAY ADDRESS>]
PLAY PL. Provides a versatile method of sound output
Syntax: <NOTE0>[,<NOTE1> ... <NOTEn>]
KEY K. Performs a single keyboard scan
Syntax: <VARIABLE>
ON ERR O. Redefines error handling
Syntax: <BASIC STATEMENT>
SHAPE SHA. Draws anything you want on the screen in any mode
GRMOD GR. Allows HIRES graphics to be mixed with normal characters
TXMOD T. Disables GRMOD and returns control to the 6847

FCOS en SCOS hebben geen effect in de Emulator, omdat de casette laad en save routines worden afgevangen de ROM. De meeste AXR1 commando’s kunnen niet op gestept worden met het STEP commando omdat het STEP commando en het AXR1 commando van dezelfde zeropage locaties gebruik maken; vanuit de ingebouwde monitor (zie hoofdstuk 4.3) kan echter alles gestept worden. Alle AXR1 commando’s worden gedemonstreerd in de AXR1 demo-casette, die geladen kan worden en gerund in de emulator.

Sinds versie 1.31 wordt ook de Atom disk controller ondersteund. Aangezien velen geen DiskPack aan hun Atom hadden hangen of de commando’s inmiddels zijn vergeten volgt hieronder een opsomming van de commando’s en meldingen:

*DOS (*D.)
Enters the Disk Operation System. The COS is re-entered on BREAK. Note:
In the ATOM emulator the COS can also be re-entered by typing *COS.
*DRIVE <drive number> (*DR.)
Selects drive number without reading the catalogue.
*CAT [drive number] (*.)
Displays the catalogue. The first line shows the title of the disk and
the current qualifier. The filenames are displayed arranged by qualifier,
with the '#' indicating that the file is locked.
The catalogue is read off disk unless the disk is in the 'ready'
condition (still spinning), in which case it is transferred from the
catalogue buffer (at 2000h).
*DIR [drive number] (*D.)
Reads the catalogue from disk to the buffer, but does not display it.
This command is often used to wait for completion of a previous
operation, since the prompt may re-appear while a transfer continues
under interrupt.
*TITLE <title> (*T.)
Sets the title of the disk to the first 13 characters of <title>.
*SETx
Sets the qualifier for all subsequent operations on files to x.
Operations that use the existing files will only search among those
created under the qualifier currently set. The default qualifier is
space. When returning to the default qualifier, be sure to enter space
after the set command.
*USEx
Temporarily sets the qualifier to x. The system returns to the previous
qualifier after the next successful operation. Two successive USE
commands are equivalent to a SET.
*LOCK <name>
Locks the named file. Locked files cannot be deleted or updated.
*UNLOCK <name> (*U.)
Unlocks the named file.
*INFO <name> (*I.)
Displays information about the named file. The format is:
qualifier : lockstate filename loadaddr execaddr length startsector
For example:
s: #BASIC C000 C2B2 01000 002
The '#' indicates that the file is locked.
*MON (*M.)
Turns on messages. Subsequent file operations print out the file's
information in the format of *INFO.
*NOMON (*N.)
Turns off messages.
*SAVE <name> aaaa bbbb cccc (*S.)
Creates a file. The contents of memory from aaaa to bbbb-1 are saved as
the named file. If a file with the same name already exists under the
current qualifier, it is deleted. The address cccc is an optional
execution address and it defaults to aaaa is not supplied.
*LOAD <name> aaaa (*L.)
Loads the named file. The file is loaded into memory starting at aaaa,
or at the file's start address if this is missing.
*DELETE <name> aaaa (*DE.)
Deletes the named file.
*GO aaaa
Executes the machine-code subroutine at aaaa.
*RUN <name> <string> (*R.)
Load and run the named file, using the start and execution address.
<string> is transferred to memory starting at 0140h with a terminating
CR, where it can be accessed by the user's program.
*EXEC <name> (*E.)
Executes the named text file as if it had been entered at the keyboard.
*SPOOL <name>
Outputs all data from keyboard first to the named file, and then to the
screen.
DOS responses and error messages:
Command?
The command is not recognised.
Syntax?
The paramters are illegal or incorrectly presented.
Name?
The filename is longer than seven characters.
File?
The file is not found.
Disc prot
The disk is write-protected.
File prot
The file has been locked.
Disc full
There is insufficient room on the disk to create the new file.
Full
There are already 31 files in the catalogue.
Disk error 08 (Clock error)
During a disk read operation a clock bit was missing.
Disk error 0A (Late DMA)
During a disk transfer the processor did not respond fast enough.
Probably due to a faulty disk controller card.
Disk error 0C (ID filed CRC error)
The cyclic redundancy check derived from the data read back differed
from that stored on the disk.
Disk error 0E (Data CRC error)
The cyclic redundancy check from the data read back differed from that
stored on the disk during a disk read.
Disk error 10 (Drive not ready)
During a transfer the disk stopped rotating. Often due to a badly
inserted disk.
Disk error 14 (Track 0 not found)
The controller failed to find track 0. Often due to an unformatted disk.
Disk error 18 (Sector not found)
The controller failed to find the required sector. Often due to a
corrupted or unformatted disk.
Atom DOS gebruikt de zeropage adressen #9A-#FD, met uitzondering van #A4, #CE-D4 en #D7-#E8.

5.2 RAM

De geemuleerde Acorn Atom heeft 40 kB Random Acess Geheugen:

-0000h: Zero Block RAM (1 kB)
-0400h: Expansion RAM (7 kB)
-2000h: DOS Catalogue Buffer (0.5 kB)
-2200h: DOS Sequential File Buffers (1.5 kB)
-2800h: Floating Point Variable Space (0.25 kB)
-2900h: Text RAM (21.75 kB)
-8000h: Graphics RAM (6 kB)
-9800h: Expansion RAM (2 kB)

5.3 I/O-DEVICES

Van het 4 kB block op #Bxxx zijn de volgende I/O-devices geïmplementeerd in de emulator. Ze zijn echter niet volledig uitgevoerd omdat niet alle funkties nodig zijn in de emulator.

1. 8255 Programmable Peripheral Interface Adapter (PPIA)

  • Port A at #B000: Output bits: Function:
    • 0 – 3 Keyboard row
    • 4 – 7 Graphics mode
    • Port B at #B001: Input bits: Function:
      • 0 – 5 Keyboard column
      • 6 CTRL key (low when pressed)
      • 7 SHIFT keys (low when pressed)
    • Port C at #B002: Output bits: Function:
      • 0 Tape output (not implemented)
      • 1 Enable 2.4 kHz to casette output (n.i.)
      • 2 Loudspeaker
      • 3 Intensity
      • Port C at #B002: Input bits: Function:
        • 4 2.4 kHz input (not implemented)
        • 5 Casette input (not implemented)
        • 6 REPT key (low when pressed)
        • 7 60 Hz sync signal (low during flyback)

      NB: Poort C, bit 3 schakelt tussen de twee mogelijke sets van vier kleuren. Ik heb er echter voor gekozen om maar een kleurenset te gebruiken die naar wens gewijzigd kan worden zoals in hoofdstuk 4.2 beschreven staat. Bit 3 bepaalt wel de intensiteit voor ForeGr in tekstmode of CLEAR0 want zo heb ik het altijd gezien op de echte Atom en zijn groene monitor. Als het bit gezet (1) is worden de waarden voor rood, groen en blauw van de ForeGr en Color0 kleuren met 1,5 vermenigvuldigd. De 8-bit poort op #B003 is voor zover nodig geïmplementeerd maar niet gedocumenteerd.

      2. 6522 Versatile Interface Adapter (VIA)

      • Data Register B B800h DB (part. implemented)
      • Data Register A B801h DA (printer)
      • Data Direction Register B B802h DDRB (part. implemented)
      • Data Direction Register A B803h DDRA (alleen lezen van DA)
      • Timer 1 low counter, latch B804h T1CL
      • Timer 1 high counter B805h T1CH
      • Timer 1 low latch B806h T1LL
      • Timer 1 high latch B807h T1LH
      • Timer 2 low counter, latch B808h T2CL
      • Timer 2 high counter B809h T2CH
      • Shift Register B80Ah SR (not implemented)
      • Auxiliary Control Register B80Bh ACR (part. implemented)
      • Peripheral Control Register B80Ch PCR (alleen lage nibble)
      • Interrupt Flag Register B80Dh IFR (part. implemented)
      • Interrupt Enable Register B80Eh IER (part. implemented)
      • Data Register A B80Fh DA

      NB:

      1. DB en DDRB zijn dusdanig uitgevoerd dat alleen de blokgolf gegenereerd door Timer 1 op PB7 gebruikt kan worden.
      2. Timer2 pulse mode kan niet gebruikt worden omdat DA niet geïmplementeerd is. Timer2 werkt alleen in one-shot mode en staat stil in pulse mode.
      3. Van ACR, IFR en IER zijn alleen bits 7-5 geïmplementeerd.

      Ofwel kort samengevat: de emulator biedt volledige ondersteuning van de 16 bits timers, de interrupts die daardoor opgewekt worden en de printerpoort.

      3. 8271 FDC

      Een 8271 FDC is geplaatst op het adres #BA00. Waarom Acorn ooit heeft besloten om de FDC op #0A00 te plaatsen zal voor altijd een raadsel blijven. In de echte Atom was het met wat soldeerwerk mogelijk om de FDC te verplaatsen naar het I/O gebied. Deze emulator maakt van deze technieken ook gebruik en de FDC staat dus netjes op de plek waar het zou moeten. De DOSROM is uiteraard hierop aangepast.

      De 8271 kent de volgende poorten:

      Address Write Read
      BA00h Command register Status register
      BA01h Parameter register Result register
      BA02h Reset register -
      BA03h - -
      BA04h Data register Data register
      
      De emulator gebruikt disk image files (.DSK bestanden) die één kant van de disk van het standaard AtomDOS bevatten, namelijk 40 tracks van elk 10 sectoren met 256 bytes per sector; in logische volgorde.

      De meeste van de commando’s van de 8271 worden ondersteund. Alle AtomDOS commando’s zijn in ieder geval beschikbaar. Daarbij is het zelfs mogelijk om de geëmuleerde diskettes te formatteren. Zie hoofdstuk 5.1 voor de dos *-commando’s.

      4. Schakelkaart en latch

      Bits 0-3 van de poort #BFFF bepalen welke RAMBANK (of toolbox) van 4 kB groot actief is in het adresgebied #A000-#AFFF. Door een waarde naar deze poort te schrijven kan men handmatig een box selecteren. Tijdens de uitvoering van een programma zal het operating systeem deze poort ook gebruiken om automatische van toolbox te wisselen. Als in een programma een onbekend statement voorkomt zal het systeem in de huidige box gaan zoeken naar dit statement. Als het statement niet gevonden wordt schakelt het systeem automatisch een volgende box voor. Dit gaat door totdat alle boxen doorzocht zijn of uiteraard totdat het statement wel gevonden is. Tijdens het wisselen van boxen worden ook de zeropage adressen #90-#9F bewaard en voor elke specifieke box teruggezet.

      5. Printer

      Het is inmiddels ook mogelijk om rechtstreeks data van de Atom Emulator naar de printer te sturen waarbij gebruik gemaakt wordt van de ROM routines in de Atom. De emulator voorziet standaard al van een 8-bits printerpoort tegenover de 7-bits poort van de Atom zelf. Zie ook de beschrijving van de 6522 VIA voor meer informatie over de implementatie van de printerpoort.

      De Atom gebruikt DRA (Data Register A) van de 6522 VIA om met de printer te communiceren. In deze 8-bits poort wordt het bit7 gebruikt als statussignaal (input) en de overige zeven bits worden gebruikt als datalijn (output). Hiertoe wordt de waarde #7F naar het Data Directorion Register A (DDRA) op #B803 geschreven. De emulator handelt de printer als volgt af: als DRA gelezen wordt zal bit7 aangeven of de printer on-line is of niet, zoals aangegeven via DDRA. Bij het schrijven naar DRA zullen alle bits naar de printer gestuurd worden. Met andere woorden, tijdens het schrijven naar DRA negeert de emulator de status van DDRA en zullen er altijd acht bits geschreven worden.

      Verder werkt de emulator volgens de routine in de Atom ROM; als in het Peripheral Control Register (PCR) op #B80C een lage pulse wordt geschreven (dit is de waarde 1100 voor de bits 3-0) zal het byte in het register DRA naar de printer gestuurd worden.

      6. Muis

      Standaard kent de Atom geen muis. Kees van Os heeft echter een protocol en adressen gemaakt om de computer toch van een dergelijk aanwijsding te voorzien. De Atom emulator emuleert deze muis op transparante wijze. De muisinterface bestaat uit vier I/O poorten:

      Address Type Description
      BFE0h RW Mouse x coordinate
      00h - Most left coordinate
      F8h - Most right coordinate
      BFE1h RW Mouse y coordinate
      FFh - Top line
      47h - Bottom line
      BFE2h R Mouse buttons
      bit 0 = 0: Left button pressed
      bit 1 = 0: Right button pressed
      bit 2 = 0: Middle button pressed (if available)
      BFE2h W Mouse properties
      bit 7 : Mouse shown/hidden (0=on, 1=off)
      bits 4-0 : Mouse cursor number (00h-1Fh)
      
      Merk hierbij op dat de laatste twee poorten op hetzelfde logische adres zitten. De muiscursor is maximaal 8×8 (clear4) pixels groot. Dit formaat is in alle grafische modi en in text mode hetzelfde. Dit komt omdat de muis onafhankelijk van de geselecteerde mode werkt. De kleur van de pointer is wit.

      De muis kan aangezet worden door een waarde tussen #00 en #31 naar de "Mouse properties" poort op #BFE2 te schrijven. Er kan hiermee gekozen worden uit 32 voorgedefiniëerde cursors. De muis wordt uitgezet door een waarde > 128 (#80) naar poort #BFE2 te schrijven.

      5.4 PC I/O

      Met ingang van versie 1.33 is het mogelijk om vanuit de Atom emulator ook de ISA-bus van de PC aan te spreken. De ISA I/O map is beschikbaar op de adressen #B400-#B7FF.

      De ISA I/O map loopt van $0000 – $03FF waarbij de eerste 512 bytes gereserveerd zijn voor I/O devices op het moederbord (zoals DMA controller, timer en toetsenbordcontroller) en de hoogste groep van 512 bytes zijn gereserveerd voor I/O uitbreidingen op de ISA bus (parallelle- en seriële poorten, videokaart etc). De "omnummering" van Atom-naar-ISA ziet er als volgt uit:

      ISA BUS I/O Map Atom emulator I/O Map
      $0000 #B400
      $0001 #B401
      $0002 #B402
      …… ……
      $03FF #B7FF

      6.1 DE ATOMTAPE UTILITY

      De ATOMTAPE.EXE utility zorgt ervoor dat files overgezet kunnen worden van de orginele Acorn Atom of cassette naar de PC. Er is echter wel een geluidskaart voor nodig omdat de ATOMTAPE.EXE utility VOC-files analyzeerd. De Atom of cassetterecorder wordt aansgeloten op de Line In connector van de geluidskaart, waarbij line_2 als grond en line_1 als output signaal dient (line_3 is het input signaal naar de Atom van de recorder; zie tekening).

      sk2.gif

      Start een VOC/WAV maker op je pc en neem op van de Line In connector. De VOC file moet 8-bits zijn, mono en opnemen vanaf 22050 Hz. De VOC-file mag maar gebruik maken van een datablock (type1). Het block mag wel of niet voortgezet worden bij een blocktype 8.

      Druk op Play van je casetterecorder of save een file op je orginele Atom op of 300 of 1200 bps ( de laatste volgens het AXR1 1200 bps protocol). Het programma kan alleen maar files met een naam verwerken; deze files bevatten een controle block/header en een data block van 257 bytes (256 databytes en een checksum), het volgende controle block, het volgende data block enz.

      Over de casettesnelheid:
      Elke byte op casette is voorzien van een startbit (0) en een stopbit (1). Daartussen zitten de 8 bits van het databyte. In 300 bps mode bevat elke 0-bit bevat vier pulsen van een 1.2 kHz blokgolf en ieder 1-bit bevat acht pulsen van een 2.4 kHz blokgolf. In 1200 baud mode alle 0-bits één puls van de 1.2kHz golf en elke 1-bit bevat twee 2.4 kHz pulsen. Het stopbit bevat altijd een extra 2.4kHz puls.

      Nadat de VOC file is opgenomen, start u de ATOMTAPE.EXE utility. Type de VOC file naam in en of het opgenomen is op 300 bps of 1200 bps. De utility controleert dan of de VOC file het goede formaat heeft (8-bits, mono, 22050 Hz) en begint met het analyseren van de data. Als alles goed gaat zullen de op een volgende controle blocks (headers) van de file te zien zijn en de data blocks geladen worden. Als er geen errors zijn dan zal de file gesaved worden onder de dezelfde naam als de VOC file maar wel met de .ATM extensie.

      Het formaat voor de .ATM files is als volgt:

      Offset Size Beschrijving
      0000h 16 bytes Atom filenaam (Als deze korter is dan 16 karakters wordt de rest opgevuld met 00h)
      0010h 1 word Load address
      0012h 1 word Exec address
      0014h 1 word Lengte van de data in bytes
      0016h lengte data Programma / file data

      6.2 ATOMCOM utility

      AtomCom is een kleine utility om files uit te wisselen tussen de PC en de Atom via enerzijds de geluidskaart en anderzijds de cassettepoort. Benodigd voor dit programma zijn:

      • 80286 processor
      • Soundblaster 2.0 of hoger

      Sluit op de Atom connector (zie tekening bij 6.1) pen 1 aan op de line-in plug van de geluidskaart en pen 2 op de line-out of luidsprekeruitgang van de geluidskaart. Pen 2 gaat naar de ground aansluiting. Start het AtomCom programma. De geluidskaart wordt geïdentificeerd en de gevonden parameters worden op het scherm getoond. U ziet vervolgens het hoofdmenu:

      Kiest u voor 1) dan wordt om een filenaam gevraagd; geef hier de naam op van een ATM file. Zorg dat de Atom klaar staat om data te ontvangen, bijvoorbeeld:

      FCOS
      LOAD "INVADERS"

      Omgekeerd, optie 2), zet u de PC klaar om data te ontvangen. Start nu de data-overdracht op de Atom met bijvoorbeeld:

      FCOS
      *SAVE "SNAPPER"2900 3C00 CE86

      Let erop dat deze utility alleen werkt met bestanden die een filenaam hebben; een opdracht als *SAVE "" 2900 3C00 CE86 werkt dus niet. Voor een uitgebreidere uitleg van deze utility wordt u verwezen naar de file ATOMCOM.TXT die bij de emulator geleverd wordt.

      7. COMPATIBILITEIT

      CPU

      • 65C02 instructie set
      • Zeven extra 65802 instructies
      • IRQ, RES en NMI worden afgehandeld
      • 80×87 co-processor ondersteuning voor snelle floating point berekeningen

      De 65C02 kent enkele verbeteringen ten opzichte van de 6502:

      • Er zijn geen illegale opcodes. Alle ongebruikte opcodes worden als NOP met geen, één, of twee operands.
      • De C, N en V vlag zijn nu ook geldig in decimale mode (de emulator behandelde deze vlaggen ook al juist in de 6502 emulaties).
      • De instructie JMP (addr) mag nu over de paginagrens heengaan, de wrap-around bug in de 6502 is hiermee verholpen. De emulator kende deze bug overigens niet.
      • De D(ecimal) vlag wordt gewist bij een RES, IRQ of NMI service

      De 65C02 biedt 12 nieuwe instructies, waaronder:

      • BRA – Branch always
      • PHX – Push x-register onto stack
      • PHY – Push y-register onto stack
      • PLX – Pull x-register from stack
      • PLY – Pull y-register from stack
      • STZ – Store zero to memory
      • TRB – Test and reset memory bits against accumulator
      • TSB – Test and set memory bits against accumulator
      Daarnaast nog twee nieuwe adresseermogelijkheden:
      • indirect, bijvoorbeeld LDA (#55)
      • Absolute Indexed Indirect, bijvoorbeeld JMP (#241A)
      Naast de 65C02 instructieset biedt de emulator nog de volgende instructies van de 65802 processor:
      • COP – Co-processor enable
      • JSR (addr,x) – Jump to subroutine, absolute indexed indirect
      • TAS implied – Transfer accumulator to stack pointer
      • TSA implied – Transfer stack pointer to accumulator
      • TXY implied – Transfer x-register to y-register
      • TYX implied – Transfer y-register to x-register
      • SWA implied – Swap high and low order bytes of accumulator
      Vanwege de laatste instructie is een extra register beschikbaar geworden dat met de accu gewisseld kan worden met de SWA instructie. Wellicht dat in een latere versie ook de 16 bits registers en meerdere instructies ondersteund worden.

      De COP instructie (#02) wijkt af van de echte 65802 processoren. In de emulator is het een zg. implied instruction. De instructie wekt geen interrupt op maar roept een 80×87 coprocessor routine aan. Deze routine bevat diverse functies die middels de accu geselecteerd kunnen worden. Parameters kunnen van en naar de co-processor doorgegeven worden via het Atom geheugen. De X en Y registers dienen hierbij als pointers naar het geheugenadres (X=lage byte en Y=hoge byte).

      Verder documentatie is nog niet beschikbaar omdat de implementatie en standarisatie van deze functies nog volop in ontwikkeling is.

      VIDEO

      • alle grafische modi

      GELUID

      • ondersteunt de PC speaker en de Soundblaster of compatible

      I/O POORTEN

      • 8255 PPI toetsenbord poort
      • 6522 VIA timers/timer interrupts, 8 bits printerpoort
      • 8271 FDC Floppy Disk Controller
      • Hardware muis I/O poorten
      • Schakelkaart latch
      • Read-only flip-flop (#55,#AA) op adres #BF7F voor emulator detectie

      COS

      • ROM afgevangen LOAD en SAVE routines
      • ROM afgevangen FIN, FOUT, GET en PUT routines
      • Cassette image files met een directory
      • *CAT wordt afgevangen in ROM
      • ATOMTAPE.EXE utility leest de orginele cassettes van .VOC-files
      • ATOMCOM.EXE utility voor data uitwisseling tussen Atom en PC

      Disk systeem

      • Werkt via image files
      • Drive status leds op het beeldscherm

      Overige apparaten

      • Uitvoer naar (PC) printer
      • Hardware muis ondersteuning met 32 muiscursors
      8. Versie overzicht

      Upgrade v1.0 -> 1.1

      Op het eerste gezicht is er niets nieuw in de versie 1.0. Ondanks dat de emulator v1.1 runs in VGA mode 12h in plaats van 13h kan bij sommige grafic adapters geen stabiel beeld worden bereikt. Ik hoop dat dit het probleem oplost.

      Upgrade v1.1 -> 1.2

      Enkele kleine aanpassingen:

      • een rom kan geladen worden in het geheugengebied #A000-#AFFF. Andere ROM gebieden kunnen niet meer overschreven worden.
      • een bugfix: de AND instructie werkt nu ook op I/O adressen
      • soms verdwenen files en kwamen weer terug of konden niet geimporteerd worden. Door domweg een interne errorvlag te resetten (gebruikt door Turbo Pascal’s I/O afhandeling) voordat een file geopend wordt blijkt dit probleem te verdwijnen.
      • nog een bugfix: het laden van een uitbreidingsrom die opgegeven was in de INI file werkte niet. Moet nu goed gaan.
      • Hotkeys gewijzigd.

      Versie 1.2 -> 1.21

      • Gedeeltelijke implementatie van PPIA poort #B003
      • Optionele disassembler van illegale opcodes in de desktop monitor

      Versie 1.21 -> 1.22

      • Foutje in v1.21 hersteld: geheugen #0000-#9FFF RAM toegevoegd en #C000-#DFFF beschermd tegen overschrijven bij het laden.
      • Op sommige systemen met bepaalde videokaarten ging de monitor in stand-by mode kort nadat de emulator gestart was. Dit is nu verholpen.

      Versie 1.22 -> 1.30

      • *CAT commando wordt afgevangen in ROM.
      • Debugger opties uitgebreid. Nu kunnen maximaal vier breakpoints gelijktijdig gezet worden. De speciale toetsen F4, F5, F6, F9, F10, F11, F12, Shift+F12, Alt+F12, Ctrl+F12 kunnen nu ook tijdens het debuggen gebruikt worden.
      • Implementatie van schakelkaart met maximaal 8 toolboxen op #Axxx. Box informatie wordt met F6 getoond.
      • De functies FIN, FOUT, GET, BGET en FGET, alsmede de statements SGET, PUT, BPUT, FPUT en SPUT werken nu ook in COS.
      • MS-DOS shell (tijdelijk naar MS-DOS).
      • Printer uitvoer geïmplementeerd.

      Versie 1.30 -> 1.31

      • Screendump naar BMP file.
      • Muis ondersteuning ingevoerd.
      • Floppy Disk Controller en DOSROM opgenomen in emulator.
      • Disk Screen in emulator desktop opgenomen.
      • Maximaal aantal toolboxen op #Axxx uitgebreid naar 16.

      Versie 1.31 -> 1.32

      • Geluid via PC-speaker verbeterd.
      • 65C02 emulatie i.p.v. 6502.
      • Zeven extra 65802 instructies toegevoegd.
      • Boot vanaf disk image in drive 0 door ALT+F12 te drukken.
      • Alternatieve Floating Point ROM met 80×87 co-processor ondersteuning.
      9. PROBLEMEN OPLOSSEN

      Elke keer als de emulator wordt gestart zal deze de snelheid van de CPU vaststellen. Als dit niet correct wordt gedaan dat moet de waarde van de "Speedindex" in de .INI-file handmatig gezet worden. Deze waarde zal ongeveer hetzelfde zijn als de de waarde van de CPU snelheid van de eigen PC (in MHz) voor de 486/pentium machines.

      Voorbeelden:

      ProcessorIndex
      AMD 486DX-40 MHz39
      Intel 486DX2-66 MHz65
      Intel Pentium-120 MHz123
      Intel Pentium-233 MHz236

      NB: De waardes zoals hier boven beschreven zijn van toepassing op een emulator die draait onder een MS-DOS omgeving. Als het programma onder Windows draait zal de emulator een beetje langzamer draaien (automatische snelheid detectie op een P120 resulteert in een waarde van 123 als deze draait onder MS-DOS en resulteert in 121 als het draait onder Windows 95).

      Als je een andere extensie ROM wilt gebruiken dan de AXR1 op geheugen adres #A000, kunt u de filenaam als volgt in de .INI-file opgeven:

      AltExtROM=<filenaam.ext>

      Als de emulator gestart wordt zal de uitbreidingsrom vanaf geheugen adres #A000 geladen worden indien de lengte exact 4118 bytes is. De file mag elke naam en extensie hebben zolang het formaat van de file hetzelfde is als het formaat van een ATM-file.

      indien soms een paar toetsen niet werken (shift, Alt, CTRL enz) denk er dan aan dat u kunt schakelen tussen het standaard en het alternatieve toetsenbord door op de <F4> toets te drukken. Na een BREAK (F12) wordt automatisch het standaard toetsenbord geselecteerd.

      Onder Windows 95 kan het gebeuren dat na het switchen naar een ander programma en vervolgens weer terug naar de Atom emulator het scherm blanco is. Er is niets ernstigs aan de hand, het scherm moet alleen opnieuw opgebouwd worden, wat u kunt doen door de emulator desktop <F9> even op te roepen en dan weer terug te keren naar emulatie door op <Esc> te drukken.

      Het kan gebeuren dat de Atom hangt vanwege incompatibiliteiten tussen (EP)ROM boxen. Neem het volgende geval:

      GRMOD <return>
      VAR <return>
      
      Het eerste commando staat in de AXR1 box en wijzigt de lees- en schrijfvectoren op #208/#209 en #20A/#20B. Het tweede commando staat in de P-Charme toolbox; dit commando stuurt de output via de zojuist genoemde vectoren. Deze wijzen echter naar de nu niet beschikbare AXR1 box. Echter, de emulator zorgt ervoor dat de AXR1 box voorgeschakeld wordt, voert de schrijfopdracht uit en keert terug naar P-Charme. Dit gebeurt door de Branquar Schakelsoft die een interne tabel met "destination"- boxen opbouwt van de vectoren #200-#21A en #3FE. Hiervoor geldt echter een maximum van 32 "bank swapped calls" die gelijktijdig gemaakt kunnen worden. Overschreiding van deze 32 niveau’s leidt tot een Error 33.

      Denk er ook aan dat de zero page adressen #90-#9F apart per box bewaard worden. Gezamenlijk gebruik van andere zeropage adressen kan leiden tot ongewenste effecten. Als dat problemen oplevert kunt u de BoxSwitch parameter in de Atom.ini veranderen.

      Als een frozen-file geladen wordt en het zaakje crasht meteen ligt dat meestal aan een andere volgorde van geladen toolboxen. Herstel de fout door de toolboxen weer als tijdens het freezen van de file te laden of draai de emulatie zonder box-switching, waarbij de juiste toolbox handmatig voorgeschakeld is.

      De optie om tijdelijk naar MS-DOS te gaan kan mislukken bij te weinig conventioneel geheugen. De emulator draait geheel in dit geheugen waardoor er slechts weinig geheugen overblijft voor andere toepassingen. De geselecteerde disk image files blijven geopend en kunnen door andere applicaties alleen voor lezen geopend worden.

      Ofschoon alle COS routines vanuit de ROM afgevangen worden kan het nog steeds voorkomen dat de meldingen PLAY TAPE, RECORD TAPE danwel REWIND TAPE op het scherm verschijnen. Een COS routine wordt alleen afgevangen als de bijbehorende vector naar het oorspronkelijk adres wijst (dus de het adres dat gezet wordt na een BREAK). Als er in de vector een ander adres staat gaat de emulator ervan uit dat het een DOS routine is en wordt de vector gevolgd zoals op een echte Atom.

      10. REFERENTIES

      Onderstaande literatuur is gebruikt bij het schrijven van dit programma:

      1. Johnson-Davies, David: "Atomic theory and practice", second ed. 1980, Acorn Computers Ltd.
      2. "Atom Technical Manual", 2nd issue, october 1980, Acorn Computers Ltd.
      3. Greenley, Larry et al.: "Commodore 128 Programmer’s Reference Guide", february 1986, Bantam Books.
      4. Lincklaen Arriens, H.J. and Horsmeier, J.A.: "Atom Extension ROM (AXR1) Instructions Manual", second edition 1983, ECD/SEW Stichting Elektronica Workshop.
      5. Vardy, Adam: "Extra instructions of the 65xx series CPU", text document of 27 september 1996, downloaded from " http: /www.funet.fi/".
      6. Kontros, Frank: "R6522 Versatile Interface Adapter", text document downloaded from "http: //www.funet.fi/".
      7. Brown, Ralf: "Interrupt List Release 54", "file PORTS.LST", june 1997.
      8. Reinders, Henk: "Atom Ware deel 2: De FDC en DOS ROM",Federatie van Acorn Computer Clubs Nederland/België.
      9. "Atom Disc Pack ", Acorn Computers LTD.

      Daarnaast zijn de volgende, engelstalige, documentatiefiles nog beschikbaar via deze website:

      11. CONTACT MET DE AUTEUR

      Wouter Ras is helaas door drukke werkzaamheden niet meer actief met de Atom.