0% found this document useful (0 votes)
140 views4 pages

Understanding TAP File Format

The document summarizes the Oric tape format (tap file format) used to store different types of data on tape for the Oric computer. It describes the blocks used to store BASIC programs, machine code, integer arrays, real arrays, and string arrays. Each block contains synchronization bytes, a header with flags and addresses, an optional file name, and the stored data. Arrays are stored sequentially without dimension or variable name information.

Uploaded by

rc3molina
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
140 views4 pages

Understanding TAP File Format

The document summarizes the Oric tape format (tap file format) used to store different types of data on tape for the Oric computer. It describes the blocks used to store BASIC programs, machine code, integer arrays, real arrays, and string arrays. Each block contains synchronization bytes, a header with flags and addresses, an optional file name, and the stored data. Arrays are stored sequentially without dimension or variable name information.

Uploaded by

rc3molina
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
  • Oric Tape Format Overview
  • Synchronization and Header Details
  • Header Extension Information
  • String Storage and Data Notes

Sheet1

Oric Tape Format (tap file format)


By Chloé Avrillon (aka Ladywasky, formerly waskol)

Multi-byte values are in big-endian convention : Value or Address=byte1*256+byte2


Arrays are zero based in basic !

Bloc (explanation) Number of bytes Possible values Comment


Synchronisation N≥4
(N+1) bytes Typically :
$16 synchronisation bytes
Fast : 16bytes
Slow : 8bytes
1 $24 end of synchronisation
(data or machine code)
BASIC or memory bloc

Header 2 varies (unused) reserved bytes


9 bytes 1 $00 BASIC
Typical Bloc

$80 Machine code or memory bloc


1 $00 Autorun OFF
other value ($C7) Autorun ON
1 EndAddress1 (high) Memory locations
1 EndAddress2 (low)
1 StartAddress1 (high) Address=byte1*256+byte2
1 StartAddress2 (low) SizeOfData=EnAdrr-StartAdrr+1
1 varies (unused)
File name 15 max ASCII values Name
15 bytes max + $0 1 $00 end of name
File data SizeOfData varies succession of bytes
Note : no ending bytein oricfiles.

Page 1
Sheet1

Bloc (explanation) Number of bytes Possible values Comment


Synchronisation N≥4
(N+1) bytes Typically :
$16 synchronisation bytes
Fast : 16bytes
Array of integers (STORE/RECALL)

Slow : 8bytes
1 $24 end of synchronisation
Flag integer/real
1 $80
Header (used by v1.1 ROM only)
1 $00 Flag string
$40 Array
1 $00 Autorun OFF
other value ($C7) Autorun ON
1 StartAddress1 (high) Address of array when saved.
1 StartAddress2 (low) Unused. $FFFF for bi-dim.
1 SizeOfData1 (high) SizeOfArray=byte1*256+byte2
1 SizeOfData2 (low) SizeofData=SizeOfArray(*)
1 $FF unused
File name 15 max ASCII values Name
15 bytes max + $0 1 $00 end of name
File data (SizeOfData div 2) "integers" varies succession of integers (2 bytes)
Note : no ending indicator, The values are stored sequentially without dimension, nor variable name
(*) Not accurate : it's seems to be a bug in Oric rom, the Size of the array is wrong. In reality, SizeofData=SizeOfArray-offset
The offset value is typically 6 for a single dimensional array, 8 for a bi-dimensional array (and it is not always true).
Either the datalength provided is false, either are missing the array descriptors in the data (dimensions for instance)

Page 2
Sheet1

Bloc (explanation) Number of bytes Possible values Comment


Synchronisation N≥4
(N+1) bytes Typically :
$16 synchronisation bytes
Fast : 16bytes
Slow : 8bytes
Array of reals (STORE/RECALL)

1 $24 end of synchronisation


Flag integer/real
1 $00
Header (used by v1.1 ROM only)
1 $00 Flag string
$40 Array
1 $00 Autorun OFF
other value ($C7) Autorun ON
1 StartAddress1 (high) Address of array when saved.
1 StartAddress2 (low) Unused. $FFFF for bi-dim.
1 SizeOfData1 (high) SizeOfArray=byte1*256+byte2
1 SizeOfData2 (low) SizeofData=SizeOfArray(*)
1 $FF unused
File name 15 max ASCII values Name
15 bytes max + $0 1 $00 end of name
File data SizeOfData x 5bytes varies succession of reals (5 bytes)
Note : no ending indicator, The values are stored sequentially without dimension, nor variable name
(*) same as for array of integers

Page 3
Sheet1

Bloc (explanation) Number of bytes Possible values Comment


Synchronisation N≥4
(N+1) bytes Typically :
$16 synchronisation bytes
Fast : 16bytes
Slow : 8bytes
1 $24 end of synchronisation
Flag integer/real
1 $00
Header (used by v1.1 ROM only)
Array of strings (STORE/RECALL)

1 $FF Flag string


$40 Array
1 $00 Autorun OFF
other value ($C7) Autorun ON
1 $FF unused
1 $FF
1 SizeOfData1 (high) Value=byte1*256+byte2
1 SizeOfData2 (low) SizeofData=SizeOfArray(*)
1 $FF unused
File name 15 max ASCII values Name
15 bytes max + $0 1 $00 end of name
File data SizeOfData+strings varies succession of bytes
n=SizeOfData/3 1 varies String length
n of theses --> 2 varies Address of the string (useless !)
(n descriptors of 1 string)
Strings len(0)+len(1)+..+len(n-1) varies N Strings concatenated

Note : no ending indicator, The string values are stored sequentially without dimension, nor variable name, nor separators
(*) same as for array of integers

Page 4

Sheet1
Page 1
Multi-byte values are in big-endian convention : Value or Address=byte1*256+byte2
Arrays are zero based in basi
Sheet1
Page 2
Array of integers (STORE/RECALL)
Bloc (explanation)
Number of bytes
Possible values
Comment
$16
synchronisation
Sheet1
Page 3
Array of reals (STORE/RECALL)
Bloc (explanation)
Number of bytes
Possible values
Comment
$16
synchronisation by
Sheet1
Page 4
Array of strings (STORE/RECALL)
Bloc (explanation)
Number of bytes
Possible values
Comment
$16
synchronisation

You might also like