Skip to content
This repository was archived by the owner on Aug 20, 2019. It is now read-only.

PascalFileSystem

Kelvin Sherlock edited this page Apr 23, 2015 · 1 revision

Introduction

UCSD Pascal was a language/virtual machine/OS/File System developed by the University of California, San Diego. Apple sold an Apple II implementation/port. IIgs System 6 included a read-only Apple Pascal FST.

The Pascal File system used 512k blocks (like ProDOS) and 2-byte block pointers (which implies a maximum disk size of 32 Meg, like ProDOS). Files don't store their file size per se, but rather the start block, end block, and size of last block. This implies a maximum file size of 32 Meg, minus the overhead of boot and volume blocks.

Block 0 and 1 contain boot code. Blocks 2--5 contain the volume header and up to 77 file entries. When a file is deleted, all subsequent records are moved up.

Volume Header

All values are little-endian unless specified otherwise. All blocks are 512 bytes in length.

Name Offset Size
first_block $00 2 bytes
last_block $02 2 bytes
file_kind $04 1 byte
reserved $05 1 byte
volume_name $06 8 bytes
volume_last_block $0e 2 bytes
file_count $10 2 byte
load_time $12 2 bytes
boot_date $14 2 bytes
reserved $16 4 bytes

fields

first_block

The first block of the file system header (boot block and directory blocks) This should always be 0.

last_block

The block after the last block of the directory structure. (i.e., the next available block). This should always be 6.

file_kind

This should always be 0.

volume_name

The volume name, stored with a leading length byte (i.e., a pstring). May be 1--7 characters in length.

volume_last_block

The number of blocks on the volume.

file count

The number of files. May be 0--77.

load_time

????

boot_date

The date last booted.

File Entry

Name Offset Size
first_block $00 2 bytes
last_block $02 2 bytes
file_kind $04 1 byte
status $05 1 byte
file_name $06 16 bytes
last_byte $16 2 bytes
modification_date $18 2 bytes

fields

first_block

The first block of the file

last_block

The block after the last file block (i.e., the next available block).

file_kind

Name Value Use
untypedfile $00 Volume Header
xdskfile $01 Bad blocks
codefile $02 Machine executable code
textfile $03 Text
infofile $04 Debugger Information
datafile $05 Data
graffile $06 Compressed graphic image *
fotofile $07 Screen image
securedir $08 Subdirectory [???] *

* Not implemented.

status

Used by wildcard file listings [???]

N.B. -- bit 0 is the status bit, all other bits are reserved.

file_name

The file name, stored with a leading length byte (i.e., a pstring). May be 1--15 characters in length.

last_byte

The number of bytes used in the last block. Should be 1--512.

modification_date

The date the file was created or last modified.

Dates

Dates are stored in a 2 bytes structure:

Field bits range
year 15--9 0-100
day 8--4 0--31
month 0--3 0 -- 12

yyyy yyyd dddd mmmm

Year 100 is used to indicate a temporary file.

File Name Restrictions

There seems to be a lot of bad information about file name restrictions. Wikipedia states:

Apple Pascal dropped the length to fifteen characters and allowed only letters, numbers and periods to be used.

The UCSD Pascal II manual states:

A volume name be be 7 or less characters long and may not contain '=', '$', '?' or ','.

A legal filename can consist of up to 15 characters. ... Lower-case letters are translated to upper-case, and blanks and non-printing characters are removed from the filename. Legal characters for filenames are the alphanumerics and the special characters '-', '/', '', '', and '.'.

Research (with the file manager) has shown that the only illegal characters are:

  • $
  • =
  • ?
  • ,
  • whitespace (stripped out)

Additionally, the file manager cannot create (or transfer to) files with a '['. I did not try creating a '[' file programmatically, so its status is ambiguous.

For volume names, ':' and subsequent characters are stripped. The illegal filename characters are allowed but confuse the file manager. You can still refer to the disk by volume number though.

References

Clone this wiki locally