2018-01-31 06:09:07 +00:00
|
|
|
#ifndef _APPLE2_ENC_H_
|
|
|
|
#define _APPLE2_ENC_H_
|
|
|
|
|
|
|
|
#include "vm_bits.h"
|
|
|
|
#include "vm_segment.h"
|
|
|
|
|
2018-01-31 21:58:57 +00:00
|
|
|
/*
|
|
|
|
* This is a magic number for the disk volume; I haven't experimented
|
|
|
|
* with using other values for it, and this one in particular is used in
|
|
|
|
* WinApple, so I went with it.
|
|
|
|
*/
|
2018-02-03 06:24:22 +00:00
|
|
|
#define ENC_VOLUME 0xfe
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The number of tracks that a DOS 3.3 disk would have.
|
|
|
|
*/
|
|
|
|
#define ENC_NUM_TRACKS 35
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The number of sectors within a single track of data for a DOS 3.3
|
|
|
|
* disk.
|
|
|
|
*/
|
|
|
|
#define ENC_NUM_SECTORS 16
|
|
|
|
|
|
|
|
/*
|
|
|
|
* A decoded sector is 256 bytes long
|
|
|
|
*/
|
|
|
|
#define ENC_DSECTOR 0x100
|
|
|
|
|
|
|
|
/*
|
|
|
|
* And a track--being composed of 16 sectors--is 4096 bytes long, or 4k
|
|
|
|
* bytes. (256 * 16 = 4096)
|
|
|
|
*/
|
|
|
|
#define ENC_DTRACK 0x1000
|
|
|
|
|
|
|
|
/*
|
2018-02-19 05:46:18 +00:00
|
|
|
* An encoded sector is 396 bytes long, and is comprised of a sector
|
2018-02-03 06:24:22 +00:00
|
|
|
* header plus padding bytes both before _and_ after the data field.
|
|
|
|
*/
|
2018-03-20 19:06:26 +00:00
|
|
|
#define ENC_ESECTOR 0x1a0
|
2018-02-03 06:24:22 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* An encoded track contains 16 sectors, as mentioned for ENC_DTRACK.
|
|
|
|
* But it also contains some additional padding (48 bytes-worth).
|
|
|
|
*/
|
2018-03-20 19:06:26 +00:00
|
|
|
#define ENC_ETRACK 0x1a00
|
2018-02-03 06:24:22 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* A sector header consists of some byte markers--all byte markers in
|
|
|
|
* 6-and-2 encoding are 3 bytes long--and also some metadata, such as
|
|
|
|
* the track number, the sector number, the volume, and an XOR'd
|
|
|
|
* combination of all three.
|
|
|
|
*/
|
2018-03-26 00:39:27 +00:00
|
|
|
#define ENC_ESECTOR_HEADER 0x13
|
2018-02-03 06:24:22 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* The track header (as mentioned for ENC_ETRACK) is 48 bytes of--well,
|
|
|
|
* nothing really, just padding.
|
|
|
|
*/
|
|
|
|
#define ENC_ETRACK_HEADER 0x30
|
2018-01-31 21:58:57 +00:00
|
|
|
|
2018-01-31 06:09:07 +00:00
|
|
|
extern int apple2_enc_4n4(vm_segment *, int, vm_8bit);
|
|
|
|
extern int apple2_enc_sector(vm_segment *, vm_segment *, int, int);
|
|
|
|
extern int apple2_enc_sector_header(vm_segment *, int, int, int);
|
2018-02-20 21:36:23 +00:00
|
|
|
extern int apple2_enc_track(int, vm_segment *, vm_segment *, int, int);
|
|
|
|
extern vm_segment *apple2_enc_dos(int, vm_segment *);
|
2018-02-04 02:50:08 +00:00
|
|
|
extern vm_segment *apple2_enc_nib(vm_segment *);
|
2018-01-31 06:09:07 +00:00
|
|
|
|
|
|
|
#endif
|