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

Oric 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)
375 views4 pages

Oric 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
You are on page 1/ 4

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

You might also like