MILC logo

IndexVorigeVolgendeLeeg

The MSX disk routines
A.Siersema, 09-10-94


    
                         The MSX disk routines
                         =====================

Author:  Albert Siersema
         FidoNet  : Albert Siersema at 2:282/517
         InterNet : appie@prgbbs.idn.nl (subdue to change)
         SnailMail: Sloep 303
                    9732 CT Groningen
                    The Netherlands
         BBS      : Filosoft/PROGRAMMERS BBS
                    +31-50-412288 or +31-50-426071
Version: 1.0
Date   : 9 Oct 1994


Definition: MSX-DOS are the routines in the diskROM, not the MSXDOS.SYS and
            COMMAND.COM files to run the MS-DOS clone for MSX.

The MSX has the same file system as MS-DOS. This documentation does not
include a description of the FAT based MS-DOS file system.

Following applies to MSX-DOS version 1.x. ROMs with DOS 2.x work different
as far as we know. We experimented with DOS 2.3x but haven't gotten any
results upto know. All knowledge about DOS 2.x is welcome though !

The routines:
 DRIVES         Return number of connected drives
 DSKIO          Sector(s) read/write
 DSKCHG         Check disk change status
 GETDPB         Get Drive Parameter Block
 CHOICE         Get FORMAT choice string
 DSKFMT         (low level) Format a disk: physically and logically

Not described in here and not necessary for an MSX emulator:
 INIHRD         Init hardware
 INIENV         Initialize environment
 OEMSTATEMENT   New statements


DISKIO (#4010)
--------------
Input:  [F]     carry set for write
                carry reset for read
        [A]     Drive number (0=A:)
        [B]     Number of sectors to write
        [C]     Media descriptor
        [DE]    Logical sector number (starts at 0)
        [HL]    Transfer address

Output: [F]     carry set on error
                carry reset on success
        [A]     If error: errorcode
        [B]     Number of sectors transferred (always)

Error codes in [A] can be:
        0       Write protected
        2       Not ready
        4       Data (CRC) error
        6       Seek error
        8       Record not found
        10      Write fault
        12      Other errors


DSKCHG (#4013)
--------------
Input:  [A]     Drive number (0=A:)
        [B]     Media descriptor
        [C]     Media descriptor
        [HL]    Base address of DPB

Output: [F]     carry set on error
                carry reset on success
        [A]     If error: errorcode (see DSKIO)
        [B]     if success: 1=disk unchanged, 0=Unknown, -1=DIsk changed

Note:   If the disk has been changed or may have been changed (unknown) read
        the boot sector or the FAT sector for a disk media descriptor and
        transfer a new DPB as with GETDPB


GETDPB (#4016)
--------------
Input:  [A]     Drive number
        [B]     First byte of FAT (media descriptor)
        [C]     Media descriptor
        [HL]    Base address of DPB

Output: [HL+1] .. [HL+18] = DPB for specified drive

Note:   DPB consists of

Name   Offset Size Description
----------------------------------------------------------------------------
MEDIA    0     1   Media type (F8..FF)
SECSIZ   1     2   Sector size (must be 2^n)
DIRMSK   3     1   (SECSIZE/32)-1
DIRSHFT  4     1   Number of one bits in DIRMSK
CLUSMSK  5     1   (Sectors per cluster)-1
CLUSSHFT 6     1   (Number of one bits in CLUSMSK)+1
FIRFAT   7     2   Logical sector number of first FAT
FATCNT   8     1   Number of FATs
MAXENT   A     1   Number of directory entries (max 254)
FIRREC   B     2   Logical sector number of first data
MAXCLUS  D     2   (Number of clusters (not including reserved, FAT and
                   directory sectors))+1
FATSIZ   F     1   Number of sectors used
FIRDIR   10    2   FAT logical sector number of start of directory


CHOICE (#4019)
--------------
Output: [HL]    Address of zero terminated character string with the text
                with choices for a DSKFMT
                If there is no choice (only 1 format supported) return [HL]=0


DSKFMT (#401C)
--------------
Input:  [A]     Choice specified by user (1-9). See CHOICE
        [D]     Drive number (0=A:)
        [HL]    Begin address of work area
        [BC]    Length of work area
Output: [F]     Carry flag reset on success
                Carry flag set on error

Notes:  1) Also writes a MSX boot sector at sector 0, clears all FATs (media
           descriptor at first byte, 0FFh at second/third byte and rest zero)
           and clears the directory (filling it with zeros)
        2) Error codes are:
           0    Write protected
           2    Not ready
           4    Data (CRC) error
           6    Seek error
           8    Record not found
           10   Write fault
           12   Bad parameter
           14   Insufficient memory
           16   Other errors




*********************** BDOS ROUTINES IN MSXDOS1 ROM ***********************

This is a very fast composed list of the addresses of the BDOS routines in
a MSXDOS1 ROM (like those that can be found in nearly all MSX-1 and -2
machines if they have a disk drive).

Check out the MSX-DOS 2 references for a list of all BDOS entries and their
parameters. These references can be found at nic.funet.fi (DOS2FUNC.* etc).

Address  BDOS function   Meaning
-------  -------------   -----------------------------------------------------
05058h   01ah            Set DMA address
0504eh   018h            Get Login Vector
050D5h   0eh             Select Disk
0505Dh   01bh            Get Allocation

 Below are all routines that have an FCB as input

04FB8h   011h            Search First (or Find First)
05006h   012h            Search Next (or Find Next)
04462h   0fh             Open File
0456Fh   010h            Close File
047b2h   027h            Random Block Read
050c8h   024h            Set Random Record
04788h   021h            Random Read
0501eh   023h            Get File Size
0436Ch   013h            Delete File
04775h   014h            Sequential Read
0477Dh   015h            Sequential Write
0461Dh   016h            Create File
04392h   017h            Rename File
04793h   022h            Random Write
047BEh   026h            Random Block Write
047D1h   02bh            Block Write With Zero Fill






    

Index

Vorige

Volgende