Apple 2 virtual DSK tools for ProDOS volumes
Go to file
2017-12-29 09:30:01 -08:00
generic.disk.cpp Add DskGetIndexBlock(), DskPutIndexBlock() prodos helpers 2017-11-07 08:43:09 -08:00
itoa.comma.h Add missing .h file 2017-11-05 22:06:50 -08:00
Makefile Rename to 'prodosfs' so we can extract PRODOS system file 2017-12-29 09:30:01 -08:00
prodos.cpp Rename to 'prodosfs' so we can extract PRODOS system file 2017-12-29 09:30:01 -08:00
prodos.tools.cpp Add: ProDOS_ExtractBootSector() and ProDOS_ReplaceBootSector() 2017-12-11 08:22:52 -08:00
prodos.utils.cpp Initial PRODOS_MAX_PATH 2017-11-07 08:43:37 -08:00
README.md Added build instructions 2017-11-06 10:03:17 -08:00
string.utils.cpp Initial commit of working catalogs, init, and cp 2017-11-05 21:55:01 -08:00

Apple 2 Prodos Utils

NOTE: This is still a work-in-progress.

Commands that work:

  • cat
  • catalog
  • cp (Only Seed (file size <= 512 bytes), and Sapling files (file size <= 128 KB) are currently supported)
  • dir
  • get
  • init
  • ls
  • mkdir
  • rm
  • rmdir
Usage: <dsk> <command> [<options>] [<path>]

    cat      Catalog (short form)
                 [<path>]            Path of virtual sub-directory to view
                                     Defaults to: /
    catalog  Catalog (long form)
                 [<path>]            Path of virtual sub-directory to view
                                     Defaults to: /
    cp       Add file(s) to volume
                 <path>              Destination virutal sub-directory to add to
                                     There is no default -- it must be specified
                 -access=$##         Set access flags
                                         $80 Volume/file can be destroyed
                                         $40 Volume/file can be renamed
                                         $20 Volume/file changed since last backup
                                         $04 Volume/file is invisible
                                         $02 Volume/file can be read
                                         $01 Volume/file can be written
                 -aux=$####          Set the aux address
                 -date=MM/DD/YY      Set create date to specified date
                 -date=DD-MON-YY     Set create date to specified date
                                     MON is one of:
                                         JAN, FEB, MAR, APR, MAY, JUN,
                                         JUL, AUG, SEP, OCT, NOV, DEC
                 -time=HH:MMa        Set create time to specified 12-hour AM
                 -time=HH:MMp        Set create time to specified 12-hour PM
                 -time=HH:MM         Set create time to specified 24-hour time
                 -type=$##           Force file type to one of the 256 types
                 -moddate=MM/DD/YY   Set last modified date to specified date
                 -modtime=HH:MM      Set last modified date to specified time
    dir      Catalog (long form)
                                     This is an alias for 'catalog'
    get      Extract file from volume
                 <path>              Path of virtual file to extract
                                     NOTES:
                                         The file remains on the virtual volume
                                         To delete a file see ........: rm
                                         To delete a sub-directory see: rmdir
    init     Format disk
                 <path>              Name of virtual volume.
                 -size=140           Format 140 KB (5 1/4")
                 -size=800           Format 800 KB (3 1/2")
                 -size=32            Format 32  MB (Hard Disk)
    ls       Catalog (file names only)
                 [<path>]            Path to sub-directory to view
                                     Defaults to: /
    mkdir    Create a sub-directory
                 <path>              Destination virutal sub-directory to create
                                     There is no default -- it must be specified
    rm       Delete file from volume
                 <path>              Path of virtual file to delete
                                     There is no default -- it must be specified
    rmdir    Remove a sub-directory
                 <path>              Path of virtual sub-directory to delete
                                     There is no default -- it must be specified
                                     NOTE:
                                         You can't delete the root directory: /
                 -f                  Force removal of sub-directory
                                     (Normally a sub-directory must be empty)

Where <dsk> is a virtual disk image with an extension of:

    .dsk  (Assumes DOS3.3 sector order)
    .do   (DOS3.3 sector order)
    .po   (ProDOS sector order)

NOTE: To skip always having to specify the <.dsk> name set the environment variable:

           PRODOS_VOLUME
e.g.
    export PRODOS_VOLUME=path/to/volume.po
    set    PRODOS_VOLUME=disk.dsk

Three different disk sizes are accepted for init

   prodos test.dsk init -size=140   # 5 1/4"  (140 KB)
   prodos test.dsk init -size=800   # 3 1/2"  (800 KB)
   prodos test.dsk init -size=32    #HardDisk ( 32 MB)

Examples:

    prodos test.dsk ls
    prodos test.dsk cat
    prodos test.dsk cp    foo1 foo2 /
    prodos test.dsk mkdir bar
    prodos test.dsk cp    foo2      /bar
    prodos test.dsk get   /bar/foo2
    prodos test.dsk rm    /bar/foo2
    prodos test.dsk rmdir /bar
    prodos test.dsk init  /TEST
    prodos b140.dsk init  -size=140 /BLANK140
    prodos b800.dsk init  -size=800 /BLANK800
    prodos b032.dsk init  -size=32  /BLANK32

Example output:

dnb??iwr /TEST            Blocks Size    Type    Aux   Kind  iNode Dir   Ver Min  Create    Time    Modified  Time  
-------- ---------------- ------ ------- ------- ----- ----- ----- ----- --- ---  --------- ------  --------- ------
-------- *FOO1.TXT             1 $000002 TXT $04 $0000 sed 1 @0007 @0002 0.0 v00   6-NOV-17         <NO DATE>        
-------- *FOO2.TXT             1 $000002 TXT $04 $0000 sed 1 @0008 @0002 0.0 v00   6-NOV-17         <NO DATE>        
-------- *FOO3.TXT             1 $000002 TXT $04 $0000 sed 1 @0009 @0002 0.0 v00   6-NOV-17         <NO DATE>        
-------- *TEXT.BIN             3 $000264 BIN $06 $0000 sap 2 @000A @0002 0.0 v00   6-NOV-17         <NO DATE>        
========
Files:        4 / 52 ( 7.69%)
Blocks: 
   Free:    267 (95.36%), 1st: @ $000D = 13
   Used:     13 ( 4.64%)
  Total:    280

Building / Compiling

make clean; make