mirror of
https://github.com/Michaelangel007/apple2_prodos_utils.git
synced 2024-10-31 21:07:51 +00:00
196 lines
7.5 KiB
Markdown
196 lines
7.5 KiB
Markdown
# Apple 2 ProDOS (Virtual Disk) Utilities
|
|
|
|
`ProdosFS` is a command-line utility to create and manipulate virtual ProDOS volume images for emulators. The file system is Apple's ProDOS hence the name.
|
|
|
|
It is written in standard C++ so no bloated shenanigans like Java or Python are needed.
|
|
|
|
**NOTE:** This is still a work-in-progress.
|
|
|
|
Commands that work:
|
|
|
|
* [x] cat
|
|
* [x] catalog
|
|
* [x] cp (Only Seed (file size <= 512 bytes), and Sapling files (file size <= 128 KB) are currently supported)
|
|
* [x] dir
|
|
* [x] get
|
|
* [x] init
|
|
* [x] ls
|
|
|
|
Commands yet to be implemented:
|
|
|
|
* [ ] md, mkdir
|
|
* [ ] rm
|
|
* [ ] rd, rmdir
|
|
|
|
```
|
|
Usage: <dsk> <command> [<options>] [<path>]
|
|
|
|
cat Catalog (short form)
|
|
[<path>] Path of virtual sub-directory to view
|
|
NOTE: Defaults to: /
|
|
catalog Catalog (long form)
|
|
[<path>] Path of virtual sub-directory to view
|
|
NOTE: Defaults to: /
|
|
cp Add file(s) to volume File type will auto-detected based on filename extension.
|
|
i.e. BAS, BIN, FNT, TXT,SYS, etc.
|
|
-access=$## Set access flags
|
|
NOTE: Defaults to $C3
|
|
$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
|
|
<path> Destination virutal sub-directory to add to
|
|
There is no default -- it must be specified
|
|
NOTE: Options must come first
|
|
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
|
|
-size=140 Format 140 KB (5 1/4")
|
|
-size=800 Format 800 KB (3 1/2")
|
|
-size=32 Format 32 MB (Hard Disk)
|
|
<path> Name of virtual volume. You MUST specify this.
|
|
NOTE: Options must come first
|
|
ls Catalog (file names only)
|
|
[<path>] Path to sub-directory to view
|
|
Defaults to: /
|
|
mkdir Create a sub-directory
|
|
NOTE: Not implemented yet!
|
|
<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
|
|
NOTE: Not implemented yet!
|
|
<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
|
|
|
|
prodosfs test.dsk init -size=140 /TEST514 # 5 1/4" (140 KB)
|
|
prodosfs test.dsk init -size=800 /TEST312 # 3 1/2" (800 KB)
|
|
prodosfs test.dsk init -size=32 /TEST32M #HardDisk ( 32 MB)
|
|
|
|
Examples:
|
|
|
|
prodosfs test.dsk init /TEST
|
|
prodosfs test.dsk ls
|
|
prodosfs test.dsk cat
|
|
prodosfs test.dsk cp foo1 foo2 /
|
|
prodosfs test.dsk mkdir bar
|
|
prodosfs test.dsk cp foo2 /bar
|
|
prodosfs test.dsk get /bar/foo2
|
|
prodosfs test.dsk rm /bar/foo2
|
|
prodosfs test.dsk rmdir /bar
|
|
|
|
prodosfs b140.dsk init -size=140 /BLANK140
|
|
prodosfs b800.dsk init -size=800 /BLANK800
|
|
prodosfs b032.dsk init -size=32 /BLANK32
|
|
```
|
|
|
|
Given these steps ...
|
|
|
|
```
|
|
echo. > foo1.txt
|
|
echo. > foo2.txt
|
|
echo. > foo3.txt
|
|
|
|
REM Windows
|
|
echo a020a90220a8fc8d30c0a92420a8fc8d30c088d0ed60 > softbeep.hex
|
|
certutil.exe -f -v -decodehex softbeep.hex softbeep.bin
|
|
REM Windows
|
|
|
|
prodosfs test.dsk init -size=140 /TEST
|
|
prodosfs test.dsk cp foo1.txt /
|
|
prodosfs test.dsk cp foo2.txt /
|
|
prodosfs test.dsk cp foo3.txt /
|
|
prodosfs test.dsk cp -aux=$0300 softbeep.bin /
|
|
prodosfs test.dsk catalog
|
|
```
|
|
|
|
... it will produce this output:
|
|
|
|
```
|
|
Acc dnb??iwr /TEST Blocks Size Type Aux Kind iNode Dir Ver Min Create Time Modified Time
|
|
--- -------- ---------------- ------ ------- ------- ----- ----- ----- ----- --- --- --------- ------ --------- ------
|
|
$C3 dn----wr FOO1.TXT 1 $000002 TXT $04 $0000 sed 1 @0007 @0002 0.0 v00 6-APR-23 <NO DATE>
|
|
$C3 dn----wr FOO2.TXT 1 $000002 TXT $04 $0000 sed 1 @0008 @0002 0.0 v00 6-APR-23 <NO DATE>
|
|
$C3 dn----wr FOO3.TXT 1 $000002 TXT $04 $0000 sed 1 @0009 @0002 0.0 v00 6-APR-23 <NO DATE>
|
|
$C3 dn----wr SOFTBEEP.BIN 1 $000016 BIN $06 $0300 sed 1 @000A @0002 0.0 v00 6-APR-23 <NO DATE>
|
|
===============
|
|
Files: 4 / 52 ( 7.69%)
|
|
Blocks:
|
|
Free: 269 (96.07%), 1st: @ $000B = 11
|
|
Used: 11 ( 3.93%)
|
|
Total: 280
|
|
```
|
|
|
|
# Building / Compiling
|
|
|
|
* MacOS
|
|
|
|
`make clean; make`
|
|
|
|
Windows:
|
|
|
|
Start Microsoft Visual Studio 2019 and open `MSVC2019\prodos.sln`.
|
|
|
|
# Soft Beep
|
|
|
|
```as
|
|
|
|
ORG $300
|
|
SoftBeep LDY #$20
|
|
SoftCycle LDA #$02 ;+
|
|
JSR Wait
|
|
STA Squeeker
|
|
LDA #$24
|
|
JSR Wait
|
|
STA Squeeker
|
|
DEY
|
|
BNE SoftCycle ;^ $0904
|
|
```
|
|
|
|
Converted to ASCII hex dump
|
|
|
|
```
|
|
certutil -encodehex -f softbeep softbeep.hex 12
|
|
```
|