Skip to main content

Python implementation of Apple ProDOS 8 file system

Project description

pyprodos

This is a simple Python implementation of the Apple ProDOS :tm: filesystem based on the technical reference manual.

It provides a simple unix-style CLI for managing existing ProDOS images in .po and .2mg files and for creating new ones. This provides an accessible file system for Apple // or other 8-bit hardware.

As an example, let's recreate a ProDOS boot volume. Grab the ProDOS 2.4.3 boot disk from https://prodos8.com/. (There's a copy in images/ here.) Check what's on it:

% prodos info images/ProDOS_2_4_3.po

Volume PRODOS.2.4.3 23-12-29T19:07
BlockDevice on images/ProDOS_2_4_3.po contains 280 total blocks, 26 free (91% used)

% prodos ls images/ProDOS_2_4_3.po

File name               EOF T/FT Access Created        Modified      Blocks @ Key
---------------------------------------------------------------------------------
VIEW.README             512 1/FC RW-BND 18-02-13T09:09 18-02-13T09:09     1 @ 250
...
BASIC.SYSTEM          10240 2/FF RW-BND 23-12-30T02:43 23-12-30T02:43    21 @ 42
...
PRODOS                17128 2/FF RW-BND 23-12-30T02:43 23-12-30T02:43    34 @ 7
README                  999 2/04 RW-BND 23-12-30T02:43 23-12-30T02:43     3 @ 251
    17 files in PRODOS.2.4.3 F RW--ND 23-12-29T19:07

Let's extract the PRODOS o/s and BASIC.SYSTEM files, plus the bootloader. ProDOS should execute the first .SYSTEM file it finds after it boots.

% prodos export images/ProDOS_2_4_3.po /PRODOS /BASIC.SYSTEM . --loader loader.bin

Now we'll make a new 140K (280 block) floppy boot disk:

% prodos create boot.po --name MYVOL --size 280

then import the system files and bootloader and check the listing:

% prodos import boot.po --loader loader.bin PRODOS BASIC.SYSTEM /

% prodos ls boot.po

File name               EOF T/FT Access Created        Modified      Blocks @ Key
---------------------------------------------------------------------------------
PRODOS                17128 2/FF RW-BND 25-12-28T15:20 25-12-28T15:20    34 @ 7
BASIC.SYSTEM          10240 2/FF RW-BND 25-12-28T15:20 25-12-28T15:20    21 @ 41
    2 files in MYVOL F RW-BND 25-12-28T15:19

Finally, test the image in your favorite emulator. I used VirtualII and popped my volume in the virtual Disk ][ drive. After a ProDOS splash screen, you you see the familiar Basic prompt:

            PRODOS BASIC 1.7
        COPYRIGHT APPLE  1983-92

]

My original goal was to learn how the on-disk representation worked and to manage disk images for a 6502-based breadboard computer. ProDOS is simple enough that a minimal kernel can be very small. For example I use a read-only version that's only a couple hundred lines of TaliForth. I also ported a version of the original 6502 ProDOS filestyem kernel: p8fs.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyprodos-0.4.0.tar.gz (43.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyprodos-0.4.0-py3-none-any.whl (29.6 kB view details)

Uploaded Python 3

File details

Details for the file pyprodos-0.4.0.tar.gz.

File metadata

  • Download URL: pyprodos-0.4.0.tar.gz
  • Upload date:
  • Size: 43.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.12

File hashes

Hashes for pyprodos-0.4.0.tar.gz
Algorithm Hash digest
SHA256 da44adac3e0318f8582c9ab2c61541e4b8e3d7e2444d948121cc1f2548fd9e16
MD5 ca2b3c213baffd140c9aafe8a1410af7
BLAKE2b-256 b86b5fdf5e18438d7e41bd5640028f90421cc25d2617aa6b63d347e98db46895

See more details on using hashes here.

File details

Details for the file pyprodos-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: pyprodos-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 29.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.12

File hashes

Hashes for pyprodos-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e912fb426645bad1a4538f59f356846438f2d260df1f7bb3f82f39f94ff186e4
MD5 27d2e36f1325e0bfc95abdc9c551a66f
BLAKE2b-256 13da3a1a22e1afcf4be20b1f3b6c5dc1e3b1fb92adc04147bdb51797ce0f0d75

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page