../../images/zoom.gif
../../images/exit.gif
 DISKROM Frans le Blanc

 
INHOUD

Inleiding

Het Disk Operating Systeem van de Atom was minimaal. Al gauw ontstonden een aantal aanvullende utilities. Het kon niet uitblijven dat de meest gebruikte, samen met de meegeleverde 4 DOS-utilities, in een EPROM werden ondergebracht. Frans le Blanc heeft zich met zijn routines bij de bij Acorn, in de BBC en de ATOM, gebruikelijke wijze van werken aangesloten. De DiskRom werkt uitstekend met het CX-systeem samen. Alle sources zijn in AN gepubliceerd en met de regio schijven verspreid onder de leden. Kortom een uitbreiding die velen veel gemak en plezier heeft bezorgd.
De regio Den Haag heeft de bij deze ROM behorende publicatie verzorgd. */

De DISKROM is een 4k-eprom, die een aantal handige uitbreidingen bevat om het diskgebruik te vergemakkelijken. De bedoeling is, dat de diskrom geplaatst wordt in een van de voetjes in de schakelkaart. Voor diegenen die geen schakelkaart bezitten, maar wel voldoende geheugenruimte is het ook mogelijk om van de diskuitbreidingen gebruik te maken door middel van de speciaal voor dit doel aangepaste source (zie hoofdstuk 3). De meeste routines in de diskrom zijn geschreven door ondergetekende, echter bekende utilitie's als Format, Infall en Compact zijn enigszins in gewijzigde vorm overgenomen. Hierbij bedank ik iedereen die mij bij het samenstellen van deze rom van advies gediend heeft, met name Henk Reinders en Henk van der Heijden.

De diskrom is onder te verdelen in twee delen:
  1. Een uitbreiding van de BASIC-statements
  2. Een uitbreiding van de command line statements (*)
Na veel wikken en wegen is voor deze kombinatie gekozen. Er zijn namelijk een aantal voordelen aan verbonden als men de Command Line Interpreter (CLI) gebruikt om statements af te werken. Om te beginnen is de herkenbaarheid groot: men weet direkt dat het kommando betrekking heeft op het Disk Operating System. Een ander voordeel is dat de voorhanden zijnde DOS-routines kunnen worden gebruikt, dit in tegenstelling tot BASIC-statements. Om een voorbeeld te noemen: bij BASIC wordt altijd geinterpreteerd met LDA (#05),Y en in de CLI met LDA #100,Y. Als er nu een '*' voor het kommando staat kan men dus ook die DOS-routines gebruiken die interpreteren met LDA #100,Y. Een ander voordeel is dat er met dezelfde syntax als in de standaard Acorn DOS-rom gewerkt kan worden, hetgeen het gebruik overzichtelijker maakt. Natuurlijk zijn er ook nadelen aan het werken met een tweede CLI interpreter verbonden. Ten eerste zal altijd de CLI-vector (#206,#207) veranderd moeten worden. Normaal staat deze op adres #E3E5 (in de DOS-rom). Deze nu zal naar het beginadres van de interpreter van de diskrom moeten wijzen. Het gebruik in een schakelkaart vereist dat de goede box voor moet staan. Daarom is in de diskrom een routine opgenomen die zichzelf kopieert naar RAM en vandaar de goede box opzoekt bij het binnenkomen van de CLI. Bij het verlaten van de diskrom wordt de oorspronkelijke box weer voorgezet: het is dus mogelijk om vanuit de editor de standaard DOS-routines uit te voeren. Zie voor een gedetailleerde beschrijving hoofdstuk 3.Over de namen van de statements het volgende. Er is gekozen voor namen, zoals die in de BBC-computer voorkomen. Dit is gedaan om standaardisatie in Acornformaat te kontinueren.
Statements die in de Disk Filing System (DFS) van de BBC voorkomen zijn:
*ACCESS, *BACKUP, *BUILD, *COMPACT, *COPY, *DESTROY, *DUMP, *ENABLE, *HELP, *LIST, *RENAME, *TYPE, *WIPE. Ook het BASIC-statement "CHAIN" behoort tot de BBC-BASIC.

../../images/terug.gif Hoofdstuk 2 - De statements

De volgende statements zijn aanwezig in de diskrom:

BASIC uitbreidingen: syntax:
CHAIN <"filenaam">
DISK
FCOS
CLI Uitbreidingen syntax:
*ACCESS (<L>) (<drive>)
*BACKUP (<drive> <drive>) (<buffergebied>)
*BUILD <filenaam>
*COMPACT (<drive>)
*COPY (<drive> <drive>) (<filenaam>)
*DESTROY (<drive>)
*DCAT (<drive>)
*ENABLE
*DUMP <filenaam>
*FORMAT (<drive>)
*HELP
*INFALL (<drive>)
*LIST <filenaam>
*OPT (<option>) (<drive>)
*QUAL <filenaam> (<qualifier>)
*RENAME <oude filenaam> <nieuwe filenaam>
*SECTOR (<drive>)
*TYPE <filenaam>
*VERIFY (<drive>)
*WIPE (<drive>)

../../images/terug.gif Samenvatting van de CLI-uitbreidingen

  1. Krachtige kopieerroutines met *COPY en *BACKUP.
  2. Utilities om sectoren en files te lezen met *DUMP, *LIST, *SECTOR en *TYPE.
  3. Verwijderen van files en beveiliging van dem catalogue met *ACCESS, *DESTROY, *ENABLE en *WIPE.
  4. Het veranderen van files met *RENAME en *QUAL.
  5. Bekende utilities als *COMPACT, *FORMAT, *INFALL en *VERIFY.
  6. Het kreeren van tekstfiles met *BUILD.
  7. Een uitgebreide *CAT en een auto-DOS-start met *OPT.
  8. Een snelle 1200 baud COS-routine.
  9. Mogelijkheid tot het schakelen naar een ander BASICprogramma met CHAIN

../../images/terug.gif 2.1 De BASIC-statements

CHAIN "filenaam" CH.

Met de opdracht CHAIN "filenaam" kan er vanuit een BASIC-programma een ander BASIC-programma geladen worden in dezelfde tekstpagina en daarna meteen gerund. Voordat het programma gerund wordt, worden eerst de dimpointer (#23,#24) en TOP (#0D,#0E) goed gezet. Net als bij FIN en FOUT is het mogelijk om de filenaam in een string te zetten. In tegenstelling tot LOAD $A wordt CHAIN $A wel uitgevoerd. Met name bij het maken van een serie programma's die vanuit een hoofdprogramma opgeroepen worden, is dit statement erg handig. CHAIN werkt ook met het Cassette Operating System.

DISK DI.

Met dit statement wordt eerst het DOS en tevens de CLI-vector geinitialiseerd voor het gebruik van de extra statements. Deze routine moet alleen gebruikt worden door diegenen, die geen bootstrap gemaakt hebben of een aangepaste resetroutine (BREAK) gebruiken. Zie voor verdere informatie hoofdstuk 3.

FCOS FC.

Dit BASIC statement is bekend uit de Josbox en zet alle poorten en vectoren goed om een file te laden of te saven met~-*|1 1200 baud op de cassette. Nadat het laden of saven beeindigd is, wordt het DOS en de diskbox weer geinitialiseerd. De wijzigingen zoals vermeld in Acorn Nieuws nr.3-5 zijn in de FCOS-routine verwerkt.

../../images/terug.gif 2.2 De CLI-commando's

*ACCESS (<L>) (<drive>) *A.

Met *ACCESS (<drive>) worden alle files op de diskette "geunlocked" en met *ACCESS L (<drive>) worden alle files "gelocked". In wezen wordt hetzelfde uitgevoerd als *(UN)LOCK <filenaam> uit de DOS-rom
*BACKUP (<drive> <drive>) (<beginadres> <eindadres>) *BA.

Om *BACKUP te gebruiken moet er eerst een *ENABLE gegeven worden. Met *BACKUP <return> wordt een hele schijf gekopieerd sector bij sector. De defaultwaarden zijn zoals ze bij alleen een <return> gelden: kopieren van drive 0 naar drive 0 in het buffergebied #2400 tot #6700. Dit betekent dat de schijven zes keer verwisseld moeten worden. Het is ook mogelijk om middels de instruktie *BACKUP 0 0 2400 7400 in vijf keer wisselen een disk te kopieren. Immers er worden dan 80 sectoren tegelijk gekopieerd. Voor diskgebruikers met twee of meer drives is het natuurlijk ook mogelijk om te kopieren van drive 0 naar drive 1 of omgekeerd, of van drive 1 naar drive 3 etc. Er kan dan bijv. de instructie *BACKUP 0 1 gegeven worden. Als er na het opgeven van de drives geen <return> gegeven wordt, moet het buffergebied opgegeven worden met bijvoorbeeld: *BACKUP 0 1 2300 4000. Diegenen die geen 16K-kaart bezitten kunnen dit programma dus ook gebruiken door het buffergebied #2300-#4000 te kiezen. Er moet dan wel 15 (!!) keer van schijf verwisseld worden bij het ontbreken van een tweede drive.

Samenvattend zijn er dus de volgende mogelijkheden:
  • *BACKUP kopieert in drive 0 in het gebied 2400-6700
  • *BACKUP <drive> <drive> kopieert van ene drive naar andere in buffergebied 2400-6700
  • ]
  • *BACKUP <drive> <drive> <buffergebied> kopieert van de opgegeven drives binnen de gegeven buffer
*BUILD <filenaam> *B.

Met het commando *BUILD <filenaam> kan er een tekstfile gekreeerd worden, dat afgesloten dient te worden met een control-D of met het ASCII-karakter #7D (een geinverteerde teksthaak), gevolgd door een return. Met *EXEC <filenaam>~F* kan de file geexecuteerd worden, waarbij de computer de verschillende opdrachten uitvoert. Met *TYPE <filenaam> kan de file gelezen worden.

*COMPACT (<drive>) *C.

Met het statement *COMPACT (<drive>) worden de "gaten" op de diskette opgevuld. Alle files op de schijf worden netjes achter elkaar op de schijf gezet. Vooral op schijven waar veel files weggehaald zijn, worden niet altijd alle sectoren gebruikt voor data-opslag. Alle files worden geladen in het geheugengebied #2C00-#3BFF

*COPY (<drive> <drive>) <filenaam> *COP.

Met *COPY <drive> <drive> <filenaam> wordt er een file gekopieerd. Indien de drivenummers gelijk zijn wordt er gewacht totdat de schijven verwisseld zijn. De file wordt geladen vanaf #2900 maar alle filespecifikaties worden uiteraard meegekopieerd. Ook tekstfiles, eproms en random access files kunnen gekopieerd worden.
Als er *COPY <drive> <drive> <return> ingetikt wordt, kunnen alle files op een bepaalde schijf gekopieerd worden. Bij iedere file wordt er gevraagd of deze gekopieerd moet worden. Uiteraard wordt als er hetzelfde drivenummer gegeven wordt, gevraagt om de schijven te verwisselen. Met *COPY <return> wordt er gekopieerd in drive 0. Dit is hetzelfde als *COPY 0 0. Het programma kan op ieder gewenst moment onderbroken worden met de escape-toets. Files die met *COPY gekopieerd zijn, zijn nooit gelocked.

*DCAT (<drive>) *.

*DCAT (<drive>) geeft een driekoloms katalogus met aanvullende informatie over het drivenummer, de qualifier, het aantal programma's, de option voor de bootfile en het aantal vrije sectoren. Als een schijf vol is - 31 files of alle sectoren gebruikt - wordt dit aangegeven met de mededeling "DISK FULL".

*DESTROY (<drive>) *DE.

Om *DESTROY te gebruiken moet er eerst een *ENABLE gegeven worden.
Met *DESTROY (<drive>) kunnen alle programma's verwijderd worden. Uiteraard blijft de data op schijf staan, maar in de catalogue staan geen programma's meer: de schijf is leeg. Enige voorzichtigheid is hierbij geboden. Mocht men achteraf spijt hebben van de gedane opdracht dan is dit te herstellen met een peek en poke-grapje.
Met een hexdump wordt het aantal programma's geteld vanaf #2008 na een *(D)CAT gegeven te hebben. Dit getal wordt vermenigvuldigd met 8 en in #2105 gezet. Dan tikt men in:
            ?#2105=prog.*8
            LINK #E75B (zet motor aan)
            LINK #E74A (save catalogue)
en het geheel is weer in de oude staat gebracht.

*DUMP <filenaam> *DU.

Met *DUMP <filenaam> wordt er van een file een ASCII en hexadecimale dump gemaakt. Zie verder bij *LIST en *TYPE.

*ENABLE *E.

Met *ENABLE worden de kommando's *BACKUP, *DESTROY en *FORMAT toegankelijk gemaakt voor de diskgebruiker. Dit om rampzalige gevolgen van tikfouten te voorkomen.

*FORMAT (<drive>) *F.
Om *FORMAT (<drive>) te gebruiken moet er eerst een *ENABLE gegeven worden. Formatteerprogramma voor 40-track diskettes.

*HELP *H.

Met *HELP worden alle standaard DOS-kommando's en de extensions uit de diskrom uitgeprint.

*INFALL (<drive>) *I.

*INFALL (<drive>) geeft informatie over alle files op een disk omtrent het executie-adres, beginadres, lengte van de file en de beginsector van de file (*INFO).

*LIST <filenaam> *LI.

Met *LIST <filenaam> kan er een file, dat uiteraard een BASIC-programma moet zijn, uitgeprint worden op het beeldscherm, zonder dat het geladen wordt in het tekstgeheugen. Als de file geen BASIC-programma is verschijnt er natuurlijk onzin. Zie verder bij *DUMP en *TYPE

*OPT (<option>) (<drive>) *O.

Met *OPT (<option>) (<drive>) kan de option van de bootfile, die op de schijf staat veranderd worden:
*OPT 0 doet niets
*OPT 1 laad de bootfile (*LOAD !BOOT)
*OPT 2 runt de bootfile (*RUN !BOOT)
*OPT 3 executeert de bootfile (*EXEC !BOOT)
Zie ook hoofdstuk 4 over de bootfile.

*QUAL <filenaam> *Q.
Met *QUAL <filenaam> (<qualifier>) wordt een file in een andere library gezet. Als er na de filenaam een return gegeven wordt zal de qualifier van de file op #20 (default) gezet worden.Ook gelockte files en files in een andere library kunnen veranderd worden. Het idee achter deze "syntaxfout" is om files die per ongeluk in een verkeerde library terecht zijn gekomen gemakkelijk te kunnen veranderen. Na gebruik van het statement is de file nooit gelocked.

*RENAME <oude filenaam> <nieuwe filenaam> *RE.

Met *RENAME <oude naam> <nieuwe naam> kan men de filenaam veranderen. Let hierbij wel op dat de naam niet veranderd wordt in een die reeds voorkomt in dezelfde directory. Gelockte files kunnen niet veranderd worden.

*SECTOR (<drive>) *SE.

Dit is een sector-lees programma. Men kan door eenvoudige toetsbediening sectoren lezen en indien gewenst kopieren naar het werkgeheugen. Het programma is "menu-driven". Het menu waar het programma mee begint, ziet er als volgt uit:

A kopieert sector naar geheugen en maakt een ASCII-dump
H kopieert sector naar geheugen en maakt een hexadecimale dump
C kopieert sector naar geheugen en verhoogt het geheugen met een pagina
P laadt de vorige sector
M de plaats in het geheugen waarheen de sector gekopieerd wordt, kan veranderd worden
S de sector, die gekopieerd wordt kan veranderd worden
Q terug naar BASIC
Als gekozen wordt voor A, H of C wordt telkens automatisch de volgende sector in het buffergeheugen geladen. Het programma begint sector 0 te kopieren op adres #2300.

*TYPE <filenaam> *T.

Met *TYPE <filenaam> kan een tekstfile, die gemaakt is met *BUILD of *SPOOL uitgeprint worden zonder dat er executie van de tekst gedaan wordt, zoals bij *EXEC. Als de betreffende file geen tekstfile is dan verschijnt er natuurlijk onzin op het beeldscherm. Zie verder bij *DUMP en *LIST.

*VERIFY (<drive>) *V.

Testprogramma voor diskettes met 40 tracks.

*WIPE (<drive>) *W.

Met *WIPE (<drive>) kunnen alle files, die onder de bestaande qualifier staan en niet gelocked zijn, verwijderd worden *DELETE). Bij iedere file wordt er gevraagd of deze verwijderd moet worden. Met de escape-toets kan het programma onderbroken worden.
Indien men over meerdere drives beschikt kan men de betreffende statements ook aanroepen met een ander drivenummer dan 0:
Als U achter de betreffende opdrachten geen getal zet, zal het statement dit beschouwen als zijnde de drive die op dat moment aanstaat.

../../images/terug.gif Hoofdstuk 3 - De initialisatie van het systeem

3.1 De diskrom in de schakelkaart

Om de diskrom naar behoren te laten werken, dienen er een aantal voorzieningen getroffen te worden. Ten aanzien van de BASIC-statements is dit niet nodig. Deze doen gewoon mee in ieder schakelsysteem. Voor de CLI-kommando's moet in de eerste plaats de CLI-vektor verzet worden. Deze vektor #206,#207 staat normaal op adres #E3E5, het begin van de interpreter van de DOS-rom. Deze vektor wordt verplaatst naar een adres waar een routine staat, die de diskrom opzoekt op de schakelkaart en voorschakelt. In wezen moeten de extra CLI-kommando's ingeschakeld worden. Dit kan op twee manieren gebeuren:
  1. Met het statement DISK,
    die ingebouwd is als BASIC statement in de diskrom. Met DISK wordt er een zoekroutine gekopieerd naar #9FA0 en de CLI-vektor wordt ook op #9FA0 gezet. Dit statement is speciaal ingebouwd voor diegenen, die niet met een bootstrap of aangepaste resetroutine (BREAK) werken.
  2. Met een aangepaste resetroutine.
    In deze routine wordt vaak eerst enkele poorten goed gezet, dan de vektoren en de diskgebruikers zullen dan ook met JSR #E000 de DOS aanzetten. Na het aanzetten van de DOS moet men de CLI-vektor wijzigen in het beginadres van de zoekroutine voor de diskrom. Deze zoekroutine kan natuurlijk overal in het geheugen staan.
In de diskrom zijn nog een aantal veiligheden ingebouwd, die er voor zorgen dat deze rom kan samenwerken met de andere boxen op de schakelkaart, met name in BASIC-programma's. Immers, zoals bekend verandert de P-Charme interpreter de breakvektor in BASIC-programma's.
In de zoekroutine wordt de breakvektor (#202,#203) en het nummer van de box die voorstond, voordat de CLI aangeroepen werd, gesaved op de adressen #9FF0-#9FF2. Als een CLI-kommaando juist is afgewerkt of niet gevonden is wordt er gesprongen naar een subroutine, die de originele breakvektor hersteld en de vorige eprom weer voorschakelt. Hierbij wordt er een klein stukje assembler gekopieerd naar #9FE0-#9FE6.
Als de schrijfroutine-vektoren (#208,#209) veranderd zijn in een adres dat in blok #A000 staat, zoals het geval is met EDIT en CALC wordt er direkt doorgesprongen naar de interpreter van de DOS-rom (#E3E5). Het zal duidelijk zijn dat de extra CLI-kommando's waarbij tekst wordt afgedrukt, niet kunnen samenwerken met bijv. de editor of met GRMOD uit de Josbox.

Veel diskgebruikers zullen de bestaande CLI-kommando's afkorten. Veel voorkomende afkortingen zijn *L. (*LOAD), *S. (*SAVE) en *R. (*RUN). In de interpretertabel van de diskrom zijn de genoemde kommando's ook opgenomen, om de originele afkortingen te kunnen handhaven. Wanneer dit niet gedaan zou zijn, zouden de genoemde afkortingen respektievelijk *LIST, *SECTOR en *RENAME betekenen. Zie voor alle afkortingen hoofdstuk 5.

Het statement "DISK"
:test JSR #C4E4 \test einde statement
JSR #E000 \initialiseer DOS
\copieer zoekroutine naar #9FA0
LDX @(eind-begin)
:copy LDA eind,X
STA #9FA0,X
DEX
BPL copy
\zet command-line vector op #9FA0
LDA #9F
STA #207
LDA @#A0
STA #206
JMP #C55B \einde kopieerroutine
Het volgende stukje machinetaal wordt door het statement DISK gekopieerd naar #9FA0. Dit gedeelte zou in een bootstrap kunnen of in een aangepaste breakroutine na JSR #E000.
:begin
LDA #9FFF \kijk welke box aanstaat
STA #9FF2 \save boxnummer
\save breakvector
LDA #202
STA #9FF0
LDA #203
STA #9FF1
\zet breakvector goed
LDA @#C9
STA #203
LDA @#D8
STA #202
\zoek diskrom op
LDX@#8 \initialiseer teller
:box DEX
STX #BFFF
LDY @#03 \ga zoeken of er DISK staat op adres #A03F
:find LDA #A03F,Y
CMP string,Y
BNE box
DEY
BPL find \box gevonden
STX #9FFF
JMP #A047 \spring naar interpreter
:string
$P="DISK";P=P+L.P
:eind

../../images/terug.gif 3.2 De diskutilitie's in het ram-geheugen

Voor diegenen, die niet in het bezit zijn van een schakelkaart, is een speciale source ontworpen, zodat zij ook gebruik van de diskuitbreidingen kunnen maken.
Deze source bevat uitsluitend de CLI-kommando's en niet de BASIC-statements FCOS en CHAIN. De voorzieningen zoals vemeld in hoofdstuk 3.1 zijn niet nodig, omdat er niet geschakeld hoeft te worden in een schakelkaart en zijn derhalve weggelaten. De interpreter is wat aangepast om gebruik in het lagere geheugen (onder de #8000) ook mogelijk te maken. Het assembleerprogramma gebruikt geheugen van #2900 tot ongeveer #7000. De objektcode zal dus boven de #7000 of lager dan #2000 kunnen staan. Om de uitbreiding te initialiseren is alleen een verandering van de CLI-vektor nodig. Het programma geeft dit ook aan. De lengte van de objektcode is ruim 13 pagina's (3,4 kb).
../../images/terug.gif

Hoofdstuk 4 - De bootfile

In een DOS-systeem als die van de Atom mag eigenlijk een DOS-autostart niet ontbreken. Over dit is al het een en ander gezegd, o.a. in Acorn Nieuws. Kort samengevat komt het op het volgende neer.
In de resetroutine (BREAK) wordt een test ingebouwd of de Control-toets, of zoals men wilt de Shift-toets wordt ingedrukt. Deze test gebeurt met LDA #B001 en wordt vervolgd met CMP @#BF voor de control-toets of CMP @#7F voor de shift-toets. Als dit waar is wordt er gesprongen naar een routine, die test of de option van de schijf ongelijk aan nul is. Als de option 1 is wordt de bootfile geladen (*LOAD), als de option 2 is geladen en gerund (*RUN) en als de option 3 is geexecuteerd (*EXEC). Het programma !BOOT wordt de bootfile genoemd en moet aanwezig zijn op de schijf die op dat moment in drive 0 zit onder de default qualifier. Zo'n programma kan bijvoorbeeld een ander (hoofd)programma gaan laden en runnen met bijvoorbeeld:

   10 REM !BOOT
   20 CHAIN "NONSENS"
   30 END

(deze laatste regel is niet noodzakelijk, zoals de oplettende lezer opgemerkt zal hebben)
Bovenstaand programma moet dan wel met BSAVE weggeschreven zijn; de option is 2 (*RUN).
Een andere mogelijkheid is om met *BUILD de volgende tekstfile te creëren:

   CHAIN "NONSENS"

en deze als bootfile te executeren met option 3 (*EXEC).

Een andere manier is om alle files - dit zijn meestal BASIC of machinetaalprogramma's - af te drukken in een soort menu. Vanuit dit menu kan dan een programma gekozen worden. De bootfile zal dan het programma laden en gaan runnen. Onderstaand programma is zo'n bootfile, welke bovendien nog de eigenschap heeft om random access files - weet U wel die beginnen op adres #0000 en gemaakt worden met FIN, FOUT, *SPOOL en *BUILD - niet in het menu te zetten. Bovendien worden die files, van welke het startadres groter is dan #A000 (meestal roms) en kleiner dan #2000 (write protect) ook niet in het menu opgenomen. Ook de bootfile zelf ontbreekt natuurlijk in het menu. Het zal eenieder duidelijk zijn dat met name de BASIC-programma's, die in zo'n menu voorkomen goed weggezet moeten zijn op schijf. Aan te raden is dan ook om alle BASIC-programma's met het statement "BSAVE" uit de P-CHARME weg te schrijven.
Dan volgt nu de listing van de bootfile:
	10 REM !BOOT
	20 DIM PP(31)
	30 FOR N=0 TO 31
	40 DIM P(7);PP(N)=P
	50 NEXT
	60 *NOMON
	70 A=?#2105/8;B=1
	80 FOR N=1 TO A
	90 ?(#2007+N*8)=#D
	100 NEXT
	110 FOR N=1 TO A]
	120 P=#2000+N*8
	130 IF $P="!BOOT ";GOTO 190
	140 S=!(#2100+N*8)&#FFFF
	150 XIF S>#21FF AND S<#9E00
	160 $PP(B)=$P
	170 B=B+1
	180 ELSE
	190 NEXT;B=B-1
	200 PRINT $12"DISK: "
	210 FOR J=0 TO 7
	220 PRINT $(?(#2000+J))
	230 NEXT
	240 FOR J=0 TO 4
	250 PRINT $(?(#2100+J))
	260 NEXT
	270 PRINT '"-------------------------------"
	280 C=B/2+B%2
	290 FOR N=1 TO C
	300 PRINT $(CH"@"+N),". "$PPN" "
	310 XIF N+C<=B
	320 PRINT $(CH"@"+N+C),". "$PP(N+C)'
	330 ELSE P.'
	340 NEXT
	350 PRINT "-------------------------------"'
	360 PRINT "DRUK OP EEN TOETS "
	370 INKEY I
	380 IF I<CH"A" OR I>(CH"@"+B);BEEP 20,30;GOTO 370]
	390 I=I-CH"@"
	400 PRINT '"KEUZE : "$PP(I)
	410 P=TOP-17;N=0
	420 $P=$PPI;P?7=CH""""
	430 DO
	440 N=N+1
	450 P=#2000+N*8
	460 UNTIL $P=$PPI
	470 P=TOP-27
	480 Q=#2007+N*8
	490 *DIR
	500 IF ?Q>#80;?Q=?Q-#80
	510 ?P=?Q
	520 BEEP 20,30
	530 ?#12=?(#2101+N*8)
	540 *SETx
	550 *RUN"xxxxxxx"
	560 END
../../images/terug.gif

Hoofdstuk 5 - Overzicht CLI-statements

5.1 De toegestane afkortingen

Naam Afkorting
*ACCESS *A.
*BACKUP *BA.
*BUILD *B.
*COMPACT *C.
*COPY *COP.
*CAT *CA.
*DCAT *.
*DELETE *DEL.
*DESTROY *DE.
*DIR *DI.
*DRIVE *DR.
*DUMP *DU.
*ENABLE *E.
*EXEC *EX.
*FORMAT *F.
*GO *G.
*HELP *H.
*INFALL *I.
*INFO *INFO
*LIST *LI.
*LOAD *L.
*LOCK *LOC.
*MON *M.
*NOMON *N.
*OPT *O.
*QUAL *Q.
*RENAME *RE.
*RUN *R.
*SAVE *S.
*SECTOR *SE.
*SET *SET
*SHUT *SH.
*SPOOL *SP.
*TITLE *TI.
*TYPE *T.
*UNLOCK *U.
*USE *US.
*VDU *VD.
*VERIFY *V.
*WIPE *W.
../../images/terug.gif

5.2 Geheugengebruik

De volgende geheugengebieden worden gebruikt:
  1. 1. Zero-page adressen #90 tot #95 voor tijdelijk gebruik.
  2. DISK: de adressen #9FA0 tot #9FDB. Deze adressen mogen niet voor andere doeleinden gebruikt worden. Alleen als men gebruikt maakt van een bootstrap of gewijzigde resetroutine (zie hoofdstuk 3) kunnen deze adressen wel gebruikt worden, want dan is het statement DISK niet meer nodig.
    De breakvektor en het boxnummer worden weggezet op de adressen #9FF0 tot #9FF2 (tijdelijk gebruik).
  3. De adressen #9FE0 t/m #9FE5 voor de terugspringroutine (tijdelijk gebruik).
../../images/terug.gif

5.4 De resetroutine (BREAK)

In de onderstaande routine worden eerst de poorten en vectoren goed gezet. Hierna wordt - dit is een persoonlijke initialisatie - de P-Charme voorgezet en dan wordt er gekeken of het DOS aanstaat. Is dit het geval dan wordt deze geinitialiseerd. Tevens wordt de diskrom ingeschakeld door het goed zetten van de CLI-vector. Dan wordt er getest of de control-toets ingedrukt wordt. Wanneer dit inderdaad gebeurt wordt de catalogue van drive 0 geladen en gekeken welke option uitgevoerd moet worden ten aanzien van de bootfile. Het gedeelte vanaf :dos is belangrijk voor de bootfile en de diskrom.
:begin LDA @#A;STA #FE zet testbyte printer
LDA @#8A;STA #B003 zet poorten goed
LDA @#07;STA #B002
STA #9FFF;STA #BFFF zet P-Charme voor
LDX @#03
:loop LDA tabel1,X;STA #208,X zet write-readvectoren
DEX;BPL loop
LDA @#AB;STA #203 zet breakvector
LDA @#D5;STA #202
LDA @#00;STA #3EE )
LDA @#11;STA #3EF ) init uitbreidingen
LDA @#B3;STA #3FB )
TXS;INX;STX #E7
STX #EF;CLI *MON
LDA @#80;STA #E1
JSR #FD8D
JSR #F7D1 print het volgende
$P=" ACORN ATOM DOS "
?P=#06;P?1=#0C
P?12=#0A;P?13=#0D
P=P+L.P+5;!P=#A0A0D07;P=P+4
:dos LDA #E000;CMP @#A9 test of DOS aanstaat
BNE einde;JSR #E000 initialiseer DOS
LDA @disk%256;STA#206 ) zet CLI-vector goed
LDA @disk/256;STA#207 ) voor de DISKROM
LDA #B001;CMP @#BF test op control-toets
BNE einde
JSR boot
:einde JMP #C2CF
:tabel1 !P=#FE94FE52;P=P+4 read-write adressen
:boot LDA @#29;STA #12
JSR #E223;LDY @#05 laad catalogue
:label LDA tabel2,Y;STA #100,Y zet !BOOT op #100,X
DEY;BPL label
STY #EF;INY *NOMON
LDX @#00
LDA #2106;JSR #E0FB welke option
BEQ nothing
CMP @#01;BNE run
JMP #E465 *LOAD bootfile
:run CMP @#02;BNE exec
JMP #E50A *RUN bootfile
:exec CMP @#03;BNE nothing
JMP #E519 *EXEC bootfile
:nothing RTS
:tabel2 $P="!BOOT "
P=L.P+P;?(P-1)=#0D
:disk LDA #9FFF;STA #9FF2 zie hoofdstuk 3
LDA #202;STA #9FF0
LDA #203;STA #9FF1
LDA @#C9;STA #202
LDA @#D8;STA #203
LDX @#08
:box DEX;STX #BFFF
LDY @#03
:find LDA #A03F,Y;CMP string,Y
BNE box;DEY;BPL find
STX #9FFF;JMP #A047
:string $P="DISK";P=P+L.P
../../images/terug.gif 5.5 De schijf

Op de regio-schijf */ (zie: Atomarch/Acl2-20) van de diskrom staan de volgende files:
DBOX-V1- De diskrom voor op #A000.
DISK-V1- De source van de diskrom
DSRC-V1- De source van de diskutilitie's voor diegenen, die geen schakelkaart hebben.
!BOOT - De in hoofdstuk 4 beschreven bootfile.
BREAKd - Een resetroutine die eventueel naar eigen inzicht aangepast kan worden.
*/ de manier waarop software in 1985 verspreid werd.