home *** CD-ROM | disk | FTP | other *** search
- #ifndef SPCONV_H
- #define SPCONV_H
-
- /*
- * Exit-codes used by the program:
- *
- * EXIT_OK: The program finished without problems:
- *
- * EXIT_USAGE: The program was called incorrectly:
- * - Wrong number of parameters
- * - Wildcards on the command-line
- * - Input and output are of the same type
- * (not for .SP and .Z80)
- *
- * EXIT_READ_ERROR: There was a problem while reading the input file:
- * - Error while reading the input file
- * - Error while fseeking the input file
- *
- * EXIT_WRITE_ERROR: There was a problem while creating the output file:
- * - Error while writing the output file
- * - Error with opening/reading the spectrum.rom needed
- * for the output file.
- *
- * EXIT_FILE_ERROR: There was a problem with the input or output file format:
- * - Input file does not exist
- * - Type of input or output file not known
- * - Input file is:
- * - A newer version of an existing type
- * - Corrupt
- * - Not in the expected format (RAW and new .SP types)
- * - Not a 48K spectrum file (in .Z80 files)
- * - Input file snapshot was taken while the interface-1 was
- * paged in (in .Z80 files). The other file formats can not
- * cope with this (including the version 1.45 .Z80 files).
- * - Undocumented page number in .Z80 files (file corrupt)
- * - Decompression of .Z80 file failed (file corrupt)
- */
-
- #define EXIT_OK 0 /* No error */
- #define EXIT_USAGE 1 /* Problem with the command-line call */
- #define EXIT_READ_ERROR 2 /* Error while reading the input file */
- #define EXIT_WRITE_ERROR 3 /* Error while writing the output file */
- #define EXIT_FILE_ERROR 4 /* Problem with the type of the input file */
-
- /* Function Prototypes */
-
- /* SPECIAL FUNCTIONS */
- const char * DTYP_determine_type(char * filename, int * type);
- int DIRC_direct_convert(int type, char * infile, char * outfile);
-
- /* ERROR HANDLING FUNCTIONS */
- void USAG_usage(void);
- void RERR_read_error(char * s, FILE * fd);
- void WERR_write_error(char * s, FILE * fd);
-
- /* I/O routines */
- void RGEN_read_generic(char * s, void * header, size_t h_size);
- void WGEN_write_generic(char * s, void * header, size_t h_size);
- void RERR_read_error(char * s, FILE * fd);
- void WERR_write_error(char * s, FILE * fd);
-
- void RSNA_read_sna(char * s);
- void WSNA_write_sna(char * s);
- void RVGH_read_vgaspec_header(char * s);
- void RVGA_read_vgaspec(char * s);
- void WVGA_write_vgaspec(char * s);
- void ROVG_read_old_vgaspec(char * s);
- void WOVG_write_old_vgaspec(char * s);
- void RRAW_read_raw(char * s);
- void RZ80_read_z80(char * s);
- void WZ80_write_z80(char * s);
- void RPRG_read_prg(char * s);
- void WPRG_write_prg(char * s);
- void RACH_read_ach(char * s);
- void WACH_write_ach(char * s);
- void RKGB_read_kgb(char * s);
- void WKGB_write_kgb(char * s);
-
- /* Conversion routines */
- void VGSN_vgaspec_to_sna(void);
- void RASN_raw_to_sna(void);
- void Z8SN_z80_to_sna(void);
- void PRSN_prg_to_sna(void);
- void ACSN_ach_to_sna(void);
- void KGSN_kgb_to_sna(void);
-
- void SNVG_sna_to_vgaspec(void);
- void SNZ8_sna_to_z80(void);
- void SNPR_sna_to_prg(char * n);
- void SNAC_sna_to_ach(void);
- void SNKG_sna_to_kgb(void);
-
- /* 16K page read function for Z80 format */
- int RDPG_z80_read_page(char * s, FILE * fd);
-
- /* Compression/Decompression for Z80 */
- void Z80D_z80_decompress(FILE * fd, unsigned int start, unsigned int length);
- int Z80C_z80_compress(void);
-
- /* File header for file from RS232 Link - used for RAW conversion */
- union header_u {
- char in[9];
- struct {
- char type;
- unsigned int length;
- unsigned int start;
- char var;
- char res1;
- int line;
- } header;
- } h;
- #define hdr_size 9 /* sizeof(h)=9 */
-
- /* The contents of the header for a RAW file */
- char expect[]={
- 0x03, /* type CODE */
- 0x00,0xc0, /* image size */
- 0x00,0x40, /* image start */
- 0xff, /* var */
- 0xff, /* res1 */
- 0xff,0xff /* line */
- };
-
- /* Register storage structures for the various types */
- struct sna_s {
- unsigned char i;
- unsigned char lax;
- unsigned char hax;
- unsigned char eax;
- unsigned char dax;
- unsigned char cax;
- unsigned char bax;
- unsigned char fax;
- unsigned char aax;
- unsigned char l;
- unsigned char h;
- unsigned char e;
- unsigned char d;
- unsigned char c;
- unsigned char b;
- unsigned char iyl;
- unsigned char iyh;
- unsigned char ixl;
- unsigned char ixh;
- unsigned char iff2;
- unsigned char r;
- unsigned char f;
- unsigned char a;
- unsigned char spl;
- unsigned char sph;
- unsigned char im;
- unsigned char border;
- };
- #define sna_size 27 /* sizeof(struct sna_s)=27 */
-
- struct vga_s {
- /*00*/ unsigned char S;
- /*01*/ unsigned char P;
- /*02*/ unsigned char len_l;
- /*03*/ unsigned char len_h;
- /*04*/ unsigned char start_l;
- /*05*/ unsigned char start_h;
- /*06*/ unsigned char c;
- /*07*/ unsigned char b;
- /*08*/ unsigned char e;
- /*09*/ unsigned char d;
- /*0A*/ unsigned char l;
- /*0B*/ unsigned char h;
- /*0C*/ unsigned char f;
- /*0D*/ unsigned char a;
- /*0E*/ unsigned char ixl;
- /*0F*/ unsigned char ixh;
- /*10*/ unsigned char iyl;
- /*11*/ unsigned char iyh;
- /*12*/ unsigned char cax;
- /*13*/ unsigned char bax;
- /*14*/ unsigned char eax;
- /*15*/ unsigned char dax;
- /*16*/ unsigned char lax;
- /*17*/ unsigned char hax;
- /*18*/ unsigned char fax;
- /*19*/ unsigned char aax;
- /*1A*/ unsigned char r;
- /*1B*/ unsigned char i;
- /*1C*/ unsigned char spl;
- /*1D*/ unsigned char sph;
- /*1E*/ unsigned char pcl;
- /*1F*/ unsigned char pch;
- /*20*/ unsigned char res2;
- /*21*/ unsigned char res3;
- /*22*/ unsigned char border;
- /*23*/ unsigned char res4;
- /*24*/ unsigned char im;
- /*25*/ unsigned char res5;
- };
- #define vga_size 38 /* sizeof(struct vga_s)=38 */
-
- struct z80_s {
- /*00*/ unsigned char a;
- /*01*/ unsigned char f;
- /*02*/ unsigned char c;
- /*03*/ unsigned char b;
- /*04*/ unsigned char l;
- /*05*/ unsigned char h;
- /*06*/ unsigned char pcl;
- /*07*/ unsigned char pch;
- /*08*/ unsigned char spl;
- /*09*/ unsigned char sph;
- /*0A*/ unsigned char i;
- /*0B*/ unsigned char r;
- /*0C*/ unsigned char data;
- /*0D*/ unsigned char e;
- /*0E*/ unsigned char d;
- /*0F*/ unsigned char cax;
- /*10*/ unsigned char bax;
- /*11*/ unsigned char eax;
- /*12*/ unsigned char dax;
- /*13*/ unsigned char lax;
- /*14*/ unsigned char hax;
- /*15*/ unsigned char aax;
- /*16*/ unsigned char fax;
- /*17*/ unsigned char iyl;
- /*18*/ unsigned char iyh;
- /*19*/ unsigned char ixl;
- /*1A*/ unsigned char ixh;
- /*1B*/ unsigned char iff1;
- /*1C*/ unsigned char iff2;
- /*1D*/ unsigned char im;
- /* Extended 2.01 header, flagged with PC=0 */
- /*1E*/ unsigned char h2_len_l;
- /*1F*/ unsigned char h2_len_h;
- /*20*/ unsigned char n_pcl;
- /*21*/ unsigned char n_pch;
- /*22*/ unsigned char hardware;
- /*23*/ unsigned char samram;
- /*24*/ unsigned char if1_paged;
- /*25*/ unsigned char r_ldir_emu;
- /*26*/ unsigned char last_out;
- /*27*/ unsigned char sound_reg[16];
- };
- #define z80_145_size 0x1e /* length of z80_145 header */
-
- struct z80_page_s {
- /*00*/ unsigned char blklen_l;
- /*01*/ unsigned char blklen_h;
- /*02*/ unsigned char page_num;
- };
- #define z80_pg_size 3 /* sizeof(struct z80_page_s)=3 */
-
- struct prg_s {
- /*00*/ char name[10];
- /*0A*/ char nullbyte;
- /*0B*/ unsigned char c_0x61;
- /*0C*/ unsigned char c_0x35;
- /*0D*/ unsigned char c_0x03;
- /*0E*/ unsigned char c_0x00[0xdc - 0x0e];
- /*DC*/ unsigned char iyl;
- /*DD*/ unsigned char iyh;
- /*DE*/ unsigned char ixl;
- /*DF*/ unsigned char ixh;
- /*E0*/ unsigned char eax;
- /*E1*/ unsigned char dax;
- /*E2*/ unsigned char cax;
- /*E3*/ unsigned char bax;
- /*E4*/ unsigned char lax;
- /*E5*/ unsigned char hax;
- /*E6*/ unsigned char fax;
- /*E7*/ unsigned char aax;
- /*E8*/ unsigned char e;
- /*E9*/ unsigned char d;
- /*EA*/ unsigned char c;
- /*EB*/ unsigned char b;
- /*EC*/ unsigned char l;
- /*ED*/ unsigned char h;
- /*EE*/ unsigned char iff2;
- /*EF*/ unsigned char i;
- /*F0*/ unsigned char spl;
- /*F1*/ unsigned char sph;
- /*F2*/ unsigned char filler[0x0e];
- };
- #define prg_size 256 /* sizeof(struct prg_s)=256 */
-
- struct ach_s {
- /*00*/ unsigned char a;
- /*01*/ unsigned char fill1[3];
- /*04*/ unsigned char f;
- /*05*/ unsigned char fill2[3];
- /*08*/ unsigned char b;
- /*09*/ unsigned char fill3[3];
- /*0C*/ unsigned char c;
- /*0D*/ unsigned char fill4[3];
- /*10*/ unsigned char d;
- /*11*/ unsigned char fill5[3];
- /*14*/ unsigned char e;
- /*15*/ unsigned char fill6[3];
- /*18*/ unsigned char h;
- /*19*/ unsigned char fill7[3];
- /*1C*/ unsigned char l;
- /*1D*/ unsigned char fill8[3];
- /*20*/ unsigned char pcl;
- /*21*/ unsigned char pch;
- /*22*/ unsigned char fill9[2];
- /*24*/ unsigned char fill10[4];
- /*28*/ unsigned char spl;
- /*29*/ unsigned char sph;
- /*2A*/ unsigned char fill11[0x94 - 0x2A];
- /*94*/ unsigned char r;
- /*95*/ unsigned char fill12[0x9C - 0x95];
- /*9C*/ unsigned char border;
- /*9D*/ unsigned char fill13[0xa4 - 0x9D];
- /*A4*/ unsigned char im;
- /*A5*/ unsigned char fill14[0xbe - 0xa5];
- /*BE*/ unsigned char i;
- /*BF*/ unsigned char iff2;
- /*C0*/ unsigned char fill15[0xec - 0xc0];
- /*EC*/ unsigned char aax;
- /*ED*/ unsigned char fax;
- /*EE*/ unsigned char fill16[2];
- /*F0*/ unsigned char bax;
- /*F1*/ unsigned char cax;
- /*F2*/ unsigned char fill17[2];
- /*F4*/ unsigned char dax;
- /*F5*/ unsigned char eax;
- /*F6*/ unsigned char hax;
- /*F7*/ unsigned char lax;
- /*F8*/ unsigned char ixl;
- /*F9*/ unsigned char ixh;
- /*FA*/ unsigned char fill18[2];
- /*FC*/ unsigned char iyl;
- /*FD*/ unsigned char iyh;
- /*FE*/ unsigned char fill19[2];
- };
- #define ach_size 256 /* sizeof(struct ach_s)=256 */
-
- struct kgb_s {
- /*00*/ unsigned char unused_1[0x84 - 0x00];
- /*84*/ unsigned char settings[0x8E - 0x84];
- /*8E*/ unsigned char interruptstatus;
- /*8F*/ unsigned char is0_1;
- /*90*/ unsigned char is3_1;
- /*91*/ unsigned char colourmode;
- /*92*/ unsigned char is0_2;
- /*93*/ unsigned char is0_3;
- /*94*/ unsigned char is0_4;
- /*95*/ unsigned char is0_5;
- /*96*/ unsigned char b;
- /*97*/ unsigned char c;
- /*98*/ unsigned char bax;
- /*99*/ unsigned char cax;
- /*9A*/ unsigned char d;
- /*9B*/ unsigned char e;
- /*9C*/ unsigned char dax;
- /*9D*/ unsigned char eax;
- /*9E*/ unsigned char h;
- /*9F*/ unsigned char l;
- /*A0*/ unsigned char hax;
- /*A1*/ unsigned char lax;
- /*A2*/ unsigned char ixh;
- /*A3*/ unsigned char ixl;
- /*A4*/ unsigned char iyh;
- /*A5*/ unsigned char iyl;
- /*A6*/ unsigned char i;
- /*A7*/ unsigned char r;
- /*A8*/ unsigned char is0_6;
- /*A9*/ unsigned char is0_7;
- /*AA*/ unsigned char is0_8;
- /*AB*/ unsigned char aax;
- /*AC*/ unsigned char is0_9;
- /*AD*/ unsigned char a;
- /*AE*/ unsigned char is0_10;
- /*AF*/ unsigned char fax;
- /*B0*/ unsigned char is0_11;
- /*B1*/ unsigned char f;
- /*B2*/ unsigned char is0_12;
- /*B3*/ unsigned char is0_13;
- /*B4*/ unsigned char pch;
- /*B5*/ unsigned char pcl;
- /*B2*/ unsigned char is0_14;
- /*B3*/ unsigned char is0_15;
- /*B8*/ unsigned char sph;
- /*B9*/ unsigned char spl;
- /*BA*/ unsigned char is0_16;
- /*BB*/ unsigned char soundmode;
- /*BC*/ unsigned char is0_17;
- /*BD*/ unsigned char haltmode;
- /*BE*/ unsigned char i_mode_h;
- /*BF*/ unsigned char i_mode_l;
- /*C0*/ unsigned char unused_2[0xCA - 0xC0];
- };
- #define kgb_size 202 /* sizeof(struct kgb_s)=202 */
-
- /* Constants */
- #define IMSIZE 49152L
-
- /* Constants for Z80 Compression/Decompression */
- #define NOTCOMPRESSED 0
- #define COMPRESSED 0x20
- #define NO 0
- #define YES 1
-
- /* Contstants for the implemented formats in this version */
- #define RAW 1
- #define SNA 2
- #define SP 3
- #define Z80 4
- #define PRG 5
- #define ACH 6
- #define KGB 7
- #define UNKNOWN 8
-
- #endif /* SPCONV_H */
-