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 |