
|
Overzicht van alle BDOS Calls CYBERNETICS, 01-09-94
BDOS Calls
============
Wanneer aan de MSX-computer een diskdrive met controller is aangesloten, dan
bevinden zich alle disk-routines zich (net als de BASIC I/O System routines)
in het geheugen van de computer. Ook voor deze diskroutines geldt, dat ze
vanuit een applicatieprogramma kunnen worden aangeroepen. Om te voorkomen dat
een programma wel op de ene maar niet op een andere computer werkt, moeten ook
deze diskroutines (BDOS-routines) door middel van een speciale manier van
aanroepen worden gebruikt.
De manier om deze routines aan te roepen is als volgt:
1 - Laadt het functienummer van de aan te roepen routine in register C van de
Z80 microprocessor.
2 - CALL het adres &HF37D, indien het programma onder Disk BASIC draait.
CALL het adres &H0005, indien het programma onder MSX-DOS draait.
In de hierna volgende opsomming van de BDOS calls worden van iedere call de
volgende gegevens opgenomen:
NUMMER
NAAM
FUNCTIE
INPUT
OUTPUT
NUMMER is het functie nummer, dat register C moet worden geplaatst voordat
adres &HF37D of &H0005 wordt aangeroepen.
NAAM is de naam van de aan te roepen functie
FUNCTIE is een korte uitleg van wat de functie doet
INPUT geeft een opsomming van de registers die moeten worden geladen met
gegevens die de functie nodig heeft om het gewenste resultaat op te leveren.
OUTPUT geeft een opsomming van de registers die het resultaat van de functie
bevatten.
Indien ‚‚n van de voornoemde punten niet van toepassing is, zal het
betreffende punt uit de beschrijving worden weggelaten.
==============================================================================
&H00 SYSTEM RESET
----------------------------------------------------------------------
Springt naar de "warme start" van Disk BASIC of naar adres &H0000
indien de functie onder MSX-DOS werd aangeroepen.
&H01 CONSOLE INPUT
----------------------------------------------------------------------
Leest een teken van console en zit dit in register A. Voert functie
&H00 uit indien CTRL+C werd ingedrukt. Start output van beeldscherm-
info naar de printer wanneer CTRL+P werd ingedrukt en be‰indigt dit
weer indien CTRL+N werd ingedrukt. Stuurt het ingevoerde teken naar
het beeldscherm.
OUTPUT A: het ingetoetste teken
&H02 CONSOLE OUTPUT
----------------------------------------------------------------------
Stuurt het teken dat register E staat naar de console.
INPUT E: het naar console te schrijven teken
&H03 AUX INPUT
----------------------------------------------------------------------
Leest een teken van het AUX-device (bijvoorbeeld RS232) en zet dit in
register A.
OUTPUT A: het gelezen teken
&H04 AUX OUTPUT
----------------------------------------------------------------------
Schrijft het teken uit register E naar het AUX-device.
INPUT E: het naar AUX te schrijven teken
&H05 LST OUTPUT
----------------------------------------------------------------------
Schrijft het teken uit register E naar de printer.
INPUT E: het af te drukken teken
&H06 DIRECT CONSOLE I/O
----------------------------------------------------------------------
Stuurt het teken dat in register E staat naar de console, tenzij in
register E de code &HFF staat. In dit geval wordt van het console
gelezen. Het gelezen teken wordt in register A gezet, zonder dat er op
de ingetoetste code wordt gechecked en zonder dat het ingetoetste
teken naar console wordt gestuurt. Indien er niets wordt ingetoetst
zal register A de waarde 0 bevatten.
INPUT E: &HFF indien moet worden gelezen. Iedere andere code
wordt naar console geschreven.
OUTPUT A: het ingelezen teken.
&H07 DIRECT INPUT
----------------------------------------------------------------------
Leest een teken van console en zet dat in register A. Er wordt niet
op de code van het teken gechecked, en het teken wordt niet naar
console teruggestuurd.
OUTPUT A: het ingelezen teken.
&H08 DIRECT INPUT
----------------------------------------------------------------------
Leest een teken van console en zet dat in register A. Controleert of
CTRL+C, CTRL+P of CRTL+N is ingedrukt. Stuurt het ingetoetste teken
niet terug naar console.
OUTPUT A: het ingetoetste teken.
&H09 STRING OUTPUT
----------------------------------------------------------------------
Schijft de string waarvan het startadres in registerpaar DE staat,
naar console. Het schrijven gaat door totdat een $-teken wordt
gevonden.
INPUT DE: het startadres van de string.
&H0A BUFFERED INPUT
----------------------------------------------------------------------
Leest een string van console en zet deze in het geheugen vanaf het in
registerpaar DE gegeven adres + 2. CR (return) be‰indigt de string.
De lengte van de string wordt op het in registerpaar DE gegeven adres
+ 1 gezet. CR wordt niet meegeteld in de lengte. De maximale lengte
van de string wordt doorgegeven via de geheugenlocatie die met het
adres in registerpaar DE wordt aangewezen.
INPUT DE: pointer naar string-ruimte
&H0B CONSOLE STATUS
----------------------------------------------------------------------
Controleert of er input van console wordt gedaan. Zet 0 in register A
indien er geen input is. Zet &HFF in register A indien er wel input is.
OUTPUT A: console status
&H0C GET VERSION NUMBER
----------------------------------------------------------------------
Zet het versie nummer in registerpaar HL.
OUTPUT H: &H00
L: &H22
&H0D DISK RESET
----------------------------------------------------------------------
Stelt drive A: in als default drive, zet het transfer-adres op &H80 en
verwijdert alle sectoren in het geheugen die zijn gewijzigd, maar nog
niet naar schijf zijn geschreven.
&H0E SELECT DISK
----------------------------------------------------------------------
Maakt de in register E gegeven disk de default drive (0=drive A)
INPUT E: drive nummer
&H0F OPEN FILE
----------------------------------------------------------------------
Opent een file volgens de specificaties in het FCB waar met het adres
in registerpaar DE naar toe wordt verwezen. De volgende velden van het
FCB worden gevuld vanuit de directory:
File Size
Date
Time
Device-ID
Directory Location
First Cluster
Last Cluster
Last Accessed Cluster
De volgende velden van het FCB zijn ge-set na uitvoering van deze
functie:
Record Size
Current Block
Current Record
Random Record
Indien de functie succesvol is uitgevoerd zal register A de waarde
&H00 bevatten, zoniet, dan zal register A de waarde &HFF bevatten.
INPUT DE: FCB-adres
OUTPUT A: &H00 - succesvol
&HFF - niet succesvol
&H10 CLOSE FILE
----------------------------------------------------------------------
Sluit de file die in het FCB staat dat met het adres in registerpaar
DE wordt aangewezen. Indien de file succesvol is gesloten zal register
A de waarde &H00 bevatten, zoniet, dan de waarde &HFF
INPUT DE: FCB-adres
OUTPUT A: &H00 - succesvol
&HFF - niet succesvol
&H11 SEARCH FIRST
----------------------------------------------------------------------
Zoekt vanaf het begin van de directory naar het voorkomen van de file,
die in het FCB dat met het adres in registerpaar DE wordt aangewezen
staat aangegeven, in de directory en copieert de directory-entry (32
bytes lang) naar het transfer-adres. Indien de file in directory wordt
gevonden zal bovendien register A met &H00 worden geladen. Wordt de
file niet gevonden, dan wordt niets naar het transfer-adres gecopieert
en wordt register A met de waarde &HFF geladen. In de filenaam (in het
FCB) mag gebruik worden gemaakt van de tekens * en ?.
INPUT DE: FCB-adres
OUTPUT A: &H00 - file gevonden
&HFF - file niet gevonden
&H12 SEARCH NEXT
----------------------------------------------------------------------
Zoekt in de directory vanaf de plaats waar met de laatste SEARCH-
functie een gezochte file werd gevonden naar het volgende voorkomen
van die filenaam in de directory. Werkt voor het overige precies zoals
de SEARCH FIRST-functie (hierboven).
INPUT DE: FCB-adres
OUPUT A: &H00 - file gevonden
&HFF - file niet gevonden
&H13 DELETE FILE
----------------------------------------------------------------------
Wist de file die in het FCB waar met het adres in registerpaar DE naar toe wordt
verwezen uit de directory door in de directory het eerste teken van de
filenaam te vervangen door de code &HE5 en de FAT de door de file ge-
bruikte clusters vrij te maken.
INPUT DE: FCB-adres
OUTPUT A : &H00 - file gewist
&HFF - file niet (geheel) gewist
&H14 SEQUENTIAL READ
----------------------------------------------------------------------
Leest een record (128 bytes). De file, het blok binnen de file waarin
het record zich bevindt en het record zelf staan aangegeven in de
velden. Filenaam, Current Block en Current Record van het FCB dat met
het adres in registerpaar DE wordt aangewezen. De gelezen informatie
wordt in het geheugen gezet vanaf het ingestelde transfer-adres. De
velden Current Block en Current Record in het FCB worden automatisch
met 1 verhoogd.
INPUT DE: FCB-adres
OUTPUT A : &H00 - record gelezen
&H01 - record niet (goed) gelezen
&H15 SEQUENTIAL WRITE
----------------------------------------------------------------------
Schrijft een record (van 128 bytes) naar de file die met het File
Control Block met het adres in registerpaar DE wordt aangewezen. De
data, die het record vormt, staat in ht RAM-geheugen, vanaf het
"transfer"-adres. Het record (op schijf) wordt bepaald door de velden
current block en current record in het FCB. Deze velden worden
automatisch met 1 verhoogd.
INPUT DE: FCB-adres
OUTPUT A : &H00 = record geschreven
&H01 = record niet geschreven
&H16 CREATE FILE
----------------------------------------------------------------------
Creeert een file, volgens de gegevens in het File Control Block, dat
wordt aangewezen met het adres in registerpaar DE. Indien de file reeds bestaat
wordt deze overschreven. Na uitvoering zijn de volgende velden
vastgelegd:
Record Size, Current Block, Current Record, Random Record.
Of de file wel of niet is gecreeerd wordt teruggemeld in register A.
INPUT DE: FCB-adres
OUTPUT A : &H00 = file gecreeerd
&H01 = file niet gecreeerd
&H17 RENAME FILE
----------------------------------------------------------------------
Geeft de file, die wordt aangewezen met het FCB dat wordt aangewezen
met het adres in registerpaar DE, de filenaam uit het FCB dat wordt
aangewezen door het adres in DE plus 16. In de filenaam mag gebruik
worden gemaakt van de tekens * en ?
INPUT DE : FCD-adres te hernoemen file.
DE+16: FCB-adres met nieuwe filenaam.
OUTPUT A : &H00 = file hernoemd
&H01 = file niet hernoemd
&H18 GET LOGIN VECTOR
----------------------------------------------------------------------
Geeft in het registerpaar HL een bit-tabel waaruit kan worden
opgemaakt welke drives on-line zijn.
OUTPUT HL: bit-tabel
&H19 GET DEFAULT DRIVE NAME
----------------------------------------------------------------------
Zet de default drive naam in register A.
OUTPUT A: default drive naam.
&H1A SET TRANSFER ADRES
----------------------------------------------------------------------
Stelt het RAM-adres, waar de data die naar moet of van de disk wordt
gelezen, in op het in registerpar DE gegeven adres.
INPUT DE: RAM-adres
&H1B GET ALLOCATION
----------------------------------------------------------------------
Geeft informatie over de in register E aangegeven diskdrive. In de
aangegeven disknaam niet geldig is zal register A na uitvoering de
waarde &HFF bevatten.
INPUT E : drivenaam
OUTPUT A : aantal sectors per cluster
BC: aantal bytes per sector
DE: aantal clusters opde schrijf
HL: aantal vrije clusters
IX: Device Parameter Block adres
IY: File Allocation Tabel (FAT) adres
&H21 RANDOM READ
----------------------------------------------------------------------
Leest een record uit een file, die wordt aangegeven met het FCB dat
wordt aangewezen met het adres in registerpaar DE. Het te lezen record
wordt bepaald door het random block veld in het FCB. De data van het
record wordt in het RAM-geheugen gezet vanaf het "transfer"-adres. De
record lengte is altijd 128 bytes.
INPUT DE: FCB-adres
OUTPUT A : &H00 = record gelezen
&H01 = record niet (goed) gelezen
&H22 RANDOM WRITE
----------------------------------------------------------------------
Schrijft een record naar een file, die wordt aangegeven met het FCB
dat wordt aangewezen met het adres in registerpaar DE. Het te
schrijven record wordt bepaald door het random block veld in het FCB.
De data van het record begint op het "transfer"-adres.
INPUT DE: FCB-adres
OUTPUT A : &H00 = record geschreven
&H01 = record niet (goed) geschreven
&H23 GET FILE SIZE
----------------------------------------------------------------------
Berekent de lengte van de file uit het FCB dat wordt aangewezen door
het adres in registerpaar DE. De lengte van de file wordt als een
veelvoud van 128 gegeven en opgeslagen in het random record veld in
het FCB.
INPUT DE: FCB-adres
OUTPUT A : &H00 = Lengte berekend
&H01 = Lengte niet berekend
&H24 SET RANDOM RECORD
----------------------------------------------------------------------
Berekent de positie van het "current record" met behulp van de velden
current block en current record uit het FC dat wordt aangewezen met
het adres in registerpaar DE en plaatst het resultaat van de
berekening in het veld random record van hetzelfde FCB.
INPUT DE: FCB-adres
&H26 RANDOM BLOCK WRITE
----------------------------------------------------------------------
Schrijft record(s) naar de file uit het FCB dat wordt aangewezen door
het adres in registerpaar DE. De data voor het record begint op het
"transfer"-adres. Het te beschrijven record in de file wordt bepaald
door het random block veld uit het FCB. Het veld current random record
wordt automatisch verhoogd met het aantal geschreven records. Het
aantal records wordt bepaald door de waarde in registerpaar HL. De
recordlengte wordt bepaald door het record size veld uit het FCB.
INPUT DE: FCB-adres
HL: Aantal records
OUTPUT A : &H00 = record(s) geschreven
&H01 = record(s) niet geschreven
&H27 RANDOM RECORD READ
----------------------------------------------------------------------
Leest record(s) uit de file uit het FCB dat wordt aangewezen door het
adres in registerpaar DE in het geheugen naar het "transfer"-adres.
Het te lezen record in de file wordt bepaald door het random block
veld uit het FCB. Het veld current random record wordt automatisch
verhoogd met het aantal gelezen records. Het aantal records wordt
bepaald door de waarde in registerpaar HL. De recordlengte wordt
bepaald door het record size veld uit het FCB. Het werkelijk aantal
gelezen records wordt in HL gezet.
INPUT DE: FCB-adres
HL: Aantal records
OUTPUT A : &H00 = record(s) gelezen
&H01 = record(s) niet gelezen
HL: Aantal gelezen records
&H28 RANDOM WRITE WITH ZERO-FILL
----------------------------------------------------------------------
Schrijft een record naar de file die wordt aangegeven in het FCB met
adres in registerpaar DE. Welk record (in de file) wordt geschreven
wordt bepaald door het veld random block in het FCB. De record lengte
is altijd 128 bytes. Wanneer een file wordt uitgebreid (extended),
zullen alle records die niet zijn geschreven met nullen worden gevuld.
INPUT DE: FCB-adres
OUTPUT A : &H00 = Record geschreven
&H01 = Record niet geschreven
&H2A GET DATE
----------------------------------------------------------------------
Leest de datum en zet deze in de Z80-registers.
OUTPUT A : dag van de week
D : dag
E : maand
HL: jaar
&H2B SET DATE
----------------------------------------------------------------------
Stelt de datum in op de in registerparen DE en HL opgegeven datum.
INPUT D : dag
E : maand
HL: jaar
OUTPUT A : &H00 = datum ingesteld
&H01 = datum niet ingesteld
&H2C GET TIME
----------------------------------------------------------------------
Leest de tijd en zet deze in de Z80-registers.
OUTPUT E : honderdsten van seconden
D : seconden
L : minuten
H : Uren
&H2D SET TIME
----------------------------------------------------------------------
Stelt de tijd in op de in registerparen DE en HL opgegeven tijd.
INPUT E : honderdsten van seconden
D : seconden
L : minuten
H : Uren
OUTPUT A : &H00 = tijd ingesteld
&H01 = tijd niet ingesteld
&H2E SET VERIFY VLAG
----------------------------------------------------------------------
Zet de Verify Flag aan of uit, afhankelijk van register E.
INPUT E: &H00 = verify-flag ge-reset
&H01 = verify-flag ge-set
&H2F ABSOLUTE DISK READ
----------------------------------------------------------------------
Leest sector(s) in van schrijf en zet de inhoud van die sector(s) in
het RAM-geheugen van het "transfer"-adres.
INPUT DE: sectornummer
H : aantal te lezen sectoren
L : drivernummer
&H30 ABSOLUTE DISK WRITE
----------------------------------------------------------------------
Schrijft sector(s) nar schijf vanuit het RAM-geheugen, beginnende op
het "transfer"-adres.
INPUT DE: sectornummer
H : aantal te schijven sectoren
L : drivenummer
|