logo.jpg

Audiogenic loader

Structure

CBM Data CRC32: 0x206A8B68

Turbo blocks

  • Threshold: 0x013F (319) clock cycles (TAP value: 0×28)
  • Bit 0 pulse: 0x1A
  • Bit 1 pulse: 0×36
  • Endianess: MSbF
  • Pilot byte: 0xF0 (size: 4 bytes)
  • Sync byte: 0xAA

Header

  • 01 byte : Load address (MSB, LSB being always 0×00)
  • Some values refer to special blocks. They are: 0×00, 0×01, 0×02, 0xCF.
  • 0xCF: is special since part of the loader code is contained in the first turbo file, ALWAYS loaded at $CF00-$CFFF (ALWAYS the same code). There we find some messages and a custom print routine. The messages read as follows: LOADING ERROR, PLEASE STOP THE TAPE, PLEASE PRESS REWIND, PLEASE PRESS PLAY.
  • 0×00: restores the Default IRQ Routine and initializes CIA I/O Devices before executing a custom routine.
  • 0×02: is the same as 0×00, but also restores RAM Vectors for Default I/O Routines.
  • 0×01: is a re-initialization value. Sync is hunted for again if this value is found.

Data

  • 256 bytes
  • 01 byte : XOR Checksum of Data

Trailer

  • If any chained turbo block follows, there's always a complete byte, whose value is 0×01.
  • When no block follows, but a long pulse, this byte is usually broken (read the first note below).
  • The trailer byte is therefore NOT mandatory.

Notes

  • The end of a chain (also just a file), is followed by 7 bit 0 pulses, and often there's also a longer pulse which doesn't match bit 0/1 pulses (a broken byte, to cut a long story short). Then we have a long pulse (pause).
  • In a perfect world, each block would be followed by 8 pulses which make up a value of 0×01.
  • Data blocks smaller than 256 bytes must be padded.

Tapes using this loader

None


Commented Loader Code

Place loader code here please.

See also


Personal Tools