From ff196d46381c4b05ea102c1b5fb32296a3832e97 Mon Sep 17 00:00:00 2001 From: Zellyn Hunter Date: Tue, 15 Nov 2016 21:04:33 -0500 Subject: [PATCH] Add disk.Filetype, and move notes.org to lib --- lib/applesoft/notes.org | 22 ---------------- lib/disk/ops.go | 50 ++++++++++++++++++++++++++++++++++++ lib/dos33/dos33.go | 21 +++++++-------- lib/notes.org | 57 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+), 32 deletions(-) delete mode 100644 lib/applesoft/notes.org create mode 100644 lib/notes.org diff --git a/lib/applesoft/notes.org b/lib/applesoft/notes.org deleted file mode 100644 index efa37ad..0000000 --- a/lib/applesoft/notes.org +++ /dev/null @@ -1,22 +0,0 @@ -** Program location -Defaults to $801 for ROM-based Applesoft. Locations $67/$68 point to -the start of the program, and the byte preceding it must be #0. - -Details: -- http://www.atarimagazines.com/compute/issue11/36_1_THE_APPLE_GAZETTE_RESOLVING_APPLESOFT_AND_HIRES_GRAPHICS_MEMORY_CONFLICTS.php -- http://retrocomputing.stackexchange.com/questions/1604 - -** Format -DOS stores an additional byte on the end, which should be ignored. -** Parsing -See PARSE.INPUT.LINE at -http://www.txbobsc.com/scsc/scdocumentor/D52C.html - -"AT" is ambiguous: it could also be "ATN" or "A TO". Applesoft checks -by seeing if the character directly after "AT" is "N" OR "O", and -forcing a non-match with "AT" if so. Note that this doesn't skip -blanks. - -Data statements and REM statements seem to leave characters completely -intact (including storing the space, if any, after the "REM" or "DATA" -keyword). diff --git a/lib/disk/ops.go b/lib/disk/ops.go index a7ed3c2..b6d2534 100644 --- a/lib/disk/ops.go +++ b/lib/disk/ops.go @@ -13,12 +13,62 @@ import ( "strings" ) +// Filetype describes the type of a file. It's byte-compatible with +// the ProDOS/SOS filetype byte definitions in the range 00-FF. +type Filetype int + +const ( + FiletypeTypeless Filetype = 0x00 // | both | Typeless file + FiletypeBadBlocks Filetype = 0x01 // | both | Bad blocks file + FiletypeSOSPascalCode Filetype = 0x02 // | SOS | PASCAL code file + FiletypeSOSPascalText Filetype = 0x03 // | SOS | PASCAL text file + FiletypeASCIIText Filetype = 0x04 // TXT | both | ASCII text fil + FiletypeSOSPascalText2 Filetype = 0x05 // | SOS | PASCAL text file + FiletypeBinary Filetype = 0x06 // BIN | both | Binary file + FiletypeFont Filetype = 0x07 // | SOS | Font file + FiletypeGraphicsScreen Filetype = 0x08 // | SOS | Graphics screen file + FiletypeBusinessBASIC Filetype = 0x09 // | SOS | Business BASIC program file + FiletypeBusinessBASICData Filetype = 0x0A // | SOS | Business BASIC data file + FiletypeSOSWordProcessor Filetype = 0x0B // | SOS | Word processor file + FiletypeSOSSystem Filetype = 0x0C // | SOS | SOS system file + FiletypeDirectory Filetype = 0x0F // DIR | both | Directory file + FiletypeRPSData Filetype = 0x10 // | SOS | RPS data file + FiletypeRPSIndex Filetype = 0x11 // | SOS | RPS index file + FiletypeAppleWorksDatabase Filetype = 0x19 // ADB | ProDOS | AppleWorks data base file + FiletypeAppleWorksWordProcessor Filetype = 0x1A // AWP | ProDOS | AppleWorks word processing file + FiletypeAppleWorksSpreadsheet Filetype = 0x1B // ASP | ProDOS | AppleWorks spreadsheet file + FiletypePascal Filetype = 0xEF // PAS | ProDOS | ProDOS PASCAL file + FiletypeCommand Filetype = 0xF0 // CMD | ProDOS | Added command file + FiletypeUserDefinedF1 Filetype = 0xF1 // | ProDOS | ProDOS user defined file types + FiletypeUserDefinedF2 Filetype = 0xF2 // | ProDOS | ProDOS user defined file types + FiletypeUserDefinedF3 Filetype = 0xF3 // | ProDOS | ProDOS user defined file types + FiletypeUserDefinedF4 Filetype = 0xF4 // | ProDOS | ProDOS user defined file types + FiletypeUserDefinedF5 Filetype = 0xF5 // | ProDOS | ProDOS user defined file types + FiletypeUserDefinedF6 Filetype = 0xF6 // | ProDOS | ProDOS user defined file types + FiletypeUserDefinedF7 Filetype = 0xF7 // | ProDOS | ProDOS user defined file types + FiletypeUserDefinedF8 Filetype = 0xF8 // | ProDOS | ProDOS user defined file types + FiletypeIntegerBASIC Filetype = 0xFA // INT | ProDOS | Integer BASIC program file + FiletypeIntegerBASICVariables Filetype = 0xFB // IVR | ProDOS | Integer BASIC variables file + FiletypeApplesoftBASIC Filetype = 0xFC // BAS | ProDOS | Applesoft BASIC program file + FiletypeApplesoftBASICVariables Filetype = 0xFD // VAR | ProDOS | Applesoft BASIC variables file + FiletypeRelocatable Filetype = 0xFE // REL | ProDOS | EDASM relocatable object module file + FiletypeSystem Filetype = 0xFF // SYS | ProDOS | System file + FiletypeS Filetype = 0x100 // DOS 3.3 Type "S" + FiletypeA Filetype = 0x101 // DOS 3.3 Type "A" + FiletypeB Filetype = 0x102 // DOS 3.3 Type "B" + // | 0D-0E | SOS | SOS reserved for future use + // | 12-18 | SOS | SOS reserved for future use + // | 1C-BF | SOS | SOS reserved for future use + // | C0-EE | ProDOS | ProDOS reserved for future use +) + // Descriptor describes a file's characteristics. type Descriptor struct { Name string Sectors int Length int Locked bool + Type Filetype } // Operator is the interface that can operate on disks. diff --git a/lib/dos33/dos33.go b/lib/dos33/dos33.go index c75b092..d5b1077 100644 --- a/lib/dos33/dos33.go +++ b/lib/dos33/dos33.go @@ -249,21 +249,22 @@ func (cs *CatalogSector) FromSector(data []byte) error { return nil } +// Filetype is the type for dos 3.3 filetype+locked status byte. type Filetype byte const ( - // Hex 80+file type - file is locked - // Hex 00+file type - file is not locked + // Hex 80+file type - file is locked, + // Hex 00+file type - file is not locked. FiletypeLocked Filetype = 0x80 - FileTypeText Filetype = 0x00 // Text file - FileTypeInteger Filetype = 0x01 // INTEGER BASIC file - FileTypeApplesoft Filetype = 0x02 // APPLESOFT BASIC file - FileTypeBinary Filetype = 0x04 // BINARY file - FileTypeS Filetype = 0x08 // S type file - FileTypeRelocatable Filetype = 0x10 // RELOCATABLE object module file - FileTypeA Filetype = 0x20 // A type file - FileTypeB Filetype = 0x40 // B type file + FiletypeText Filetype = 0x00 // Text file + FiletypeInteger Filetype = 0x01 // INTEGER BASIC file + FiletypeApplesoft Filetype = 0x02 // APPLESOFT BASIC file + FiletypeBinary Filetype = 0x04 // BINARY file + FiletypeS Filetype = 0x08 // S type file + FiletypeRelocatable Filetype = 0x10 // RELOCATABLE object module file + FiletypeA Filetype = 0x20 // A type file + FiletypeB Filetype = 0x40 // B type file ) type FileDescStatus int diff --git a/lib/notes.org b/lib/notes.org new file mode 100644 index 0000000..4387613 --- /dev/null +++ b/lib/notes.org @@ -0,0 +1,57 @@ +** Program location +Defaults to $801 for ROM-based Applesoft. Locations $67/$68 point to +the start of the program, and the byte preceding it must be #0. + +Details: +- http://www.atarimagazines.com/compute/issue11/36_1_THE_APPLE_GAZETTE_RESOLVING_APPLESOFT_AND_HIRES_GRAPHICS_MEMORY_CONFLICTS.php +- http://retrocomputing.stackexchange.com/questions/1604 + +** Format +DOS stores an additional byte on the end, which should be ignored. +** Parsing +See PARSE.INPUT.LINE at +http://www.txbobsc.com/scsc/scdocumentor/D52C.html + +"AT" is ambiguous: it could also be "ATN" or "A TO". Applesoft checks +by seeing if the character directly after "AT" is "N" OR "O", and +forcing a non-match with "AT" if so. Note that this doesn't skip +blanks. + +Data statements and REM statements seem to leave characters completely +intact (including storing the space, if any, after the "REM" or "DATA" +keyword). +** ProDOS and SOS File Types +Beneath Apple ProDOS Table E.1 + +| 00 | | both | Typeless file | +| 01 | | both | Bad blocks file | +| 02 | | SOS | PASCAL code file | +| 03 | | SOS | PASCAL text file | +| 04 | TXT | both | ASCII text fil | +| 05 | | SOS | PASCAL text file | +| 06 | BIN | both | Binary file | +| 07 | | SOS | Font file | +| 08 | | SOS | Graphics screen file | +| 09 | | SOS | Business BASIC program file | +| 0A | | SOS | Business BASIC data file | +| 0B | | SOS | Word processor file | +| 0C | | SOS | SOS system file | +| 0D-0E | | SOS | SOS reserved for future use | +| 0F | DIR | both | Directory file | +| 10 | | SOS | RPS data file | +| 11 | | SOS | RPS index file | +| 12-18 | | SOS | SOS reserved for future use | +| 19 | ADB | ProDOS | AppleWorks data base file | +| 1A | AWP | ProDOS | AppleWorks word processing file | +| 1B | ASP | ProDOS | AppleWorks spreadsheet file | +| 1C-BF | | SOS | SOS reserved for future use | +| C0-EE | | ProDOS | ProDOS reserved for future use | +| EF | PAS | ProDOS | ProDOS PASCAL file | +| F0 | CMD | ProDOS | Added command file | +| F1-F8 | | ProDOS | ProDOS user defined file types | +| FA | INT | ProDOS | Integer BASIC program file | +| FB | IVR | ProDOS | Integer BASIC variables file | +| FC | BAS | ProDOS | Applesoft BASIC program file | +| FD | VAR | ProDOS | Applesoft BASIC variables file | +| FE | REL | ProDOS | EDASM relocatable object module file | +| FF | SYS | ProDOS | System file |